Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Строки и функции и матрицы.doc
Скачиваний:
2
Добавлен:
15.11.2018
Размер:
264.19 Кб
Скачать

Практический пример применения процедур, работающих со строками

    При использовании функции UpCase программист, не вла-деющий английским языком, сталкивается с существенными ограничениями сферы применения своих программ. Поэтому возникает необходимость в построении еще одной функции, преобразующей строчные литеры русского и английского алфавитов в прописные. Рассмотрим приведенную ниже программу, которая позволяет ре-шить эту задачу.     Сначала рассмотрим основной блок программы. Сразу после запуска посредством функции ClrScr производится очистка экрана. Чтобы обеспечить доступ из нашей программы к функции ClrScr, хранящейся в стандартном модуле Crt, в декларационную часть программы был включен оператор USES Crt. В основном блоке программы строковой переменной Words соответствует строка "Фирма Microsoft". Далее следует вызов процедуры Му_ upcase. Завершает программу оператор WriteLn(Words);, с помощью которого на экран выводится содержимое строковой переменной Words.

PROGRAM My_function_UpCase;

USES Crt;

VAR

Words: STRING;

PROCEDURE My_upcase(VAR Words: STRING);

{Данная программа обеспечивает полное преобразование строчных литер

в прописные, включая литеры русского алфавита.}

VAR

i: BYTE; {Данная переменная необходима для организации цикла}

PROCEDURE String_manipulation (VAR Words: STRING; i: BYTE);

{Данная процедура осуществляет посимвольное преобразование строки}

BEGIN

Words[i] := UpCase(Words[i]);

CASE Words[i] OF

'a': Words[i] := 'A';

'б': Words[i] := 'Б';

'в': Words[i] := 'B';

{ . . . } (Напишите здесь такие же операторы для всех

{ . . . } литер русского алфавита)

END; {CASE}

END; {String_manipulation}

BEGIN

FOR i := l to Length (Words) DO

String_manipulation (Words,i);

END; {My_upcase}

BEGIN

ClrScr;

Words := 'Фирма Microsoft';

My_upcase (Words);

WriteLn(Words);

END.

    Теперь рассмотрим саму процедуру преобразования строки My_upcase. Поскольку задачей этой процедуры является преобразование строки символов, то, следовательно, параметр, передаваемый ей, должен иметь тип STRING.     Обратите внимание на комментарий, которым начинается процедура. Он поясняет алгоритм ее функционирования. Вначале в процедуре производится замена английских строчных букв, встретившихся в строке, на прописные. Затем те же действия производятся в отношении букв русского алфавита.     Рассмотрим теперь декларационную часть процедуры My_upcase. В ней объявляется только одна переменная. Это переменная типа BYTE, предназначенная, как указано в комментарии, для работы в качестве счетчика цикла. Для переменной i был выбран тип BYTE, т.к. максимальная длина строки равна 255, а переменная типа BYTE как раз обеспечивает хранение чисел с величиной до 255.     Теперь перейдем к рассмотрению тела процедуры Му_ upcase. В первую очередь в глаза бросается способ обработки строки, принятый в процедуре. Обработка производится посимвольно с использованием цикла со счетчиком FOR ... ТО ... DO. Длина строки, т.е. предельное значение счетчика цикла, определяется с помощью функции Length.     Структура процедуры String_maniputation, вызываемой при каждом проходе цикла FOR ... ТО ... DO (для каждого символа строки), тоже весьма проста. Вначале производится попытка преобразования символа с помощью функции UpCase. Затем для символов русского алфавита, не преобразуемых этой функцией, реализуется прямое преобразование с помощью конструкции CASE ... OF.     Примечание: Как нам уже известно, в ТП принята концепция жесткой проверки соответствия типов. При этом строки, имеющие разную длину, считаются несовместимыми. Следовательно, в нашем конкретном случае Вы можете передать в процедуру строку произвольной длины (например STRING[20]), если будет ослаблен жесткий контроль соответствия типов. Напомним, что в наших процедурах строки объявлены как переменные типа STRING, т.е. STRING[255]. Такого ослабления можно добиться, применив директиву компилятора $V (контроль длины строк). С помощью этой директивы можно указать компилятору, должен ли он проводить жесткую проверку соответствия длин строк при передаче параметров в процедуры и функции или нет. Если Вы поставите в тексте программы перед вызовом процедуры My_upcase директиву {$V-}, то в качестве параметров, передаваемых в вызываемую процедуру, смогут фигурировать строки с длиной, отличающейся от декларированной в описании процедуры.

{$V- }

My_upcase (Words);

{$V+}

    Вторая директива компилятору $V включает жесткую проверку соответствия длин строк.