- •Ю.П. Чернов, о.П. Шафеева программирование для начинающих
- •1. Среда программирования turbo pascal 7.0
- •1.1. Структура меню среды
- •1.2. Правила оформления программ
- •1.3. Команды редактора тп
- •Команды удаления и вставки
- •1.4. Компиляция и исправление синтаксических ошибок
- •2. Элементы языка pascal
- •2.1. Алфавит языка
- •2.2. Константы. Идентификаторы
- •2.3. Операторы
- •2.3.1. Оператор присваивания
- •2.3.2. Оператор безусловного перехода
- •Стандартные функции
- •2.3.3. Условный оператор if
- •2.3.4. Опеpатоp варианта case
- •2.3.5. Составной и пустой операторы
- •2.3.6. Операторы цикла
- •2.4. Процедуры прерываний
- •2.5. Типизированные константы
- •2.6. Структура программы
- •2.7. Подпрограммы
- •2.7.1. Определение процедур и функций
- •2.7.2. Вложенные подпрограммы
- •2.7.3. Вызов подпрограмм
- •2.7.4. Процедуры
- •2.7.5. Функции
- •2.7.6. Передача в подпрограмму параметров-массивов и параметров-строк
- •2.7.7. Рекурсия
- •2.8. Типы в Турбо Паскале
- •2.8.1. Целые типы
- •Классификация целых типов
- •Встроенные процедуры и функции для целых типов
- •2.8.2. Логический тип
- •2.8.3. Символьный тип
- •Служебные символы
- •2.8.4. Строковый тип
- •Встроенные функции и процедуры для обработки строк
- •Процедуры преобразования
- •2.8.5. Перечислимый тип
- •2.8.6. Ограниченный тип (диапазон)
- •2.8.7. Вещественные типы
- •Вещественные типы
- •Встроенные функции
- •2.8.8. Структурированные типы данных. Массивы
- •2.8.9. Множества
- •2.8.10. Записи
- •2.9. Изменение типа выражения
- •2.10. Процедурные типы
- •2.11. Файлы
- •Общие процедуры и функции для работы с файлами
- •2.11.1. Текстовые файлы
- •2.11.2. Типизированные файлы
- •2.11.3. Нетипизированные файлы
- •2.12. Указатели и динамическая память
- •2.13. Модули
- •2.14. Библиотека Турбо Паскаля
- •2.14.1. Модуль crt
- •2.14.2. Модуль graph
- •Var driver, Mode: integer переменные драйвера и режима.
- •Управление графическим режимом
- •Управление экраном, окном, страницей
- •Управление цветом и палитрой
- •Работа с точками
- •Работа с линиями
- •Построение фигур из линий
- •Построение криволинейных фигур
- •Работа с текстом
- •Обмен с памятью
- •2.15. Динамические структуры данных
- •2.15.1. Связанные динамические данные. Списки
- •Чтобы сослаться на двунаправленный кольцевой список как на единый программный объект, используется указатель, значением которого является ссылка на заглавное звено списка.
- •2.15.2 Очередь
- •2.15.3. Стек
- •3. Практическое программирование Этапы подготовки и решения задач на компьютере
- •Порядок выполнения лабораторных работ
- •Лабораторная работа 1 Основы программирования в среде Турбо Паскаля.
- •Приоритет операций в выражении
- •Задание 1 (программа 1_1)
- •Лабораторная работа 2 Программирование разветвленных алгоритмов. Операторы передачи управления
- •Лабораторная работа 3 Программирование циклических алгоритмов с заданным числом повторений
- •Лабораторная работа 4 Программирование циклических алгоритмов с предусловием
- •Лабораторная работа 5 Программирование циклических алгоритмов с постусловием
- •Модифицировать программу 3_2 для вычисления функций f1(X) и f2 (X) с применением оператора цикла с постусловием. Выполнить ее и сравнить результаты с полученными ранее.
- •Лабораторная работа 6 Программирование алгоритмов обработки одномерных массивов
- •Задание 1
- •Лабораторная работа 7
- •Лабораторная работа 8 Программирование с использованием функций
- •Лабораторная работа 9 Программирование с использованием процедур
- •Лабораторная работа 10 Обработка символьных и строковых данных
- •Лабораторная работа 11 Файлы
- •Лабораторная работа 12 Записи
- •Лабораторная работа 13 Решение нелинейных уравнений
- •Задание (программа_13)
- •Лабораторная работа 14 Вычисление приближенного значения определенного интеграла
- •Лабораторная работа 15 Модульное программирование
- •Лабораторная работа 16 Графика
- •Библиографический список
- •Обозначения графические в схемах алгоритмов (гост 19.701-90)
- •Зарезервированные слова Turbo Pascal 7.0
- •Приложение в
- •Кодировка символов в соответствии с кодами ascii
- •Приложение г
- •Альтернативная кодировка госТа для кодов 128...255
- •Клавиши с кодами из двух частей
- •Содержание
2.8.10. Записи
Запись описание комбинированного типа, состоящее из нескольких полей, каждое из которых имеет свой тип.
Структура записи аналогична таблице.
Записи состоят из фиксированного числа компонентов, называемых полями записи. В отличие от массива компоненты (поля) записи могут быть различного типа. Структура объявления типа "запись" имеет вид
TYPE
<ИмяТипа>=RECORD
<поле1>:<тип поля1>;
<поле2>:<тип поля2>;
...
<полеN>:<тип поляN>
end;
Если тип нескольких полей совпадает, то имена полей можно перечислить через запятую. <ИмяТипа> и поля являются правильными идентификаторами.
Например:
TYPE
DENROGD=RECORD
name:string; {фамилия или имя }
den,mes:byte; {день, месяц}
god:word {год}
end;
Объявление переменных производится, как и для других типов, в разделе VAR:
VAR a,b:DENROGD;
Доступ к каждой компоненте записи производится указанием составного имени: имени переменной и затем через точку имени поля, например:
a.name := 'MARINA';
a.god := 1981;
a.den: = 23;
a.mes := 3;
Таким образом, в типе "запись" определена операция присваивания. Кроме того, как и в массиве, все значения переменных типа "запись" можно присваивать другим переменным того же типа: B := A; .
Над полями можно выполнять действия, разрешенные для базового типа:
b.god:=а.god+1; {на год старше}.
В качестве переменной может быть объявлен массив записей:
VAR s: array[1..20] of STUDENT;
Пример. Разработать программу формирования списка студентов с указанием дат рождения. Распечатать список в алфавитном порядке.
Program zapis;
Type {определение нового типа}
student = record {запись}
name:string[15];
den, mes:byte;
god:word
end;
Var
Z: ARRAY [1..20] OF student;
k,m,i,n: byte;
r:string[15]; {вспомогательная строка для перестановки}
BEGIN
writeln('ВВЕДИТЕ КОЛИЧЕСТВО СТУДЕНТОВ');
READln(n);
for i:=1 to n do
begin
writeLN('ВВЕДИТЕ имя ',i,' студента с прописной буквы');
readLN (z[i].name);
WRITELN('ВВЕДИТЕ день рождения');
readLN(z[i].den);
WRITELN('ВВЕДИТЕ месяц рождения');
readLN(z[i].mes);
WRITELN('ВВЕДИТЕ год рождения');
readLN(z[i].god);
end;
for i:=n downto 2 do {********* Упорядочение списка *********]
begin {поиск "наибольшего" значения поля NAME}
m:=1;
for k:=2 to i do if z[k].name>z[m].name then m:=k;
r:=z[i].name; {перестановка записей}
z[i].name:=z[m].name;
z[m].name:=r
end; {**************************************}
writeln(' Упорядоченный список ');
for i:=1 to n do
begin
WRITE(z[i].name);
WRITELN(' Дата рождения:',z[i].den,'.',z[i].mes,'.',z[i].god);
end
END.
Для упрощения доступа к полям записи может использоваться оператор присоединения. Структура оператора имеет вид
WITH <переменнаяТипаЗапись> DO <оператор>;
где WITH, DO ключевые слова (с, делать).
Пример: WITH a DO
begin
name:='MARINA';
god:=1981;
date:=23;
mes:=3
end;
Поле записи может иметь практически любой тип (массив, другая запись, множество). Доступ к вложенным элементам сложных структур, например, к записи в записи, выполняется перечислением ряда полей через точку или оператор присоединения.
Пример. Определим вложенную запись (запись в записи)
TYPE
STUDENT=RECORD
name:string;
DenRogden: RECORD
den,mes:byte;
god:word
end;
end;
VAR z: STUDENT;
Имя DenRogden в свою очередь тоже является записью, тогда обращение к вложенным полям выполняется в виде
z.name := 'LIZA';
z.DenRogden.god := 1984;
Используя оператор присоединения, к этим же полям можно получить доступ
другими способами:
WITH z DO
begin
name:='LIZA';
with DenRogden DO
god:=1984;
end;
или
WITH z DO name:='LIZA';
WITH Z DO with DenRogden DO god:=1984;
К полю GOD можно обратиться и следующим оператором
WITH z.DenRogden DO god:=1984;
Запись может иметь вариантную часть. Это означает, что можно задать в пределах одного типа несколько различных структур. Вариантная часть задается после перечисления фиксированных полей предложением CASE .. OF (не оператор CASE). Вариантная часть состоит из нескольких вариантов, каждый из которых определяется константой выбора, за которой следует двоеточие и список полей с указанием типа:
TYPE
<имя типа> = RECORD
<поле1>:тип_поля1;
<поле2>:тип_поля2;
CASE <переменная_переключатель> OF
<константа_выбора1>: (<поле_c11>:<тип_поля_с11>;
<поле_с12>:<тип_поля_с12>;...)
<константа_выбора2>: (<поле с21>:<тип поля с21>;
<поле_с22>:<тип_поля_с22>;...)
. . .
<константа_выбораk>: (<поле_сk1>:<тип_поля ck1>;
<поле_ck2>:<тип поля_ck2>;...)
END;
Переменную-переключатель называют также тагом (тэгом, тегом) ярлыком, признаком, дискриминантом.
В любой записи может быть только одна вариантная часть.
Особенностью вариантной части является то обстоятельство, что все заданные в ней варианты как бы "накладываются" друг на друга, т.е. каждому из них выделяется одна и та же область памяти компьютера.
Пример: Пусть необходимо собрать сведения о студентах группы: фамилия, дата рождения, номер комнаты (если живет в общежитии) или почтовый индекс и адрес (если нет). Тогда тип задается следующим образом.
TYPE MESTO=(ob,dom);
VAR N: mesto;
TYPE
STUD=RECORD name := string;
DENROGD: RECORD
data: read;
god: word
END;
CASE N OF
dom: (indeks:word;adres:string)
ob: (komn:word)
END;
Var W: STUD;
В основном блоке программы при обращении к компонентам части CASE необходимо предусмотреть разветвление (операторами IF либо CASE). Переключателю N присваивается соответствующее значение. В зависимости от значения переключателя переменная W, помимо полей name и dateRogd содержит поля, которые соответствуют той константе выбора, с которой совпадает значение N. Далее выполняется операция с компонентой W.dom и W.ob.
Используя тип "запись", можно составить базы данных для разных назначений, а затем обрабатывать их с помощью программы [1-3].
Особенности комбинированного типа:
1. Любая запись может иметь только одну вариантную часть, она распола- гается последней в записи.
2. Среди идентификаторов полей не должно быть одинаковых.
3. Переменная-переключатель должна определяться некоторым стандартным или предварительно объявленным типом.
4. Перед засылкой информации в запись программист должен присвоить переключателю определенное значение.
5. Турбо Паскаль допускает использование вложенных вариантных частей.