В качестве основы языка программирования в LabPP_Automat используется широко известный, простой и гибкий язык Си++.
Достоинствами этого языка являются:
- высокая скорость выполнения;
- орошая читаемость, лаконичность и понятность кода;
- простота создания и обращения к функциям;
- большая библиотека разнообразных процедур.
- его освоение намного легче и он более удобный для работы.
Для большего удобства использования конструкций языка в LabPP_Automat добавлен тип данных string.
Если Вы задали функцию MyStringFunc, которая возвращает строковое значение, то можно писать так:
string MyString = MyStringFunc();
Здесь мы сразу объявляем переменную типа "строка" MyString и сразу же записываем в нее значение из функции MyStringFunc().
Имеются ограничения при помощи которых создание программ значительно упрощено:
1. можно использовать только встроенные классы через дескрипторы.
2. отсутствуют указатели.
3. отсутствует тип данных "ссылка".
Программные модули создаются в виде отдельных текстовых файлов.
Функция main()
Каждый файл должен содержать базовую функцию main().
Ниже приведен пример функции main() с вызовом другой функции.
int main()
{
// Комментарий
/* Большой комментарий
на несколько строк */
string s; // - объявление переменной типа "строка"
int i; // - объявление переменной типа "целое"
double d; // - объявление переменной типа "число с плавающей точкой"
char c; // - объявление переменной типа "символ"
i = 12; // присвоить переменной i значение 12
i++; // увеличить i на 1;
i--; // уменьшить i на 1;
string mystr;
mystr = "моя "+"строка";
myfunc(1, 0.2, mystr); // обращение к функции
}
// Объявление собственной функции
int myfunc(int ii, double dd, string str)
{
return 0; // вернуть значение 0
}
Организация циклов
Цикл for
for(int i=0;i<10;i++) // выполнить фрагмент программы, заключенный между
{ // фигурными скобками пока i меньше 10 и, при каждом выполнении цикла, i увеличивать на 1
cout << i; // вывести значение i в окно сообщений LabPP_Automat
if(i==5) // если i равно 5 - выполнить фрагмент между фигурными скобками.
{
break; // прервать цикл
}
}
Цикл do-while
int i;
i=0;
do {
cout << i; // Вывести в окно сообщений LabPP_Automat значение i
i++; // Увеличить i на 1
} while (i<10) // Выполнять цикл покуда i меньше 10
Цикл while
int i;
i=0;
while(i<10) {
cout << i;
i++;
}
Логические операции
== Равенство Истинно, если число или строка слева равно числу или строке справа
!= Неравенство Истинно, если число или строка слева НЕ равно числу или строке справа
< Меньше Истинно, если число слева меньше числа справа
<= Меньше или равно Истинно, если число слева меньше или равно числу справа
> Больше Истинно, если число слева больше числа справа
>= Больше или равно Истинно, если число слева больше или равно числу справа
&& Логическое И
Если выражение слева и справа истинны, то результат - истинно. Если хотя бы одно из выражений слева или справа ложно, то результат - ложно
|| Логическое ИЛИ Если хотя бы одно выражение слева и справа истинны, то результат - истина. Если оба выражения ложны, то результат - ложно.
Условные переходы
Оператор if
if(i<0)
{
cout << "да";
}
Конструкция if-else
if(i<0) // Если выражение в скобках истинно, то выполняется первый фрагмент
{
cout << "да";
}
else // Если выражение в скобках ложно, то выполняется второй фрагмент
{
cout << "нет";
}
Конструкция if-else if-else
if(i<0) // Если выражение в скобках истинно, то выполняется первый фрагмент
{
cout << "i<0";
}
else if(i==0) // Если выражение в скобках истинно, то выполняется второй фрагмент
{
cout << "i=0";
}
else // Если ни одно из выражений скобках не истинно (пунктов else if может быть много), то выполняется последний фрагмент
{
cout << "i=0";
}
Оператор switch
В зависимости от значения числа в скобках выполняется соответствующих фрагмент программы.
switch(i)
{
case 1:
cout << "i=1";
break;
case 2:
cout << "i=2";
break;
case 10:
cout << "i=10";
break;
default:
// операторы, выполняемые при любом другом значении i
}
Подключение дополнительных файлов
Директива #include
Если имеются функции или переменные, которые используются в нескольких программах, то их можно размещать в так называемых "заголовочных файлах". Обычно заголовочному файлу, чтобы отличать от других, присваивается расширение .h (например header.h).
Перед тем, как отдать программу на выполнение, она собирается в единый блок препроцессором.
Вот пример файла header.h
/***********/
/* header.h */
/***********/
int iGlobalValue=0; // так можно объявлять глобальную переменную
// здесь описан пример функции, которая может использоваться в различных программах
double iMyCommonFunction(double var1, double var2)
{
return var1*var2;
}
Вот пример файла программы с использованием заголовочного файла header.h
/**************/
/* my_prg1.cpp */
/**************/
#include "header.h" // подключить заголовочный файл header.h
int main()
{
cout << iMyCommonFunction(100, 50); // функция описана в заголовочном файле header.h
}
Переменные
Типы переменных
Интерпретатор поддерживает следующие типы переменных:
char
int
double
string
Видимость переменных
Переменные могут быть локальные, глобальные и суперглобальные.
Локальные переменные видятся внутри функции и не видятся за пределами функции.
Глобальные переменные видимы внутри любой функции не зависимо от глубины вложения.
Глобальные переменные объявляются до тела функции main().
Суперглобальные переменные - те, которые существуют в течении всего сеанса работы AddOns.
При их помощи можно передавать данные из одной программы в другую.
Следующий фрагмент инициализирует переменную my_var строкой:
/***********/
/* prgfile1.cpp */
/***********/
int main() {
int ires;
ires = var_extern_set("Моя Переменная", 100);
}
А этот фрагмент находится в другой программе (запускаемой другой кнопкой) и считывает значение переменной my_var:
/**************/
/* prgfile2.cpp */
/**************/
int main()
{
int ires;
string extern_var;
ires = var_extern_get("my_var", extern_var);
cout << "ires=" << ires << " my_var = " << extern_var;
}