Лабораторный практикум по программированию на языке Паскаль. Найханова Л.В - 62 стр.

UptoLike

62
if mline[i] IN ['a'...'z'] then
mline[i] := chr( ord( mline[i] ) + 1);
. . .
Можно заметить, что работа со строковыми данными аналогична работе с символьными
массивами, однако, это не означает их полную идентичность. Так, распространенной
ошибкой является работа с элементами строки без учета ее текущей длины. Необходимо
помнить, что если длина символьного ряда статична, то длина стринга динамична.
8.4. Стринги и литерные ряды
Регулярную переменную типа ARRAY OF CHAR ( или литерный ряд) можно рассматривать
как стринг постоянной длины. Данные указанного типа могут быть использованы в любых
стринговых выражениях. При этом согласование операндов по типам обеспечивается
компилятором, который в подобных случаях просто преобразует литерный ряд в стринг
длиной, равной количеству элементов ряда. Это позволяет, например , сравнивать литерные
ряды между собой и обращаться с ними точно так же, как с переменными типа STRING.
Допускается выполнять присваивание, в левой части которого стоит имя литерного ряда, в
правой - стринговый литерал ( константа ) длиной, равной количеству элементов ряда.
Однако нельзя присваивать какой-либо переменной типа литерный ряд переменную типа
STRING или наоборот.
Например:
Сonst
message = 'верно';
Type
СharАrray = array[1..5] of char;
Var
FixedString, FiveChar : CharArray;
VarString : string[10];
Begin
. . .
FiveString := 'мерно';
FixedString := message;
if FiveChar > FiveString then
writeln('"', FiveChar,' "больше, чем"', FiveString,'"');
VarString := 'при';
VarString := concat(VarString,FiveChar);
VarString := 'голос';
FiveChar := VarString; { так нельзя}
. . .
Пояснение к программе.
В рассмотренном примере объявлено два литерных ряда ( типа СharАrray) - FixedString и
FiveChar, а также стринг VarString.
1. Стринговый литерал 'мерно' присваивается переменной FiveChar.
2. Переменной FixedString присваивается стринговая константа message, имеющая значение
'верно'.
3. Сравниваются два ряда, в результате которого выясняется, что FiveChar больше
FixedString (поскольку 'мерно' > 'верно').
4. Переменная VarString получает значение 'при'.
5. В результате конкатенации VarString получает новое значение - 'примерно', которое на
следующем шаге затирается значением 'голос'.
6. В последнем операторе делается попытка литерному ряду назначить стринговую
переменную, это недопустимо по обычной в таких случаях ошибке "несоответствие типов".
В программе левый операнд объявлен как литерный ряд, а правый как стринг.
8.5. Пустой стринг
        if mline[i] IN ['a'...'z'] then
           mline[i] := chr( ord( mline[i] ) + 1);
        . . .
Можно заметить, что работа со строковыми данными аналогична работе с символьными
массивами, однако, это не означает их полную идентичность. Так, распространенной
ошибкой является работа с элементами строки без учета ее текущей длины. Необходимо
помнить, что если длина символьного ряда статична, то длина стринга динамична.
8.4. Стринги и литерные ряды
Регулярную переменную типа ARRAY OF CHAR ( или литерный ряд) можно рассматривать
как стринг постоянной длины. Данные указанного типа могут быть использованы в любых
стринговых выражениях. При этом согласование операндов по типам обеспечивается
компилятором, который в подобных случаях просто преобразует литерный ряд в стринг
длиной, равной количеству элементов ряда. Это позволяет, например , сравнивать литерные
ряды между собой и обращаться с ними точно так же, как с переменными типа STRING.
Допускается выполнять присваивание, в левой части которого стоит имя литерного ряда, в
правой - стринговый литерал ( константа ) длиной, равной количеству элементов ряда.
Однако нельзя присваивать какой-либо переменной типа литерный ряд переменную типа
STRING или наоборот. Например:
   Сonst
    message = 'верно';
   Type
    СharАrray = array[1..5] of char;
   Var
    FixedString, FiveChar : CharArray;
    VarString                  : string[10];
   Begin
     . . .
    FiveString := 'мерно';
    FixedString := message;
    if FiveChar > FiveString then
       writeln('"', FiveChar,' "больше, чем"', FiveString,'"');
    VarString := 'при';
    VarString := concat(VarString,FiveChar);
    VarString := 'голос';
    FiveChar := VarString; { так нельзя}
     . . .
Пояснение к программе.
В рассмотренном примере объявлено два литерных ряда ( типа СharАrray) - FixedString и
FiveChar, а также стринг VarString.
1. Стринговый литерал 'мерно' присваивается переменной FiveChar.
2. Переменной FixedString присваивается стринговая константа message, имеющая значение
'верно'.
3. Сравниваются два ряда, в результате которого выясняется, что FiveChar больше
FixedString (поскольку 'мерно' > 'верно').
4. Переменная VarString получает значение 'при'.
5. В результате конкатенации VarString получает новое значение - 'примерно', которое на
следующем шаге затирается значением 'голос'.
6. В последнем операторе делается попытка литерному ряду назначить стринговую
переменную, это недопустимо по обычной в таких случаях ошибке "несоответствие типов".
В программе левый операнд объявлен как литерный ряд, а правый как стринг.
8.5. Пустой стринг


                                                                                    62