Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л2.doc
Скачиваний:
13
Добавлен:
11.04.2015
Размер:
233.47 Кб
Скачать

2.10 Ввод-вывод

Для выполнения операций ввода-вывода служат четыре процедуры: read, readln, write, writeln.

Процедура чтения read обеспечивает ввод числовых данных, символов и некоторых других типов данных с клавиатуры, в результате чего эти данные становятся значениями переменных.

Вызов процедуры: read(X1,X2,...,XN);

где X1,X2,...,XN - переменные допустимых типов данных. Значения X1, X2, ..., XN набираются минимум через один пробел на клавиатуре и высвечиваются на экране. После набора данных для одной процедуры read нажимается клавиша ввода <Enter>. Значения переменных должны вводиться в строгом соответствии с синтаксисом языка Паскаль. Если соответствие нарушено (например, X1 имеет тип integer, а при вводе набирается значение типа char), то возникают ошибки ввода-вывода.

Если в программе имеются несколько подряд идущих процедур read, данные для них вводятся потоком, т.е. после набора значений переменных для одной процедуры read можно, не нажимая клавишу <Enter>, продолжить набор данных для следующей процедуры в той же строке и только потом нажать клавишу ввода.

Процедура чтения readln аналогична процедуре read. Единственное отличие заключается в том, что после считывания последней переменной в списке значений для одной процедуры readln данные для следующей процедуры ввода будут считываться с начала новой строки (т.е. ввод потоком невозможен).

Процедура записи write производит вывод на экран числовых данных, символов, булевских значений и строк.

Вызов процедуры

write(Y1,Y2,...,YN);

где Y1,Y2,...,YN - выражения вида integer, real, char, boolean и строки.

Процедура записи writeln аналогична процедуре write, но после вывода последнего в списке значения для текущей процедуры writeln происходит перевод курсора к началу следующей строки. Процедура writeln, записанная без параметров, вызывает перевод строки.

В процедурах вывода write и writeln имеется возможность записи выражения, определяющего ширину поля вывода.

Если x и i - целочисленные выражения, а y - вещественное выражение, то вызов write(x:i,y:i) печатает значения x и y − каждое в крайние правые позиции полей шириной i.

Write(y:i:x) - в крайние правые позиции поля шириной i символов выводится десятичное представление значения y в формате с фиксированной точкой, причем после десятичной точки выводится x цифр, представляющих дробную часть числа.

2.11 Последовательное выполнение и составной оператор

Для того чтобы указать в программе последовательное выполнение операторов S1, S2, ..., SN (т.е. после оператора S1должен выполняться оператор S2 и т.д.), операторы отделяются символом «;»

S1;

S2;

.....

SN

Используя служебные слова begin и end, можно из последовательности операторов сделать составной оператор:

begin

S1;

S2;

.....

SN

end

Составной оператор применяется в тех случаях, когда синтаксис языка допускает использование только одного оператора, в то время как семантика программы требует задание последовательности действий.

2.12 Условный оператор

Условный оператор применяется для задания разветвления в программе, т.е. выбора действий в зависимости от истинности или ложности какого-либо условия.

Пример:

Для того чтобы z стало равным наибольшему из двух чисел x и y, необходимо выполнить присвоение z:=x либо z:=y.

Две формы условного оператора: полная и сокращенная.

<полный условный оператор>::=

if <логическое выражение> then <оператор>

else <оператор>

Примеры:

if x>y then z:=x

else z:=y;

if x<0 then begin

x:=x+h;

y:=y-h;

d:= not d

end

else begin

x:=0;

y:=0

end;

if x>0 then sgn:=1

else if x=0 then sgn:=0 else sgn:=-1;

<сокращенный условный оператор>::=

if <логическое выражение> then <оператор>;

Например, оператор x:=abs(x) эквивалентен if x<0 then x:=-x.

Поменять местами значения переменных x и y так, чтобы в x было большее значение:

if y>x then begin

t:=x;

x:=y;

y:=t

end;

Ветви then и else могут снова содержать условные операторы, например:

if x>0 then sgn:=1

else if x=0 then sgn:=0 else sgn:=-1;

Неоднозначность в условном операторе следующего вида:

if B1 then if B2 then S1 else S2

Возможные истолкования

a) if B1 then begin

if B2 then S1 else S2

end;

b) if B1 then begin if B2 then S1 end

else S2;

В Паскале используется вариант a).

Совет. Если if следует после then, то всегда используйте begin и end.