Меню

Данное описание языка "Ellochka" зарегистрировано в Агентстве по Авторским правам Азербайджана (номер регистрации 05/R-285 от 13.11.2001). Права автора охраняются соответствующим законодательством и международными соглашениями.

Автор не возражает против создания интерпретаторов или компиляторов этого языка при условии обязательного указания имени и контактных данных автора языка "Ellochka", а также невнесения каких-либо изменений в описание языка.

ЯЗЫК ПРОГРАММИРОВАНИЯ `ELLOCHKA` (`ЭЛЛОЧКА`)

(С) Гаузер Э.Г., Баку, 13.06.99, "www.erichware.com". Все права защищены.

ОПИСАНИЕ ЯЗЫКА

Язык `Ellochka` предназначен для выполнения необходимых действий на компьютере рядовым пользователем и не требует профессиональной подготовки в области программирования. Язык не рассчитан на решение особо сложных задач, хотя имеет все основные конструкции и возможности, свойственные `большим` языкам, а в некоторых случаях превосходит эти языки.

В общем случае человек, пользуясь языком `Ellochka`, одновременно имеет в своем распоряжении следующее:

  1. 26 простых переменных;
  2. от 0 до 26 одномерных массивов одинакового размера;
  3. от 0 до 26 двумерных массивов одинакового размера;
  4. 10 текстовых переменных длиной от 0 до 1024 символов каждая;
  5. массив из от 0 до 850 текстовых переменных фиксированной длиной 75 символов каждая;
  6. 14 основных математических функций;
  7. 4 строковые функции и 2 строковых оператора;
  8. 51 оператор переходов, ввода-вывода, графики и т.д.;
  9. 8 операторов решения математических задач;
  10. календарный оператор.

Все простые переменные и элементы числовых массивов являются действительными одинарной точности, имена переменных и массивов односимвольные от A до Z, причем обязательно прописными буквами. Операторы, функции и метки могут указываться как прописными, так и строчными буквами. Имена переменных и массивов могут и совпадать.

Индексы числовых массивов могут быть выражениями, содержащими простые переменные, целые константы и знаки четырех арифметических операций, а также специальные символы: `@` и `?` (последний только при использовании неявных циклов). Индексное выражение должно заключаться в квадратные скобки.

Значения индексов массивов допускаются в диапазоне от 1 до 32000, фактическое максимальное значение определяется доступной памятью на данном компьютере.

Числовые константы в формулах могут содержать цифры и десятичную точку.

Текстовые константы в программах указываются заключенными в апострофы и могут содержать любые символы (кроме управляющих и самих апострофов), константа, содержащая пустую строку, обозначается ''.

Имена текстовых переменных являются двухсимвольными, первый символ всегда знак доллара ($), второй символ может быть либо цифрой в случае указания на переменную произвольной длины, либо буквой в случае указания на элемент строкового массива (например, при I=5 значение $I соответствует значению $[5]).

В операторе присваивания текстовой переменной могут присутствовать имена других текстовых переменных (обоих типов), текстовые константы и строковые функции, а также имена простых переменных, преобразуемые в строку с текущим значением этих переменных. Все эти компоненты должны отделяться знаком сложения `+`, что позволяет `склеивать` текстовые строки.

Для того, чтобы присвоить значение отдельному символу внутри текстовой переменной, оператор присваивания следует написать в таком виде:

$?[индекс]=выражение

Здесь `индекс` - произвольное индексное выражение со значением в диапазоне от 1 до длины указанной текстовой переменной, а `выражение` - любое арифметическое выражение со значением в диапазоне от 0 до 255. Вопросительный знак есть либо цифра, либо буква для указания на конкретную текстовую переменную.

Например, возможны такие варианты:

1) $0[I]=A

2) $I[J*2-1]=A*B-C

и т.д.

Оператор присваивания в случае числовых переменных имеет несколько вариантов (с примерами):

  1. A=выражение
    A=B*C-H[I]/3.78
    A[L]=A[L]+B[I]*(56.7+F)
    A[M,N]=D[W,Q]*W-11
  2. A[]=выражение
    A[]=B[]*4.67+G*P[?,@]
    Данный оператор является "неявным циклом" и заменяет собой логическую конструкцию цикла:
    шаг 1: индекс=0
    шаг 2: индекс=индекс+1
    шаг 3: A[индекс]=B[индекс]*4.67+G*P[индекс,номер оператора]
    шаг 4: если индекс<максимального, то перейти к шагу 2
  3. A[,]=выражение
    A[,]=R+T[,]+U*?1+A*?2
    Данный оператор является "неявным циклом" и заменяет собой логическую конструкцию вложенного цикла:
    шаг 1: инд1=0
    шаг 2: инд1=инд1+1
    шаг 3: инд2=0
    шаг 4: инд2=инд2+1
    шаг 5: A[инд1,инд2]=R+T[инд1,инд2]+U*инд1+A*инд2
    шаг 6: если инд2<максимального, то перейти к шагу 4
    шаг 7: если инд1<максимального, то перейти к шагу 2
  4. A:константа
    A:-6.02e-23
    A[I]:5
  5. A:$?[индексное выражение]
    A:$0[I-1]
    A[K]:$J[2*I+5]
  6. A#текстовая переменная
    A#$0
    A[I]#$I

Во всех случаях выражение может содержать знаки арифметических операций и математических функций, а также скобки. Уровень вложения скобок практически не ограничен, вычисления выполняются слева направо для операций с одинаковым приоритетом, если порядок не изменен указанием скобок. Выражение также может содержать знак `@`, который при вычислениях заменяется на текущее значение номера оператора в тексте программы.

В случае, если необходимо использовать числовую константу в форме с плавающей запятой, следует применить вариант 4 оператора присваивания.

Вариант 5 служит для присваивания переменной A кода символа, находящегося в указанной текстовой переменной на указанной позиции. Номер этой позиции не должен превышать длину переменной.

Вариант 6 позволяет присвоить переменной A значение выражения, содержащегося в указанной текстовой переменной. При этом следует учесть, что в случае ошибки номера столбцов нумеруются по содержимому текстовой переменной.

Каждый оператор программы записывается с новой строки, пустые строки при выполнении пропускаются. Длина строки не должна превышать 75 символов.

Если в первой позиции строки стоит восклицательный знак, то вся строка считается комментарием и не выполняется.

Если в первой позиции строки стоит символ `@`, то вся строка считается меткой и пропускается. Метка может содержать любые буквенно-цифровые символы, прописные и строчные латинские буквы не различаются.

Если после имени запускаемой для выполнения программы в строке вызова будет присутствовать информация, то она будет передана в переменную $0.

В графических операторах все параметры могут быть арифметическим выражением, ось ординат можно направлять вверх или вниз с помощью специальных операторов.

Цвета фона и символов, строка и столбец вывода также могут быть любым арифметическим выражением.

Пробелы разрешается вставлять только в арифметические выражения, а также слева до первого символа оператора, что позволяет при желании записывать программы лесенкой.

ОПЕРАТОРЫ

Всего 62, разделены на:


      СИСТЕМНЫЕ      (7)
      УПРАВЛЯЮЩИЕ    (7)
      ВВОД/ВЫВОД     (12)
      ГРАФИЧЕСКИЕ    (9)
      ФАЙЛОВЫЕ       (9)
      МАТЕМАТИЧЕСКИЕ (8)
      ПРОЧИЕ         (10)

С И С Т Е М Н Ы Е

EXIT
Завершить работу программы и выйти в операционную систему.
STOP
Прервать выполнение программы и выйти в редактор.
DOSC P
Вызов внешней программы или команды DOS;
P - текстовая переменная, содержащая имя программы и необходимые параметры ее запуска, если отсутствует, то появляется приглашение DOS, для возврата требуется ввести команду `exit`.
SIZE L
SIZE [K]=A;X;R... и т.д.
SIZE [N,M]=X;Y;W... и т.д.
Указать используемые массивы:
строковый, одномерные (A,X,R) или двумерные (X,Y,W);
L - число элементов в строковом массиве;
K - число элементов в одномерных массивах;
N и M - число строк и столбцов в двумерных массивах;
K,N,M - индексные выражения со значениями от 1 до 32000;
L - арифметическое выражение со значением от 1 до 850;
при выполнении данного оператора уничтожаются объявленные ранее строковые, одномерные или двумерные массивы.
UMEM D
Уничтожить все используемые одномерные (D=1), двумерные (D=2) или строковый (D=3) массивы, D - константа со значениями 1, 2, 3.
MEMC
MEMC $$
MEMC 1M
MEMC 2K
Первый вариант: обнулить простые переменные;
Второй вариант: очистить все элементы строкового массива;
Третий вариант: обнулить все элементы одномерного массива M;
Четвертый вариант: обнулить все элементы двумерного массива K.
CURR 1K
CURR 2K
CURR 3K
В переменную K помещается текущее значение размера одномерных массивов, или число строк двумерных массивов, или число текстовых переменных.

У П Р А В Л Я Ю Щ И Е

RADI
Установить аргумент в радианах (действует по умолчанию).
GRDS
Установить аргумент в градусах.
ORUP
Установить направление оси ординат вверх (действует по умолчанию).
ORDN
Установить направление оси ординат вниз.
GOTO C
ESLI P%%F C
ESLI X %% Y; C
ESLI X ** {Y,Z} C
ESLI X ** }Y,Z{ C
Перейти на номер строки C или на метку C.
Перейти на номер строки C или на метку C, если указанное условие (`**` или '%%') выполнено.
Для обоих операторов C - любое арифметическое выражение или метка.
Если сразу после C стоит обратный слеш (\), то значение C прибавляется к текущему номеру строки или отнимается от него (с учетом знака C), полученное значение номера строки допустимо от 1 до 1000.
Если C - метка (первый символ есть `@`), то наличие обратного слеша не влияет на переход.
P - текстовая переменная,
F - текстовая переменная или текстовая константа,
X,Y,Z - любое арифметическое выражение (не содержащее пробелы).
допустимые условия ('%%'):
>>, <<, >=, <=, ==, |=;
допустимые условия ('**'):
== лежит в диапазоне от Y до Z
|= не лежит в диапазоне от Y до Z
( {Y,Z} - включая границы, }Y,Z{ - не включая границы ).
SLEP A
Задержка работы на заданное в миллисекундах (от 1 до 60000) время.
A - время задержки, любое арифметическое выражение.

В В О Д / В Ы В О Д

GRAF
Переход в графический режим 640*480*16.
TEXT
Переход в текстовый режим 80*25, страница 0.
CLSC
Очистка экрана.
CFON C
Установить фон выводимых символов в текстовом режиме (от 0 до 7).
CSIM C
Установить цвет выводимых символов (от 0 до 15).
STRO C
Установить строку выводимых символов
(от 1 до 25 для текстового и до 30 для графического режимов).
STLB C
Установить столбец выводимых символов (от 1 до 80).
KEYS A
Возвращает код нажатой клавиши (без ожидания), если клавиши не нажимались, возвращает значение 0.
A - простая переменная, содержащая код клавиши после выполнения.
WAIT A
Ждать нажатия любой клавиши, если указано имя простой переменной, то в нее помещается код клавиши (ASCII-код для символьных клавиш или расширенный для управляющих, тогда значение A будет >256), если сразу после имени переменной стоит диез (#), то код нажатой клавиши будет преобразован к верхнему регистру.
LIST список
Вывести данные на дисплей,
список может состоять из простых, индексных и текстовых переменных и текстовых констант, элементы в списке разделяются точкой с запятой; курсор остается в текущей позиции или переводится в начало следующей строки, если сразу после списка стоит символ обратный слеш (\) или если выведенная информация заняла 80-й символ строки.
VVOD список
Ввести данные с клавиатуры,
список может состоять из простых и текстовых переменных (и текстовых констант-подсказок, которые выводятся на экран);
элементы в списке разделяются точкой с запятой;
ввод каждого данного завершается нажатием <Enter>, если нажать <Enter> без ввода данных, то значение соответствующей переменной останется прежним;
курсор остается в текущей позиции или переводится в начало следующей строки, если сразу после списка стоит символ обратный слеш (\).
DATA A;B;C
Заполнить элементы строкового массива в диапазоне индексов от A до B значениями строк текущего программного файла, начиная со строки C.
A,B - выражение, C - выражение или метка (в этом случае заполнение начинается со следующей строки).

Г Р А Ф И Ч Е С К И Е

PIXL X;Y
Вывести пиксель текущим цветом для символов, X,Y - координаты.
RDOT X;Y;C
Прочитать цвет пикселя, X,Y - координаты, C - полученное значение цвета (простая переменная).
CVET C;R;G;B
Установить палитру для цвета C,
R,G,B - значения красной, зеленой и синей составляющей цвета;
значение C допустимо от 0 до 15, значения R,G,B - от 0 до 63.
Если параметры оператора не указаны, то устанавливается стандартная палитра для всех цветов.
LINE X;Y;V;W
Провести линию текущим цветом для символов, X,Y и V,W - координаты концов.
RAMA X;Y;V;W
Построить прямоугольник текущим цветом для символов, X,Y и V,W - координаты левого нижнего и правого верхнего углов.
MOVE X;Y
Провести линию текущим цветом для символов от текущей точки на расстояние X и Y.
KRUG X;Y;R;A
Провести эллипс текущим цветом для символов, X,Y - координаты центра, R - радиус, A - аспект.
PAIN X;Y;G
Закрасить область текущим цветом для символов, X,Y - координаты, G - цвет границы.
SBMP F
Сохранение экрана в виде BMP-файла,
F - имя файла (текстовая переменная или константа), если не содержит расширение, то автоматически добавляется `.bmp`.

Ф А Й Л О В Ы Е

LENF F;L
Определение длины указанного файла,
F - имя файла (текстовая переменная или константа),
L - простая переменная, получающая значение длины файла или значение `-1`, если файл не найден.
UDAL F
Удаление файла без возможности восстановления, если файл отсутствует, то он создается и сразу уничтожается;
F - имя файла (текстовая переменная или константа).
PATH F
Выделение полного пути из имени файла, исходное значение может быть и полным именем, и маской, и чем угодно. В результате на выходе всегда будет полный путь к указанному файлу или пустая строка, если нет доступа;
F - имя файла (текстовая переменная или константа).
FILE F;N
Заполнение текстового массива найденными именами файлов, удовлетворяющими указанному шаблону;
F - текстовая переменная или константа с этим шаблоном,
N - простая переменная, получающая значение количества найденных файлов или значение `-1`, если ошибка доступа.
FREE D;L
Определение свободного места на диске D (0-текущий, 1-`A`, 2-`B` и т.д.),
полученное значение (в байтах) помещается в переменную L
(если указанный диск не существует, значение L становится < 0);
D,L - простые переменные.
READ F;X;Y;... и т.д.
READ F;2K
READ F;$
Ввод информации из текстового файла,
X;Y;... - заполнение одномерных массивов построчно
(строка 1: X1,Y1; строка 2: X2,Y2 и т.д., разделитель в строке - запятая или табуляция);
K - заполнение двумерного массива K (разделитель в строке - запятая или табуляция);
$ - заполнение элементов текстового массива (с $[1] по $[850]);
F - имя файла (текстовая переменная или константа);
если количество строк в файле меньше, чем элементов в числовых массивах, то размер массива приравнивается этому количеству.
TYPE F;1M
TYPE F;2K
TYPE F;$$;P;S
TYPE F;список
Вывод информации в текстовый файл,
M - одномерный массив;
K - двумерный массив (разделитель в строке - табуляция);
$$ - вывод текстового массива, если P не равно 0, то отсекаются пробелы в конце строк, если S не равно 0, то выводятся также и пустые строки (P и S - односимвольные константы);
список - соответствует списку вывода оператора LIST;
если файл существует, выводимые данные добавляются в конец,
F - имя файла (текстовая переменная или константа).
GETF F;1M;D;B;L
PUTF F;1M;D;B;L
GETF F;2K;D;B
PUTF F;2K;D;B
GETF F;A;D;B
PUTF F;A;D;B
GETF F;P;R;B
PUTF F;P;R;B
Чтение (GETF) из двоичного файла и запись (PUTF) в двоичный файл;
F - имя файла (текстовая переменная или константа);
K - двумерный массив (чтение и запись происходят построчно);
M - одномерный массив;
P - текстовая переменная;
A - простая переменная;
D - длина одного элемента (1, 2 или 4 байта);
R - длина строки;
B - число пропускаемых байт от начала файла;
L - размер записи в байтах (шаг считывания/записи);
D,R,B,L - выражения.
Если количество строк в файле при считывании меньше, чем элементов в числовых массивах, то размер массива приравнивается этому количеству.

М А Т Е М А Т И Ч Е С К И Е

LIRA X;A
Решение системы линейных уравнений.
X - одномерный массив неизвестных;
A - двумерный массив коэффициентов.
POLI X;P;M;Y
Вычисление полинома;
X - аргумент (простая переменная);
P - одномерный массив коэффициентов
(P[1] - свободный член и т.д.);
M - степень полинома;
Y - переменная, в которую помещается результат вычислений.
DTRM M;N;D
Вычисление определителя матрицы;
M - двумерный массив матрицы;
N - размер матрицы;
D - переменная, в которую помещается результат вычислений.
APRO X;Y;P;M;K;S
REAK X;Y;A;B;C;K;S
Аппроксимация данных полиномом степени M;
Аппроксимация данных функцией реакции A*X^B*exp(-C*X);
X - одномерный массив значений X;
Y - одномерный массив значений Y;
P - полученный одномерный массив коэффициентов полинома;
A,B,C - полученные коэффициенты аппроксимации;
K - переменная, получающая значение коэффициента корреляции;
S - переменная, получающая значение среднеквадратического отклонения.
USER F;M;E;T
Аппроксимация данных произвольной функцией, задаваемой самим пользователем;
Данные должны находиться в массивах с именами `X` и `Y`, а коэффициенты аппроксимации в массиве с именем `A`;
Выражение для вычисления функции помещается в текстовую переменную, при этом для указания на значение абсциссы следует использовать переменную X.
Например, для функции реакции выражение должно иметь вид: A[1]*X^A[2]*&exp(-A[3]*X).
Перед выполнением данного оператора следует присвоить начальные значения элементам массива A.
F - текстовая переменная с выражением для функции;
M - количество коэффициентов аппроксимации;
E - допустимая погрешность, 0<E<1 (при возврате - фактическая);
T - максимальное число итераций (при возврате - оставшееся);
M,E,T - простые переменные.
Выполнение данного оператора может занимать много времени!
TRAN X;N;E;T;U
Решение системы нелинейных уравнений
  / f1(X1,...,Xn)=0
 < ...............
  \ fn(X1,...,Xn)=0
до выполнения условия abs(fi(X))<E
или до превышения допустимого числа итераций.
Уравнения должны находиться в текстовых переменных (f1 в $1 и т.д.);
X - одномерный массив переменных;
N - число уравнений (от 1 до 9);
E - допустимая погрешность (0<E<1);
T - максимальное число итераций (при возврате - оставшееся);
U - возвращаемый флаг результата:
(0 - успешно, >0 - количество уравнений, неудовлетворяющих условию, значение T=0).
Перед выполнением данного оператора необходимо задать начальные значения всем переменным X, для получения другого варианта решения нужно изменить эти начальные значения. Следует учесть, что не всегда смена начальных значений меняет и получаемый результат.
NTGR F;A;B;N;Y
Вычисление определенного интеграла;
F - текстовая переменная с выражением для функции (задается всегда относительно переменной X);
A,B - пределы интегрирования (A<B);
N - количество интервалов;
Y - переменная, получающая значение вычисленного интеграла;
A,B,N,Y - простые переменные.

П Р О Ч И Е

MINA D;I
MAXA D;I
SUMA D;S
Определение индекса I минимального или максимального элемента или суммы S всех элементов одномерного массива D.
SORT $;N;F
SORT A;N;F
Сортировка символьного или числового одномерного массива (A);
N,F - простые переменные; N - число элементов,
F - направление ( <0 - по убыванию, >0 по возрастанию ).
INCR A
DECR A
Увеличение или уменьшение значения указанной переменной на 1
(выполняется быстрее, чем A=A+1 или A=A-1);
A - простая переменная.
FIND P;S;I;N
FIND P;C;I;N
Поиск, начиная с позиции I, вхождения строки S или символа с кодом C в строку P,
номер найденной позиции возвращается в переменную N.
P - текстовая переменная (или элемент массива),
S - текстовая переменная или константа,
C,I - простые или индексные переменные или целые константы,
N - простая переменная, если строка не найдена, принимает значение 0.
DLIN P;L
Определение длины текстовой переменной P, результат помещается в переменную L.
P - текстовая переменная, L - простая переменная.
MENU N;L;S;C;F
Выводит многостраничное меню (только в текстовом режиме).
N - число элементов (берутся из строкового массива);
L - число элементов на одной странице;
S,C - строка и столбец левого верхнего угла;
F - переменная, получающая значение номера выбранного элемента
или 0, если ничего не выбрано (выход по нажатию <Esc>);
или <0, если ошибка в параметрах.
N,L,S,C - любое выражение, F - простая переменная.
Номер выбранного элемента запоминается и предлагается в следующих вызовах меню.
JULD D;M;Y;J
Вычисление номера юлианского дня по дате и даты по номеру дня.
D,M,Y,J - число, месяц, год и номер дня - простые переменные.
Если значение J есть 0, то оно вычисляется по заданной дате,
если J>0, то по этому значению вычисляются D,M,Y.
Значение года должно быть задано полностью, от начала эры.

СТРОКОВЫЕ ФУНКЦИИ

%MID(P,I,N) - возвращает строку, состоящую из N символов строки P начиная с символа номер I;
P - текстовая переменная (или элемент массива), I и N - выражения.
%CHR(N,S) - возвращает строку, состоящую из N символов с кодом S; N,S - выражения.
%DATE - возвращает текущую дату в виде dd/mm/yyyy.
%TIME - возвращает текущее время в виде hh:mm:ss.
Эти функции используются только в операторе присваивания текстовой переменной.

МАТЕМАТИЧЕСКИЕ ФУНКЦИИ

&RAN# - получение псевдослучайного числа в диапазоне от 0 до 1
&SIN(X) - синус
&COS(X) - косинус
&TAN(X) - тангенс
&ASN(X) - арксинус
&ACS(X) - арккосинус
&ATN(X) - арктангенс
&EXP(X) - показательная
&LOG(X) - натуральный логарифм
&INT(X) - выделение целой части (INT(5.8)=5, INT(-5.8)=-5)
&FRC(X) - выделение дробной части (FRC(5.8)=0.8, FRC(-5.8)=-0.8)
&ABS(X) - абсолютное значение
&SGN(X) - знак числа
&SQR(X) - квадратный корень
(X - любое арифметическое выражение, аргумент прямых и результат обратных тригонометрических функций может быть выражен в радианах или градусах).

Описание программы "`Dikar` - интерпретатор `Эллочки`"

Статья "Эллочка и компьютер"



Rambler's Top100
nick ErichWare