Основы программирования на языке Паскаль
5) повторить нужное количество раз п. 3, 4.
6) закрыть файл (close).
Замечание. При записи файлов прямого и последовательного доступа, созданных пользователем, содержимое компонент упаковывается, и поэтому посмотреть их в vc или nc по f3 или f4 нельзя, а текстовый файл не упаковывается, и его можно просмотреть.
procedure sozdt;
Begin writeln('дайте имя создавае
мому текстовому файлу');
readln(filename);
assign(stro,filename); rewrite(stro);
while true do
Begin writeln('напишитесодержимоестроки');
readln(s); if s='zzz' then {'zzz' – признакокончанияввода }
Begin close(stro); exit; end;
writeln(stro,s); end;end;
procedure obrt;
Begin writeln('дайтеимяобрабатываемогофайла');
; readln(filename);
assign(stro,filename); reset(stro);
repeat readln(stro,s); writeln(s);
until seekeof(stro); close(stro); exit; end;
procedure rasht;
Begin writeln('укажитеимякорректируемогофайла'); readln(filename);
assign(stro,filename); append(stro);
while true do
Begin writeln('введитестроку'); readln(s);
if s='zzz' then Begin close(stro); exit; end;
writeln(stro,s); end; end;
Program Prim51;
Type dlina=string[60];
Var stro:text; s:dlina; reg:char; filename:string[12];
{$i c:\turbo\sozdt.pas}
{$i c:\turbo\obrt.pas}
{$i c:\turbo\rasht.pas}
Begin while true do
Begin writeln('укажитережим');
writeln('1: создание, 2: вывод на экран, 3: расширение, 4: выход');
readln(reg);
case reg of '1': sozdt;
'2': obrt;
'3': rasht;
'4': halt else writeln('повторитеномеррежима');
end;end;end.
11. Использование библиотеки CRT
Разработчики Турбо-Паскаля предусмотрели несколько подпрограмм, существенно увеличивающих возможности текстового ввода-вывода. Эти подпрограммы сосредоточены в библиотеке (модуле) CRT, входящей в комплект поставки Турбо-Паскаля. В модуль включены также процедуры sound, no sound, delay, позволяющие программировать звуковой генератор компьютера.
11.1. Программирование клавиатуры
Дополнительные возможности управления клавиатурой реализуются двумя функциями: keypressed и ReadKey.
Функция keypressed возвращает значение типа boolean, указывающее состояние буфера клавиатуры: false означает, что буфер пуст, а true – что в буфере есть хотя бы один символ, еще не прочитанный программой.
В реализуется так называемый асинхронный буферизованный ввод с клавиатуры. По мере нажатия на клавиши соответствующие коды помещаются в особый буфер, откуда они могут быть затем прочитаны программой. Стандартная длина буфера рассчитана на хранение до 16 кодов символов. Если программа достаточно долго не обращается к клавиатуре, а пользователь нажимает клавиши, буфер может оказаться переполненным. В этот момент раздается звуковой сигнал и «лишние» коды теряются. Чтение из буфера обеспечивается процедурами read/rеadln и функцией ReadKey. обращение к функции keypressed не задерживает исполнения программы: функция немедленно анализирует буфер и возвращает то или иное значение, не дожидаясь нажатия клавиши.
Функция ReadKey возвращает значение типа char. При обращении к этой функции анализируется буфер клавиатуры: если в нем есть хотя бы один не прочитанный символ, код этого символа берется из буфера и возвращается в качестве значения функции, в противном случае функция будет ожидать нажатия на любую клавишу. Ввод символа с помощью этой функции не сопровождается эхо-повтором и содержимое экрана не меняется. Например, в какой-то точке программы необходимо игнорировать все ранее нажатые клавиши, коды которых еще непрочитаны из буфера, т.е. необходимо очистить буфер. Этого можно достичь следующим способом:
UsesCRT;
Var
с; char;
Begin
while Keypressed do
c:== ReadKey;
. . . . .
end.
При использовании процедуры ReadKey следует учесть, что в клавиатурный буфер помещаются так называемые расширенные коды нажатых клавиш. Если нажимается любая алфавитно-цифровая клавиша, расширенный код совпадает с ASCII-кодом соответствующего символа. Например, если нажимается клавиша с латинской буквой «а» (в нижнем регистре), функция ReadKey возвращает значение chr(97), а если – «а» (в верхнем регистре) – значение chr(65). При нажатии функциональных клавиш F1 .F10 (клавиш управления курсором), клавиш Ins, Home, Del, End, PgUp, PgDn в буфер помещается двухбайтовая последовательность: сначала символ #0, а затем расширенный код клавиши. Таким образом, значение #0, возвращаемое функцией ReadKey, используется исключительно для того, чтобы указать программе на генерацию расширенного кода. Получив это значение, программа должна еще раз обратиться к функции, чтобы прочитать расширенный код клавиши.
Следующая простая программа позволит определить расширенный код любой клавиши. Для завершения работы программы нужно нажать клавишу esc.
UsesCRT;
Var с: char;
Begin
repeat
c:= ReadKey;
if c< >#0 then
writeln (ord(c))
else
writeln ('0', ord (ReadKey):8)
until c=#27 {27 – расширенный код клавиши esc}
end.
Если вы воспользуетесь этой программой, то обнаружите, что нажатие на некоторые клавиши игнорируется функцией ReadKey. Это прежде всего так называемые сдвиговые клавиши – Shift, Ctrl, Alt. Сдвиговые клавиши в MS-DOS обычно используются для переключения регистров клавиатуры и нажимаются в сочетании с другими клавишами. Именно таким способом, например, различается ввод прописных и строчных букв. Кроме того, функция игнорирует переключающие клавиши Caps Lock, Num Lock, Scroll Lock.
в таблице приведены расширенные коды клавиш, возвращаемые функцией ord(ReadKey).
Расширенные коды клавиш
Таблица
Код |
Клавиша или комбинация клавиш |
Код |
Клавиша или комбинация клавиш | |||||||||
первый байт |
второй байт |
первый байт |
второй байт | |||||||||
Алфавитно-цифровые клавиши | ||||||||||||
8 |
– |
backspace (забой) |
9 |
– |
tab (табуляция) | |||||||
13 |
– |
enter |
32 |
– |
пробел | |||||||
33 |
– |
! |
34 |
– |
« | |||||||
35 |
– |
# |
36 |
– |
$ | |||||||
37 |
– |
% |
38 |
– |
& | |||||||
39 |
– |
" |
40 |
– |
( | |||||||
41 |
– |
) |
42 |
– |
* | |||||||
43 |
– |
+ |
44 |
– |
, | |||||||
45 |
– |
– |
46 |
– |
. | |||||||
47 |
– |
/ |
48 .57 |
– |
0 .9 | |||||||
58 |
– |
: |
59 |
– |
; | |||||||
60 |
– |
< |
61 |
– |
= | |||||||
52 |
– |
> |
63 |
– |
? | |||||||
64 |
– |
@ |
65 .90 |
– |
A .Z | |||||||
91 |
– |
[ |
92 |
– |
/ | |||||||
93 |
– |
] |
94 |
– |
^ | |||||||
95 |
– |
_ |
96 |
– |
" | |||||||
97 .122 |
– |
a .z |
123 |
– |
{ | |||||||
124 |
– |
?? |
125 |
– |
} | |||||||
126 |
– |
~ |
128 .159 |
– |
A .Я | |||||||
160 .175 |
– |
а .п |
224 .239 |
– |
р .я | |||||||
Управляющие клавиши и их сочетания со сдвиговыми | ||||||||||||
0 |
3 |
Ctrl–2 |
0 |
15 |
Shift – Tab | |||||||
0 |
16 .25 |
Alt–Q .Alt–P (верхний ряд букв) |
0 |
30 .38 |
Alt–A .Alt–L (средний ряд букв) | |||||||
0 |
44 .50 |
Alt–Z .Alt–M (нижний ряд букв) |
0 |
59 .68 72 |
F1 .F10 курсор вверх | |||||||
0 |
71 |
Home |
0 |
75 |
курсор влево | |||||||
0 |
73 |
PgUp |
0 |
79 |
End | |||||||
0 |
77 |
курсор вправо |
0 |
81 |
PgDn | |||||||
0 |
80 |
курсор вниз |
0 |
83 |
Del | |||||||
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности