Смекни!
smekni.com

Программирование с использованием генератора случайных чисел

1.Введение.

1.1.Цельработы.

Овладениенавыкамиалгоритмизациии программированиязадач с использованиемдатчиков слу­чайныхчисел, способамиполученияслучайных чиселс различнымизаконамираспределения,навыками оценкикачествапсевдослучайныхчисел и ихсоответствиязаданномузакону распределения.

1.2. Заданиядля самостоятельнойподготовки

  1. Изучить:

  • способыполученияслучайныхчисел с различнымизаконамираспределения;

  • -способыиспользованияв программахобращений кфункциям илиподпрограммамдля полученияпсев­дослучайныхчисел с различнымизаконамираспреде­ления;

  • способамииспользованияслучайныхчисел длямо­делирования.

  1. Разработатьалгоритм решенияв соответствиис за­данием.

  2. Составитьпрограммурешения задачи.

  3. Подготовитьтестовый вариантпрограммы иисходных данных.

1.3. Заданиек работе

1. Выполнитьна ЭВМ программув соответствиисо следующимзаданием:

Сгенерироватьпоследовательностьиз 50 случайныхчисел с нормальнымзаконом распределенияа=5,=4)и по­следовательностьиз 50 случайныхчисел с экспоненциаль­нымзаконом распределенияс параметром=5.Все числа свестив массив, расположивих по возрастанию.Вычислитьсреднее значение,дисперсию ивывести результатына пе­чать ввиде гистограммы,разбив последовательностьчисел на десятьинтервалов

2.Проверитьправильностьвыполненияпрограммы спо­мощью тестовоговарианта.


2.Руководствопрограммиста.

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

2.1.Теоретическаябаза.

2.1.1.Нормальноераспределение.

Н


ормальнымназываютраспределениевероятностейнепрерывнойслучайнойвеличины, котороеописываетсяплотностью

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


2.1.2Показательное(экспоненциальное)распределение.

П


оказательным(экспоненциальным)называютраспределениевероятностейнепрерывнойслучайнойвеличины X, котороеописываетсяплотностью

где- постояннаяположительнаявеличина.

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


2.2. Началоалгоритмизации.

Дляполучения двухпоследовательностейиз 50 случайныхчисел с показательными нормальнымзаконамираспределениянеобходимоорганизоватьцикл, которыйбудет выполнятся50 раз. Внутрицикла будемпользоватьсяфункцией изТурбо Паскаляrandom(a) - эта функциявыдает произвольноечисло из интервалаот 1 до a, a65535.Каждое полученноечисло будетвносится вмассив, причемпервые 50 элементовэтого массиваполучены понормальномузакону, а другие50 - по показательному.

Дляупорядочиваниямассива случайныхвеличин создадимдвойной цикл.Для расчетамат. ожиданияи дисперсииупорядоченногомассива такжесоздадим двойнойцикл, с учетомтого, что массивуже надо разбитьна 10 частейи расчет проводитьпо каждому изпромежутков.Для построениягистограммывоспользуемсясредствамимодуля Graph.tpu.

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

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

Таблица1. Описаниепеременныхи констант.

Имяпеременной

Назначение

Типв Turbo Pascal

i.j

Переменныециклов.

Byte

help,work,button

Переменныйдля храненияпараметроввызова процедур.

Byte

actionprog,action

Символьныепеременныедля управленияинтерфейснойчастью .основнойпрограммы ипроцедурсоответственно.

Char

exitpar,exitmenu,exitprog

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

Boolean

grmode,grdriver

Переменные,содержащиеданные о типеграфическогодрайвера иего режимеработы. Установленныв программена автоматическоеопределение.

Integer

Dat(3)

Массивдля хранениявходных данныхв программе.Начальноезнаачение[5,4,5].

array[1..3]ofreal

Posle(100)

Массивдля храненияэлементовгенерируемойпоследовательности.

array[1..100]of real

Xcor(3),Ycor(3)

Массивы,используемыедля болеекомпактностиввода параматровгенерациипоследовательностив процедуреDoWorkс параметромwork=1.

array[1..3]ofbyte

Mat(10),Disp(10)

Массивыс данными одисперсии имат.ожиданиипо промежуткампоследовательности.

array[1..10]ofreal

mat0,disp0

Мат.ожиданиеи дисперсияпо всей последовательности.

Real

X

Временнаяпеременная(буфер).

Real

Col(4)

Массивдля управлениявыбора пунктаменю.

array[1..4]ofbyte

Light.Dark

Константыдля заданияцветов меню.

[1..16]


2.3.Пояснения кпрограмме.

2.3.1.Основная программа.

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

Послеопределенияпроисходитпервоначальная(чернвая) прорисовкаинтерфейснойчасти программы.Для этогоиспользуетсятри блока,прорисовывающиестроку помощи(drawhelp(0)),диалоговогоокна(drawwin) и строки меню(drawmenu(5)).

Перехватчиксообщений склавиатуры(ReadKey)позволяетвыбрать тотили иной пунктменю - о возможномвыборе можноузнать в строкеподсказки внизу экрана.В зависимостиот выбора операторомпункта менюпроисходитзапуск «основнойработающейпрограммы»- процедурыdowork.Для вызова этойпроцедурыиспользуетсяодин параметр– work.Его возможныезначения:

Таблица2.

Значениепараметраwork

Действие

1

Заданиепараметровдля построенияпоследовательностей.

2

Просмотрпоследовательностей.

3

Просмотргистограммы.

Работыосновной программызаверщаетсяпри истонномзначении переменнойexitprog,чего можнодостичь комбинациейAlt-x (обэтом тоже информируетстрока помощи).


2.3.2.Процедураdrawhelp.

Этапроцедураполностьюпредназначенадля навигацииоператора сработой в программе.

Длявызова используетсяодин параметр(help),чего достаточнодля выводаполной подсказкидалнейшихдействий. Нижеприводитсятаблица созначениемпараметра истроки, котораявысвечиваетсявнизу экрана.


Таблица2.

Значениепараметраhelp

Видстроки помощи

0

F1-Парам.F2-Посл-ти F3-Гистогр.F10-Меню (Alt-x)-Выход

1

Задать/изменитьпараметры

2

Просмотретьпоследовательности

3

Просмотретьгистограмму

4

Выход

5

Esc-Закончитьизменениепараметров.BckSp-Изменитьпараметр.F4-Постр. посл-ть'

6

НажмитеUp или Down для просмотраили Esc для выхода


Вблок-схеме кэтой процедуреиспользованысокращения.Так s1означает, чтоhelp=1; s2 –help=2 и такдалее.


2.3.3Процедураdrawwin.

Все,что делает этапроцедура –составлениедиалоговогоокна. Прорисокаокна идет посредствомобычной псевдографики(ASCII-кодировка).При это экранделится на тричасти. В верхнейпроисходитуведомлениепользователяо выборе пунктаменю, а в двухнижних происходитзадание параметровпостроенияпоследовательностей(в случае вызоваdowork(1))или же просмотрпоследовательностей(в случае вызоваdowork(2)).Если не происходитвызова dowork, тоокно остаетсяпустым, заисключениемверхнего фрейма,где написано“Последовательности”.

Припостроениисхемы и в кодепрограммы неиспользуетсяни одной нестандартнойподпрограммы.Схема тривиальнаи общедоступна.


2.3.4.Процедураdowork - «основнаяработающаяпрограмма».

Основнаяпрограмма нужнадля организациидиалога спользователем.Но, собственно,сам диалог ивсе действияпроизводятсяименно в этойпроцедуре.Именно этойчасти программыстоит уделитьнаибольшеевнимание.

Дальнейшеепояснение будетосновыватьсяна таблице 2.Ход повествованияпрямым образомзависит отзначения параметраwork.В каждой частивызываетсясправка поиспользованиюи горячим клавишам,за исключениемтретьей части– вывода гистограммы.

Перваячасть – задание/просмотрпараметровгенерациипоследовательностей.

Быстрыйвызов – F1.

Здесьпроисходит,как ясно иззаголовкапункта, заданиеновых или просмотртекущих параметровдля генерациипоследовательностей.На блок-схемеэтой подпрограммыэто блоки 1-30.

Первымделом происходитразделениеверхнего фреймана два, в нихпрорисовываетсяпояснение –в какой из частейнижнего фреймадля какогозакона распределениязадаются параметры.

Дляудобного заданияпараметровиспользуетсясимвольнаяпеременнаяaction.Именно черезнее происходитперехват событий,от чего и зависитизменить параметры,оставить ихнеизменными,задать последовательностиили же выйтииз подпрограммы.

Совсеми возможнымидействиямиданной и последующихчастей можнопознакомитсяв пункте «Руководствапользователя».

Стоитобратить вниманиена то, как происходитввод новыхпараметров.Положениекурсора дляввода задаетсядвумя массивами(они, как впрочеми остальныепеременные,описаны в таблице1): Xcor(3), Ycor(3). Измененныепараметрызаписываютсяв массив Dat(3).Подобная схемаочень удоьнадля испльзованияи для изменениякак конфигурации.

Переходмежду состояниемпросмотр/изменениепроисходитпутем использованиякодов ASCIIдля клавиш Esc,Tab, Enter и F4– генерацияпоследовательности.

Параметрсправки – 5.

Втораячасть – просмотрсгенерированнойпоследовательности.

Быстрыйвызов – F2.

Наблок-схемепредставленаблоками 31-47.

Просмотрпоследовательностипроисходитчерез обычныйцикл по одномупараметру. Всяпоследовательностьвыводится подвум столбам,в каждом изкоторых по 50элементов.Управлениепросмотроморганизованочерез кодыклавиш скролинга(прокрутки) пообщепринятомустандарту –Up/Down.Элементы выводятсяс приближениемдо шести символовпосле зяпятой,дабы не засорятьрабочее пространство.

Параметрсправки – 6.

Третьячасть – просмотргистограммы.

Быстрыйвызов – F3.

Наблок-схемепредставленаблоками 48-61.

Вблоках 49-58 происходитвычислениематематическогоожидания идисперсии какдля каждогоиз промежутков,так и для всейпоследовательностицеликом.

Блок59 представляетсобой (смотрикод программы)прорисовкусетки для болееудобной визуализации,вывод значенийматематическогоожидания идисперсии,легенды. Легенданеобходимадля определениятого, какой типстолбцов чтодемонстрирует.

Всявизуальнаячасть процедурыdoworkс параметромwork=3осуществленапри помощимодуля Graph.tpu.Тип адаптераи его режимопределяютсяв основнойпрограмме.Необходимо,чтобы этотмодуль находилсяв одной папкес файлом программы,иначе выводбедт невозможен,что приведетк выходу изпрограммы.

Выходомслужит нажатиена любую клавишу.


2.3.5.Процедураdrawmenu.

Быстрыйвызов –F10.

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

Алгоритмпроцедурыполностьюзамешен насимвольныхданных, используемыхв качествекодов «горячих»клавиш и клавишскролинга. Длявизуализациивыбора пунктаменю испльзуетсявыделениецветом тогоили иного пунктаменю. Все цветаменю можнозажать путемизменениязначений константlightиdark– соотвотственноактивного инеактивногопункта меню.Подобный ходможно использоватьв подборе цветов,удобных дляпользователя.

Предусмотренпервоначальныйвывод меню безвыбора какого-нибудьиз пунктов. Этонеобходимодля прорисовкиинтерфейсав начале работыпрограммы ипосле просмотрагистограммы.

Привыборе любогоиз пунктов менюпроисходитвызов процедурыdrawhelpсозначением 1-4 взависимостиот того какойпункт был выбран.Значение 1 преданокрайнему левомупункту, 4 – правому. Подробнее отекстах справкиможно посмотретьв таблице 3.

Каки во многихпрограммахможно избежатьвхода в меню– для выборалюбога пунктаназначена«горячая»клавиша. Информацияоб этом выдаетсяпри запускепрограммы.


3.Рукводствопользователя.

Этотраздел предназначендля пояснениякак общатсяс программой.

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

Впрограммепредусмотренастрока помощидля пользователя,в которой описаныбыстрый клавишывызова тогоили иного пунктавозможныхдействий. Всевозможныеподсказки можнопросмотретьв таблице 3 вразделе «Руководствопрограммиста».

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

Привыборе пункта«Параметры»пользователюбудет предложеноокно, в которомможно будетзадать параметрыдля генерациипоследовательности.В правой колонкедля нормальногозакон, в левой– для экспоненциальной.Чтобы изменитьпараметр необходимонажать BckSp(Забой), послечего становитсявозможнымизменениепараметра.Переключениемежду параметрамиосуществляетсячерез клавишуTabили Enter.Также переходпроисходитавтоматическипосле измененияпараметра. Вэтом же пунктеменю происходитгенерацияпоследовательности– клавиша F4.Выход из этогорежима осуществляетсячерез клавишуEscape.

Пункт«Последовательности»позволяетосуществитьпросмотр ужесущестующейпоследовательности.Чтобы просмотретьвсю последовательностьцеликом воспользуйтеськлавишамискролинга(прокрутки)Up/Down.Выход из режима– Escape.

Просмотргистограммыпроизводитсяпри выбореодноименногопункта. Гистограммаимеет легенду.Выходом изпросмотраявляется нажатиена любую клавишу.

Длявыхода можновоспользоватсякомбинациейклавиш Alt-xили же черезменю.


Таблица4. Комбинации«горячих»клавиш программы.

Комбинация

Действие(входв режим)

Начальныйрежим

F1

Параметры

F2

Последовательности

F3

Гистограмма

F10

Входв меню

Alt-x

Быстрыйвыход

Параметры

Enter

Закончитьизменениепараметра

Escape

Выходиз режима

Tab

Переключитсяна следующийпраметр

F4

Построитьпоследовательность

Последовательности

Up/Down

Просмотрвверх/внизпоследовательности

Escape

Выходиз режима

Гистограмма

Любаяклавиша

Выходиз режима


  1. 4.Заключение.

Научилисьприменятьматематическийаппарат припрограммированиина TurboPascal.Написали программуиспользуя всезнания полученыепо курсу «Информатика».Вникли в понятиеинтерфейсаи сделали попыткув разработкесобственногодизайна программы.


  1. Литература.

  1. Фаронов.:«Турбо паскаль7.0. Начальныйкурс. Учебноепособие.»-М.:»Ноллидж»,1997г.

  2. АлексеевВ.Е. и др.: «Вычислительнаятехника ипрограммирование.Практикум попрограммированиюЖПрактическоепособие.» - М.:Высшая школа,1991г.


Содержание.

  1. Введение.

  2. Руководствопрограммиста.

  3. Руководствопользователя.

  4. Заключение.

  5. Литература.

  6. Приложения(блок-схемы икод программы).


2

3

8

9

9

10



programkursovik;

usescrt,graph;

varj,help,i,work,button:byte;

exitmenu,exitprog:boolean;

actionprog,action:char;

grmode,grdriver:integer;

dat:array[1..3]of real;

posle:array[1..100] of real;

xcor,ycor:array[1..3]of byte;

mat,disp:array[1..10]of real;

mat0,disp0,dispmax,matmax,x:real;

{*****DrawHelp*****}

proceduredrawhelp(help:byte);

begin

textcolor(black);

textbackground(white);

gotoxy(1,25);

casehelp of

0:write(' F1-Парам. F2-Посл-тиF3-Гистогр. F10-Меню(Alt-x)-Выход ');

1:write(' Задать/изменитьпараметры ');

2:write(' Просмотретьпоследовательности ');

3:write(' Просмотретьгистограмму ');

4:write(' Выход ');

5:write(' Esc-Закончитьизменениепараметров.BckSp-Изменитьпараметр. F4-Постр.посл-ть');

6:write(' Нажмите Up илиDown для просмотраили Esc для выхода ');

end;

end;

{*****DrawWin*****}

proceduredrawwin;

begin

textcolor(white);textbackground(blue);

GotoXY(1,2);

Write('г');

fori:=2 to 79 do

Write('=');

Write('¬');


fori:=3 to 23 do

begin

GotoXY(1,i1);

Write('¦');

forj:=2 to 79 do

Write(' ');

Write('¦');

end;

GotoXY(1,24);

Write('L');

fori:=2 to 79 do

Write('=');

Write('-');

{ gotoxy(39,2);write('T');}

gotoxy(39,24);write('¦');

for i:=5 to 23 do

begin

gotoxy(39,i);

write('¦')

end;

gotoxy(31,3);

writeln('Последовательности');

gotoxy(1,4);

write('¦=====================================T========================================¦');

end;

{*****DoWork*****}

proceduredowork(work:byte);

begin

casework of

1:begin

textcolor(white);

textbackground(blue);

gotoxy(39,2);write('T');

gotoxy(2,3);

writeln(' Нормальныйзакон: ¦Экспоненциальныйзакон:');

gotoxy(1,4);

write('¦=====================================+========================================¦');

drawhelp(5);

textcolor(white);

textbackground(blue);

gotoxy(2,6);write(' Мат. ожидание:');

gotoxy(2,8);write('Дисперсия:');gotoxy(xcor[2],ycor[2]);write(dat[2]:2:1);

gotoxy(41,6);write('Коэффициент:');gotoxy(xcor[3],ycor[3]);write(dat[3]:2:1);

gotoxy(xcor[1],ycor[1]);write(dat[1]:2:1);i:=1;

repeat

action:=readkey;

case action of

#27: exitpar:=true;

#9: begin

i:=i+1;

if i

begin

gotoxy(xcor[i],ycor[i]);write(dat[i]:2:1);

end

else

begin

i:=1;

gotoxy(xcor[1],ycor[1]);write(dat[1]:2:1);

end;

end;

#8: begin

gotoxy(xcor[i],ycor[i]);write(' ');

gotoxy(xcor[i],ycor[i]);read(dat[i]);

gotoxy(xcor[i],ycor[i]);write(dat[i]:2:1);

if i

gotoxy(xcor[i],ycor[i]);write(dat[i]:2:1);

end;

#13: begin

if i

gotoxy(xcor[i],ycor[i]);write(dat[i]:2:1);

end;

#62: begin

for i:=1 to 50 do

begin

x:=ln(random(65525)+1);

posle[i]:=exp(-sqr(x-dat[1])/(2*sqrt(dat[2])))/sqrt(2*pi*dat[2]);

x:=exp(1/(random(825)));

if x

end;

end;

end;

until exitpar=true;

drawwin;

end;

2:begin

action:=#1;

drawhelp(6);

textcolor(white);

textbackground(blue);

exitpar:=false;

j:=1;

fori:=1 to 19 do

begin

gotoxy(2,i+4);

if i+j-1

else write(' ',i+j-1,': ',posle[i+j]:2:6,' ¦',i+j+49,': ',posle[i+50+j]:2:6)

end;

repeat

action:=readkey;

case action of

#72: if j>1 then j:=j-1;

#80: if j

#27: exitpar:=true;

end;

fori:=1 to 19 do

begin

gotoxy(2,i+4);

if i+j-1

else write(' ',i+j-1,': ',posle[i+j]:2:6,' ¦',i+j+49,': ',posle[i+50+j]:2:6)

end;

until exitpar=true;

drawwin;

end;

3:begin

fori:=1 to 10 do

begin

x:=0;

for j:=1 to 10 do

x:=x+posle[(i-1)*10+j];

mat[i]:=x/10;

mat0:=mat0+x;

end;

mat0:=mat0/100;

fori:=1 to 10 do

for j:=1 to 10 do

begin

disp[i]:=sqr(posle[(i-1)*10+j]-mat[i]);

disp0:=sqr(posle[(i-1)*10+j]-mat0);

end;

matmax:=mat[1];

dispmax:=disp[1];

fori:=1 to 10 do

begin

if disp[i]>dispmax then dispmax:=disp[i];

if mat[i]>matmax then matmax:=mat[i];

end;

initgraph(grdriver,grmode,'');

setBKcolor(black);setcolor(8);

fori:=1 to 11 do

line(5,i*30,15,i*30-10);

fori:=1 to 20 do

line(i*25+5,330,i*25+15,320);

line(5,330,505,330);

line(5,330,5,30);

fori:=0 to 20 do line(i*25+15,320,i*25+15,20);

fori:=1 to 11 do line(15,i*30-10,515,i*30-10);

setbkcolor(black);

fori:=1 to 10 do

begin

setcolor(cyan);

SetFillStyle(6, 7);

Bar3D(13,27+30*(i-1),13+round(mat[i]*10000),35+30*(i-1), 2, TopOn);

setcolor(green);

SetFillStyle(8, 8);

Bar3D(13,35+30*(i-1),13+round(disp[i]*1000000),43+30*(i-1), 2,TopOn);

end;

SetFillStyle(6, 7);

setcolor(8);

bar(10, 430, 20, 440);

outtextxy(23,432,'- Mat. ozhidanie');

SetFillStyle(8, 8);

bar(10, 450, 20, 460);

outtextxy(23,452,'- Dispersiya');

readkey;

closegraph;

drawwin

end;

end;

end;

{*****DrawMenu*****}

proceduredrawmenu(button:byte);

constlight=green;{15,14,13,12,11,10,9}

dark=white;{7,6,5,4,3,2,1}

varcol:array[1..4]of byte;

exitmenu:boolean;

begin

exitmenu:=false;

textcolor(black);

drawhelp(1);

repeat

for i:=1to 5 do col[i]:=dark;

col[button]:=light;

gotoxy(1,1);

textbackground(col[1]);write(' Параметры');

textbackground(col[2]);write(' Последовательности');

textbackground(col[3]);write(' Гистограмма');

textbackground(col[4]);write(' Выход');textbackground(dark);write(' ');

ifbutton5 then action:=readkey else exitmenu:=true;

caseaction of

#77:begin

if button

begin

col[button]:=dark;

button:=button+1;

col[button]:=light

end

else

begin

col[4]:=dark;

col[1]:=light;

button:=1;

end;

end;

#75:begin

if button>1 then

begin

col[button]:=dark;

button:=button-1;

col[button]:=light

end

else

begin

col[1]:=dark;

col[4]:=light;

button:=4;

end

end;

#27:exitmenu:=true;

#13:case button of

1: begin

dowork(1);

button:=5

end;

2: begin

dowork(2);

button:=5

end;

3: begin

dowork(3);

button:=5

end;

4: begin

exitmenu:=true;

exitprog:=true

end;

end;

end;

ifbutton5 then drawhelp(button);

untilexitmenu=true;

drawhelp(0);textbackground(dark);gotoxy(1,1);

write('Параметры Последовательности Гистограмма Выход ');

end;

{*****Главнаяпрограмма*****}

begin

clrscr;

xcor[1]:=18;

xcor[2]:=18;

xcor[3]:=58;

ycor[1]:=6;

ycor[2]:=8;

ycor[3]:=6;

dat[1]:=5;dat[3]:=5;dat[2]:=4;

grmode:=detect;

grdriver:=detect;

drawwin;

repeat

drawmenu(5);

drawhelp(0);

actionprog:=readkey;

caseactionprog of

#59:dowork(1);

#60:dowork(2);

#61:dowork(3);

#68:begin

drawmenu(1);

end;

#45:exitprog:=true;

end;

for i:=1to 10 do begin mat[i]:=0; disp[i]:=0 end;

untilexitprog=true;

end.