Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум ОА и П.doc
Скачиваний:
23
Добавлен:
29.08.2019
Размер:
13.34 Mб
Скачать

Задание 1

Напишите программу, которая определяет код нажатой клавиши. Программа завершает работу при нажатии клавиши <Esc>.

Program key;

uses crt;

var

ch: char;

begin

repeat

ch:=ReadKey;

if ch=chr (0) then {нажата служебная клавиша}

begin

writeln (‘Служебная клавиша’);

ch:=ReadKey;

end;

writeln (ord (ch));

until ord (ch)=27; {пока не нажата клавиша Esc}

end.

Задание 2

Напишите программу, которая выводит список задач (пунктов меню), выделяя название первой задачи цветом. При нажатии клавиши «стрелка вниз» выделяется следующий пункт меню, при нажатии клавиши «стрелка вверх» - предыдущий. Нажатие клавиши <Esc> активизирует процедуру, связанную с выбранным пунктом (в данном случае – процедуру-заглушку).

Program menu2;

uses Crt;

const

NORM=$17; {цвет не выделенного пункта}

SEL=$70; {цвет выделенного пункта}

N=3;

Var

menu: array [1..N] of string[12]; {названия пунктов меню}

punkt: integer; {номер выделенного пункта}

ch: char; {введенный символ}

x, y: integer; {координаты первой строки меню}

procedure punkt1;

begin

ClrScr;

writeln (‘Процедура 1.Нажмите <Enter> для продолжения’);

readln;

end;

procedure punkt2;

begin

ClrScr;

writeln (‘Процедура 2.Нажмите <Enter> для продолжения’);

readln;

end;

procedure MenuToScr; {вывод меню на экран}

var i: integer;

begin

ClrScr;

for i:=1 to N do begin

GoToXY (x, y+i-1);

write (menu[i]);

end;

TextAttr:=SEL;

GoToXY (x, y+punkt-1);

write (menu[punkt]); {выделим стоку меню}

TextAttr:=NORM;

end;

{основная программа}

begin

menu[1]:=’Действие 1’;

menu[2]:=’Действие 2’;

menu[3]:=’Выход ’;

punkt:=1;

x:=5;

y:=5; TextAttr:=NORM;

MenuToScr;

repeat

ch:=ReadKey;

if ch=chr(0) then begin

ch:=ReadKey;

case ch of

chr(80): {стрелка вниз}

if punkt<N then begin

GoToXY(x,y+punkt-1);

write(menu[punkt]);

punkt:=punkt+1;

TextAttr:=SEL;

GoToXY(x,y+punkt-1);

write(menu[punkt]);

TextAttr:=NORM;

end;

chr(78): {стрелка вверх}

if punkt<1 then begin

GoToXY(x,y+punkt-1);

write(menu[punkt]);

punkt:=punkt-1;

TextAttr:=SEL;

GoToXY(x,y+punkt-1);

write(menu[punkt]);

TextAttr:=NORM;

end;

end;

end

else

if ch=chr(13) then begin { нажата клавиша <Enter>}

case punkt of

1:punkt1;

2:punkt2;

3:ch:=chr(27); {выход}

end;

MenuToScr;

end;

until ch:=chr(27); {27- код<Esc>}

end.

Задание 3

Напишите программу, которая предназначена для шифрования файла, имя которого передается ей в качестве параметра при запуске.

Program crypt;

uses

Dos;

type

FileChar=file of Char;

var

coded_file, workfile: FileChar;

file_in_name, password: String;

Dir: DirStr;

Ext: ExtStr;

procedure header;

begin

writeln;

writeln (‘Программа шифрования файлов’);

writeln (‘ ’);

writeln (‘Для справки наберите crypt /? ’);

writeln ;

end;

procedure help;

begin

writeln (‘Вызов программы:’);

writeln (‘crupt [file password] ’);

writeln (‘file – имя кодируемого декодируемого файла’);

writeln (‘password – пароль (не более 5 символов)’);

writeln;

writeln (‘Один и тот же пароль используется для ’);

writeln (‘кодирования и для декодирования файла.’);

writeln (‘Зашифрованный файл имеет расширение .cod.’);

writeln ;

end;

procedure input (var file_to_be_coded, pass: string);

begin

if ParamStr (1) = ‘/?’ then help;

if Paramcount <>2 then

begin

writeln (‘file_in :’);

readln (file_to_be_coded);

writeln (‘password: ’);

readln (pass);

end

else

begin

file_to_be_coded:=ParamStr (1);

pass:=ParamStr (2);

end;

end;

procedure encryption (var fname, fencr: FileChar; pass: string);

var

ch: char;

k, n: byte;

tmp: word;

begin

tmp:=0; n:=Length (pass);

for k:=1 to n do

begin

tmp:=tmp+Ord (pass[k]);

end;

RandSeed:=tmp;

while not Eof (fname) do

begin

read (fname, ch);

ch:=Chr (Ord (ch) xor Random (256));

write (fencr, ch);

end;

end;

begin

header;

input (file_in_name, password);

Assign (workfile, file_in_name);

{$i-}

resetworkfile);

{$i+}

if IOResult <>0 then

begin

writeln (‘Ошибка открытия файла’, file_in_name);

Halt;

end;

Fsplit (file_in_name, Dir, Name, Ext);

file_in_name:=Name+’.cod’;

Assign (coded_file, file_in_name);

Rewrite (coded_file);

encryption (workfile, coded_file, password);

Close (workfile);

Close (coded_file);

End.

Задачи для самостоятельного решения.

  1. Напишите программу, которая восстанавливает исходный файл.

  2. Написать программу, которая строит таблицу тригонометрических функций, одновременно выводя ее на экран частями по 5 строк и записывая в текстовый файл.

Лабораторная работа №14.

Тема: «Разработка алгоритмов и программ с использованием процедур и функций модуля Graph».

Цель работы: получение навыков составления программ на языке Pascal с использованием модулей.

Краткие теоретические сведения

Модуль Graph.

Все необходимые для работы в графическом режиме функции и процедуры находятся в модуле Graph. Поэтому первой инструкцией графической программы должна быть инструкция Uses Graph;

Инициализация графического режима.

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

InitGraph (GraphDriver, GraphMode, PathToDriver);

Параметр GraphDriver (тип integer) определяет используемый программой драйвер видеоадаптера, параметр GraphMode (тип integer) – режим работы видеосистемы, а параметр PathToDriver (тип string) – место нахождения драйвера на диске.

В Turbo Pascal драйверы видеоадаптеров различного типа находятся в каталоге BGI, в файлах с расширением bgi. Например, драйвер адаптера VGA представляет собой файл egavga.bgi.

Проверить результаты инициализации графического режима можно, обратившись к функции GraphReselt. Если инициализация выполнена успешно, то эта функция возвращает значение, равная именованной константе grOK.

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

Экран в графическом режиме.

Графическая программа рассматривает экран монитора как совокупность отдельных точек, которые часто называются пикселями. Похожие пикселя на экране монитора характеризуются его горизонтальной (Х) и вертикальной (У) координатами. Левый верхний пиксель имеет координаты (0, 0).

Координаты пикселей возрастают сверху вниз и слева направо. Количество пикселей на экране и, следовательно, значения координат правой нижней точки экрана зависят от режима работы видеосистемы. Например, в стандартном режиме VGA (разрешение 640х480) правая нижняя точка экрана имеет координаты (639, 479), (рис. 10).

(0,0) Х

(639,479) рис. 10

У

Указатель вывода.

Когда программа работает в алфавитно-цифровом режиме, на экране монитора находится мигающий курсор. Он показывает, в какой точке экрана появится очередной символ, например, выведенный инструкцией write. В графическом режиме мигающий курсор на экране не отображается. При выполнении инструкций вывода текста и графики графический курсор, который также называют указателем вывода, перемещая по экрану. Получить координаты указателя вывода по осям Х и У программа может, обратившись к функциям GetX и GetY. Переместить указатель в нужную точку экрана можно, вызвав процедуру MoveTo, указав в качестве параметров координаты точки экрана. Куда надо переместить указатель. Например, инструкции

MoveTo (310, 240);

OutText (‘Turbo Pascal 7.0’);

Выводят сообщение примерно в центре экрана.

Переместить указатель относительно его текущего положения можно, вызвав процедуру MoveTo, указав, на сколько точек надо переместить указатель. Инструкция вызова процедуры в общем виде выглядит так: MoveRel (dx, dy);

Параметры dx и dy задают количество точек, на которое надо переместить указатель по горизонтали и вертикали. Если значение параметра dx (dy) положительное, то указатель перемещается вправо (вниз). Если значение параметра dx (dy) отрицательное, то указатель перемещается влево (вверх).

Процедуры вычерчивания графических примитивов.

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

Цвет вывода графических примитивов.

Цвет, которым вычерчиваются графические примитивы, называются текущим цветом. Для смены текущего цвета вывода используется процедура SetColor, которой в качестве параметра передается номер требуемого цвета палитры. Например, инструкция SetColor (4) устанавливает, что текущим цветом вывода графических примитивов с этого момента является цвет с номером четыре. Конкретный цвет, определяемый указанным при вызове процедуры SetColor номером, определяется установленным в данный момент графическим режимом.

В качестве процедуры SetColor можно использовать одну из констант приведенного ниже списка.

Таблица цветов для используемых процедур.

Константа

Цвет

Номер цвета

Black

Черный

0

Blue

Синий

1

Green

Зеленый

2

Cyan

Бирюзовый

3

Red

Красный

4

Magenta

Сиреневый

5

Brown

Коричневый

6

LightGray

Белый (светло-серый)

7

DarkGray

Серый

8

LightBlue

Голубой

9

LightGreen

Светло-зеленый

10

LightCyan

Светло-бирюзовый

11

LightRed

Светло-красный (алый)

12

LightMagenta

Светло-сиреневый

13

Yellow

Желтый

14

White

Ярко-белый

15