-6A82E~1
.PDF11
Пример:
Label 10, 20;
. . .
goto 20 ; 10: A:=1 ;
. . .
20: B:=100 ;
. . .
Оператор после goto в большинстве случаев тоже должен иметь метку (иначе он никогда не будет выполнен).
Не разрешается, чтобы оператор безусловного перехода передавал управление внутрь сложного оператора или подпрограммы.
2.4 Оператор условного перехода if
Общий вид:
if логическое_выражение then оператор_1 [else оператор_2] ;
Здесь квадратные скобки означают, что конструкция else с оператором_2 может отсутствовать. Перед else точка с запятой не ставится.
Операторы 1 и 2 - это простые или составные операторы. Если логическое выражение истинно, то выполняется оператор_1, иначе – оператор_2 (или следующий за if оператор, если else отсутствует). В качестве операторов 1 и 2 могут использоваться другие операторы if. В этом случае каждое else относится к ближайшему слева if, не отделенному точкой с запятой. Для удобства восприятия программы рекомендуется каждое слово else писать под соответствующим ему словом then.
Пример 1:
Алгебраическая схема:
1 |
при A B и C D, |
|
при A B и C D, |
X 2 |
|
|
3 при A B |
|
I вариант записи оператора if
if A=B then if C<D then X:=1 else X:=2
else X:=3 ;
12
IIвариант записи оператора if
if (A=B) and (C<D) then X:=1 ; if (A=B) and (C>=D) then X:=2 ; if (A<>B) then X:=3 ;
Пример 2:
Составить программу для вычисления следующего выражения:
|
|
|
|
|
|
|
|
|
|
|
5A |
2 |
9B |
2 |
|
при A B, |
|||
|
|
|
|
|
|||||
K |
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
2 |
|
|
|
|
|
9A |
5B |
|
при1 A B, |
|||||
|
|
|
|
||||||
где А 23 |
и B 17. |
||||||||
I вариант:
Program PR1; const A=23; B=17;
var K, K1, K2: real; BEGIN K1:=sqrt(5*A*A+9*B*B); K2:=sqrt(9*A*A+5*B*B); if A>B then K:=K1;
if (1<A) and (A<=B) then K:=K2;
if A<=1 then writeln(' K не определена') else writeln(' K=', K);
END.
II вариант:
Program PR2; label 10; const A=23;
B=17; var K: real; BEGIN
if A>B then K:=sqrt(5*A*A+9*B*B);
if (1<A) and (A<=B) then K:=sqrt(9*A*A+5*B*B); if A<=1 then begin
writeln(' K не определена'); goto 10;
end; writeln(' K=', K); 10: ;
END.
13
2.5. Оператор выбора case
Общий вид:
case выражение of список_констант_1: оператор_1; список_констант_2: оператор_2;
. . .
end;
Здесь значение выражения (индекса варианта) и списков констант должны быть одного типа. Если некоторая часть списка констант является последовательностью элементов перечисляемого типа, она может заменяться конструкцией
первый..последний выделяющей первый и последний элементы последовательности.
Вместо меток выбора (списка констант) перед последним оператором выбора может использоваться ключевое слово else. После такой "метки" двоеточие не ставится !
Замечание. Метки оператора case не описываются в разделе label и на них нельзя переходить оператором goto.
Если значение выражения не совпадает ни с одной константой, то управление сразу передается за оператор выбора.
Пример 1.
. . .
case I+1 of 2: X:=0;
3,100: X:=X*X; 4..99: X:=sin(X); end;
A:=A+1;
. . .
Пример 2.
Если человек родился в 1970 г.
. . .
case Year of
1970..1984: writeln(' Детство'); 1985..1987: writeln(' Юность'); 1988..1995: writeln(' Молодость'); 1996..2030: writeln(' ...жизнь...'); else writeln(' как решат высшие силы'); end;
. . .
14
3 ЦИКЛИЧЕСКИЕ ВЫЧИСЛЕНИЯ
В Паскале различают три вида операторов организации циклов:
1)while - оператор цикла с предварительным условием;
2)repeat - оператор цикла с последующим условием;
3)for - оператор цикла с управляющим параметром.
3.1 Оператор цикла while
Общий вид:
while логическое выражение do оператор; где оператор - простой или составной оператор.
Оператор while действует следующим образом. Предварительно проверяется значение логического выражения. Пока оно истинно, выполняется оператор циклической части (после do). Как только оно становится ложным, происходит выход из цикла. Если с самого начала значение логического выражения ложно, то оператор циклической части не выполняется ни разу. Если логическое выражение никогда не принимает значение False (ложно), то цикл будет выполняться бесконечное количество раз ("зацикливание").
Пример 1. Для вычисления A7 можно использовать следующий цикл (например при A<0, когда Exp(7*Ln(A)) не допустимо):
. . .
i:=1; p:=1; while i<=7 do begin
p:=p*a;
i:=i+1;
end;
. . .
Пример 2. Составим программу для вычисления и вывода на экран таблицы значений функции y=a·x2 при x=5,6,7,...,35; a=10,2.
program PR1; var y,a: real;
x: integer;
BEGIN
x:=5, a:=10.2; while x<=35 do begin
y:=a*x*x;
writeln(' x= ', x, ' y= ', y); x:=x+1;
end;
END.
15
3.2 Оператор цикла repeat
Общий вид: repeat
┌───────────────┐ │ Операторы │
│циклической │
│части │
└───────────────┘
until логическое_выражение;
Оператор repeat действует следующим образом. Выполняются операторы циклической части, проверяется значение логического выражения: если оно ложно, то вновь выполняются операторы циклической части; если же оно истинно, то цикл заканчивается. Если значение логического выражения истинно с самого начала, то операторы циклической части выполняются один раз. Если же логическое выражение никогда не принимает значение "истинно", то происходит "зацикливание".
Пример 1. Вычислим вычисления A7 с использованием repeat:
. . .
i:=1; p:=1; repeat p:=p*a; i:=i+1; until i>7;
. . .
Пример 2. Составим программу для вычисления и вывода на экран таблицы значений функции y=a·x2 при x=5,6,7,...,35; a=10,2. с использование оператора repeat.
program PR2;
var y,a: real; x: integer; BEGIN
x:=5, a:=10.2; repaet y:=a*x*x;
writeln(' x= ', x, ' y= ', y); x:=x+1;
until x>35;
END.
Группа операторов циклической части будет выполняться до тех пор, пока x не станет больше 35.
16
3.2 Оператор цикла for
Общий вид:
for i:=n1 to n2 do оператор;
Здесь i - переменная цикла;
n1, n2 - начальное и конечное значения переменной цикла.
В качестве переменной цикла i |
можно использовать только простую пере- |
|
менную, а в качестве n1 |
и n2 |
могут использовать выражения (за исключе- |
нием вещественного типа |
real). |
|
Параметры i, n1 и n2 должны быть одного и того же скалярного типа, но не real (т.е. целого, символьного, ограниченного или типа "перечисление"). Переменная цикла i принимает последовательные значения данного типа от
n1 до n2. |
|
|
|
Рассмотрим примеры оператора for |
в зависимости от i, n1 и n2. |
||
Пример 1. |
i, n1, n2 - целого типа. В этом случае шаг изменения пере- |
||
менной цикла равен +1: |
|
|
|
for i:=1 to 20 do a:=a+1; |
|
|
|
Здесь для |
i=1,2,...20 выполняется оператор a:=a+1. |
|
|
Пример 2. |
i, n1, n2 - символьного типа. Пусть переменная |
i типа |
|
char. Тогда оператор |
|
|
|
for i:='a' to 'w' do write(' ',i); |
|
||
осуществляет печать через пробел букв латинского алфавита от |
a до w. |
||
Пример 3. Вычислим a7 с использованием |
for: |
|
|
. . .
p:=1;
for i:=1 to 7 do p:=p*a;
. . .
Пример 4. Составим программу для вычисления и вывода на экран таблицы значений функции y=a·x2 при x=5,6,7,...,35; a=10,2. с использование оператора
for.
program PR3; var x: integer; BEGIN
a:=10.2;
for x:=5 to 35 do writeln(' x= ', x, ' y= ', a*x*x);
ш0
END.
Если необходимо записать цикл по убывающим значениям параметра i от n2 до n1, то используется следующая разновидность оператора for:
for i:=n2 downto n1 do оператор;
17
В этом случае параметр i принимает последовательные убывающие значения
от n2 до n1.
Пример 5.
for i:=20 downto 1 do s:=s+1;
Здесь i изменяется от 20 до 1 с шагом -1. Замечания:
1) внутри цикла нельзя изменять ни начальное, ни конечное значения (n1, n2) переменной цикла i, а также само значение i;
2) если в возрастающем цикле n1>n2, то цикл не выполняется ни разу. Аналогично - для убывающего цикла с downto, если n2<n1;
3) после завершения цикла значение переменной цикла i становится неопределенным, за исключением выхода из цикла с помощью оператора
goto;
4) во всех трех операторах цикла среди операторов циклической части можно использовать операторы условного и безусловного перехода if, goto. Но нельзя передавать управление извне цикла внутрь цикла.
18
4 ОРГАНИЗАЦИЯ ВВОДА-ВЫВОДА ДАННЫХ. РАБОТА С ФАЙЛАМИ
Для ввода и вывода данных в Турбо-Паскале существуют стандартные процедуры ввода-вывода, вызываемые, соответственно, операторами read и write.
4.1. Процедуры ввода
Для вызова процедуры ввода используются три оператора:
1)read(список_переменных); - каждое вводимое значение последовательно присваивается переменным из списка;
2)readln(список_переменных); - то же, что и оператор read, только после ввода данных происходит переход на новую строку;
3)readln; - происходит переход на новую строку без ввода данных. Последовательно расположенные операторы (1) и (3) эквивалентны одно-
му оператору (2).
Значения вводимых переменных должны соответствовать типам переменных из списка ввода. В Турбо-Паскале допускается вводить значения следующих данных: целых (integer), вещественных (real), символьных (char), а также строковых переменных (string).
Спомощью операторов ввода нельзя ввести:
1)значение логической переменной;
2)значение переменной типа "перечисление";
3)значение переменной типа "массив" (необходимо вводить значения отдельных элементов массива);
4)значение переменной типа "множество" (необходимо вводить значения элементов множества);
5)значение переменной типа "запись" (необходимо вводить значения отдельных полей записи).
Пример 1.
var a,b,c: real; i,k: integer;
. . .
readln(a,b,c,);
read(i,k);
. . .
Вданном примере значения переменных вводятся в следующей порядке:
0.56.25 -7.1Е-1
1 5
или
0.5
6.25 -7.1Е-1 1 5
19
Но нельзя числа записать в одной строке, так как используется оператор readln. После выполнения процедуры ввода переменным будут присвоены та-
кие значения: a=0.5, b=6.25, c=-0.71, i=1, k=5.
Пример 2. |
Пусть |
имеются переменные |
следующих типов: |
r:real; |
||
c1,c2,c3:char, |
которым необходимо присвоить соответственно значения: |
|||||
1.5, 'a', |
'b' |
и |
'c'. |
|
|
|
Для этого используется оператор read(r, c1, c2, c3). |
При вводе |
|||||
значения переменных можно расположить следующим образом: |
|
|||||
1.5abc |
или |
1.5E0abc |
(без апострофов), |
|
||
но нельзя |
после |
1.5 поместить пробел, |
так как он воспринимается как зна- |
|||
чение символьной константы.
4.2 Процедуры вывода
Оператор вывода данных имеет три формы записи:
1)write(список_переменных); - выводит последовательно значения переменных из списка;
2)writeln(список_переменных); - то же, что и оператор write, но после вывода переменных осуществляется переход на новую строку;
3)writeln; - осуществляет переход на новую строку без вывода дан-
ных.
Как и при вводе, последовательно расположенные операторы вида (1) и (3) эквивалентны одному оператору (2).
ВТурбо-Паскале допустим вывод значений следующих данных:
1)целых переменных (integer);
2)вещественных переменных (real);
3)символьных переменных (char);
4)логических переменных (boolean);
5)арифметических и логических выражений;
6)строковых переменных.
Спомощью операторов вывода нельзя вывести:
1)значение переменной типа "перечисление";
2)значение переменной типа "массив" (необходимо выводить значения от-
дельных его элементов);
3)значение переменной типа "множество" (необходимо выводить значения отдельных элементов множества);
4)значение переменной типа "запись" (необходимо выводить значения отдельных полей).
Пример 3. Пусть в результате выполнения программы переменные получили
следующие значения: i=-5, r=3.52, c='+', b=true. Выведем их на печать
. . .
writeln(' i=',i,' r=',r);
20
writeln(' c=',c); write(' b=',b);
. . .
В результате выводимые значения примут вид i=-5 r= 3.5200000000E+00
c=+
b=true
4.3Форматный вывод переменных
ВТурбо-Паскале предусмотрен вывод данных с форматами. В общем случае формат имеет следующий вид:
|
|
P:M |
где |
P - имя переменной, |
|
|
M - |
целая константа, указывающая на число позиций для выводимой пе- |
ременной |
P (в качестве параметра M может указываться не число, а имя |
|
константы, описанной в разделе const). |
||
|
Для вещественных переменных может быть задан в таком виде: |
|
|
|
P:M:N |
где |
M - общее число позиций для выводимой переменной P, включая знак |
|
числа, целую часть, точку и дробную часть;
N- число позиций дробной части.
Вэтом случае переменная P выводится в виде константы с фиксированной точкой. Если параметры M и N отсутствуют, то вещественная переменная выводится в виде константы с плавающей точкой.
Пример 4. Используем форматный вывод переменных из предыдущего
примера 3:
. . .
writeln(' i=',i:3,' r=',r:5:2); write(' c=',c:2,' b=',b:6);
. . .
В результате получим i= -5 r= 3.52 c= + b= true
4.4 Описание файлов
Под файлом понимают любой набор элементов одного и того же типа. Число элементов, называемое длиной файла, не фиксировано.
По отношению к программе файлы могут быть внешними и внутренними. Файлы, которые существуют вне программы, называют внешними файлами. Внешние файлы должны быть описаны в разделе описаний программы, они подразделяются на типизованные и текстовые. Описание типизованных файлов имеет следующий вид:
