Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Лекции по Turbo Pascal [12].pdf
Скачиваний:
108
Добавлен:
02.05.2014
Размер:
1.06 Mб
Скачать

Одесский колледж компьютерных технологий “СЕРВЕР”

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