Основы программирования на языке Паскаль

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

Страница:  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 
 16  17  18  19  20  21  22  23  24  25  26  27  28  29  30 
 31 


Другие рефераты на тему «Программирование, компьютеры и кибернетика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы