Как стирать в паскале

Не всё, что изначально кажется простым,
окажется таковым в конце.

В прошлый раз мы написали программу, которая здоровается с вами, выводя на экран приветственное сообщение «Привет!». Однако переключаясь в окно, где выводятся результаты выполнения программы, мы видели не только сообщение «Привет!», но и целый ряд служебных сообщений, которые Free Pascal выводит во время своего запуска.

Как стирать в паскале

Хотелось бы, чтобы наша программа перед выводом каких-либо сообщений очищала экран. Как это сделать? Очень просто: нужно добавить в программу вызов команды (процедуры) ClrScr (сокращение от английского «clear screen» — «очистить экран»).

Если ваша предыдущая программа hello.pas закрыта, то откройте её, нажав клавишу F3 (File | Open). Напоминаю, что все наши программы мы сохраняем в папке «C:FPC3.0.0work».

Чтобы не затереть файл hello.pas нашими модификациями, сохраним открытый файл hello.pas под другим именем. Откройте меню «File» (Alt + F) и нажмите «Save as…». В поле «Name» напечатайте helloClr.pas (Clr — сокр. от «clear» — очищать) и нажмите «OK», чтобы сохранить программу под новым именем. После этого модифицируйте текст программы так, чтобы он соответствовал нижеприведенному варианту:

program helloClr;

begin
ClrScr;

Writeln( ‘Привет!’ );
end.

Запустите программу, нажав Ctrl + F9.

Как стирать в паскале

Упс! Программа не запускается. Что говорит компилятор? (Напомню, что компилятор — Free Pascal — переводит нашу программу с языка Паскаль в машинные инструкции, понятные компьютеру). Компилятор сообщает, что у нас 3 ошибки. Одна с пометкой Error и две с пометкой Fatal. Но мы, глядя на текст сообщений, уже видим, что ошибка на самом деле ровно одна — Error: Identifier not found «ClrScr» — Ошибка: идентификатор «ClrScr» не найден.

Идентификатор — это имя. Компилятор не понимает, что такое ClrScr. Вспомним, в прошлый раз подобная ошибка у нас была, когда мы пропустили букву «e» в слове Writeln. Компилятор не знал, что такое Writln и из-за этого ругался. Может быть, мы допустили ошибку в названии процедуры (команды) ClrScr? Смотрим внимательно. Нет ошибок? И тем не менее компилятор не понимает, что такое ClrScr.

Да, так и есть. Компилятор не знает, что такое ClrScr. 

Но почему тогда он знает Writeln и не знает ClrScr? Дело в том, что процедура (команда) Writeln относится к базовым процедурам Паскаля, а вот алгоритм работы процедуры ClrScr описан отдельно. Отдельно — означает в отдельном модуле (файле). И для того, чтобы компилятор Free Pascal знал, как работает эта процедура, вы должны указать в своей программе, что используете модуль Crt. Так называется модуль, в котором описан алгоритм процедуры ClrScr. Или как еще говорят: реализована процедура ClrScr.

Добавим к нашей программе недостающую строку «uses Crt;»:

program helloClr;

uses
  Crt;

begin
ClrScr;

Writeln( ‘Привет!’ );
end.

Uses — по-английски означает «использует». Модуль Crt — тот самый модуль, в котором реализована процедура ClrScr.

Теперь мы можем запустить нашу программу (Ctrl + F9):

Как стирать в паскале

Что ж, на этот раз наша программа запустилась, и даже очистился экран, вот только вместо «Привет!» мы видим на экране какую-то белиберду. Т. е. Free Pascal не отображает русские буквы (кириллицу), если подключен модуль Crt и используется процедура ClrScr (эксперимент показывает, что даже если удалить строку с вызовом процедуры ClrScr, проблема с отображением кириллицы все равно остается).

Что делать?

Открываем браузер, и в поисковой строке гугла вбиваем «free pascal clrscr не отображает русские буквы»:

Как стирать в паскале

Первая же ссылка приводит нас на форум, где мы находим решение:

Как стирать в паскале

Чтобы исправить проблему с отображением русских букв (кириллицы), сохраняем нашу программу (F2 — File | Save), закрываем Free Pascal (Alt + X — File | Exit), и щелкаем правой кнопкой мыши на ярлыке запуска Free Pascal, расположенном на нашем Рабочем столе.

Как стирать в паскале

Открываем пункт «Свойства» и переходим на закладку «Шрифт».

Как стирать в паскале

Возвращаем «Точечные шрифты», размер выставляем «10 x 18». Нажимаем «ОК».

И снова запускаем Free Pascal:

Как стирать в паскале

Как видите, вид окна поменялся.

Запускаем нашу программу (Ctrl + F9), нажимаем Alt + F5, чтобы переключиться в окно результатов работы программы, и видим результат:

Как стирать в паскале

Экран очищен, на экран выведено сообщение «Привет!».

Краткое содержание урока

✔  Мы узнали как правильно закрывать Free Pascal (раньше вы, скорее всего, просто нажимали на крестик в правом верхнем углу окна):

  • Alt + X (File | Exit) — закрыть Free Pascal.

✔  Дополнили нашу программу «Привет!» очисткой экрана:

program helloClr;

uses
  Crt;

begin
ClrScr;

Writeln( ‘Привет!’ );
end.

✔  Узнали новое ключевое слово языка Паскаль:

  • uses — ключевое слово, после которого перечисляются все модули, используемые нами в программе.

✔  Познакомились с еще одной процедурой:

  • ClrScr — очищает экран от текста.

✔  Узнали о существовании модуля Crt.

✔  И наконец, мы впервые столкнулись с проблемой на уровне инструмента (Free Pascal): когда после подключения модуля Crt у нас перестали отображаться русские буквы (кириллица) в окне результатов. Мы не разобрались, почему это происходит, т. к. причины скрыты внутри модуля Crt. Можно ли выяснить причины, по которым у нас возникла проблема с кириллицей? Чисто теоретически, да. Но для этого нам бы понадобились знания, которые выходят за рамки наших уроков. Поэтому мы воспользовались обходным решением (workaround) — поменяли используемый в программе шрифт Lucida Console на точечный шрифт.

И вот здесь я хочу остановиться подробнее

При реализации нашей программы у нас возникла проблема с кириллицей, которую мы решили. Казалось бы — вопрос снят: экран очищается, сообщение отображается. Но обратите внимание, что мы отказались от использования шрифта Lucida Console, который смотрится гораздо опрятнее точечного шрифта. Т. е. наше решение (или правильнее, обходное решение) далеко от идеального.

Приведу аналогию. Представьте себе, что вы — работник дорожной службы, которому поручили на такой-то улице нарисовать «зебру» и поставить соответствующие знаки пешеходного перехода. Вы приехали на заданную улицу и обнаружили, что в том месте, где вам надо рисовать «зебру», из-под асфальта бьет фонтан воды, и образовалась лужа. Какие у вас есть варианты действий:

  1. Выяснить откуда вода (скорее всего, прорвало трубу), устранить течь, высушить лужу и уже после этого рисовать «зебру».
  2. Нарисовать «зебру» 50 метрами ниже (или выше) — там, где нет воды, и где дорожные условия позволяют это сделать.
Читайте также:  Как стирать вязаную кофту в машинке

Так вот, второй вариант — это и есть обходное решение (workaround). Оно может иметь серьезные недостатки. Например, школа находится именно там, где и надо было изначально рисовать «зебру», и если вы нарисуете её ниже (выше), то далеко не все школьники дойдут до этой зебры, а значит, на изначальном участке дороги будет повышенная аварийность из-за школьников, перебегающих дорогу в неположенном месте.

А что нужно, чтобы пойти по пути первого варианта? Другие компетенции. Если вы не владеете нужными навыками (и инструментами) — у вас нет экскаватора, чтобы добраться до трубопровода, сварочного аппарата и т. д. — то вам нужно ждать, когда другие люди решат возникшую проблему, прежде чем вы сможете нарисовать «зебру» именно там, где вам надо. В нашем примере это означает, что вы должны написать письмо разработчикам Free Pascal, описать возникшую проблему (некорректное отображение кириллицы после подключения модуля Crt), и ждать, когда разработчики устранят эту ошибку в модуле Crt. На всё это может уйти неопределенное время. Или разработчикам Free Pascal будет вообще не до этой проблемы, и ваша «лужа» так никуда и не денется.

Другой сценарий: обладая нужными навыками, устранить самому эту проблему в модуле Crt. А для этого нужно знать, что такое дизассемблирование, обратная разработка (reverse engineering) и т. д.

Идеальный вариант — это, конечно, когда лужу устраняют те, кто за нее отвечают. Т. е. разработчики Free Pascal. Но мы живем не в идеальном мире, и поэтому нам иногда приходится использовать обходные решения.

И последнее: когда ваши программы перестанут вмещаться на одну страницу экрана, и будут занимать сотни, а то и больше, страниц, у вас могут тоже возникать подобные ситуации. Когда что-то идет не так и нужно найти причины проблемы, а потом её решение. И вот тут может возникнуть соблазн «передвинуть «зебру» на 50 метров выше или ниже» (использовать обходное решение) вместо того, чтобы разбираться, почему возникла проблема и как её устранить. В случае, когда речь идет о вашей зоне ответственности, такой подход, в целом, недопустим (!). Вы должны всегда понимать, что и почему происходит в вашей программе. Если оказывается, что программа ведет себя не так, как вы это задумывали, надо разбираться, почему она себя так ведет (откуда лужа?), а не цепляться за первое попавшееся решение, которое вроде бы «решает» вашу проблему.

Задания

  1. Что будет выведено на экране после запуска следующей программы?

program helloClr;

uses
Crt;

begin
ClrScr;
ClrScr;

Writeln( ‘Привет!’ );
end.

  1. А после запуска такой программы?

program helloClr;

uses
Crt;

begin
ClrScr;
Writeln( ‘Привет!’ );

ClrScr;
Writeln( ‘Пока!’ );
end.

  1. Исправьте все ошибки в следующей программе, и запустите исправленный вариант:

progrann helloClr;

use
Crt;

begin
ClrScr
Writeln( Привет!’ );
end;

Языковая подсказка:

«illegal character» переводится как «некорректный символ».

Задания повышенной сложности

  1. Напишите программу, которая выведет на чистый экран текст программы hello.pas (см. урок 1).

Подсказки:

1) чтобы вывести на экран пустую строку, используйте команду «Writeln;» (без скобок и одинарных кавычек);

2) для отступов используйте по 3 пробела;

3) чтобы вывести одинарные кавычки на экран, используйте по 2 одинарных кавычки, например: «Writeln( »’Привет»’ );» напечатает на экране не просто Привет, а ‘Привет’.

Непонятно почему в скобках по 3 кавычки? Смотрите: самая левая и самая правая одинарные кавычки обрамляют тот текст, который мы хотим вывести на экран, например:

Writeln( ‘Кафе Огонёк’ );

А что делать, если нам нужно в сообщении вывести одинарные кавычки? Ведь они задействованы в качестве служебных символов, по которым Free Pascal определяет, где наша строка в программе начинается, а где заканчивается. Вот поэтому Free Pascal говорит: хочешь вывести в своей строке одну одинарную кавычку, поставь их две (!) друг за дружкой, и я буду знать, что это не конец строки, а всего лишь обычная одинарная кавычка, которую ты хочешь напечатать.

Например, вот так:

Writeln( ‘Кафе »Огонек» открывается сегодня’ );

Команда выше выведет на экран сообщение:

Кафе ‘Огонек’ открывается сегодня

  1. Подумайте, легко ли написать программу, которая выведет на экран саму себя, т. е. свой собственный текст (такая программа называется куайн — по-английски, quine)?

Источник

27 Июн 13

Комментарии :  1        Просмотры :  15989

Вывод на экран в паскале

Для выполнения различных задач в паскале нам понадобится выводить определенную информацию на экран.

Информация , которую мы будем выводить может быть абсолютно разной. Она может быть текстом , переменной и даже выражением вроде ( a + b ).

В языке программирования паскаль предусмотрен тот случай , когда нам нужно вывести на экран какую либо информацию , например результат работы программы или значение какой-либо переменной. Вывод в паскале можно осуществить за счет двух операторов вывода : write и writeln , прочитать о которых вы можете ниже.

Writeln

Первый оператор вывода — это writeln ( write — писать , ln — сокр. линия ). Благодаря нему и осуществляется вывод информации на экран. Давайте разберем это на примере :

Допустим , мы хотим вывести приветствие на экран в формате «Привет друг !» Код такой программы выглядит так :

program mypascal;
begin

writeln(‘Привет друг !’);

end.

Давайте разберем данную программу. После выполнения кода , на экран будет выведено сообщение — «Привет друг !» как раз то , что мы хотели.
Оператор вывода writeln выводит то , что находится в круглых скобках и одинарных кавычках. Запомните ! Чтобы выводить текст на экран , его следует заключать в кавычки.

Для вывода чисел на экран можно пользоваться кавычками , а можно и не пользоваться.

Вывод чисел в кавычках и без них
В обоих случаях на экран будет выведено число 17 , поэтому можно утверждать , что вывод чисел на экран не зависит от кавычек.

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

Если вы имеете познания в языке паскаль , то наверняка понимаете что такое переменные , если нет , то вам сюда.

Если в операторе вывода writeln() в круглых скобках будет стоять слово hello без кавычек , то программа выведет на экран значение переменной hello ( если она существует ).

Но иногда нам нужно вывести на экран и текст и переменную. Чтобы вывести на экран сообщение — «Привет Марина !» , где текст «Марина» содержится в переменной Name ( имя ) , нам потребуется изменить оператор writeln() так :

program mypascal;
var
name:string;
begin

name:= ‘Марина’;
writeln(‘Привет ‘,name,’ !’);

end.

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

Пример вывода имени и фамилии :

program mypascal;
var
name,lname:string;
begin

name:= ‘Марина’;
lname:= ‘Петрова’;
writeln(‘Привет ‘,lname,name);

end.

В результате выполнения этой программы , на экран будет выведено сообщение «Привет ПетроваМарина». Да , именно так , потому что между переменными name и lname нет пробела. Чтобы исправить это ( имя и фамилия выводились через пробел ), код должен быть таким :

program mypascal;
var
name,lname:string;
begin

name:= ‘Марина’;
lname:= ‘Петрова’;
writeln(‘Привет ‘,lname,’ ‘,name);

end.

Write

Второй оператор вывода — write ( писать ). Он практически ничем не отличается от оператора вывода writeln , вернее ничем не отличается ( он также осуществляет вывод на экран ). Однако одно отличие все же есть , но совсем небольшое. Возможно вы уже поняли его ( исходя из название ).

Информация , которую оператор writeln() выводит на экран занимает всю строку.А значит после того , как оператор выведет последний элемент , программа переведется на следующую строку.

Вывод на экран через writeln
Два этих оператора выведут оба слова на разных строках:

Привет
Андрей

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

Привет Андрей
Как дела ?

И если после writeln(‘Как дела ?’) мы бы выводили ещё какой-либо текст , то он появился бы на следующей строке.

Как очистить экран в паскале :

Некоторые программы могут быть настолько сложными , что выводимой информации будет очень много. Поэтому некоторый ненужный текст можно стереть. Для этого в паскале предусмотрен оператор clrscr.

Чтобы очистить экран в паскале используйте такой оператор clrscr; Однако злоупотреблять им не стоит. Так же следует помнить , что оператор clrscr работает только в модуле crt , который подключается так :

program mypascal;
uses
crt;
begin

clrscr;

end.

Комментарии :  1        Просмотры :  15989

RSS лента

Подписаться на rss

Подпишитесь на нашу ленту новостей rss и вы всегда сможете быть в курсе обновлений на нашем сайте.

Решение задач

Если вас интересует решение какой-либо задачи , то вы можете опубликовать
её условие на нашем сайте или форуме. И в скором времени другие пользователи помогут вам.

Опубликовать на сайте

Опубликовать на форуме

Источник

Читайте также:  Как стирать жирное белье
Как стирать в паскале

Как стирать в паскале

Для выполнения различных задач в паскале нам понадобится выводить определенную информацию на экран.

Информация , которую мы будем выводить может быть абсолютно разной. Она может быть текстом , переменной и даже выражением вроде ( a + b ).

В языке программирования паскаль предусмотрен тот случай , когда нам нужно вывести на экран какую либо информацию , например результат работы программы или значение какой-либо переменной. Вывод в паскале можно осуществить за счет двух операторов вывода : write и writeln , прочитать о которых вы можете ниже.

Writeln

Первый оператор вывода — это writeln ( write — писать , ln — сокр. линия ). Благодаря нему и осуществляется вывод информации на экран. Давайте разберем это на примере :

Допустим , мы хотим вывести приветствие на экран в формате «Привет друг !» Код такой программы выглядит так :

program mypascal;

begin

writeln(‘Привет друг !’);

end.

Давайте разберем данную программу. После выполнения кода , на экран будет выведено сообщение — «Привет друг !» как раз то , что мы хотели.
Оператор вывода writeln выводит то , что находится в круглых скобках и одинарных кавычках. Запомните ! Чтобы выводить текст на экран , его следует заключать в кавычки.

Для вывода чисел на экран можно пользоваться кавычками , а можно и не пользоваться.

Как стирать в паскале

В обоих случаях на экран будет выведено число 17 , поэтому можно утверждать , что вывод чисел на экран не зависит от кавычек.

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

Если вы имеете познания в языке паскаль , то наверняка понимаете что такое переменные , если нет , то вам сюда.

Читайте также:  Как вы стираете хозяйственным мылом

Если в операторе вывода writeln() в круглых скобках будет стоять слово hello без кавычек , то программа выведет на экран значение переменной hello ( если она существует ).

Но иногда нам нужно вывести на экран и текст и переменную. Чтобы вывести на экран сообщение — «Привет Марина !» , где текст «Марина» содержится в переменной Name ( имя ) , нам потребуется изменить оператор writeln() так :

program mypascal;

var

name:string;

begin

name:= ‘Марина’;

writeln(‘Привет ‘,name,’ !’);

end.

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

Пример вывода имени и фамилии :

program mypascal;

var

name,lname:string;

begin

name:= ‘Марина’;

lname:= ‘Петрова’;

writeln(‘Привет ‘,lname,name);

end.

В результате выполнения этой программы , на экран будет выведено сообщение «Привет ПетроваМарина». Да , именно так , потому что между переменными name и lname нет пробела. Чтобы исправить это ( имя и фамилия выводились через пробел ), код должен быть таким :

program mypascal;

var

name,lname:string;

begin

name:= ‘Марина’;

lname:= ‘Петрова’;

writeln(‘Привет ‘,lname,’ ‘,name);

end.

Write

Второй оператор вывода — write ( писать ). Он практически ничем не отличается от оператора вывода writeln , вернее ничем не отличается ( он также осуществляет вывод на экран ). Однако одно отличие все же есть , но совсем небольшое. Возможно вы уже поняли его ( исходя из название ).

Информация , которую оператор writeln() выводит на экран занимает всю строку.А значит после того , как оператор выведет последний элемент , программа переведется на следующую строку.

Как стирать в паскале

Два этих оператора выведут оба слова на разных строках:

В отличии от write , который после завершения работы не переходит на следующую строку.

Как стирать в паскале

В данном случае результат будет такой :

И если после writeln(‘Как дела ?’) мы бы выводили ещё какой-либо текст , то он появился бы на следующей строке.

Прочитать про оформление текста на экране в паскаль можно здесь

Как очистить экран в паскале

Некоторые программы могут быть настолько сложными , что выводимой информации будет очень много. Поэтому некоторый ненужный текст можно стереть. Для этого в паскале предусмотрен оператор clrscr.

Чтобы очистить экран в паскале используйте такой оператор clrscr; Однако злоупотреблять им не стоит. Так же следует помнить , что оператор clrscr работает только в модуле crt , который подключается так :

program mypascal;

uses

crt;

begin

clrscr;

end.

Расширенный ввод и вывод

Как уже упоминалось, в языке Паскаль есть две функции для ввода: read и readln. Разница между ними заключается прежде всего в том, что read читает символы, которые нужно ввести (например, если вводится целое число — цифры), пока не встретит «неправильный» символ, а остальные оставляет для последующего ввода; readln же читает символы до конца строки и выбрасывает «лишние». Так, фрагмент кода (переменные a и b — целые)

readln(a);

readln(b);

writeln(a,’ ‘,b);

на ввод

1 2↵ Enter

3 4↵ Enter

выведет «1 марта»; а фрагмент

read(a);

read(b);

writeln(a,’ ‘,b);

на тот же ввод выведет «1 2»!

Заметим, что второй код эквивалентен кода

read(a, b);

writeln(a,’ ‘,b);

Расширенный вывод

Мы уже знаем, что процедуры write и writeln выводят свои параметры, причем writeln добавляет знак новой строки в конце. Но остается одно неудобство — действительные числа выводятся не так, как нам бы хотелось. Чтобы указать, как именно должны выводиться числа, используются отметки форматирования, которые ставятся через двоеточие после параметра. Так, строка

выведет x = 2.00 Вторая отметка — число 2, как вы могли догадаться, означает «2 знака после десятичной запятой»; а первая отметка — минимальную общее количество знаков в выводе (обратите внимание на два пробела между = и 2! Число 2.00 должно занять 5 знаков, но имеет только 4, и поэтому дополняется пробелом). Вторая отметка может использоваться только с действительными числами.Отметки могут быть любыми выражениями с целым значением.

Кроме процедур вывода, есть еще одна, использующий отметки форматирования — процедура Str (n, s) превращает число n на строку s. К числу можно добавлять метки.

Названные процедуры в Паскале несколько отличаются от других — в них может быть произвольное количество параметров и отметки форматирования, чего не бывает в «обычных» функций и процедур.Это особенность этих и только этих процедур, других таких процедур создавать нельзя.

[Всего голосов: 27    Средний: 2.6/5]

Источник