Операторы языка паскаль
Операторы языка Паскаль предназначены для обмена информацией между пользователем и ПК. Все данные, поставляемые компьютеру, организуются в файлы. Файлами являются:
наборы исходных данных, для этой программы;
наборы результатов выполнения программы;
Для ввода в программу исходных данных и вывода результатов используются два стандартных файла: INPUT – для ввода данных;
OUTPUT – для вывода данных.
Можно считать, что вычислительный процесс осуществляется преобразованием текстового файла INPUT в файл OUTPUT. Эти файлы могут записываться в заголовке программ.
PROGRAM P1 (INPUT, OUTPUT);
По умолчанию они имеют следующие описания.
TEXT = PACKED FILE OF CHAR;
INPUT, OUTPUT: TEXT;
Пустой оператор
Пустой оператор не задает в программе никаких действий, чаще всего встречается с меткой и ставится в конце составного оператора или программы.
Составной оператор
Составной оператор задает последовательность операторов, заключенную в операторные скобки BEGIN и END. Точка с запятой не ставится после слова BEGIN, между последним оператором составного оператора и словом END. Выполнение составного оператора заключается в последовательном выполнении входящих в его состав операторов. Выход из составного оператора осуществляется либо через его закрывающуюся операторную скобку, либо с помощью оператора перехода по метке, находящейся вне составного оператора.
Операторы ввода read и readln
READLN (V1,V2, . VN); READ LINE (читать строку)
где V1, V2, …, VN – список переменных
Оператор ввода обеспечивает чтение данных из стандартного файла INPUT и присвоение прочитанных значений соответствующим переменным в порядке их следования. Типы вводимых значений должны соответствовать типу соответствующих переменных.
В качестве элементов списка ввода можно использовать только переменные вещественного, целого и символьного типов. Вводимые значения отделяются друг от друга пробелами или располагаются на строках разного уровня.
Оператор READLN выполняет действия, аналогичные оператору READ, но после ввода последней переменной из списка ввода осуществляется переход к началу новой строки файла INPUT. Оператор READLN без списка ввода реализует переход к началу новой строки.
Операторы вывода write и writeln
WRITELN (E1,E2, . EN); WRITE LINE (писать в строку)
где E1, E2, . EN — список выводимых выражений.
Оператор вывода осуществляет вывод значений выражений, указанных в списках вывода, в стандартный файл OUTPUT. Вид печатаемой единицы данных определяется типом соответствующего выражения.
Оператор WRITELN выполняет те же действия, что и оператор WRITE, но после вывода последнего выражения из списка вывода осуществляется переход на новую строку. Для того чтобы пропустить на экране строку нужно использовать оператор WRITELN без параметров, т. е. WRITELN.
При выводе на экран нескольких чисел в строку они не отделяются друг от друга пробелами.
Что выполняет пустой оператор writeln
Горбачев Л.И. Основы программирования в среде Turbo Pascal.
1. Простые операторы. Программирование алгоритмов линейной структуры
Оператор — предписание в языке программирования, предназначенное для задания некоторого завершенного действия в процессе переработки информации на ПЭВМ.
Основная часть программы на языке Паскаль представляет собой последовательность операторов, каждый из которых производит некоторое действие над данными. Операторы выполняются последовательно в том порядке, в котором они записаны в тексте программы. Разделителем операторов служит точка с запятой.
Все операторы языка Паскаль подразделяются на три группы: простые, ввода-вывода и структурные. Фактически операторы ввода-вывода являются обращением к стандартным процедурам, так как в Паскале нет специальных операторов ввода-вывода. Однако по установившейся традиции такие обращения называют операторами.
1.1. Простые операторы.
Операторы, не содержащие в себе никаких других операторов, называются простыми. К ним относятся операторы присваивания, безусловного перехода, вызов процедуры и пустой оператор.
1.1.1. Оператор присваивания.
Оператор присваивания (:=) предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной, идентификатор которой расположен в левой части. Переменная и выражение должны иметь один и тот же тип. Исключение представляет случай, когда переменная имеет вещественный тип, а выражение — целочисленный. Допустимо присваивание любых типов данных, кроме файловых.
Формат: имя_переменной := выражение;
Пример: Sort := 1; Cost := 15.23;
Name := ‘Модель ВАЗ 2109’;
Result := sin(A) + cos(B);
Y := Sqrt(X) + 1; L := M and N;
1.1.2. Оператор безусловного перехода (goto).
Исполняемая часть программы является некоторым составным оператором, в котором составляющие его операторы выполняются в той последовательности, в которой они записаны. Если нужно изменить такую последовательность, пользуются оператором перехода. Оператор безусловного перехода (goto) означает "перейти к. " и применяется в случаях, когда после выполнения некоторого оператора надо выполнить не следующий по порядку, а какой-либо другой, отмеченный меткой оператор. Т.е. передать управление оператору, перед которым стоит метка, указанная в операторе goto.
Формат: goto метка;
Пример: .
Label Metka1, Metka2;
.
Metka1:
goto Metka2;
Metka2:
goto Metka1;
.
Метка представляет собой идентификатор или любое целое число без знака в диапазоне от 0 до 9999. Метка должна быть описана в разделе label и записывается перед помечаемым оператором, от которого отделяется двоеточием. Между меткой и данным можно включать один или несколько пробелов.
При записи оператора goto необходимо отметить следующее:
а) метка, на которую передается управление, должна быть описана в разделе описания меток того блока процедуры, функции основной программы, в котором эта метка используется;
б) областью действия метки является тот блок, в котором она описана. Переход возможен только в пределах блока;
в) попытка выйти за пределы блока или передать управление внутрь другого блока вызывает программное прерывание.
Следует помнить, что в соответствии с правилами структурного программирования оператор goto следует применять как можно реже, т.к. считается, что его частое употребление резко усложняет понимание логики программы, усложняет ее отладку. В крайнем случае он может использоваться для преждевременного выхода из оператора повтора.
Пример: Программа, реализующая оператор GoTo.
Program GoTo;
Uses CRT;
Label Finish; < Описание метки >
Var password : integer;
Begin
Finish:
ClrScr;
Write(‘Введите пароль: ‘); ReadLn(password);
< 999 - правильное значение пароля >
if password <> 999 then
begin
WriteLn(‘Неверный пароль! Доступ запрещен!’);
goto Finish
end
else WriteLn(‘Пароль верный! Доступ разрешен!’);
ReadLn
End.
1.1.3. Оператор вызова процедуры.
Оператор вызова процедуры служит для активизации предварительно определенной пользователем или стандартной процедуры.
1.1.4. Пустой оператор.
Пустой оператор не содержит никаких символов и не выполняет никаких действий. Он может быть расположен в любом месте программы, где синтаксис языка допускает наличие оператора. Как и все другие операторы, пустой оператор может быть помечен меткой. Чаще всего пустой оператор используется для организации выхода из середины программы или составного оператора:
begin
goto Metka; <Переход в конец блока>
.
Metka: <Пустой оператор помечен меткой>
end.
Пустому оператору соответствует символ ";" на том месте, где по правилам должен быть какой-либо оператор.
Пример: A := B; ; M := 7.2;
1.1.5. Операторы ввода-вывода.
В любом языке программирования предусмотрена возможность обмена или пересылки информации между ОЗУ (оперативным запоминающим устройством) и внешними устройствами (принтер, дисплей, дисководы и т.д.).
Для ввода в ОЗУ (чтения) и вывода из ОЗУ (записи) данных в Турбо Паскале существуют стандартные (встроенные) процедуры ввода-вывода, вызываемые соответственно, операторами Read и Write.
- Read(список_переменных); — каждое вводимое значение последовательно присваивается переменным из списка; вводимые числа должны отделяться друг от друга при вводе пробелами или нажатием клавиши Enter;
- ReadLn(список_переменных); — то же, что и оператор Read, только на экране после ввода данных происходит переход на новую строку (т.е. следующий оператор ввода будет вводить данные с новой строки); вводимые числа должны отделяться друг от друга при вводе пробелами или нажатием клавиши Enter;
- ReadLn; — происходит переход на новую строку без ввода данных.
Значения вводимых переменных должны соответствовать типам переменных из списка ввода. В Турбо Паскале допускается вводить значения следующих данных: целых (integer), вещественных (real), символьных (char), а также строковых переменных (string).
- значение логической переменной;
- значение переменной типа "перечисление";
- значение переменной типа "массив" (можно вводить значения отдельных элементов массива);
- значение переменной типа "множество" (можно вводить значения отдельных элементов множества);
- значение переменной типа "запись" (можно вводить значения отдельных полей записи);
- Write(список_переменных); — выводит последовательно значения переменных из списка;
- WriteLn(список_переменных); — то же, что и оператор Write, но после вывода значений на экране осуществляется переход на новую строку (следующий оператор вывода будет выводить данные с начала новой строки);
- WriteLn; — осуществляет переход на новую строку без вывода данных (вывод "пустой" строки).
- целых переменных (integer);
- вещественных переменных (real);
- символьных переменных (char);
- логических переменных (boolean);
- символьных констант;
- арифметических и логических выражений;
- строковых переменных.
- значение переменной типа "перечисление";
- значение переменной типа "массив" (можно выводить значения отдельных элементов массива);
- значение переменной типа "множество" (можно выводить значения отдельных элементов множества);
- значение переменной типа "запись" (можно выводить значения отдельных полей записи);
В результате выводимые значения будут такими:
ПРИМЕР
I =-5 R = 3.5200000000E+00
Символ — +
B =TRUE
В Турбо Паскале предусмотрен вывод данных в определенном пользователем форматом (форматированный вывод). В общем случае формат имеет следующий вид: P:M, где P — имя переменной, M — целая константа, указывающая на число позиций, необходимых для выводимой величины P (в качестве параметра M может указываться не число, а имя константы, описанное в разделе const).
Для вещественных переменных формат может быть задан в таком виде: P:M:N (элемент : длина : количество цифр), где M — общее число позиций для выводимой переменной P, включая знак числа, целую часть, точку и дробную часть; N — число позиций дробной части. В этом случае переменная P выводится в виде константы с фиксированной точкой.
Пример: Используем форматированный вывод переменных из предыдущего примера:
.
WriteLn(‘ I =’,I:3,’ R =’,R:5:2);
WriteLn(‘ Символ — ‘,C:5);
Write(‘ B =’,B:8);
Результат:
I = -5 R = 3.52
Символ — +
B = TRUE
1.2. Примеры программ линейной структуры.
Пример: Осуществить вывод на принтер таблицы, в которой записаны значения сторон прямоугольника и его площадь.
Program DemoWriteln;
Uses CRT;
Var < A, B - стороны, Area - площадь >
A, B, Area : integer;
Begin
A := 8; B := 4;
Area := A * B;
< Lst указывает, что вывод производится на принтер >
WriteLn(Lst, ‘————————————‘);
WriteLn(Lst, ‘| Сторона A | Сторона B | Площадь |’);
WriteLn(Lst, ‘————————————‘);
WriteLn(Lst, ‘|’, A:6, ‘|’:6, B:6, ‘|’:6, Area:6, ‘|’:4);
WriteLn(Lst, ‘————————————‘);
End.
В результате работы программы получим таблицу:
—————————————-
| Сторона A | Сторона B | Площадь |
—————————————-
| 8 | 4 | 32 |
—————————————-
каждая строка которой будет печататься с первой позиции новой строки печатающего устройства.
Пример: Программа, пересчитывающая расстояние, выраженное в милях, в расстояние, выраженное в километрах.
program MilToKm;
uses CRT;
var Mil : real; < Расстояние в милях >
Km : real; < Расстояние в километрах >
Begin
ClrScr;
Write(‘Задайте расстояние в милях: ‘); ReadLn(Mil);
Km := Mil * 1.6;
WriteLn(Mil:5:2, ‘ миль это ‘, Km:5:2, ‘ километров’);
ReadLn
End.
Примечание: Оператор ReadLn можно применить для задержки вывода результата работы программы на экране до нажатия на клавишу Enter.
Процедуры Write и WriteLn
Процедуры Write и WriteLn выполняют вывод информации в устройство стандартного вывода. В консольных приложениях этим устройством может быть консоль (то есть экран), в графических приложениях — файл на диске.
Эти процедуры выполняют одно и то же действие. Отличие между ними только одно: процедура WriteLn после завершения вывода выполняет перевод строки. А процедура Write записывает данные подряд — без перевода строки.
Синтаксис для вывода на консоль:
procedure Write(Args : Arguments);
Синтаксис для вывода в файл:
procedure Write(var F: Text; Args : Arguments);
Аргументами (Arguments) могут быть переменные разных типов. Если используется несколько переменных, то они перечисляются через запятую. Например:
Причём, как уже было сказано, при выводе на консоль эти переменные могут быть разных типов. Также можно использовать и константы:
Write(‘Numbers — ‘, x, y, z, 100);
Если требуется перевод строки, то лучше использовать функцию WriteLn вместо Write:
Но можно использовать, например, символы перевода строки в конце списка аргументов:
При записи в файл можно работать как с типизированными файлами, так и с текстовыми файлами.
Если F (см. синтаксис) — это типизированный файл, то переменные, передаваемые как параметры (Args) должны иметь такой же тип, какой указан для файла F. Нетипизированные файлы использовать не допускается. Если параметр F не указан, то предполагается, что вывод выполняется на стандартное устройство (экран-консоль).
Если файл F имеет тип Text, то все необходимые преобразования будут выполнены таким образом, что выходная переменная будет в удобочитаемом формате. Это преобразование выполняется для всех числовых типов. Строки и типы PChar выводятся точно так, как они находятся в памяти.
При выводе на консоль целые числовые значения выводятся в обычном числовом формате. А вещественные числовые значения по умолчанию выводятся в научной нотации.
Чтобы выводить целые числа в поля фиксированной ширины или вещественные числа с фиксированным количеством знаков после запятой, используется специальный формат вывода. Но об этом в данной статье я говорить не буду, так как уже рассказывал об этом здесь.
Если во время выполнения процедуры Write/WriteLn происходит ошибка, то генерируется ошибка времени выполнения. Такое поведение не всегда приемлемо (например, во время чтения/записи файла). Поэтому в каких-то случаях генерацию ошибок отключают. Сделать это можно с помощью директивы компилятора .
Что выполняет пустой оператор writeln
Первый оператор, с которым мы познакомимся, занимается исключительно тем, что приказывает компьютеру изобразить на экране монитора ту или иную информацию, состоящую из букв (символов) и чисел.
Вывод данных — это передача данных после обработки из оперативной памяти на внешнее устройство (экран, принтер, файл на диске).
Процедуры вывода WRITE и WRITELN служат для вывода на экран констант (как числовых, так и текстовых), значений переменных и выражений. Они вызываются с помощью одноименных операторов вызова процедур, например:
WRITE (‘программа’, X, Y — Z * 3).
По этому оператору на экран будет выведено в одной строке слово «программа» и далее без пробелов значения переменной X и выражения Y — Z * 3. Например, если имеем X = -3, Y = -5, Z = 12, то на экран будет выведено: программа-3-41.
Чтобы отделить элементы вывода друг от друга, используется прием форматирования вывода. Так, WRITE (А:20) — одиночное форматирование — показывает, что значению переменной А отводится 20 позиций на экране монитора. Если в значение переменной А входит менее 20 символов, то они сдвигаются вправо, а слева строка заполняется пробелами.
Элементы списка выводятся в пользовательское окно программы. Вещественные значения выводятся в экспоненциальной форме (с буквой E). Строки выводятся «как есть». После вывода работа программы продолжается со следующего оператора.
Оператор writeln отличается от write лишь тем, что после вывода значения последнего элемента списка выполняется перевод курсора на следующую строку экрана.
После вывода результата выполнение программы продолжится, а если оператор writeln был в ней последним, то и завершится. Чтобы пользователь успел прочитать результат, следует в конце программы добавить оператор readln; который будет ждать нажатия клавиши Enter.
В операторе write или writeln вещественное значение (а также целое или строковое) зачастую удобнее записывать в виде:
переменная: ширина: точность
ширина — целое положительное число, определяет, сколько экранных позиций отводится для вывода всего числа. Определена для любых чисел и строк.
точность — целое положительное число, определяет, сколько цифр из ширины отводится на вывод дробной части числа. Определена только для вещественных чисел. Не учитывает позицию десятичной точки. Разумные значения точности — от 0 до ширина-2 включительно. Недопустимые значения ширины и точности не будут учтены при выводе.
Форма представления значений в поле вывода соответствует типу переменных и выражений: величины целого типа выводятся как целые десятичные числа, действительного типа — как действительные десятичные числа с десятичным порядком, символьного типа и строки — в виде символов, логического типа — в виде логических констант TRUE и FALSE.
Двойное форматирование используется только для вывода вещественных значений. Например, WRITE (C:17:7) означает, что для вывода значения переменной C отведено всего 17 позиций, из них 7 позиций предназначены для представления дробной части. Если формат не указан, то вещественные константы выводятся на экран в экспоненциальной форме. Заметим также, что форматировать в операторах WRITE можно не только переменные, но и выражения, например:
Для начала необходимо объявить файловую переменную. Файловые переменные имеют специфическое применение. Над ними нельзя выполнять никаких операций (присваивать значение, сравнивать и т. д). Их можно использовать лишь для выполнения операций с файлами (чтение, запись и т. д.).
Перед тем как осуществлять ввод-вывод, файловая переменная должна быть связана с конкретным внешним файлом при помощи процедуры Assign.
Assign(<Имя файловой переменной>,<Имя файла>);
Имя файла задастся либо строковой константой, либо через переменную тина String. Имя файла должно соответствовать правилам работающей в данный момент операционной системы. Если строка имени пустая, то связь файловой переменной осуществляется со стандартным устройством ввода-вывода (как правило — с консолью).
После этого файл должен быть открыт одной из процедур:
Reset(<Имя файловой переменной>);
Открывается существующий файл для чтения, указатель текущей компоненты файла настраивается на начало файла. Если физического файла, соответствующего файловой переменной, не существует, то возникает ситуация ошибки ввода-вывода.
Rewrite(<Имя файловой переменной>);
Открывается новый пустой файл для записи, ему присваивается имя, заданное процедурой Assign. Если файл с таким именем уже существует, то он уничтожается.
После работы с файлом он, как правило, должен быть закрыт процедурой Close.
Close(<Имя файловой переменной>);
Это требование обязательно должно соблюдаться для файла, в который производилась запись.
WRITE (cos (x + 4) : 5 : 2);
Оператор WriteLn — читается «райт ‘лайн» , переводится — ПИШИ СТРОКУ. Правила его записи и выполнения те же, что и у Write, с одним исключением — после выполнения оператора Write следующий оператор Write или WriteLn печатает свою информацию в той же строке, а после выполнения оператора WriteLn — с начала следующей.
Работа оператора WRITE отличается от работы оператора WRITELN тем, что по завершении вывода у WRITE курсор остается в конце списка вывода, а у WRITELN он переходит на следующую строку. Часто используют оператор WRITELN без списка вывода для вывода на экран пустой строки.
Проиллюстрируем работу этих операторов на следующем примере:
var FIRST, SECOND, TROIS, SUM: integer;
writeln (‘Введите 3 числа ‘);
readln (FIRST, SECOND, TROIS);
SUM := FIRST + SECOND + TROIS;
writeln (‘Среднее значение ‘, FIRST:4,’,’,SECOND:4,’,’);
write (TROIS:4,’ равно ‘;(SUM div 3):3)
На экран будет выведено:
Введите 3 числа
Среднее значение 3, 12,
Переменные и константы вещественного типа употребляются в том же смысле, что и в математике вещественные числа. В разделе описания переменных их описываем так:
Существуют две формы представления вещественных чисел: в формате с фиксированной точкой (например:151.456) и в формате с плавающей точкой, т.е. число представляется в виде мантиссы и порядка(0.234578E+3) Последний формат удобен для представления очень больших или очень маленьких чисел.