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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.