
- •Алфавит и лексемы
- •Константы
- •Имена, ключевые слова и знаки операций
- •Ввод с клавиатуры
- •Вывод на экран
- •Условный оператор if
- •Оператор варианта case
- •Цикл с предусловием while
- •Цикл с постусловием repeat
- •Цикл с параметром for
- •Рекомендации по использованию циклов
- •Оператор перехода goto
- •Перечисляемый тип данных
- •Интервальный тип данных
- •Двумерные массивы
- •Операции
- •Процедуры и функции для работы со строками
- •Множества
- •Операции над множествами
- •Подпрограммы для работы со всеми типами файлов Процедуры
- •Функции
- •Текстовые файлы
- •Бестиповые файлы
- •Компонентные файлы
- •Прямой доступ
- •Процедуры
- •Функции
- •Глобальные и локальные переменные
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Нетипизированные параметры
- •Открытые массивы и строки
- •Рекурсивные подпрограммы
- •Описание модулей
- •Использование модулей
- •Модуль System
- •Модуль Crt
- •Работа с экраном
- •Работа с клавиатурой
- •Модули Dos и WinDos
- •Модуль Graph
- •Структура графической программы
- •Модуль Strings
Оператор перехода goto
Этот оператор имеет простой синтаксис: в точке программы, из которой требуется организовать переход, после слова goto через пробел записывается имя метки, например, goto 1 или goto error. При программировании на Паскале необходимость в применении оператора перехода возникает в очень ограниченном количестве ситуаций, в большинстве же случаев используются операторы циклов вместе с процедурами передачи управления.
Использование оператора безусловного перехода оправдано, как правило, в двух случаях:
принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
переход из нескольких мест программы в одно (например, если перед выходом из программы необходимо всегда выполнять какие-либо действия).
Во всех остальных случаях следует привести алгоритм к структурному виду, то есть преобразовать его так, чтобы он мог быть записан с помощью базовых конструкций.
Лекция 8
Простые типы данных
Информация, которую требуется обрабатывать в программе, имеет различную структуру. Для ее адекватного представления используются типы данных, которые программист определяет сам в разделе описания типов type. При описании типу дается произвольное имя. Его можно использовать для описания программных объектов так же, как и стандартные имена типов:
type имя_типа = описание_типа
...
var имя_переменной : имя_типа
Применяется и задание типа непосредственно при описании переменных. Его удобно применять, если тип используется только в одном месте программы:
var имя_переменной : описание_типа
Перечисляемый тип данных
При написании программ часто возникает потребность определить несколько связанных между собой именованных констант, имеющих различные значения. Для этого удобно воспользоваться перечисляемым типом данных, все возможные значения которого задаются списком констант:
type имя_типа = (список имен констант)
Константы в списке перечисляются через запятую, например:
type Menu = (READ, WRITE, EDIT, QUIT)
Переменным перечисляемого типа можно присвоить либо значение одной из перечисленных констант, либо другой переменной того же типа:
var m, n : Menu;
...
m := READ; n := m;
Перечисляемый тип относится к порядковым типам данных. Использовать перечисляемый тип в операциях ввода-вывода нельзя. Имена констант в пределах области их описания (программы или подпрограммы) должны быть уникальными.
Интервальный тип данных
С помощью интервального типа задается диапазон значений какого-либо типа:
type имя_типа = константа_1 .. константа_2
Константы должны быть одного и того же порядкового типа. Тип, на котором строится интервал, называется базовым. Константа_1 должна быть меньше или равна константе_2. Примеры описания интервальных типов:
type Hour = 0 .. 23;
Range = -100 .. 100;
Letters = 'a' .. 'z';
Actions = READ .. EDIT;
Как и для других типов, определяемых программистом, интервальный тип можно задать прямо при описании переменной, например:
var r : -100 .. 100;
С переменной интервального типа можно делать все, что допустимо для ее базового типа. Интервальный тип используется в программах как самостоятельно, так и в составе определения составного типа - массива.
Лекция 9
Массивы
При использовании простых переменных каждой области памяти, предназначенной для хранения какого-либо значения, соответствует свое имя. Если с группой величин одинакового типа требуется выполнять однообразные действия, им дают одно имя, а различают по порядковому номеру (индексу). Это позволяет компактно записывать множество операций с помощью циклов.
Конечная именованная последовательность однотипных величин называется массивом. Чтобы описать массив, надо задать, какого типа его элементы и каким образом они пронумерованы:
type имя_типа = array [тип_индекса] of тип_элемента
Здесь array и of - ключевые слова, тип индекса задается в квадратных скобках. Примеры:
type mas = array [1 .. 10] of real; {1}
Color = array [byte] of mas; {2}
В первом операторе описан тип массива из вещественных элементов, которые нумеруются от 1 до 10. Во втором операторе элементами массива являются массивы типа mas, а нумеруются они в пределах, допустимых для типа byte, то есть от 0 до 255.
Тип элементов массива может быть любым, кроме файлового, тип индексов - интервальным, перечисляемым или byte.
Размещение массива в памяти происходит до выполнения программы, поэтому при описании индекса можно применять только константы или константные выражения. Обычно при описании массива верхняя граница его индекса задается в виде именованной константы, например:
const n = 6;
type intmas = array [1 .. n] of integer;
После задания типа массива переменные этого типа описываются обычным образом, например:
var a, b : intmas;
Можно описать тип прямо при определении переменных:
var a, b : array [1 .. n] of integer;
С массивами в целом можно выполнять только присваивание. При этом массивы должны быть одного типа, например:
b := a;
Все остальные действия выполняются с отдельными элементами массива. Для обращения к элементу массива после имени массива указывается номер элемента в квадратных скобках:
a[4] b[i]
С элементом массива можно делать все, что допустимо для переменных того же типа.
Инициализация массивов. Можно присвоить значения элементам массива до начала выполнения программы. Это делается в разделе описания констант:
const a : intmas = (0, 5, -7, 100, 15, 1);
Количество констант должно точно соответствовать числу элементов массива.
Пример #1. |
|
|
Программа определяет максимальный элемент массива из 20 вещественных элементов. |
Program max_elem; const n = 20; var a : array [1 .. n] of real; i : integer; max : real; begin writeln('Введите ', n, ' элементов массива'); for i := 1 to n do read(a[i]); max := a[1]; for i := 2 to n do if a[i] > max then max := a[i]; writeln('Максимальный элемент: ', max:6:2) end.
|
Пример #2. |
|
|
Упорядочивание по возрастанию элементов массива из 20 целых величин. |
Для сортировки будем использовать метод выбора. Алгоритм состоит в том, что сначала выбирается наименьший элемент массива и меняется местами с первым элементом, затем просматриваются элементы, начиная со второго, и наименьший из них меняется местами со вторым элементом, и так далее n - 1 раз. На последнем проходе цикла при необходимости меняются местами предпоследний и последний элементы массива. Program sort; { Сортировка выбором } const n = 20; var a : array [1 .. n] of integer; i, j, nmin, buf : integer; begin writeln('Введите ', n, ' элементов массива'); for i := 1 to n do read(a[i]); for i := 1 to n - 1 do begin { просмотр массива n-1 раз } nmin := i; for j := i + 1 to n do { поиск минимума } if a[j] < a[nmin] then nmin := j; buf := a[i]; { перестановка } a[i]:= a[nmin]; { двух } a[nmin]:= buf; { элементов массива } end; writeln('Упорядоченный массив:'); for i := 1 to n do write(a[i]:5) end.
|