- •Знакомство со средой PASCAL.
- •PAINT [STEP] (x,y) [цвет],[фон]
- •Структура программы на Паскале.
- •Сообщения об ошибках
- •Комментарии
- •Запись формул
- •Печать списка и текстов.
- •Стандартные модули.
- •Графические возможности.
- •Типы данных в Паскале.
- •Ввод данных (операторы READLN и READ).
- •Разветвление действий.
- •Логические переменные и операции.
- •Выбор действий.
- •Как двигать рисунок на экране?
- •Циклы по условию.
- •Случайные числа.
- •Блок-схемы.
- •Тип данных char.
- •Порядковые типы. Типы пользователя.
- •Ограниченные и перечислимые типы.
- •Структуры данных. Массивы.
- •Алгоритм сортировки выбором
- •Алгоритм пузырьковой сортировки
- •Тип данных String.
- •Многомерные массивы.
- •Процедуры без параметров.
- •Процедуры и функции с параметрами.
- •В заключение.
- •Приложения.
- •Рекомендованная литература.
Одесский колледж компьютерных технологий “СЕРВЕР”
MyLight: Lights;
Этот тип имеет элементы Red, Yellow и Green. Определена переменная MyLight типа Lights. С этого момента вы можете использовать переменную MyLight и присваивать ей значение любого из трёх цветов. Обратите внимание, переменные перечислимого типа нельзя вводить с клавиатуры и выводить на экран соответственно операторами read и write. К ним применимы функции Succ, Pred и Ord.
Обратите внимание: в ограниченных и перечислимых типах функция Succ неприменима к последнему значению, а функция Pred неприменима к первому значению.
Значения, указанные в описании перечислимого типа, не являются строковыми константами и в кавычки не заключаются. Одно и то же значение в разных типах в одной программе не допускается. Так, при трансляции показанной ниже программы, будет выдано сообщение: «Error: Duplicate identifier (Mon)».
Program Example_1; type
WeekDay = (Mon, Tue, Wed, Thu, Fri, Sat,Sun); WorkDay = (Mon, Tue, Wed, Thu, Fri);
BEGIN
END.
Константы стандартных типов не могут быть значениями перечислимого типа. Например, следующие описания некорректны:
type {константы числового типа}
Digitals = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9);{ символьные константы} DigSymbols = (‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’);
{ константы строкового типа);
WeekDay = (‘Mon’, ‘Tue’, ‘Wed’, ‘Thu’, ‘Fri’, ‘Sat’, ’Sun’); BEGIN
END.
Структуры данных. Массивы.
До сих пор мы рассматривали типы данных, которые используются для хранения одной величины: целой, вещественной, символьной или булевой. Теперь мы рассмотрим структуру, которая хранит целый набор данных.
Первая структура данных, с которой мы познакомимся, - массивы. Они позволяют увязать с единственным именем переменной целую со-
вокупность данных. Вы можете перемещать массив в памяти как единое целое, копировать его и так далее, причём всё это делается со ссылкой на одно имя переменной – имя массива.
Например, вам нужно ввести оценки 40 учеников одного класса за контрольную по математике, причём так, чтобы потом в любой момент каж-
39
Одесский колледж компьютерных технологий “СЕРВЕР”
дую из них можно будет посмотреть или что-то с ней сделать. До сих пор мы могли вводить большое количество чисел и обрабатывать их, но мы это делали, используя одну переменную и цикл. При этом, как только мы вводили новое значение, предыдущее стиралось и потом к нему обратиться было невозможно. Либо нужно было заводить 40 переменных (для 40 учеников) и программа становилась очень громоздкой и крайне неудобной. Именно в этом и заключается огромное преимущество массивов: все 40 введённых значений хранятся в памяти под одним именем и обратиться можно в любой момент к каждому из них, указав его порядковый номер.
Мы обозначим класс одной переменной, а к ученикам будем обращаться по номеру. Описать такой массив нужно следующим образом:
var
a: array [1..40] of integer;
или мы можем создать новый тип данных, а потом его использовать. Делается это так:
type
Otsenki=array [1..40] of integer; {описывается новый тип данных} var
a:Otsenki; {объявляется переменная, имеющая структуру такую же, как и наш новый тип данных Otsenki}
Переменная типа Otsenki может хранить 40 целых чисел, нумеруемых от1 до 40 (можно обозначить и от 5 до 44, от этого ничего не изменится). Теперь к оценке 5-го ученика можно обратиться по имени массива и номеру ученика в квадратных скобках: a[5]. Так как каждый элемент массива независим, то вводим и обрабатываем мы каждый элемент отдельно.
В общем случае, описание массива выглядит так:
<имя массива>:array [<первый номер>..<последний номер>] of <тип элементов массива>;
Номер элемента (индекс) можно указывать в виде выражения, содержащего переменные. Поэтому обрабатывать массив очень удобно с помощью цикла for. Например, ввести массив оценок можно так:
for i:=1 to 40 do read a[i];
Схематично массив можно представить таким образом: Направление изменения индекса
1 2 3 4 5 6 ... n
A
A[6] или
A[i] (если i=6)
40
Одесский колледж компьютерных технологий “СЕРВЕР”
Обратите внимание:
1.все элементы должны быть того типа, который объявлен в описании массива;
2.нельзя путать номер элемента с его значением: i - это номер, a[i] - значение i-го элемента. Например, запись a[2]:=4,a[17]:=5 означает, что 2-му ученику поставили “четвёрку”, а 17-му - “пятёрку”. При этом эти значе-
ния будут занесены в соответствующие ячейки массива:
3.
|
4 |
. . . |
5 |
1 |
2 |
3 … |
17 |
Найдём среднюю оценку учеников класса:
sum:=0; {обнуляем переменную для вычисления суммы} for i:=1 to 40 do
sum:=sum+a[i];
Srednee:=sum/40; {определяем среднее значение}
И всё!
Ввести массив можно и “в лоб” присваиванием: a[1]:=3; a[2]:=4; a[3]:=4; a[4]:=5; и т.д.
Для того, чтобы легко менять в тексте программы размер массива, можно воспользоваться заранее объявленной константой:
const n=10;
type massiv = array [1. .n] of real;
то есть массив из 10 вещественных чисел. Всюду в программе, где нужно будет пользоваться размером массива, вместо 10 будет писаться n. И чтобы изменить количество его элементов на 20, достаточно в объявлении константы 10 изменить на 20.
Поиск максимального (миним.) элемента массива.
Пусть в массиве записаны числа означающие курс доллара на каждый день прошедшего месяца в гривнах. Определить:
1)максимальную стоимость доллара в этом месяце;
2)день, когда стоимость доллара была максимальна
Таким образом, для определения максимального или минимального курса доллара нужно просмотреть все ячейки массива и найти максимальное ( минимальное) значения, а для нахождения дня – номер этого элемента массива. Вот блок-схема программы для нахождения максимального значения массива с именем А и состоящим из десяти элементов:
41
Одесский колледж компьютерных технологий “СЕРВЕР”
Ввод значений массива
MAX=A(1) - сначала считаем , что 1-ый элемент массива максимальный
Для I от 2 до 10
НЕТ |
ДА |
|
Если А(I)>MAX |
|
MAX=A(I) |
Вывод максимального значения
Словами этот алгоритм можно описать следующим образом:
Сначала полагаем, что первый элемент массива является наибольшим (оператор МАХ=А(1)), далее рассматриваем все элементы массива, начиная со второго (первый уже обработан) и если очередной элемент больше значения переменной МАХ, то ей присваиваем значение этого элемента.
Можно привести такой пример: ученик ищет в куче карточек с числами ту карточку, на которой написано наибольшее число. Его действия в соответствии с описанным выше алгоритмом можно изложить так: ученик берет из кучи первую карточку и держит у себя. Берет вторую карточку, и если на ней написано большее число чем на той карточке что уже находится у него, то ту карточку, что находится у него откладывает в сторону, а у себя оставляет только что взятую карточку.
Часто бывает гораздо удобнее работать с массивом, элементы которого упорядочены. Существует несколько способов сортировки, то есть упорядочивание массива. Причем массив можно отсортировать как по возрастанию, так и по убыванию.
Предположим, нужно упорядочить массив по возрастанию. Рассмотрим два способа такой сортировки.
Алгоритм сортировки выбором
Очевидно, что первое место в массиве должен занять минимальный
42