СИМУЛА - универсальный процессо-ориентированный язык моделирования, страница 20

t2.putint(c);

t3.putfix(b,2);

t4.putreal(a,3);

В результате выполнения данного примера получим следующие значения: с=128; a=128,5; b=+6,17E1; t2=' -128'; t3='61,70'; t4=' -12,85E+01'.

Сравнение текстов

Текстовые значения можно сравнить между собой с помощью операции сравнения: <, <=, =. Cравнение текстовых значений основано на использовании отношения символов, составляющих тексты.

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

Текстовое значение t1 является меньше, чем текстовое значение t2, только в том случае, если они не равны и выполнено одно из условий:

-  t1 пусто;

- вся последовательность символов из t1 совпадает с началом последовательности символов t2, то в t2 есть хотя бы еще один символ;

-  ранги первых kсимволов t1 и t2 равны, а ранг (k+1) - го символа из t1 меньше, чем ранг (k+1) - го символа из t2.

Рассмотрим процедуру, которая выделяет в текстовой строке все слова и переворачивает их. Cлова друг от друга отделяются пробелами.         

begin

  text  a;

a :- text(''котсон'');

procedure rep(t);

text t;

begin

 text  u;  character  c;  integer  k, k1, k2, k3, k4;

k3 := t.pos; u :- blanks(t.length);

t.setpos(1); u := t;

while  u.more  do

      begin

c := u.getchar;

if  c =''   ''  then  t.putchar (c)

else

 begin                            

k1 := u.pos;

while  u.more do

begin

c := u.getchar;

if  c = ''   ''  then

begin

k2 := u.pos;

u.setpos(k2);  k4 := k2 – 2;

while   k4>(k1-2)  do

begin

u.setpos(k4);

k4:=k4-1;

t.putchar (u.getchar);

end;

u.setpos(k2-1); goto m1;

end

                            end

m1:               end

                  end;

t.setpos(k3);

end rep;

outtext(a);

       outimage;

rep(a);

outtext(a);

outimage;

end;

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

Организация ввода – вывода

Ввод-вывод в языке СИМУЛА  основан на понятии файла. В настоящее время система СИМУЛА позволяет работать с файлами последовательной структуры.          Каждый файл состоит из записей фиксированной длины.

В языке определены три класса объектов infile, outfile, printfile, которые определяют понятие файла (см. приложение). Далее рассмотрены только процедуры ввода с экрана и вывод на экран.

Процедуры ввода

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

Процедура INIMAGE. Данная процедура помещает в буфер очередную запись и устанавливает указатель позиции буфера в 1.

Процедура INCHAR доставляет в качестве своего значения один символ, при этом указатель позиции буфера увеличивается на единицу.

Процедура INTEXT. Параметром процедуры является длина текста. Процедура служит для ввода текста длиной N, и, причем число N должно быть меньше или равно длине буфера, если значение N больше, чем длина подтекста, оставшегося в буфере (т.е. N>IMAGE.LENGTH – IMAGE.POS), то вводится новая запись в буфер. После чего производится ввод текста с нового значения буфера с первого символа.      

Ввод целых и вещественных чисел осуществляется с помощью процедур ININT и INREAL.

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

Процедура ININT предназначена для ввода целых чисел. Данная процедура аналогична процедуре GETINT.

Процедура INREAL предназначена для ввода действительных чисел. Данная процедура аналогична процедуре GETREAL.