- •1. Постановка задачи:
- •Структура программы на Паскале
- •Классификация типов
- •Стандартные типы данных Логические типы Внутреннее представление
- •Операции
- •Целые типы Внутреннее представление
- •Операции
- •Стандартные функции и процедуры
- •Вещественные типы Внутреннее представление
- •Операции
- •Стандартные функции
- •Символьный тип
- •Порядковые типы
- •Алфавит языка
- •6.2. Идентификаторы
- •6.3. Константы
- •6.4. Выражения
- •6.5. Операции
- •Составной оператор
- •Оператор if выполняется так:
- •Оператор if может иметь сокращенную форму. Её синтаксис:
- •10.1. Процедура
- •10.2. Функция
- •10.3. Формальные и фактические параметры
- •10.3.1. Параметры-значения
- •Динамическая память
- •1. Объявление указателей
- •2. Выделение и освобождение динамической памяти
- •3. Процедуры и функции для работы с динамической памятью
- •Работа с файлами на языке программирования pascal. Типы файлов, команды для работы с файлами, типизированные, нетипизированные и текстовые файлы
- •Работа с файлами в языке Pascal. Файлы прямого доступа.
- •16. Графические возможности языка. Модуль Graph.
- •6.1. Массив
- •6.2. Строка типа string
- •6.3. Asciiz-строка
- •6.4. Запись
- •6.5. Множество
- •6.6. Файл
- •3.1. Алгоритмы обработки массивов
- •3.2. Ввод-вывод элементов одномерного массива
- •3.3. Вычисление суммы элементов массива
- •3.4. Вычисление произведения элементов массива
- •3.5. Поиска максимального элемента в массиве и его номера
- •3.6. Сортировка элементов в массиве
- •3.6.1. Сортировка методом "пузырька"
- •3.6.2. Сортировка выбором
- •3.6.3. Сортировка вставкой
- •3.7. Удаление элемента из массива
- •3.8. Примеры алгоритмов обработки массивов
- •20.Алгоритмы обработки массивов: алгоритмы на двумерных массивах.
- •21.Динамические структуры данных: очередь.
- •Занесение элемента в очередь
- •Извлечение элемента из очереди
- •Занесение элемента в стек
- •Извлечение элемента из стека
- •Абстрактные типы данных
- •Объекты и классы
- •Базовые принципы ооп
- •Пакетирование (инкапсуляция)
- •Наследование
- •Полиморфизм
- •Описание объектного типа
- •Иерархия типов (наследование)
- •Полиморфизм и виртуальные методы
- •Статические методы
- •Виртуальные методы
6.2. Строка типа string
В Turbo Pascal тип-строка (стандартный тип string) - последовательность символов
произвольной длины (до 255 символов). Строку можно рассматривать как массив символов,
однако в связи с широким использованием строк и некоторыми особенностями по сравнению
со стандартными массивами они выделены в отдельный тип данных.
У типа-строки в квадратных скобках может быть указан его размер (от 1 до 255). Если
размер строки не указан, он считается равным 255, например:
var
Str: string[80];
MaxStr: string; {строка в 255 символов}
const
January: string[10] = 'Январь';
Для строк применимы операции конкатенации (+) и сравнения.
Операция конкатенации добавляет к первой строке вторую.
Пример. Объединение двух строк.
Str, Strl, Str2:string[80];
begin
Strl := 'Turbo ';
Str2 := 'Pascal';
Str := Strl + Str2; {в переменной Str — 'Turbo Pascal'}
end.
Сравнивать можно строки разной длины. Сравнение осуществляется слева направо в
соответствии с ASCII-кодами соответствующих символов. Считается, что отсутствующие
символы в более короткой строке имеют код меньше кода любого действительного символа.
Например, 'XS' больше, чем 'X'.
Пример.
Проверить, является ли введенная совокупность символов именем месяца на русском языке.
program EXAMPLE11;
const
Instance: array[l..12] of string!10]=
('ЯНВАРЬ', 'ФЕВРАЛЬ', 'МАРТ', 'АПРЕЛЬ', 'МАЙ', 'ИЮНЬ', 'ИЮЛЬ', 'АВГУСТ', 'СЕНТЯБРЬ',
'ОКТЯБРЬ', 'НОЯБРЬ', 'ДЕКАБРЬ');
Month: Boolean = False;
var
Str: string[10]; i: Integer;
begin
Writeln('Введите заглавные символы: ');
ReadLn(Str);
for i := 1 to 12 do
if Str = Instance[i] then
Month:=True;
if Month then
WriteLn('Введено имя месяца') else
WriteLn('Введено не имя месяца')
end.
Фактически строка N символов представляет собой массив из N+1 символа:
string[N] = аrrау[0..N] of Char.
Нулевой символ предназначен для указания используемого количества символов строки и
может изменяться от символа с кодом 0 до символа с кодом N. С ним можно работать как и
с остальными символами строки (записывать и читать его значение и т. д.), но не забывая
о его основном предназначении.
6.3. Asciiz-строка
В версии 7.0 для совместимости с другими языками программирования и средой Windows введен
еще один вид строк - строки, оканчивающиеся нулевым байтом - символом с кодом 0
(т. н. ASCIIZ-строки). В отличие от строк типа string у этих строк не накладывается
ограничение на их размер (фактически размер может быть до 65535 байтов). Этим строкам
дан стандартный тип PChar. Фактически этот тип является указателем на символ (об указателях
см. п. 7):
PChar = ^Char;
Однако применение расширенного синтаксиса (ключ {Х+} - см. п. 17.7.1) позволяет
использовать такую переменную как строку, эквивалентную масиву типа
pChar = array[0..К] of Char,
где К - количество символов в строке, не считая завершающего символа с кодом 0.
В отличие от типа string символ с индексом 0 здесь является первым символом строки,
а последний символ с индексом К - завершающим символом с кодом 0.
При работе с ASCIIZ-строками целесообразно задавать расширенный синтаксис; в этом случае
не возникают трудности при использовании различных стандартных подпрограмм, работающих
со строками.
Пример.
Использование строк типа PChar при расширенном синтаксисе.
program EXAMPLE12;
{$Х+} {не обязательно так как используется по умолчанию}
type
Т = array[0..7] of Char; {массив для строки из 7 символов}
var
Str: PChar;
const
А: Т = 'привет!'#0;
begin
Str := 'ПРИВЕТ!';
WriteLn(Str); {вывод строки: ПРИВЕТ!}
Str := @А; {допустимо также: Str:=A}
WriteLn(Str); {вывод строки: привет!}
WriteLn(Str[1]);{вывод символа 'р'}
ReadLn
end.
Если используется ключ {$Х-}, переменная типа PChar в этом случае рассматривается
как указатель на один единственный символ. В этом случае ни один из операторов
предыдущего примера, за исключением операторов Str:=@A; и ReadLn, недопустимы, а
оператор WriteLn(Str^), выполненный после оператора Str:=@A;, выдаст один символ "п".
Для работы с ASCIIZ-строками в версии 7.0 используются специальные стандартные модули
Strings (см. п. 16.2) и WinDos (см. п. 16.6).