- •Строки Строковый тип данных
- •Процедуры и функции для работы со строками
- •Val(st: string; X: числовая переменная; var code: integer)
- •Введение
- •Объявление строчных типов и строчных переменных
- •Операции со строками
- •Стандартные процедуры и функции для строк
- •Практический пример применения процедур, работающих со строками
- •Хранение строк
- •Работа с элементами переменной строкового типа
- •Двумерные массивы Паскаля – матрицы
- •Описание двумерного массива Паскаля.
- •Основные действия с двумерными массивами Паскаля
- •Ввод двумерного массива Паскаля.
- •Вывод двумерного массива Паскаля на экран.
- •Представление двумерного массива Паскаля в памяти
- •Сколько памяти выделяется для массива?
- •Примеры решения задач с двумерными массивами Паскаля
- •Двумерные массивы
- •Найти сумму элементов
- •Работа с несколькими массивами
- •Суммы в двумерных массивах
Практический пример применения процедур, работающих со строками
При использовании функции 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 включает жесткую проверку соответствия длин строк.