ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6800
Скачиваний: 51
221
writeln;
if a<c then m:=c else m:=a;
if b<d then n:=b else n:=d;
if m<n then l:=n-m else 1:=0;
writeln("длина общей части отрезков=',1:6:2)
end.
Оператор варианта
имеет следующую форму:
case <выражение> of
<список констант 1> : <оператор 1>;
<список констант 2> : <оператор 2>;
…………………………
<список констант N> : <оператор N>
end.
Выражение, стоящее между служебными словами case и of, должно иметь значение орди-
нального типа. Любой список констант может состоять из одной константы.
Оператор варианта вычисляет значение выражения, записанного после case. Если его зна-
чение совпадает с одной из констант в некотором списке, то выполняется оператор, стоящий после
этого списка. Если значение выражения не совпало ни с одной константой во всех вариантах, то
оператор варианта ничего не делает.
В
качестве примера приведем программу, которая в зависимости от номера месяца выдает
сообщение о времени года.
Программа 4
program seasons;
var k:integers
begin
writeln('введите номер месяца') ;
readin(k);
case k of
1,2,12:writeln('зима');
3, 4,5:writeln('весна') ;
6, 7,8:writeln('лето');
9,10,11:writeln('осень')
end
end.
Для реализации циклов в Паскале имеются три оператора Если число повторений известно
заранее, то удобно воспользоваться оператором цикла с параметром. В других случаях следует ис-
пользовать операторы цикла с предусловием (цикл «пока» ) или с постусловием (цикл «до»).
Цикл с предусловием
является наиболее мощным в Паскале. Другие операторы цикла
можно выразить через него. Его форма такова:
while - <логическое выражение> do <оператор>
Действие: вычисляется значение логического выражения. Если оно равно true, то выполня-
ется оператор, после чего снова вычисляется значение логического выражения, в противном слу-
чае действие заканчивается.
В качестве примера использования такого цикла решим следующую задачу. На склад при-
возят однородный груз на машинах различной грузоподъемности. На компьютер, управляющий
работой склада, поступает информация о весе груза очередной машины. Составить программу
подсчета количества машин,
прибывших
на склад до его заполнения, если вместимость склада не
более 100 тонн.
Введем обозначения: sum - сумма веса груза, хранящегося в этот момент на складе; num -
число разгруженных машин; w - масса груза очередной машины. Вначале величины sum и num
равны нулю. Цикл разгрузки продолжается, пока выполняется неравенство sum < 100.
222
Программа 5
program store;
var sum,w:real;
num:integer;
begin
num:=0;sum:=0;
while sum<100
do
begin
writeln('введите вес груза машины');
readln(w);
sum:=sum+w;
if sum<=100 then num:=num+l
else writeln('груз уже не поместится')
end;
writeln('число разгруженных машин =',num;3)
end.
Оператор
цикла с постусловием
имеет форму:
repeat <последовательность операторов>
until <логическое выражение>
Действие: выполняется последовательность операторов. Далее вычисляется значение логи-
ческого выражения. Если оно равно true, то действие заканчивается, в противном случае снова вы-
полняется последовательность операторов и т.д.
Решим предыдущую задачу, применяя цикл с постусловием. Цикл разгрузки заканчивается,
если выполняется условие: sum > 100.
Программа 6
program store2;
var sum,w:real; man:integer;
begin
num: =0; sum: =0;
repeat
writeln('введите вес груза машины');
readln(w); sum:=sum+w;
if sum<=100 then num:=num+l .
else writeln('груз ухе не поместится')
until sum>=100;
writeln('количество разгруженных машин =',num:3)
end.
Оператор
цикла с
параметром
предусматривает повторное выполнение некоторого опера-
тора с одновременным изменением по правилу арифметической прогрессии значения управляю-
щей переменной (параметра) этого цикла. Оператор цикла с параметром имеет две формы.
Форма
1:
for <параметр>:= <выражение
1> to <выражение 2> do <оператор>
Параметр, выражение 1, выражение 2 должны быть одного ординального типа;
Параметр в этом цикле возрастает. Действие эквивалентно действию следующего составно-
го оператора:
begin
<параметр>:=<выражение 1>;
while <параметр> <= <выражение 2> do
begin
<оператор>;
<параметр>:=suсс(<параметр>)
end
end.
223
Если в этом описании отношение <= заменить на >= , а функцию succ на pred, то параметр в
цикле будет убывать, в этом случае цикл с параметром принимает форму 2.
Форма 2:
for <параметр>:=<выражение 1> downto <выражение 2> do <оператор>
Пример:
составим программу, по которой будет напечатана таблица перевода километров в
мили (1 миля = 1,603 км). Параметром цикла можно считать целую величину k - количество кило-
метров. Пусть эта величина изменяется от 1 до 10 (с шагом 1, разумеется).
Программа 7
program mili;
const a=1.603;
b='км'; с='мили';
var k:integer; m:real;
begin
writeln(b:5,c:7); writeln;
for k:=l to 10 do
begin
m:=k/a; writeln(k:5,m:6:3)
end
end.
Запишем в этой программе цикл с параметром в форме 2:
for k:=10 downto 1 do
begin
m:=k/a; writeln(k:5,m:6:3)
end.
Тогда значения k в таблице будут убывать от 10 до 1 с шагом 1.
Контрольные вопросы
1. Как в Паскале реализуется развилка?
2. В чем различие в назначениях условного
оператора и оператора варианта? Как реализу-
ется оператор варианта?
3. Какого типа циклы реализуются в языке Паскаль? каким образом?
3.3. СТРУКТУРЫ ДАННЫХ
Мы уже познакомились с простыми типами real, integer, boolean, byte,
char.
В Паскале программист по своему желанию может определить новый тип путем перечис-
ления его элементов - перечисляемый тип, который относится
к простым ординальным типам.
Описание перечисляемого типа выполняется в разделе
типов по схеме:
type <имя типа> = <список имен>
Примеры:
type operator = (plus,minus,multi, divide);
color = (white,red,blue,yelow,purple,green);
В списке должно быть не более 256 имен.
Поскольку перечисляемый тип относится к ординальным, то к его элементам можно при-
менять функции ord(x), pred(x), succ(x) и операции отношения. Отметим, что данные этого типа не
подлежат вводу и выводу с помощью функций ввода/вывода и могут использоваться внутри про-
граммы для повышения ее читабельности и понятности.
Для иллюстрации работы с перечисляемыми типами приведем программу 8, переводящую
английские названия дней недели на русский язык.
224
Программа 8
program
week;
type days=(mon,tue,wed,thu,fri,sat,sun);
var d:days;
begin
for d:=mon to sun do
case d of
mon: writeln("понедельник");
tue writeln("вторник");
wed writeln("среда");
thu writeln("четверг");
fri writeln("пятница");
sat writein("суббота") ;
sun writeln("воскресенье")
end
end.
Интервальный тип
- это подмножество другого уже определенного ординального типа,
называемого
базовым.
Интервал можно задать в разделе типов указанием наименьшего и наи-
большего значений, входящих в него и разделяющихся двумя последовательными точками, на-
пример:
type days=(mon,tue,wed,thu,fri,sat,sun);
workday s=mon.. fri;
index=1..30;
letter='a'..'z';
Можно задать интервал и в разделе переменных:
vara:1..100;b:-25..25;
Операции и функции - те же, что и для базового типа. Использование интервальных типов в
программе позволяет экономить память и проводить во время выполнения программы контроль
присваиваний.
Пример:
если k - номер месяца в году, то вместо описания
var k:integer;
можно написать
vark:1..12;
Интервальный тип тоже относится к простым ординальным типам.
СОСТАВНЫЕ СТРУКТУРЫ. Данные, с которыми имеет дело ЭВМ, являются абстракция-
ми некоторых реальных или существующих в воображении людей объектов. Мы уже познакоми-
лись с некоторыми типами данных: стандартными, перечислимыми, интервалами. Этими типами
можно было обойтись при решении простых задач. Однако естественно и часто очень удобно
группировать однотипные данные в последовательности - массивы, строки символов, объединять
разнотипные данные об одном и том же объекте в виде записей. Значительные удобства представ-
ляются пользователю в Паскале при организации однотипных величин в виде множества с соот-
ветствующим набором операций: объединения, пересечения и т.д. Наконец, последовательность
однотипных величин переменной длины можно представить в Паскале в виде файла данных и
хранить на внешних носителях, используя его в разных программах.
Таким образом, подобно составному оператору, содержащему несколько других операто-
ров, составные типы образуются из других типов, при этом существенную роль играет метод об-
225
разования или структура составного типа.
Часто используемый составной тип - массив.
Массив -
это последовательность, состоящая
из фиксированного числа однотипных элементов. Все элементы массива имеют общее имя (имя
массива) и различаются индексами. Индексы можно вычислять, их тип должен быть ординальным.
При описании массивов используются служебные слова array и of. В описании массива указывает-
ся тип его элементов и типы их индексов.
Схема описания такова:
type <имя типа> = array [<список типов индексов>] оf <тип элементов>
Тип элементов - произвольный, он может быть составным. Число типов индексов называет-
ся размерностью массива. После описания типа массива конкретные массивы можно задать в раз-
деле описания переменных.
Например:
type vector = array [1.. 10] of real;
table = array ['A'..'Z',1..5] of integer;
var a,b : vector;
с: table;
Обращение к элементу массива осуществляется с помощью задания имени переменной, за
которым следует заключенный в квадратные скобки список индексов элемента.
Например:
а[7]:=3.1; b[k*k+l]:=0; с['М',3]:=-14;
Если массивы имеют одно и то же описание, то во многих версиях Паскаля допустимо их
копирование, например b:=а;
Описание массива можно совместить с описанием соответствующих переменных:
var a,b : array [1.. 10] of real;
d : array [byte] of char;
В Турбо-Паскале разрешена инициализация начальных значений составных переменных с
помощью, так называемых, типизированных констант. Типизированные константы используются
как переменные того же типа. Их применение экономит память, однако они не могут быть исполь-
зованы для определения других переменных того же типа.
Схема описания констант массива:
const <имя массива>: <тип массива> = (<список значений элементов>)
Тип массива может быть описан ранее:
type digits
=
array [1 ..5] of char;
const a : digits =('0';2','4';6';8');
Пример:
используя массив, составим программу, которая напечатает на экране 20 чисел
Фибоначчи.
Последовательность Фибоначчи определяется равенствами
а[1]=а[2]=1; a[k]=a[k-l]+a[k-2] при
к>2.
Использование массива позволяет создать эффективную программу. Для вывода каждого
члена последовательности отведем на экране 5 позиций.