Основы алгоритмизации и программирования. Часть третья. Структурированные типы данных. Асламова В.С - 29 стр.

UptoLike

57
После стирания подстроки её оставшиеся части как бы склеиваются.
Если Start=0 или превышает длину строки S, то строка не изменится.
Также не изменит строку значение Len=0. При Len, больше чем остаток
строки, будет удалена подстрока от Star и до конца S. Это можно
использовать при «подрезании» строк до заданной величины:
Delete(S, 16, 255)
Здесь строки S длиною менее 16 символов
пройдут через процедуру
неизменными, а остальные будут укорочены до длины в 15 символов.
5. Процедура Insert (Subs:String; VAR S:string; Start:byte ) выполняет
работу противоположную той, что делает Delete. Вставляет подстроку Subs в
строку S, начиная с позиции Start.
S:= Началоконец;
Insert(середина, S, 8);
Writeln(S);
{теперь S = Началосерединаконец}
Если изменённая строка S оказывается слишком длинной, то она
автоматически укорачивается до объявленной длины S (при этом, как всегда
«теряется» правый конец).
Если значение Start превышает исходную
длину строки S, то строка
Subs присоединяется справа к строке S.
Start – может быть и целочисленным выражением.
6. Функция Pos(Subs, S:string):byte проверяет содержание
подстроки Subs в строке S. Возвращает номер символа в строке S, с которого
начинается включение в S подстроки Subs. Если же S не содержит в себе
Subs, то функция вернёт 0.
var S:string; N:byte;
S:=Автоматизация технологических процессов;
N:=Pos(_, S);
Writeln(N); {результат N=14}
Недостатком функции является то, что она возвращает ближайшую
позицию Subs в S от начала строки, и не позволяет
найти все вхождения
подстроки в S, а также определить их количество.
7. Процедура Str(x[:Width [:dec]]; VAR S:string) служит для
преобразования числовых значений в строковые. Это, в частности,
необходимо для работы с процедурами модуля Craph:OutText(S:string) –
вывод строки S от положения курсора, и OutTextXY(x, y:integer; S:string) –
58
вывод строки ориентируясь по координатам х, у. х может быть переменной
или значением целого или вещественного типов. Можно задать поле
формата, указывая ширину поля для вещественного числа
и знаков после
десятичной точки. Для целых значений можно задать только поле Width , для
вещественныхлибо оба поля (формат с фиксированной точкой), либо одно
– Width. В последнем случае задаётся экспоненциальный формат общей
длиной Width. Напомним, что экспоненциальный формат чувствителен к
использованию сопроцессора.
Например:
А:= -6; В:= 1.18822Е-2;
Str(A:4,st1); {результат st1=_ _ -6}
Str(B:8:5,st2); {результат st2=_1190}
Str(6.66:6:0,S); {результат S=_ _ _ _ _ 7}
Если число имеет меньше знаков, чем дано в поле, то оно будет
выровнено по правому краю, пустое место заполнится пробелами. Если
задать поле Width отрицательным, то выравнивание происходит по левому
краю, а излишки как бы стираются:
Str(6.66:-8:1,S) {
результат S = 6.7}
8. Процедура Val(S:string; VAR V; VAR ErrCode:Integer) процедура
преобразует строковое значение S в числовое значение и присваивает это
значение переменной V. Если преобразование возможно, то переменная
ErrCode равна нулю, в противном случае она содержит номер символа в S, на
котором процедура застопорилась. Тип V должен соответствовать
содержимому строки S. Если в S имеется точка или степень числа Е+nn, то V
должна быть вещественного типа, в
остальных случаях может быть целой.
Массу проблем доставляет переполнение: если S= 60000, а V описано как
byte, то что получится в итоге?
Возможны два варианта. Первыйпри работе программы
проверяются диапазоны и индексы (режим $R+); при переполнении
возникнет фатальная ошибка счёта, и программа прервётся. Второй
проверка отключена (режим $R-); всё зависит от типа V: если
он
вещественный или Longint, то при переполнении ErrCode<>0, а V содержит
числовой «мусор». Но если V имеет тип «короче» чем Longint, то ErrCode
при переполнении молчит (равно 0), а в V записывается результат
переполнения, мало похожий на содержимое S. Поэтому, рекомендуется при
преобразовании строк с целыми числами на место V ставить переменную
типа longint.
      После стирания подстроки её оставшиеся части как бы склеиваются.         вывод строки ориентируясь по координатам х, у. х может быть переменной
      Если Start=0 или превышает длину строки S, то строка не изменится.       или значением целого или вещественного типов. Можно задать поле
Также не изменит строку значение Len=0. При Len, больше чем остаток            формата, указывая ширину поля для вещественного числа и знаков после
строки, будет удалена подстрока от Star и до конца S. Это можно                десятичной точки. Для целых значений можно задать только поле Width , для
использовать при «подрезании» строк до заданной величины:                      вещественных – либо оба поля (формат с фиксированной точкой), либо одно
        Delete(S, 16, 255)                                                     – Width. В последнем случае задаётся экспоненциальный формат общей
      Здесь строки S длиною менее 16 символов пройдут через процедуру          длиной Width. Напомним, что экспоненциальный формат чувствителен к
неизменными, а остальные будут укорочены до длины в 15 символов.               использованию сопроцессора.
      5. Процедура Insert (Subs:String; VAR S:string; Start:byte ) выполняет           Например:
работу противоположную той, что делает Delete. Вставляет подстроку Subs в              А:= -6; В:= 1.18822Е-2;
строку S, начиная с позиции Start.                                                     Str(A:4,st1);    {результат st1=′_ _ -6′}
                                                                                       Str(B:8:5,st2); {результат st2=′_1190′}
        S:= ′Начало – конец′;
                                                                                       Str(6.66:6:0,S); {результат S=′_ _ _ _ _ 7′}
        Insert(′середина – ′, S, 8);                                                 Если число имеет меньше знаков, чем дано в поле, то оно будет
        Writeln(S);                                                            выровнено по правому краю, пустое место заполнится пробелами. Если
        {теперь S = ′Начало – середина – конец′}                               задать поле Width отрицательным, то выравнивание происходит по левому
      Если изменённая строка S оказывается слишком длинной, то она             краю, а излишки как бы стираются:
автоматически укорачивается до объявленной длины S (при этом, как всегда               Str(6.66:-8:1,S)       {результат S = ′6.7′}
«теряется» правый конец).                                                            8. Процедура Val(S:string; VAR V; VAR ErrCode:Integer) процедура
      Если значение Start превышает исходную длину строки S, то строка         преобразует строковое значение S в числовое значение и присваивает это
Subs присоединяется справа к строке S.                                         значение переменной V. Если преобразование возможно, то переменная
      Start – может быть и целочисленным выражением.                           ErrCode равна нулю, в противном случае она содержит номер символа в S, на
       6. Функция Pos(Subs, S:string):byte – проверяет содержание              котором процедура застопорилась. Тип V должен соответствовать
подстроки Subs в строке S. Возвращает номер символа в строке S, с которого     содержимому строки S. Если в S имеется точка или степень числа Е+nn, то V
начинается включение в S подстроки Subs. Если же S не содержит в себе          должна быть вещественного типа, в остальных случаях может быть целой.
Subs, то функция вернёт 0.                                                     Массу проблем доставляет переполнение: если S= ′60000′, а V описано как
                                                                               byte, то что получится в итоге?
       var S:string; N:byte;
       S:=′Автоматизация технологических процессов′;                                  Возможны два варианта. Первый – при работе программы
       N:=Pos(′_′, S);                                                         проверяются диапазоны и индексы (режим $R+); при переполнении
       Writeln(N);             {результат N=14}                                возникнет фатальная ошибка счёта, и программа прервётся. Второй –
      Недостатком функции является то, что она возвращает ближайшую            проверка отключена (режим $R-); всё зависит от типа V: если он
позицию Subs в S от начала строки, и не позволяет найти все вхождения          вещественный или Longint, то при переполнении ErrCode<>0, а V содержит
подстроки в S, а также определить их количество.                               числовой «мусор». Но если V имеет тип «короче» чем Longint, то ErrCode
      7. Процедура    Str(x[:Width [:dec]]; VAR S:string) служит       для     при переполнении молчит (равно 0), а в V записывается результат
преобразования числовых значений в строковые. Это, в частности,                переполнения, мало похожий на содержимое S. Поэтому, рекомендуется при
необходимо для работы с процедурами модуля Craph:OutText(S:string) –           преобразовании строк с целыми числами на место V ставить переменную
вывод строки S от положения курсора, и OutTextXY(x, y:integer; S:string) –     типа longint.

                                    57                                                                            58