- •Программирование на языке высокого уровня
- •1 Часть Учебное пособие Москва 2007
- •Оглавление
- •1. Основы алгоритмизации
- •1.1. Алгоритмизация и требования к алгоритму
- •1.2. Блок-схемы алгоритмов
- •1.2.1. Способы записи алгоритма
- •1.2.2. Блок-схемы
- •1.2.3. Следование, ветвление, цикл
- •1.3. Этапы разработки программы
- •1.3.1. Язык программирования. Программа
- •1.3.2. Этапы разработки
- •1.4. Ошибки
- •1.4.1. Компилятор. Синтаксис и семантика
- •1.4.2. Типы ошибок
- •2. Алфавит языка Турбо Паскаль. Программа
- •2.1. Идентификаторы
- •2.2. Разделители
- •2.3. Специальные символы
- •2.4. Структура Pascal-программы
- •Пример простейшей программы на языке Pascal
- •3. Типы данных
- •3.1. Структура типов данных
- •3.2. Простые типы
- •3.2.1. Порядковые типы
- •3.2.1.1 Целые типы.
- •3.2.1.1.1. Встроенные процедуры и функции, применимые к целым типам
- •3.2.1.2. Логический тип.
- •3.2.1.3. Символьный тип.
- •3.2.1.4. Перечисляемый тип.
- •3.2.2. Вещественные типы
- •3.3. Константы и переменные
- •3.4. Преобразование типов
- •4. Операторы
- •4.1. Ввод данных
- •4.2. Вывод данных
- •4.3. Составной оператор
- •4.4. Условный оператор
- •4.5. Операторы циклов
- •4.5.1. Оператор for
- •4.5.2. Оператор while
- •4.5.3. Оператор repeat
- •4.5.4. Стандартные функции для циклов
- •4.6. Оператор выбора case
- •5. Массивы
- •5.1 Определение массива
- •5.2. Ввод/вывод одномерного массива (вектора).
- •5.3 Типизированные константы – массивы
- •5.4. Сортировка массивов (ранжирование)
- •6. Процедуры и функции
- •6.1. Подпрограммы
- •6.2. Параметры. Глобальные и локальные описания
- •6.3. Процедуры
- •6.4. Функции
- •6.5. Процедура exit
- •6.6. Рекурсия
- •6.7. Директивы подпрограмм
- •6.8. Открытые массивы
- •7. Записи
- •7.1.Определение и правила записи
- •7.2. Оператор присоединения
- •7.3. Записи с вариантами (экономия пространства)
- •8. Множества
- •8.1. Понятие множества
- •8.2. Конструктор множества
- •8.3. Операции над множествами
- •8.4. Примеры программ, использующих множества.
- •Литература
6.7. Директивы подпрограмм
Директивы дают дополнительную информацию, в частности, о размещении подпрограмм.
Директива FORWARD
Если одна подпрограмма использует другую, а та в свою очередь первую, то возникает проблема размещения таких подпрограмм в программе. Текст программы транслируется последовательно сверху вниз. При этом const, type, var должны быть определены до того, как начнутся их упоминания в операторах. В противном случае компилятор объявит их неизвестными. Проблема решается следующим образом:
Procedure <имя процедуры> (параметры); forward;
Function <имя функции> (параметры) : тип значения; forward;
Procedure <имя процедуры> ; {только имя}
{Тело процедуры}
Function <имя функции>; {только имя}
{Тело функции}
6.8. Открытые массивы
В Т-П имеется возможность передавать в подпрограмму массивы, размер которых не фиксируется в объявлении подпрограммы.
Function sum1 (var a:array of byte):byte;
Это единственное исключение из правила, согласно которому типы формальных параметров в заголовке подпрограммы могут задаваться только посредством идентификаторов.
Подпрограмма, содержащая открытый массив в списке своих формальных параметров, может быть вызвана с массивом любого размера (типы фактических параметров должны совпадать).
В качестве открытых допускаются только одномерные массивы.
Внутри подпрограммы реальные границы переданного массива могут быть определены с помощью функции LOW и HIGH. Результат обращения к функции LOW всегда будет давать 0, а результат функции HIGH – верхнее возможное значение индекса при обращении к массиву (относительно 0), независимо от значений границ массива, передаваемого в подпрограмму.
Интерпретация граничных значений открытых массивов и индексов открытых массивов в подпрограмму :
Program testparams;
Var
A1:array[1..10] of byte;
A2:array[0..5] of byte;
A3:array[-10..10] of byte;
Procedure P(var a:array of byte);
Var
I:word;
Begin
For i:=low(A) to high(A) do
Write (i:3);
Writeln
End;
Begin
p(A1) ; p(A2); p(A3);
End.
Результат 0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
7. Записи
7.1.Определение и правила записи
В информационно-поисковых системах (адресное бюро, телефонная справочная служба и т.д.) приходится хранить и обрабатывать большие объемы данных. При обработке большого количества значений используются массивы. Но все элементы массива используют один и тоже тип данных. Реальные данные об объекте содержат, как правило, величины разных типов. Например, товар на складе описывается следующими величинами: наименование, количество, цена, наличие сертификата качества и т.д. для комбинации объектов разных типов в T-P применяется комбинированный тип данных – запись.
Запись – структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличии от массива, поля записи могут быть различного типа.
Структура объявления типа записи:
<имя типа> = record
<имя поля 1>:<тип поля1>;
<имя поля 2>:<тип поля2>;
……..
<имя поля N>:<тип поляN>
End;
<имя типа>, <имя поля> - правильные идентификаторы;
Record, end - ключевые слова
Примеры
Type
Complex = record
Re: real;
Im: real;
End;
-
Birthday = record
Year : 1900..2007;
Month : 1..12;
Day : 1..31;
End;
-
Person = record
Name : string [20];
Sex : (wom, men);
Bd : birthday; (Запись, в состав которой входит запись)
{Age : integer;}
Married : Boolean
End;
Можно в программе задать типизированную const типа записи, определив значение каждого из полей.
Ivanov.person = (name:’Иванов’; sex : men; age : 40; married : true);
К каждому компоненту записи можно получить доступ, указав имя переменной типа record, затем (.) и имя поля (составное имя).
Пример.
Var
A,b : person;
Group : array [1..20] of person; (массив из 20 записей)
-------------------------------------------------------------------------
a.name := ‘Петрова’;
a.sex := wom;
a.age := 25;
a.married := false;
group.[4].name :=’Васильев’;