скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыКурсовая работа: Интерактивный интерпретатор

Вызов функции имеет следующий синтаксис: <имя функции>[<фактический параметр 1>,<фактический параметр 2>,...,<фактический параметр 3>]. Даже если список параметров пуст, квадратные скобки все равно пишутся. Фактическими параметрами функции должны быть выражения.

Например, function1[a,b+c,function2[a,function3[]],56.12e-1]. Существует ряд предопределенных функций, с именами которых не должны совпадать имена пользовательских функций. Их список приведен в таблице.


Функция

Возвращаемое

 значение

Описание
abs[число] того же типа, что и параметр абсолютная величина
cos[число] вещественное косинус
sin[число] синус
tg[число] тангенс
arctg[число] арктангенс
arcsin[число] арксинус
arccos[число] арккосинус
exp[число] степень основания натуральных логарифмов (экспонента)
pow[число, число] первый параметр в степени второй параметр (первый параметр должен быть неотрицательным)
ln[число] натуральный логарифм
lg[число] десятичный логарифм
log[число, число] логарифм первого аргумента по основанию, заданному вторым аргументом
sqrt[число] квадратный корень
pi[] константа pi (отношение длины окружности к диаметру)
idiv[целое число, целое число] целое частное целочисленного деления
imod[целое число, целое число] целое остаток целочисленного деления
substr[строка, целое число, целое число] строка подстрока (первый параметр – исходная строка, второй параметр – индекс первого символа, третий – длина подстроки; если происходит выход за пределы исходной строки, то ошибки нет, но длина результата – меньше указанной в третьем параметре)
strlen[строка] целое длина строки
strpos[строка, строка] целое позиция первого символа первого вхождения второй строки в первую, либо -1, если совпадений нет (нумерация символов с нуля)
toint[простой] целое преобразование к целому (если невозможно – возникает ошибка)
toreal[простой] вещественное преобразование к вещественному (если невозможно – возникает ошибка)
tostring[любой] строка преобразование к строке
issingle[любой] целое (-1 или 1) является ли значение выражения не массивом
isarray[любой] является ли значение выражения массивом
isstring[любой] является ли значение выражения строкой
isnum[любой] является значение выражения числом
isint[любой] является ли значение выражения целым числом
isreal[любой] является ли значение выражения вещественным числом
size[массив] число элементов массива
defined[массив, целое] определен ли в массиве элемент с заданным индексом
iff[простой, любой, любой] любой если первый параметр – истина, то возвращает значение второго параметра, иначе - третьего

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

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

call <выражение>

Например, call procedure1[param1, param2].

Оператор присваивания имеет синтаксис <переменная>:=<выражение> или <массив>{<выражение-индекс>}:=<выражение>.

В результате переменная или элемент массива принимают значение, равное значению выражения в правой части оператора присваивания, если оно было вычислено корректно.

 Условный оператор имеет вид:

if <выражение>
                   [операторы]
         [elseif <выражение>]
                   [операторы]
         [elseif <выражение>]
         ...
         [else]
                   [операторы]
         endif

Последовательно проверяются выражения-условия в строках с ключевыми словами if и elseif. Как только получено истинное значение условия (положительное число или непустая строка), то выполняются операторы, следующие за строкой с данным условием, затем выполнение переходит на строку, следующую за endif. Если ни одно из условий не оказалось истинным, то выполняются операторы, расположенные после else, если строка с else  имеется в данном условном операторе, иначе управление переходит ниже endif. Условный оператор может быть использован только в функции. Примеры:

         1.)

                   if a<0

                            a := abs[a]

                            flag := 1

                   endif

         2.)

                   if (ch=”a”)|(ch=”A”)

                            call proc_a[]

                   elseif (ch=”b”)|(ch=”B”)

                            call proc_b[]

                   elseif (ch=”c”)|(ch=”C”)

                            call proc_c[]

                  else

                            error

                   endif

Оператор цикла while имеет вид:

         while <выражение>

                   [операторы]

         loop

Выполнение блока операторов повторяется, пока истинно значение выражения-условия, затем управление передается на строку, следующую за loop. При этом, если значение выражения изначально ложно, то операторы не будут выполнены ни разу. Оператор цикла while может быть использован только в функции. Пример:

         i := 1

         s:=0

         while i<=n

                   s := s+i

                   i := i+1

         loop

Здесь переменная s получает значение суммы чисел от 1 до n.

Оператор цикла for имеет вид:

         for <переменная-счетчик> := <выражение1> : <выражение2>

                   [операторы]

         next

В начале выполнения цикла вычисляются выражение1 и выражение2 (их значения должны быть целыми, иначе возникает ошибка), затем переменной-счетчику присваивается значение выражение1 и, если оно меньше или равно значению выражение2, выполнение переходит внутрь цикла, иначе – за строку с ключевым словом next. После каждой итерации цикла значение счетчика увеличивается на единицу и сравнивается со значением выражение2 (оно вычисляется только один раз в начале), если оно оказывается меньшим или равным значению выражение2, то выполняется следующая итерация цикла, иначе – цикл завершается. Значение счетчика в цикле, в принципе, можно менять, не если оно окажется не целым на момент окончания очередной итерации, возникает ошибка. Оператор цикла for может быть использован только в функции. Пример:

         for i :=0 : size[a]

                   a{i} := a{i}*2

         next

Оператор возврата return незамедлительно прерывает выполнение функции (может быть использован только в функции). Например,

         if a<b

                   result := 1

                   return

         endif

        

Если при выполнении функции не встретился оператор return, выход из функции происходит как только управление переходит ниже последней строки функции.

Оператор error прерывает выполнение программы искусственно генерируется ошибка времени выполнения. Он может быть использован только в функции.

Пример:
         a:=toint[str]

         if a<0

                   error

         endif

Для вывода данных используются операторы  print и println. Оператор print имеет синтаксис print <выражение>. Значение выражения автоматически приводится к строке (т. е.команды println[a] и println[tostring[a]] – равносильны). Эта строка выводится на консоль. Оператор println имеет аналогичный синтаксис и назначение. Отличие заключается в том, что println производит перевод на новую строку после вывода, print – нет. Кроме того, если при работе в консоли  введено выражение без ключевых слов и оператора присваивания, то результат его вычисления выводится на консоль в отдельной строке - это сокращенная форма оператора println.

Оператор clear позволяет удалить переменную из памяти, например, команда “clear n” удаляет из памяти переменную n, после чего она считается неопределенной. Удалить отдельные элементы массива нельзя. Выполнение оператора clear над неопределенной переменной не имеет никакого эффекта и не приводит к ошибке. С помощью оператора clear можно также удалить фактические параметры функции и даже переменную result, что необходимо перед работой с ней как с массивом. Но если переменная result не определена на момент выхода из функции, то возникает ошибка времени выполнения. Синтаксис оператора clear имеет вид:

clear <имя_переменной1>


Примеры пользовательских функций

1. Сортировка массива.

sort [a]

#сортирует массив а по возрастанию.

#методом прямого выбора

if ~isarray[a]

         println “Invalid argument”

         error

endif

n:=size[a]

for i:=0:n-2

         k:=i

         for j:=i+1:n-1

                   k:=iff[a{j}<a{k}, j, k]

         next

         if i<>k

                   t:=a{i}

                   a{i}:=a{k}

                   a{k}:=t

         endif

next

result:=a

2. Вычисление НОД по алгоритму Евклида

nod [n,m]

#вычисляет наименьший общий делитель

#натуральных чисел n и m

#по алгоритму Евклида

if ~isint[n]|~isint[m]

         println "Invalid arguments"

         error

endif

if (n<0)|(m<0)

         println "Invalid arguments"

         error

endif

if n=0

         result:=m

         return

endif

if m=0

         result:=n

         return

endif

while m>0

         t:=n

         n:=m

         m:=imod[t,m]

loop

result:=n

3. Рекурсивное вычисление факториала.

factor [n]

#рекурсивное вычисление факториала числа n

if ~isint[n]

         println "Invalid argument"

         error

elseif n<0

         println "Invalid argument"

         error

elseif (n=0)|(n=1)

         result:=1

else

         result:=n*factor[n-1]

endif

4. Проверка, является ли строка корректным идентификатором.

test_d [str]

#возвращает 1, если строка является корректным

#идентификатором, то есть состоит только из

#букв, цифр, знаков подчеркивания и начинается

#c цифры, при этом имеет ненулевую длину,

#и -1 в противном случае

if ~isstring[str]

         println "Invalid argument"

         error

endif

n:=strlen[str]

if n=0

         result:=-1

         return

endif

ch:=substr[str,0,1]

if (ch>="0")&(ch<="9")

         result:=-1

         return

endif

for i:=0:n-1

         ch:=substr[str,i,1]

         if ~(((ch>="0")&(ch<="9"))|((ch>="A")&(ch<="Z"))|((ch>="a")&(ch<="z"))|(ch="_"))

                   result:=-1

                   return

         endif

next

result:=1

5. Вычисление угла треугольника по трем сторонам.

angle [a,b,c]

#вычисляет угол треугольника со сторонами

#a, b и c между сторонами a и b (в градусах)

if ~isnum[a]|~isnum[b]|~isnum[c]

         println "Invalid arguments"

         error

endif

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.