Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП-ПОСОБИЕ_БАК.doc
Скачиваний:
35
Добавлен:
11.03.2015
Размер:
2.21 Mб
Скачать

Контрольные вопросы

  1. Перечислите возможности объявления пользовательских типов данных.

  2. Дайте определение массива.

  3. Сформулируйте определение типа запись.

  4. Дайте определение типа множества.

  5. Перечислите операции, применимые к объектам типа множество.

14. Работа со строками

Тип string (строка) в Турбо Паскале широко используется для обработки текстов. Этот тип является стандартным и во многом похож на одномерный массив символов array [0..n] of char. Значение n соответствует количеству символов в строке и может меняться от 0 до 255. Символы, входящие в строку, занимают позиции с 1 до n. Начальный байт строки с индексом 0 содержит информацию о ее длине, т.е. это символ с кодом, равным длине строки.

Можно, также описывать переменные типа string[k], где k – целое число не больше 255.

Описание этого типа (рис. 14.1.):

Рис. 14.1. Синтаксическая диаграмма строкового типа

Так определяются строки с длиной не больше k. Этот тип уже не является стандартным. С символами строки можно работать как с элементами массива из символов, но в отличие от массивов, строки можно вводить целиком, сравнивать друг с другом и сцеплять операцией «+».

Пример 14.1: Работа со строками.

var s , x , y , z : string;

begin

x:='turbo';

y:='pascal';

z:=x +' '+ y; { z='turbo pascal' }

s:=''; { пустая строка }

for c:='a' to 'z' do s:=s + c; { s='abcd..xyz' }

writeln(s);

end.

Сравнение строк выполняется посимвольно в соответствии с их кодами до первого несовпадения. Если одна из строк закончилась до первого несовпадения, то она считается меньшей. Пустая строка меньше любой строки.

Пример 14.2: Сравнение строк.

'abcd' > 'abcD' { 'd'>'D' }

'abcd' > 'abc' { 'd'>'' }

'abc' < 'axxc' { 'b'<'x' }

'abcd' = 'abcd'

Существует ряд стандартных функций и процедур для работы со строками:

    • функция length(s) выдает длину строки s;

    • функция concat(s1,s2,..,sn) возращает строку s1+s2+..+sn;

    • функция copy(s,p,k) возвращает фрагмент строки s, который начинается в позиции p и имеет длину k;

    • функция pos(s1,s) ищет первое вхождение подстроки s1 в строку s и возвращает номер первого символа s1 в строке s или 0 если не нашли;

    • процедура delete(s,p,k) удаляет из строки s фрагмент, который начинается в позиции p и имеет длину k;

    • процедура insert(s,s1,p) вставляет в строку s подстроку s1, начиная с заданной позиции p;

Турбо Паскаль позволяет производить преобразования числовых значений в строковые и наоборот. Для этого используются процедуры str(x:n:d,s) и val(s,x,e). Первая получает их числа x строку s с изображением этого числа, в которой не менее n символов и из них d знаков после запятой. Параметры n и d необязательные. Вторая процедура получает из строки s число x. При успешном результате e=0.

Контрольные вопросы

  1. Сформулируйте определение строкового типа.

  2. Укажите различия между строковым типом и символьным массивом.

  3. Перечислите операции, выполняемые над строковым типом.

  4. Назовите стандартные процедуры и функции применимые к строковому типу.

  5. Приведите пример использования строкового типа.

15. Процедуры и функции

Турбо Паскаль позволяет выделять фрагменты программы во вспомогательные алгоритмы (ВА). Это позволяет писать хорошо структурированные программы. Языки программирования, в которых предусмотрены ВА, называются процедурно–ориентированными. Структурированные программы обычно проще в понимании и отладке.

Наличие ВА в языке программирования позволяет применять более совершенные методы при разработке и проектировании сложных программных комплексов. Известны два наиболее широко применяемых подхода. Первый называется методом нисходящего программирования или разработкой программ «сверху – вниз». При этом сначала создается главная программа, предполагая наличие некоторых ВА, решающих определенные задачи. Затем переходят к детальной разработке упомянутых выше необходимых ВА.

Другим подходом в разработке программ является метод восходящего программирования или проектированием «снизу – вверх». В этом случае все начинается с создания небольших ВА, из которых затем создаются более сложные ВА и, наконец, основная программа.

В Турбо Паскале ВА оформляются в виде процедур (рис. 15.1.) или функций (рис. 15.2.). Каждый ВА имеет собственное имя.

Рис. 15.1. Синтаксическая диаграмма заголовка процедуры

Рис. 15.2. Синтаксическая диаграмма заголовка функции

Вызов процедуры (рис. 15.3.) на выполнение осуществляется отдельным оператором с помощью ее имени. Вызов функции может быть составной частью любого выражения при условии согласованности типов.

Рис. 15.3. Синтаксическая диаграмма вызова процедуры

В разделе операторов описания функции (рис. 15.4.) должен быть хотя бы один оператор присваивания:

Рис. 15.4. Синтаксическая диаграмма вызова функции

Описание процедур и функций должно предшествовать их вызову и располагается перед началом основной программы. Нельзя вызывать на выполнение те ВА, которые содержатся внутри других процедур и функций. Описание процедуры имеет следующую структуру:

procedure имя (список формальных параметров);

label описание локальных меток,

const констант,

type типов

var и переменных.

procedure описание внутренних процедур

function и функций.

begin

операторы

end;

Описание функции имеет следующую структуру:

function имя (список формальных параметров) : тип результата;

label описание локальных меток,

const констант,

type типов

var и переменных.

procedure описание внутренних процедур

function и функций.

begin

Операторы, среди которых хотя бы один, который присваивает имени функции значение результата

end.

Типом результата в функциях может быть любой из стандартных типов Турбо Паскаля кроме файловых типов. Использование конструируемых типов здесь недопустимо.

Существуют понятия локальных и глобальных меток, констант, типов и переменных. Поясним эти понятия на примере переменных. Переменные, описанные в основной программе, являются глобальными по отношению к процедурам и функциям, которые описаны позже этих переменных. Аналогично, переменные, описанные в процедурах и функциях, являются глобальными по отношению к внутренним процедурам и функциям, которые описаны позже. Остальные переменные называются локальными. Их область действия локализована, т.е. ограничена, тем ВА, где они описаны.

Исходные данные для работы ВА можно передавать через глобальные переменные, а также через параметры. Параметры при вызове ВА называются фактическими, а параметры в заголовке ВА называются формальными.

Формальные параметры ВА также относятся к его локальным переменным. Локальные данные создаются, т.е. им выделяется память, при вызове ВА, а освобождение этой памяти происходит при завершении работы ВА. В том случае, когда локальная переменная имеет тот же идентификатор, что и глобальная, алгоритм работает с локальной. При этом, значение глобальной переменной сохраняется в специальной области памяти, которая называется стек.

По способу передачи параметры в Турбо Паскале делятся на три типа:

    • параметры-значения,

    • параметры-переменные,

    • параметры-константы.