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

Урок 2. Очистка экрана, проблема с кириллицей и др.

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

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

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

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

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

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

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

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

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

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

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

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

Открываем браузер, и в поисковой строке гугла вбиваем «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 (раньше вы, скорее всего, просто нажимали на крестик в правом верхнем углу окна):

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

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

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

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

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

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

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

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

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

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

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

Задания

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

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

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

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

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

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

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

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

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

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

Источник

Очистка экрана

Как очистить экран в паскалеОчистка выбранной области экрана
Необходимо отчистить отдельный угол экрана в проге. Есть ли какой то оператор делающий это, или еще.

Как очистить экран в паскалеОчистка экрана и остановка программы до нажатия любой клавиши
Помогите сделать так что бы в этой программе происходила очистка экрана и отстановка программы до.

Как очистить экран в паскалеВыведите 200 символов ‘*’ случайного цвета в точки экрана со случайными координатами. Фон экрана-черный
Помогите написать программу. Выведите 200 символов ‘*’ случайного цвета в точки экрана со.

Во первых нам нужно подключить модуль Crt для этого нужно написать строку uses Crtl; перед var

Затем использовать в нужном нам месте строку ClrScr; для отчистки экрана.

papaDOS, нет,вы меня не поняли. мне не просто нужно написать clrscr и выполнить очистку при запуске. мне надо реализовать процедуру,чтобы можно было бы очищать во время выполнения программы

Добавлено через 25 секунд
j7777777, спасибо,сейчас попробую

Как очистить экран в паскалеВ центре экрана нарисуйте эллипс, закрашенный цветом LightGreen, всю остальную площадь экрана сделайте фиолетовой.
помогите пожалуйста. уже не знаю что делать. ничего в графическом не понимаю. заранее спасибо.

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

Ввод символа, очистка экрана, вывод символа в центре экрана
Вывести приглашение к вводу символа, ввести символ, вывести введенный символ в центре очищенного.

Источник

Модуль Crt

Модуль Crt позволяет выводить цветные символы на цветном экране. Хотя по-прежнему отображение будет происходить в текстовом режиме. Текстовый режим означает, что на экране могут выводиться только определенные символы в определенных местах (знакоместах). Можно представить экран, разделенным вертикальными и горизонтальными линиями на ячейки. В эти ячейки можно «вписывать» различные символы. У каждой ячейки есть адрес.

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

Примечание. В Ubuntu модуль Crt не работает, если программу компилировать не в домашнем каталоге.

Модуль Crt содержит ряд процедур, позволяющих задавать цвет символов и экрана, очищать экран, менять позицию курсора и др.

Стандартный экран в Паскале чаще формируется из 25 строк и 80 столбцов. Строки нумеруются сверху вниз, а столбцы слева на право. Нумерация начинается с единицы (что может показаться непривычным).

Примечание. Если программа запускается в терминале Linux, то количество строк и столбцов определяется соответственно шириной и высотой экрана терминала. В случае попытки вывести символ за границами доступной области, он выводится в верхнем левом углу.

Количество доступных цветов (для экрана и символов) всего 16. Они кодируются числами от 0 до 15. Также вместо чисел можно прописывать названия цветов.

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

Чтобы очистить экран от всех надписей, требуется выполнить процедуру clrscr. Если перед этим был задан цвет экрана (с помощью textbackground), то экран будет залит соответствующим цветом.

Цвет текста определяется процедурой textcolor, позиция курсора – gotoxy.

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

Также существует процедура временной задержки delay (аргумент задается в микросекундах), если требуется выводить символы не сразу, а постепенно.

Источник

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

В состав Free Pascal входит целый ряд стандартных модулей, перечислим некоторые из них:

· math – модуль содержит много дополнительных математических, тригонометрических и статистических функций;

· wincrt – модуль для поддержки терминал подобного текстового окна в экране. При этом не нужно писать специальный код для поддержки окон.

Для полного описания экранной позиции кроме символа следует задать еще и атрибут, содержащий информацию о цвете символа и фона на экране. Символ и атрибут занимают в памяти по 1 байту. В модуле CRT определена переменная

Структура байта-атрибута показана на рис. Л.1.

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

Рис. Л.1. Структура байта-атрибута консоли

Рассмотрим некоторые функции и процедуры модуля CRT :

Все экранные координаты, кроме координат самого окна, являются зависимыми относительно текущего окна. Например, GotoXY (1, 1) всегда будет устанавливать курсор в верхний левый угол текущего окна.

11. FUNCTION WhereX : Byte и

Программа, очищающая экран и печатающая слово ПРИВЕТ! в заданном месте экрана.

Пример программы, которая рисует улитку Паскаля в текстовом режиме при помощи символа *.

TextBackground(Black); // цвет фона черный

X := succ ( Random (80)); // начальная координата окна меньше пределов

Window(X, Y, X + Random(15)+1, Y + Random(10)+1);

TextBackground(Random(16)); // цвет фона окна

Источник

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

Очистка графического экрана

В процессе работы необходимо очищать экран.

Вывод текста в графическом режиме

В графическом режиме для вывода текста используется растровый шрифт размером 8 x 8 и несколько штриховых шрифтов. Символ в растровом шрифте определяется матрицей, имеющей 8 x 8 битов. Штриховой шрифт определяется серией векторов, которые сообщают графической системе, как рисуется шрифт.

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

Масштабирование и выбор шрифта производится с помощью процедуры

Procedure SetTextStyle (Font : word; Direction :word; CharSize :word), где

Для вывода текста на экран предназначены две процедуры.

Если строка слишком длинная и выходит за пределы экрана или текущей области просмотра, то она усекается.

SetTextStyle (1, 0, 2);

OutText (‘Графический режим’);

SetTextStyle (0, 0, 1);

OutTextXY ( GetMaxX div 2, GetMaxY div 2, ‘Графический текст’);

OutTextXY (60, 300, ‘ Для продолжения нажмите клавишу ‘);

Вывод численных данных в графическом режиме

Для вывода числовых данных в модуле Graph нет специальных процедур.

Str ( Max :6:2, StrMax ); <результат преобразования числа в строку
записывается в переменную StrMax>

OutTextXY (200,20, ‘ Максимум = ‘ + StrMax );

Графическое окно аналогично окну в текстовом режиме.

Вся графическая информация выводится по отношению к текущему окну до тех пор, пока окно не изменится.

Рассмотрим некоторые процедуры и функции работы с окнами.

Задать графическое окно можно с помощью процедуры

Procedure SetViewPort (x1, y1, x2, y2 : word; Clip : boolean).

SetViewPort(0,0,GetMaxX, GetMaxY, True).

Построение движущихся изображений

Для построения движущихся изображений существует два метода.

1. Сохранение образов в памяти и восстановление на экране.

2. Управление страницами.

Сохранение образов в памяти и восстановление на экране

Суть этого метода заключается в следующем. Можно сохранить (в памяти) некоторую прямоугольную область экрана, а затем быстро восстанавливать данную область в другом месте экрана. Быстрая смена «кадра» со смещением даст эффект движения. Если координаты смещения изменять с маленьким шагом и действительно быстро воспроизводить картинку, получим плавное движение.

В модуле Graph для реализации этого метода предназначены следующие процедуры и функции.

Procedure GetImage (x1, y1, x2, y2 : word; var Buf)

помещает в память копию прямоугольного фрагмента изображения.

. Размер Buf должен быть >= 4 + размер памяти для запоминаемой области (в 4 байтах запоминается ширина и высота области).

Для вычисления необходимого объема памяти можно воспользоваться функцией

Function ImageSize (x1, y1, x2, y2 : integer) : word

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

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

Для указания применяемой логической операции определены следующие константы:

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

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

Var Gd, Gm : integer;

Size := ImageSize (10, 100, 20, 110);

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *