- •2 Введение в язык Паскаль Лекция 2
- •2.1 Историческая справка
- •2.2 Алфавит языка Паскаль
- •2.3 Переменные
- •2.4 Основные понятия языка Паскаль
- •2.5 Правила записи текста программы
- •Разделители
- •Правила записи
- •2.6 Система типов языка
- •2.7 Основные вычислительные структуры в Паскале
- •2.8 Выражения
- •2.9 Оператор присваивания
- •2.10 Ввод-вывод
- •2.11 Последовательное выполнение и составной оператор
- •2.12 Условный оператор
- •2.13 Оператор цикла с предусловием
- •2.14 Оператор цикла с постусловием
- •2.15 Оператор цикла с параметром
- •2.16 Примеры бесконечных циклов
- •2.17 Пустой оператор
- •2.18 Ограниченные типы
- •2.19 Функции
- •2.20 Примеры программ для задач без массивов
- •2.21 Более подробно о символьном типе
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.