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

1.  Процедура length. Значением данной процедуры является число символов в текстовом значении, если текстовое значение равно notext, то значение процедуры будет 0.

text t1; integer n;

t1:- blanks(10);

n := t1.length;

В данном примере значение nравно10.

2. Процедура pos. Результатом процедуры является текущее значение указателя позиции.

text  t1integer  k;

t1 :- text(''симула-67'');

k := t1.pos;

Значение k в данном примере равно 1, так как процедура text устанавливает указатель позиции в 1.

3.  Процедура setpos. При исполнении оператора t.setpos(n) указатель позиции принимает значение n, если n меньше 1 или больше длины текста, то указателю присваивается значение t.length+1.

4.  Процедура more. Значение данной процедуры истинно (true), если t.pos>=1 и t.pos<=t.length, и ложно (false) в противном случае.

Символы текста доступны по одному, переменные, которые принимают значения одного символа, можно описывать с помощью описателя character, присвоение значений данным переменным осуществляется с помощью оператора присваивания.

character  a1,b1;

a1:='a';

b1:=a1;

Над символьными переменными определены следующие процедуры: digit и letter.

Значением процедуры digit будет true, если символ является цифрой, и false - в противном случае, значением процедуры letter будет true, если символ является буквой.

Для считывания символов из текста и записи символов в текст используются процедуры  getchar и putchar.

Процедура getchar доставляет в качестве своего значения символ, на который указывает текущий указатель позиции. Процедура putcharзаменяет символ, на который указывает текущий указатель позиции, каждая из процедур увеличивает на 1 текущий указатель позиции.

text t;

character c;

c := 'ы';

t:- text(''дом'');

t.setpos(2);

t.putchar (c);

c := getchar;

В результате выполнения данной процедуры переменная t получит значение ''дым'', а с - 'm'.

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

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

Процедура 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;