Итак, уважаемые читатели ZedPost.Ru, продолжаем наши уроки по паскалю. В прошлый раз мы узнали о том, что такое двумерные массивы, сегодня мы узнаем о моудле CRT. Подробнее далее.
Что такое модуль CRT? Это модуль в Паскаль, который может выводить в отдельном диалоговом окне цветные символы на цветном фоне. Также с помощью него можно настроить размер этого окна, переместить курсор в определённую точку экрана, а также очищать это диалоговое окно.
Модуль CRT в паскале поддерживает 16 цветов, нумерация которых начинается с 0 (от 0 до 15 включительно). Также можно просто прописывать названия цветов не используя цифры.
Для того чтобы использовать модуль CRT его нужно подключить с помощью следующей строчки:
Для того чтобы закрасить фон нужно использовать такую команду:
Надо сказать, что textbackground следует применять вместе с процедурой очистки экрана, которая описана ниже.
Для очистки экрана (1) и установки позиции курсора (2) используются соответственно следующие команды:
Цвет текста определяет процедура:
Для временной задуржки существует процедура delay
Запускать программу в Pascal с использованием модуля CRT нужно при помощи клавиш Shift+F9.
С помощью этого модуля игры для компьютера, телефона не напишешь. Для windows phone 7 игры написаны на совсем другом языке программирования.
Пример программы на Паскаль с использованием модуля CRT:
Этот модуль должен работать во всех программах — компиляторах.
Модуль Crt позволяет выводить цветные символы на цветном экране. Хотя по-прежнему отображение будет происходить в текстовом режиме. Текстовый режим означает, что на экране могут выводиться только определенные символы в определенных местах (знакоместах). Можно представить экран, разделенным вертикальными и горизонтальными линиями на ячейки. В эти ячейки можно «вписывать» различные символы. У каждой ячейки есть адрес.
Примечание. В Ubuntu модуль Crt не работает, если программу компилировать не в домашнем каталоге.
Модуль Crt содержит ряд процедур, позволяющих задавать цвет символов и экрана, очищать экран, менять позицию курсора и др.
Стандартный экран в Паскале чаще формируется из 25 строк и 80 столбцов. Строки нумеруются сверху вниз, а столбцы слева на право. Нумерация начинается с единицы (что может показаться непривычным).
Примечание. Если программа запускается в терминале Linux, то количество строк и столбцов определяется соответственно шириной и высотой экрана терминала. В случае попытки вывести символ за границами доступной области, он выводится в верхнем левом углу.
Количество доступных цветов (для экрана и символов) всего 16. Они кодируются числами от 0 до 15. Также вместо чисел можно прописывать названия цветов.
Для того чтобы в программе можно было использовать содержимое модуля Crt, его надо импортировать (подключить) в программу. Делается это в секции, которая начинается со слова uses.
Чтобы очистить экран от всех надписей, требуется выполнить процедуру clrscr. Если перед этим был задан цвет экрана (с помощью textbackground), то экран будет залит соответствующим цветом.
Цвет текста определяется процедурой textcolor, позиция курсора – gotoxy.
Для вывода символов на экран используются стандартные процедуры write и writeln.
Также существует процедура временной задержки delay (аргумент задается в микросекундах), если требуется выводить символы не сразу, а постепенно.
В этом уроке мы напишем самую простую программу, состоящую всего из пяти строк. Эта программа будет выводить сообщение на экран. Для написания программы нам необходимо знать как работают операторы Write, Readln, а также понять для чего нужны зарезервированные в Паскаль слова Program, Begin, End.
В строке №1 записывается заголовок программы. Все программы, написанные на языке Pascal, начинаются со служебного слова program. Слово program зарезервировано в Pascal, т.е. оно может использоваться только для объявления имени программы. Далее, через пробел записывается название программы, которое мы придумываем сами. Для примера назовем нашу первую программу «number1». В конце первой строки ставится точка с запятой.
Строка №2. Тело программы начинается с зарезервированного в Pascal слова begin. После него не ставится точка с запятой. Заканчивается программа зарезервированным словом end. (строка №5). После слова end ставится точка. Конструкция begin…end является разделом операторов. Внутри этого раздела находятся операторы, которые будут выполняться программой. В любой программе должны присутствовать слова begin…end.
В строке №3 записывается первый оператор, который будет выполнять программа. Оператор Write служит для вывода на экран какого-либо сообщения. Текст этого сообщения записывается после слова Write, заключается в круглые скобки и в апострофы. В конце обязательна точка с запятой (все операторы в программе должны отделяться друг от друга точкой с запятой). Таким образом, в результате работы оператора Write на экран будет выведено сообщение «Привет.»
В строке №4 записывается оператор readln. Этот оператор служит для задержки экрана, чтобы мы могли увидеть результаты выполнения программы на экране. Если его не использовать, то после того как программа будет выполнена экран сразу свернется и мы не успеем увидеть выводимое на экран сообщение. Кстати, оператор Readln можно не использовать. А для того чтобы увидеть результаты выполнения программы можно нажать Alt+F5. После оператора Readln у нас не стоит точка с запятой т. к. далее идет оператор end. (перед End. точка с запятой не обязательна). Теперь наберем нашу программу в Паскале.
Сохраним, нажав F2 (или в командной строке File-Save) и запустим ее, нажав Ctrl+F9 (либо в панели команд Run-Run).
Получим следующий результат.
Самая нижняя строка и есть наш результат.
Теперь нажмем Enter (для завершения выполнения программы) и еще раз запустим программу.
Получим следующий результат.
Этим примером я хочу показать Вам, что каждый раз при запуске программы старые результаты программы тоже будут выводиться на экран. Для того чтобы этого избежать, используется оператор очистки экрана clrscr (сокращенно от англ. Clear Screen (очистить экран)), который ставится вначале программы после слова begin. Для того чтобы этот оператор работал необходимо подключить модуль CRT с помощью команды USES.
Программа будет выглядеть так:
Заметьте, что после Uses Crt и после Clrscr ставится точка с запятой.
После запуска (ctrl+F9) окно вывода сообщения будет иметь вид:
Дополнение к материалу.
1. Программа, запущенная в Free Pascal обрабатывается какое-то количество времени. Поэтому после запуска необходимо подождать несколько секунд. Вы увидите сообщение о том, что выполняется программа, а через несколько секунд (1-20) увидите результат выполнения программы.
2. При запуске программ, которые должны выводить на экран текст на русском языке может возникнуть проблема с кодировкой. В консольном окне вы увидите непонятные символы. Для того чтобы этого избежать небходимо кликнуть правой кнопкой мыши по верхней части консольного окна (там, где написано C:FPC2.2.2ini386-win32fp.exe), выбрать «Свойства» и перейти на вкладку «Шрифт». Здесь выбираем «точечные шрифты» и нажимаем Ok.
3. Компилятору Pascal абсолютно безразлично какими буквами Вы будете набирать программу, заглавными или строчными, т.е. регистр при наборе программ роли не играет.
4. Имя программы (в нашем случае «number1») не играет какой-либо роли в программе, поэтому не обязательно объявлять имя программы с помощью слова «Program». Таким образом, первую строку программы можно не писать и это никак не повлияет на работу программы.
5. Как уже было сказано, слово «Program» является зарезервированным словом в Pascal. Зарезервированные слова можно использовать только по их прямому назначению. При наборе программ в редакторе Pascal все зарезервированные слова подсвечиваются белым цветом. Название программы «number1» является идентификатором (именем). Идентификаторы – это последовательности символов, которые придумывает сам программист. В нашем примере нам необходимо было придумать название программы. При написании идентификаторов используются определенные правила:
- Идентификатор начинается с буквы, или знака подчеркивания.
- Содержит только буквы, цифры или знак подчеркивания.
- Между двумя идентификаторами должен стоять разделитель.
- Максимальная длина 127 символов. Все символы значимы.
- Идентификатор не может повторять зарезервированное слово.
Комментарии
Zhenko! Боюсь тут тебе не помогут никак. Большая часть народа либо просто хвастается либо умеет но делать такие простейшие программы как a:=1+1; Обратись лучше на какой нибудь форум, а лучше изучи сам.
Вот один не плохой форум: http://www.cyberforum.ru/
Желаю удачки тебе! Творческих успехов
Вот программа, которая меняет системную дату и время. никак не могу сделать так, чтобы ClrScr заработала. помогите кто в этом шарит.
uses Crt;
Uses Dos;
CONST
days:ARRAY [0..6] of string [11] = (‘Voskr.’, ‘Ponedel.’, ‘Vtornik’, ‘Sreda’, ‘4etverg’, ‘Pyatnica’, ‘Subbota’);
VAR
year, month, day, day_of_week : WORD;
VAR hour, minute, second, hund : WORD;
BEGIN
Writeln (‘_________________________________________’);
Writeln (‘————- ————— ————-‘) ;
ClrScr;
Write(‘Cleared Screen!’);
PROCEDURE Get_Date;
BEGIN
GetDate (year, month, day, day_of_week);
Writeln (‘Segodnya: ‘, days[day_of_wee k], ‘,’, day,’/’, month,’/’,year);
Writeln (‘————- ————— ————-‘) ;
END;
PROCEDURE Set_Date;
BEGIN
Writeln(‘Vvedit e daty: ‘);
Readln(day, month, year);
SetDate (year, month, day);
Writeln (‘_________________________________________’);
Writeln (‘————- ————— ————-‘) ;
END;
PROCEDURE Get_Time;
BEGIN
GetTime (hour, minute, second, hund);
Writeln (‘Sey4as: ‘, hour,’:’, minute,’:’, second,’:’, hund);
Writeln (‘————- ————— ————-‘) ;
END;
PROCEDURE Set_Time;
BEGIN
Writeln (‘Vvedite vremya’);
Readln(hour, minute, second, hund);
SetTime(hour, minute, second, hund);
END;
BEGIN
Get_Date;
Set_Date;
Get_Time;
Set_Time;
Get_Time;
Writeln (‘OK!’);
Writeln;
Writeln (‘Najmite Enter dlya vihoda . ‘);
Readln;
End.
подскажите, переписал все один в один как тут написано, все точки с запятой и все такое. но при запуске программы выскакивает такое сообщение
Error: Identifier not found "readIn"
гуглил не помогло, не смог найти причины.
var
p7, p4, p1, p8, p5, p2, p9, p6, p3, st1, st2, st3, vod1, vod2, ind,ind2,pam, shet, shet1: integer;hod, ris1, ris2, ris3, ris4, ris5, ris6, ris7, ris8, ris9: string;
begin
write(‘Игра башня!’);
writeln(‘Цель игры:пирамидку из левой части перетащить в правую!’);
writeln(‘Как играть! Вы вводите два числа от 1 до 3. ПЕРВОЕ число означает столбец откуда будет взята часть. ВТОРОЕ число означает в какой столбец будет положена.’);
ind2:=1;
while ind2=1 do
begin
shet:=0;
ris1 := ‘(0000)’;ris2 := ‘__|__ ‘;ris3 := ‘__|__ ‘;ris4 := ‘ (00) ‘;ris5 := ‘ | ‘;ris6 := ‘ | ‘;ris7 := ‘ () ‘;ris8 := ‘ | ‘;ris9 := ‘ | ‘;
p1 := 4;p2 := 0;p3 := 0;p4 := 2;p5 := 0;p6 := 0;p7 := 1;p8 := 0;p9 := 0;
writeln(‘Начнем !’);
writeln(‘ () | | ‘);
writeln(‘ (00) | | ‘);
writeln(‘(0000) __|__ __|__ ‘);
writeln(‘ 1 2 3 ‘);
writeln();
ind:=0;
while ind = 0 do
begin
st1 := p7 + p4 + p1;
st2 := p8 + p5 + p2;
st3 := p9 + p6 + p3;
vod1 := 0;
vod2 := 0;
writeln(‘Вводит е ПЕРВОЕ число!’);
while (vod1 > 3) or (vod1 = 0) do
begin
if vod1 > 3 then writeln(‘Число должно быть от 1 до 3,вводите еще раз.’);
readln(vod1);
end;
writeln(‘Вводит е ВТОРОЕ число!’);
while (vod2 > 3) or (vod2 = 0) or (vod2 = vod1) do
begin
if (vod2 > 3) or (vod1 = vod2) then writeln(‘Число должно быть от 1 до 3 и не равно 1 числу,вводите еще раз.’);
readln(vod2);
end;
case vod1 of
1:
begin
case st1 of
1:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p1;p1 := 0;shet := shet + 1; end;
2: begin p5 := p1;p1 := 0;shet := shet + 1; end;
4: begin p5 := p1;p1 := 0;shet := shet + 1; end;
6: begin p8 := p1;p1 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p1;p1 := 0;shet := shet + 1; end;
2: begin p6 := p1;p1 := 0;shet := shet + 1; end;
4: begin p6 := p1;p1 := 0;shet := shet + 1; end;
6: begin p9 := p1;p1 := 0;shet := shet + 1; end;
end;
end;
2:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p1;p1 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p5 := p1;p1 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p1;p1 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p6 := p1;p1 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end;
end;
3:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p4;p4 := 0; shet := shet + 1; end;
4: begin p5 := p4;p4 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p4;p4 := 0;shet := shet + 1; end;
4: begin p6 := p4;p4 := 0;shet := shet + 1; end;
end;
end;
4:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p1;p1 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p1;p1 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end; end;
5:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p4;p4 := 0; shet := shet + 1; end;
2: begin p5 := p4;p4 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p4;p4 := 0; shet := shet + 1; end;
2: begin p6 := p4;p4 := 0; shet := shet + 1; end;
end; end;
6:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p4;p4 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p4;p4 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end; end;
7:
begin
if (vod2 = 2) then begin p2 := p7;p7 := 0;shet := shet + 1; end; if (vod2 = 3) then begin p3 := p7;p7 := 0; shet := shet + 1; end;
end;end; end;
2:
begin
case st2 of
1:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p2;p2 := 0;shet := shet + 1; end;
2: begin p4 := p2;p2 := 0; shet := shet + 1; end;
4: begin p4 := p2;p2 := 0;shet := shet + 1; end;
6: begin p7 := p2;p2 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p2;p2 := 0;shet := shet + 1; end;
2: begin p6 := p2;p2 := 0;shet := shet + 1; end;
4: begin p6 := p2;p2 := 0;shet := shet + 1; end;
6: begin p9 := p2;p2 := 0;shet := shet + 1; end;
end; end;
2:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p2;p2 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p4 := p2;p2 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p2;p2 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p6 := p2;p2 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end; end;
3:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p5;p5 := 0;shet := shet + 1; end;
4: begin p4 := p5;p5 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p5;p5 := 0;shet := shet + 1; end;
4: begin p6 := p5;p5 := 0;shet := shet + 1; end;
end; end;
4:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p2;p2 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p2;p2 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end; end;
5:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p5;p5 := 0;shet := shet + 1; end;
2: begin p4 := p5;p5 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p5;p5 := 0;shet := shet + 1; end;
2: begin p6 := p5;p5 := 0;shet := shet + 1; end;
end; end;
6:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p5;p5 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p5;p5 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end; end;
7:
begin
if (vod2 = 1) then begin p1 := p8;p8 := 0;shet := shet + 1; end;if (vod2 = 3) then begin p3 := p8;p8 := 0;shet := shet + 1; end;
end;end; end;
3:
begin
case st3 of
1:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p3;p3 := 0;shet := shet + 1; end;
2: begin p4 := p3;p3 := 0; shet := shet + 1; end;
4: begin p4 := p3;p3 := 0;shet := shet + 1; end;
6: begin p7 := p3;p3 := 0;shet := shet + 1; end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p3;p3 := 0;shet := shet + 1; end;
2: begin p5 := p3;p3 := 0; shet := shet + 1; end;
4: begin p5 := p3;p3 := 0;shet := shet + 1; end;
6: begin p8 := p3;p3 := 0;shet := shet + 1; end;
end; end;
2:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p3;p3 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p4 := p3;p3 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p3;p3 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p5 := p3;p3 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end; end;
3:
begin
if (vod1 = 1) then
case st1 of
0: begin p1 := p6;p6 := 0;shet := shet + 1; end;
4: begin p4 := p6;p6 := 0;shet := shet + 1; end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p6;p6 := 0;shet := shet + 1; end;
4: begin p5 := p6;p6 := 0;shet := shet + 1; end;
end; end;
4:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p3;p3 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p3;p3 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end; end;
5:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p6;p6 := 0;shet := shet + 1; end;
2: begin p4 := p6;p6 := 0;shet := shet + 1; end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p6;p6 := 0;shet := shet + 1; end;
2: begin p5 := p6;p6 := 0;shet := shet + 1; end;
end; end;
6:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p6;p6 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p6;p6 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end; end;
end;
end;
end;
if p1 = 1 then ris1 := ‘ () ‘;
if p2 = 1 then ris2 := ‘ () ‘;
if p3 = 1 then ris3 := ‘ () ‘;
if p4 = 1 then ris4 := ‘ () ‘;
if p5 = 1 then ris5 := ‘ () ‘;
if p6 = 1 then ris6 := ‘ () ‘;
if p7 = 1 then ris7 := ‘ () ‘;
if p8 = 1 then ris8 := ‘ () ‘;
if p9 = 1 then ris9 := ‘ () ‘;
if p1 = 2 then ris1 := ‘ (00) ‘;
if p2 = 2 then ris2 := ‘ (00) ‘;
if p3 = 2 then ris3 := ‘ (00) ‘;
if p4 = 2 then ris4 := ‘ (00) ‘;
if p5 = 2 then ris5 := ‘ (00) ‘;
if p6 = 2 then ris6 := ‘ (00) ‘;
if p1 = 4 then ris1 := ‘(0000)’;
if p2 = 4 then ris2 := ‘(0000)’;
if p3 = 4 then ris3 := ‘(0000)’;
if p1 = 0 then ris1 := ‘__|__ ‘;
if p2 = 0 then ris2 := ‘__|__ ‘;
if p3 = 0 then ris3 := ‘__|__ ‘;
if p4 = 0 then ris4 := ‘ | ‘;
if p5 = 0 then ris5 := ‘ | ‘;
if p6 = 0 then ris6 := ‘ | ‘;
if p7 = 0 then ris7 := ‘ | ‘;
if p8 = 0 then ris8 := ‘ | ‘;
if p9 = 0 then ris9 := ‘ | ‘;
writeln(ris7, ris8, ris9);
writeln(ris4, ris5, ris6);
writeln(ris1, ris2, ris3);
writeln(»);
st3 := p9 + p6 + p3;
if st3 = 7 then
begin
writeln(‘ВЫ ПОБЕДИТЕЛЬ. ‘) ;
shet1 := shet mod 10;
case shet1 of
1:hod:=’ ход.’;
2, 3, 4: hod:=’ хода.’;
5, 6, 7, 8, 9: hod:=’ ходов.’;
end;
writeln(‘Было сделано ‘, shet,hod);
shet1 := pam mod 10;
case shet1 of
1:hod:=’ ход.’;
2, 3, 4: hod:=’ хода.’;
end;
if pam>0 then
begin
if pamshet then writeln(‘В этот раз было лучше.До этого было ‘,pam,hod);
if pam=shet then writeln(‘Число ходов не отличается от того что было.’);
end;
pam:=shet;
ind := 2;
writeln(‘Хотите сыграть еще раз?’);
writeln(‘Да-1’) ;
writeln(‘Нет-2’ );
readln(ind2);
end;
end;
end;
end.