ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА
Паскаль - язык структурного программирования. Это означает, что программист должен выражать свои мысли очень дисциплинированно, с использованием малого числа четко оговоренных конструкций, используя как чередование их, так и вложения друг в друга. Не рекомендуется (хотя и возможно) использовать оператор перехода goto.
Реализация последовательности действий (т.е. структуры следования) выполняется с помощью составного оператора:
begin <последовательность операторов> end
Раздел операторов в программе всегда является составным оператором. Служебные слова begin и end часто называют операторными скобками.
Для реализации
развилки в Паскале предусмотрены два оператора: условный оператор и оператор варианта (выбора). Они предназначены для выделения из составляющих их операторов одного, который и выполняется.
Структура и действие
условного оператора
таковы:
If <логическое выраженне>
then <оператор 1>
else <оператор 2>
Условный оператор может быть неполным, т.е. не содержать часть «else <оператор 2>». В этом случае, если значение логического выражения равно false, условный оператор не вызывает никаких действий.
Пример: составим программу, которая определяет длину общей части двух отрезков числовой оси, заданных координатами своих концов соответственно а, b и с, d (а < b, с < d). Если отрезки имеют общую часть, то левая координата общей части отрезков m равна максимальному из чисел а и с, а правая n - минимальному из чисел b и d.
Программа 3
program cross;
var a,b,c,d,m,n,l:real;
begin
writeln('введите координаты концов отрезков') ;
read(a,b,с,d) ;
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.
Программа 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.
Если в этом описании отношение <= заменить на >= , а функцию 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.