Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

I:1..6; loto: num;

begin

randomize;

for i:=1 to 6 do

begin

loto :=random(49)+1;

writeln('Nr.',i:2,loto:6)

end

end.

В программе объявлен новый тип данных num. Возможные значения переменной типа num ограничены и находятся в интервале от 1 до 49. Далее пeрeменная loto объявляется как переменная типа num. Переменная i также является переменной диапазонного типа. Как известно, переменные диапазонного типа могут задаваться в разделе описания переменных. Randomize - встроенная математическая функция инициации датчика псевдослучайных чисел.

Эта программа имеет тот недостаток, что не все шесть выпавших в лото чисел могут оказаться различными. В этой маленькой программе еще не совсем ясна необходимость в переменных ограниченного типа, хотя в больших программах такая необходимость есть. Когда мы имеем дело с программой в две дюжины строк, очень неудобно помнить, какие именно значения могут иметь отдельные переменные. Например, сообщение, что i имеет тип integer, мало что нам говорит, в то время как переменная, имеющая диапазонный тип 1 .. 6, дает намного больше информации. Это не всегда удобно для пользователя, но зато делает программиста более уверенным в программе. Если только из-за ошибки в программе значение вычисленной переменной выйдет за допустимый интервал, то последует сообщение об ошибке. Таким способом можно получать дополнительный контроль. Переменные интервального типа в языке Паскаль используются, в частности, тогда, когда заранее известно, что значение переменной может находиться только в определенном интервале.

Пример 5.3 Рассчитать продолжительность рабочей недели в часах.

program rabweek;

type

day = (mo,tu,we,th,fr,sa,su);

workday = mo..fr;

var

den: workday;

time: integer;

begin

time := 0;

for den := mo to fr do time := time + 8;

write (time)

end.

Тип day объявляется путем перечисления всех значений (здесь перечислены сокращенные английские названия всех дней недели). Новый тип workday является типом-диапазоном и все возможные значения переменной типа workday ограничены и находятся в интервале от mо до fr. Из предыдущей (базовой) строки ЭВМ может определить, что здесь возможными значениями будут mо, tu, we, th, fr. Переменная den имеет тип workday. Если этой переменной захотят присвоить значение, отличающееся от перечисленных в списке от то до fr включительно, например su, то в этом случае появится сообщение об ошибке. Целая переменная time с каждым рабочим днем недели увеличивается на 8. Таким образом, мы найдем продолжительность рабочей недели, равную 40 часам.

5.2 Массивы

В Турбо Паскале четыре типа структурированных данных: массивы, записи, множества и файлы. Переменная или константа структурированного типа всегда имеет несколько компонентов. Каждый компонент, в свою очередь, может принадлежать структурированному типу, что позволяет говорить о возможной вложенности типов.

Массивовый тип - это одномерная или многомерная совокупность фиксированного числа однотипных элементов.

Массивы (регулярные типы данных) представляют собой упорядоченную последовательность переменных одного типа. Элементы массива являются его компонентами. Все компоненты относятся к одному типу, его называют типом компонент. Каждая компонента может быть явно обозначена с помощью имени переменной массива, за которым в квадратных скобках следует индекс. Индекс - это величина, характеризующая положение элемента относительно начала массива. Индексом может быть произвольное выражение порядкового типа, заключенное в квадратные скобки. Время, требуемое для доступа к любой компоненте, не зависит от значения индекса. Поэтому о массивах можно говорить как об объектах, структура которых допускает прямой доступ.

Переменные b[1], b[2], ..., b[40] являются элементами массива b; с[1], с[2], ..., с[40] - элементы массива с. b[12] - двенадцатый элемент массива b, c[39] - тридцать девятый элемент массива с. Если массив состоит только из 40 элементов, то нельзя использовать переменную b[41], так как такой переменной нет в массиве. В качестве индекса может использоваться выражение, например:

a[i + 2 ], b [2 * ( i + 1) + 1].

Каждому массиву, используемому в программе, выделяется место в памяти. Но в отличие от простых переменных массиву отводится не одна ячейка, а последовательность расположенных друг за другом ячеек, в каждую из которых записывается значение соответствующего элемента.

Массивы, как и простые переменные, подлежат описанию в разделе переменных. Например,

var

а : array [1 .. 40] of real;

b,c : array [1 .. n] of real;

d : array [5 .. 20] of integer;

p : real;

В приведенном примере описаны четыре массива: а, b, с, d и простая переменная р. Ключевое слово array означает, что описываемый объект является массивом. В описании массива содержатся следующие сведения:

  1. сведения о типе элементов массива (элементы массивов а, b, с - вещественные, массива d - целые);

  2. диапазон изменения индексов, определяемый граничной парой, например: 1.. 40, 1 .. n, 5 .. 20. Нижняя граница отделяется от верхней двумя точками. Нижняя граница показывает наименьшее возможное значение индекса, верхняя - наибольшее. Очевидно, что нижняя граница не может превосходить верхнюю.

В описании массивов df и cf

df : array [1 .. 10] of real;

cf : array [1 .. 10] of real

указаны один и тот же тип элементов и одинаковая граничная пара, поэтому такое описание может быть заменено более коротким:

df, cf : array [1 .. 10] of real.

ели несколько массивов имеют один и тот же тип и одинаковые гранитные пары, то их описания можно объединить, разделив имена массивов запятыми.

Каждому из массивов df и cf выделяется по 10 последовательно расположенных друг за другом ячеек памяти. О том, какое количество ячеек памяти нужно выделить массиву, машина "узнает" из описания.

Пусть массив K описан следующим образом:

vаr К : array [n .. m] of integer.

Какое количество ячеек должно быть выделено для хранения элементов массива К? Это зависит от значений n и m. Выделение памяти для переменных и массивов производится раньше, чем выполняется какой-либо оператор программы, n и m должны получить значение прежде, чем начнется процесс выделения памяти для переменных. Определить значения n и m можно в разделе констант, который помещается в программе между разделом меток и переменных.

Пример 5.4 Программа чтения элементов массива и вывода элементов этого массива, помноженных на число .

program pri;

const n = 1; m = 10;

var