Процедура Writeln в Pascal
Помимо зарезервированного слова Write, для вывода сообщения на экран в Pascal используется процедура Writeln. Отличие процедуры Writeln от оператора Write заключается в том, что Writeln после вывода сообщения на экран переводит курсор на другую строку.
В строке №5 и №6 мы выводим на экран два сообщения. Для того чтобы отделить сообщения друг от друга, ставим пробел после слова «Привет» перед закрывающим апострофом.
Записываем программу в Паскале и нажимаем F2 для сохранения.
После запуска программы Ctrl+F9 на экран выводится следующее сообщение.
Как мы видим, на экран вывелось два сообщения: «Привет.» и «Как дела?». Оба этих сообщения вывелись в одной строке. Для того чтобы сообщения выводились на разных строках, вместо оператора Write нам нужно использовать оператор Writeln (от англ. Write Line — записать строку).
В строке №5 мы записываем оператор Writeln. Помимо того, что он выводит на экран сообщение, он еще переводит курсор на следующую строку. Поэтому следующее сообщение выводится во второй строке. Фактически оператор Writeln выполняет процедуру Write, а затем переводит курсор на следующую строку.
Дополнение к материалу.
Следует сказать, что оператор «writeln» не является зарезервированным словом в Pascal. Если посмотреть на код, набранный в Pascal, то мы увидим, что оператор «writeln» не выделен белым цветом (как все зарезервированные слова). Он выделен желтым цветом, поскольку является идентификатором. Однако, в отличие от пользовательских идентификаторов, которые программист придумывает сам (например, название программы), оператор «writeln» является стандартным идентификатором. Стандартные идентификаторы связаны с предварительно объявленными объектами и входят в стандартную библиотеку Турбо Паскаля.
Pascal: Занятие №1. Часть 2: Операторы WriteLn и Readln в Pascal
Оператор writeln (от англ. write line — написать строку) или write (от англ. write — написать) — оператор вывода в Паскале, т.е. служит для вывода на экран каких-либо данных (просто текста, результатов выполнения программы, значений переменных и т.п.).
Если необходимо после вывода перейти на другую строку, то используется оператор writeln () .
Результат:
Рассмотрим примеры задач с использованием вывода Writeln в Pascal:
Write(‘Сумма 5 + 6 = ‘,5+6);
Результат: Сумма 5 + 6 = 11
Результат: Привет
Результат: AB
Результат:
A
B
Print — это оператор, позволяющий выводить результаты на монитор. При выводе текста нужно заключать его в апострофы (одинарные кавычки). Похожий оператор PrintLn — после вывода автоматически переходит на следующую строку.
1 способ:
begin var n:integer; n := 5; n := n * n; print(‘n =’,n); // n = 25 end.
2 способ (форматный вывод):
begin var a:=1.2; var b:=4; var c:=a+b; WritelnFormat (‘f(<0>, <1>) = <2>‘, a, b, c); end.
var x := 5; var y := 6; var res := x + y; Print($’Сумма
[Название файла: L1task1.pas ]
В среде Pascal можно использовать так называемые сниппеты (snippets): — фрагменты названий функций для быстрого их добавления в код:
Оператор присваивания и оператор Readln в Pascal
Оператор присваивания
Обычно программе для решения какой-либо задачи требуются данные. Данные хранятся в переменных, которые имеют свои идентификаторы (имена), например, идентификаторы X или Y , или более длинные идентификаторы переменных — number1 , counter и т.п.
Чтобы задать переменной какое-либо значение используется оператор присваивания. Оператор присваивания в Паскале обозначается как := , выполняет правую часть выражения и присваивает результат переменной, расположенной в левой части выражения:
Пример:
a:=2; writeln(‘квадрат ‘,a,’=’,a*a);
begin var n:integer; // объявление переменной n:=1; // присваивание
2 method (канонический):
begin var n:=1; // объявление переменной и присваивание значения => инициализация
Ввод данных
Но часто в программе необходимо запрашивать данные (т.е. вводить значения переменных с клавиатуры, а затем использовать эти значения для решения поставленной задачи). Для ввода данных используется оператор ввода read или readln , в Паскале разницы между ними при вводе практически нету (на данном этапе знаний).
Пример использования readln в Pascal:
Writeln(‘Введите число’); readln(a); writeln(‘квадрат ‘,a,’=’,a*a);
то же самое, что и read:
Пример использования read в Pascal:
Writeln(‘Введите число’); read(a); writeln(‘квадрат ‘,a,’=’,a*a);
Если запрашиваются две переменные, то можно перечислять их через запятую:
Writeln(‘Введите два числа’); read(a,b); writeln(‘сумма чисел = ‘,a+b);
begin var n:integer; // n — целочисленная переменная read(n); // ввод значения и сохранение его в переменной n
begin var n:real; // n — переменная вещественного типа read(n);// ввод значения и сохранение его в переменной n
// n — целочисленная переменная и мы вводим значение и сохранением его в переменной n var n:=ReadInteger(); // х — переменная вещественного типа и мы вводим значение и сохранением его в переменной х var x:=ReadReal();
3 способ (кортежное присваивание):
var n1, n2: integer; // объявление двух переменных (n1, n2) := (1, 2); // 1 присваивается переменной n1, 2 присваивается переменной n2 // Кортежное присваивание позволяет коротко записать обмен двух переменных значениями: (n1, n2) := (n2, n1); // n1 = 2; n2 = 1
// n1 и n2 — целочисленные переменные и мы вводим для них два значения var(n1, n2) := readInteger2;
Обычно перед вводом выводится поясняющее сообщение о том, какие данные должны быть введены:
var x := ReadInteger(‘Введите x:’); var y := ReadInteger(‘Введите y:’); var res := x + y;
Кроме того, оператор ReadInteger или ReadReal может быть использован непосредственно в процедуре Print , т.е. в выводе. Например, так можно посчитать площадь прямоугольника:
Что выполняет пустой оператор 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.
#2 Литералы и Вывод данных на экран (в консоль). Первое знакомство с Write и Writeln. Аргументы процедуры. Паскаль
Литералы — это данные записанные непосредственно в программном коде, мы можем посмотреть на них в конкретной строке программы и сказать, что это число или строка или символ и т.д. И какая именно число, строка или символ т.д. Значение литерала нельзя изменить, так как он сам и есть значение.
Типы литералов
Литералы бывают разных типов и каждый литерал соответствует какому-то типу данных, но о типах данных вообще мы поговорим позднее. Пока же рассмотрим литералы трёх типов:
- Строковые литералы
- Символьные литералы
- Числовые литералы
Строковые литералы
Строковые литералы — это строки текста. Внутри программы, написанной на языке Паскаль, они всегда берутся в одинарные кавычки, например:
Следует отметить, что строковый литерал всегда размещается на одной строке, и перенос её внутри литерала приведёт к ошибке при запуске программы.
Символьные литералы
То же самое, что и строки, только состоят из одного символа, заключенного в одинарные кавычки.
Цифра взятая в кавычки с двух сторон также трактуется как символ.
Примеры символьных литералов (с помощью комментариев к коду, добавим справа пояснения):
Последним в списке примеров символьных литералов приведён пробел, это просто символ пробела окружённый одинарными кавычками
Числовые литералы
Числовые литералы можно разделить на:
-
Целочисленные — это любые целые числа — положительные, например:
или отрицательными, например:
Далее рассмотрим использование литералов для вывода данных.
Вывод данных на экран с помощью write() и writeln()
В этом разделе мы с вами начнём писать первые работающие строки программного кода на языке Паскаль.
Первая программа — Привет Мир!
Следуя уже довольно старой и всё такой же доброй традиции, выполним нашу первую программу, поприветствовав мир:
Запустите этот пример (не забывая о том для чего нужны и что значат комментарии и операторные скобки). Вывелось ли приветствие?
Если окно в котором оно выводится слишком быстро закрывается, используйте приём для удержания консоли (просто запомните его, позже мы объясним как это работает):
Если строка выводится в виде абракадабры, то просто перепишите строковый литерал английскими буквами, как это указано в комментарии к строке вывода приветствия (просто передаём звуки русского языка латинскими символами, переводить фразу на английский не требуется).
Далее в листингах (фрагментах кода), мы будем опускать (не писать каждый раз) операторные скобки, подразумевая, что уже пишем внутри тела программы. Но для запуска этих фрагментов в вашей среде разработки, они должны быть окружены ими.
Обязательно запускайте на своём компьютере все примеры, которые будут встречаться далее.
write() и writeln() — стандартные процедуры вывода данных
Процедура — это подпрограмма, которую вызывает основная программа, чтобы подпрограмма совершила какие-то действия необходимые основной программе.
Write() и Writeln() — две стандартные (то есть разработанные создателями языка) процедуры в Паскаль, которые позволяют выводить на экран переданную в них информацию, или говорят «переданные им аргументы».
Аргументы — это значения, которые передаются в процедуру, будучи перечисленными в коде программы внутри скобок после имени процедуры, например:
Даст нам в консоли текст:
Обратите внимание, что после вызова любой процедуры обычно ставится точка с запятой.
Чтобы показать, что какое-то слово является именем процедуры в обычном тексте (учебника, например) и коде программы после имени процедуры всегда открывают и закрывают операторные скобки вне зависимости от того, перечисляются ли внутри этих скобок какие-то аргументы или нет.
Вызов процедуры с указанным именем
Чтобы вызвать какую-то процедуру необходимо знать:
- её имя
- число её аргументов и их тип
Например ,пусть у нас есть выдуманная процедура с именем, скажем, $test()$ и мы знаем, что она принимает на вход два аргумента: один целочисленный аргумент и один литерал, тогда вызвать её можно с помощью такой строки в теле программы:
Или даже передав в качестве первого аргумента переменную нужного типа:
write() & writeln()
Теперь перейдём непосредственно к обсуждению write() и writeln().
Общее:
-
И write() и writeln() служат для вывода в консоль информации.
Например, ввод чисел:
Или строк (строковый литералов):
Отличие:
- write() просто выводит на экран переданные ему аргументы.
- writeln() же выводит переданные аргументы и переводит курсор на новую строку. То есть любой следующий вызов процедуры вывода данных начнёт свой вывод уже со следующей строки.
Таким образом сравним работу фрагментов кода:
В чем разница между результатами, если запустить их? Обратите внимание в каком случае произошёл перенос строки, а в каком нет.
Пустой writeln() и пустой write() для перевода строки
Следует отметить, что по данному выше описанию работы writeln() и write() можно сказать, что вызванный без аргументов write():
не делает вообще ничего, а вот пустой writeln() позволяет перенести курсор на новую строку:
(заметьте, что в последнем примере кода использовались и однострочные и многострочные комментарии)
Вывод литералов разного типа:
Примеры вывода одного и того же разными способами
Паскаль не зря называют языком программирования, как и обычном человеческом языке «сказать» тут можно одно и то же разными способами. Поэтому очень важно понимать, всё что написано в примерах, которые встречаются в этом тексте. Если вам что-то неясно — задавайте вопросы.
Вывод одной строки — разными способами
Пусть у нас есть задача вывести в консоль такой текст:
Итак, рассмотрим разные способы:
-
Проще всего напечатать этот текст в виде строкового литерала:
— следует отметить, что запятая внутри кавычек не разделяет аргументы, а рассматривается Паскалем как обычный символ внутри строкового литерала.
ПРИМЕЧАНИЕ: Надо понимать, что множественные вызовы write() и передача всё тех же аргументов через запятую — это одно и то же, а вот множественный вызов writeln() и передача аргументов в один writeln() через запятую — не одно и то же, так как после каждого вызова writeln происходит перенос курсора на новую строку.
Вывод многострочного текста
Если требуется вывести многострочный текст, то одним или несколькими write() не обойтись, ведь нужно будет как-то переносить курсор на новую строку, а write этого делать не умеет, поэтому нам придётся использовать в том числе и writeln().
Пусть нам требуется вывести в косоль такого аски-арт робота:
По сути это текст из нескольких строк, где встречаются пробелы другие символы:
Разные способы вывода:
- В отличии от предыдущих примеров тут уже не обойтись передачей всего текста в один строковый литерал, так как этот робот многострочный, поэтому чтобы вывести его построчно будем использовать серию writeln():
- После вывода последней строки перенос курсора не обязателен, и потому можно использовать write():
- Если вы почему-то хотите вывести какую-то очередную стоку с помощью write() и после неё идёт текст, который должен начинаться с новой строки, то не забывайте дополнительно вызвать пустой writeln(), например:
Видео-пояснение
К этому уроку есть видео-пояснения:
- Виды литералов: стороковые, символьные, числовые. Writeln() — начало работы: https://youtu.be/tZYsinEC_Q0
- Write, Writeln, вывод литералов, аргументы процедуры, отличия: https://youtu.be/dcaXkgx36D0
- Урок для детей: Литералы и вывод в консоль, примеры и пояснения
Задачи для самостоятельного решения
-
Ответьте на вопросы (письменно):
- Литералы какого типа вы знаете?
- четыре аргумента — первые два целочисленные, и третий символьный и четвертый строковый.
- два разных аргумента символьного типа
- пять аргуементов — первые два строковое, один числовой и два символьных
- три аргумента: два строковых и один числовой
Подсказка: если разобраться не получается или для лучшего понимания, см. этот видео-разрабор ответа.
и вызовом этой процедуры несколько раз с каждым из этих аргументов, например:
? Будет ли разница между выведенными на экран текстами, если в них write() заменить на writeln()?
(если не можете ответить сходу — запустите по очереди оба примера ,сравните результат и снова почитайте объяснения выше)
Подсказка: если разобраться не получается или для лучшего понимания, см. этот видео-разрабор ответа.
ПРИМЕЧАНИЕ: когда будете решать следующие ниже задачи, можете привести все решения в теле одной программы, просто закомментировав то. что уже работает, ваш код будет выглядеть как-то так:
Когда же будете показывать работу программы расскомментируйте те строки, работу которых хотите продемонстрировать. Например показываем работу первой строчки тела программы (в предыдущем же примере мы показывали работу второй строки):
Далее решите задачи запуская код программы, в теле которого:
Выведите эту строку на экран 4-ре раза, для каждого пункта используя один вызов writeln(), без иного дополнительного кода :
- С помощью 1 аргумента — литерала строкового типа
- С помощью 2-х аргументов-литералов любого типа
- С помощью вывода всей строки, кроме последнего символа, потом уже этот последний символ
- Так, чтобы одна цифра была числовым литералом, вторая символом, а всё остальное чем угодно
ПРИМЕЧАНИЕ: После выполнения всех четырёх пунктов на экране (в консоли) вы должны получить 4 строки:
с помощью отдельных символов (симольных литералов), а всё остальное как угодно.
Подсказка: попробуйте решить самостоятельно, если не все понятно можно посмотреть разбор решения