Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 6. Симула - универсальный процессо-ориент...doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
386.56 Кб
Скачать

Взаимное преобразование текстовых и арифметических значений

Данные процедуры позволяют прямые и обратные преобразования.

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

Процедура getreal. Данная процедура разыскивает в тексте запись целого или вещественного значения с десятичной точкой и/или с указанием порядка (порядок представляет с помощью символа Е).

Следующие процедуры служат обратной цели – преобразованию арифметических символов в текстовые. Процедуры заполняют указанный текст полученной записью числа, отредактированная запись числа выравнивается по правому краю, если в тексте слева остается свободное место, то оно заполняется пробелами. Указатель позиции после редактирования принимает значение t.length+1, если длина текста недостаточна, то выдается сообщение об ошибке.

Процедура putint. Процедура putint(k) преобразует целое число k в символьный вид целого числа.

Процедура putfix. Процедура putfix(r,n) преобразует число r в символьный вид числа с фиксированной точкой, число n указывает число символов после точки.

Процедура putreal. Процедура putreal(r,m) формирует запись числа следующего вида:

<знак>d.ddddE<знак>dd

Если m=0, то перед Е устанавливается знак числа только в том случае, если число отрицательное. Если m=1, то перед символом порядка ставится запись целого, состоящего из одной цифры, если m>1,то в дробной части записывается m -1 цифра.

text t1,t2,t3,t4,t5;

integer c;

real a,b;

t1 :- text(' -128,5+6,17e1')

t2 :- blanks(5);

t3 :- blanks(6);

t4 :- blanks(11);

t5 :- t1.sub(9,7);

c := t1.getint;

a := t1.getreal;

b := t5.getreal;

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;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]