Декларация типа переменных является обязательной, чтобы избежать ошибок программирования из-за множества встроенных типизированных переменных.
Имя переменной может состоять из букв латинского алфавита и цифр (первый символ должен быть буквой). Регистр важен, например, переменные cflow и cFlow являются различными переменными. Нельзя использовать символ подчеркивания (_), поскольку он зарезервирован в качестве оператора.
int - целое число (эквивалентен типу long в C++). При описании переменной можно сразу же присвоить ей значение. При присвоении целочисленной переменной вещественного значения дробная часть отбрасывается.
int i = 0, j; // Переменные целого типа: i со значением 0 и j без определенного значения cout << "i = " << i << endl; // i = 0 cout << "j = " << j << endl; // j = ? значение может быть случайным i = 1.5; // дробная часть отбрасывается j = 5; // значение определено cout << "i = " << i << endl; // i = 1 cout << "j = " << j << endl; // j = 5
bool - логическая переменная имеющая два значения: истина true или ложь false (эквивалентен типу bool в C++). При присвоении числового выражения, истинным будет любое число отличное от ноля. При использовании логической переменной в числовом выражении значению true соответствует 1, а значение false = 0.
bool b1 = false, b2 = (3 > 2), b3 = 2, b4 = 0; cout << "b1 = " << b1 << endl; // 0 cout << "b2 = " << b2 << endl; // 1 cout << "b3 = " << b3 << endl; // 1 cout << "b4 = " << b4 << endl; // 0 cout << "2 * b1 + 3 = " << 2 * b1 + 3 << endl; // 3
real - вещественный тип данных (эквивалентен типу double в C++). При работе с вещественными числами нужно помнить, что при делении целых чисел можно получить неверный результат при целочисленном делении. Для того, чтобы этого избежать рекомендуется всегда ставить десятичную точку после целого числа.
// Разница между целочисленным и вещественным делением real r; r = 3 / 2; // целочисленное деление, дробная часть отбрасывается r = 1 cout << "r = " << r << endl; r = 3. / 2.; // вещественное деление r = 1.5 cout << "r = " << r << endl;
complex - комплексный тип данных (эквивалентен двум типам double или complex<double> в C++). Мнимая единица i=-1½ обозначается в FreeFem++ как 1i. С комплексными числами можно проводить все те же арифметические операции, что и с вещественными числами.
complex c1 = 1.i, c2 = 1. + 2.i; cout << "c1 + c2 = " << c1 + c2 << endl; // c1 + c2 = (1,3) cout << "c1 - c2 = " << c1 - c2 << endl; // c1 - c2 = (-1,-1) cout << "c1 * c2 = " << c1 * c2 << endl; // c1 * c2 = (-2,1) cout << "c1 / c2 = " << c1 / c2 << endl; // c1 / c2 = (0.4,0.2)
string - текстовый тип данных (строка). Для присвоения строковой переменной строки, ее необходимо заключить в двойные кавычки (одинарные кавычки использовать нельзя, т.к. это символ зарезервированного оператора). Другие типы данных могут быть объединены в строку оператором сложения (символ плюс, +).
string s1 = "String: ", s2; int i = 1; real r = 2.5; complex c = i + r * 1.i; s2 = s1 + "Int i = " + i + ", Real r = " + r + ", Complex c = " + c; cout << s2 << endl; // Результат: // String: Int i = 1, Real r = 2.5, Complex c = 1+2.5i
Можно проводить более сложные операции со строками: выделения подстроки из строки (указываются номера первой и последней позиции выделяемой подстроки в строке); вставить строку в другую строку (указывается позиция для вставки); поиск подстроки в строке слева направо и наоборот начиная с крайнего символа или с заданной позиции; определение длины строки. Следует помнить, что первый символ в строке имеет позицию равную нулю.
string s1 = "abc123abc", s2, s3; s2 = s1(0:1); // Подстрока cout << s2 << endl; // ab s1(3:2) = "-"; // Вставка одной строки в другую cout << s1 << endl; // abc-123abc // Найти позицию подстроки в строке с поиском слева cout << "s1.find(abc) = " << s1.find("abc") << endl; // 0 // Найти позицию подстроки в строке с поиском справа cout << "s1.rfind(abc) = " << s1.rfind("abc") << endl; // 7 // Найти позицию подстроки в строке с поиском слева начиная с заданной позиции cout << "s1.find(abc, 3) = " << s1.find("abc",3) << endl; // 7 // Найти позицию подстроки в строке с поиском справа начиная с заданной позиции cout << "s1.rfind(abc, 3) = " << s1.rfind("abc",3) << endl; // 0 // Определить длину строки cout << "s1.length = " << s1.length << endl; // 10