1.Введение.
1.1.Цельработы.
Овладениенавыкамиалгоритмизациии программированиязадач с использованиемдатчиков случайныхчисел, способамиполученияслучайных чиселс различнымизаконамираспределения,навыками оценкикачествапсевдослучайныхчисел и ихсоответствиязаданномузакону распределения.
Изучить:
способыполученияслучайныхчисел с различнымизаконамираспределения;
-способыиспользованияв программахобращений кфункциям илиподпрограммамдля полученияпсевдослучайныхчисел с различнымизаконамираспределения;
способамииспользованияслучайныхчисел длямоделирования.
Разработатьалгоритм решенияв соответствиис заданием.
Составитьпрограммурешения задачи.
Подготовитьтестовый вариантпрограммы иисходных данных.
1. Выполнитьна ЭВМ программув соответствиисо следующимзаданием:
Сгенерироватьпоследовательностьиз 50 случайныхчисел с нормальнымзаконом распределенияа=5,=4)и последовательностьиз 50 случайныхчисел с экспоненциальнымзаконом распределенияс параметром=5.Все числа свестив массив, расположивих по возрастанию.Вычислитьсреднее значение,дисперсию ивывести результатына печать ввиде гистограммы,разбив последовательностьчисел на десятьинтервалов
2.Проверитьправильностьвыполненияпрограммы спомощью тестовоговарианта.
2.Руководствопрограммиста.
Прежде,чем приступитьк самому процессуалгоритмизациии программированиязаглянем втеорию, по которой,собственно,и дано задание.
2.1.Теоретическаябаза.
2.1.1.Нормальноераспределение.
Н
Мывидим, что нормальноераспределениеопределяетсядвумя параметрами:а и .Достаточнознать эти параметры,чтобы задатьнормальноераспределение.Покажем, вероятностныйсмысл этихпараметровтаков: а естьматематическоеожидание, —среднееквадратическоеотклонениенормальногораспределения.
2.1.2Показательное(экспоненциальное)распределение.
П
где- постояннаяположительнаявеличина.
Мывидим, чтопоказательноераспределениеопределяетсяодним параметром.Эта особенностьпоказательногораспределенияуказывает наего преимуществопо сравнениюс распределениями,зависящимиот большегочисла параметров.Обычно параметрынеизвестныи приходитсянаходить ихоценки (приближенныезначения);разумеется,проще оценитьодин параметр,чем два или трии т. д. Примеромнепрерывнойслучайнойвеличины, распределеннойпо показательномузакону, можетслужить времямежду появлениямидвух последовательныхсобытий простейшегопотока.
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 | Выходиз режима |
Гистограмма | |
Любаяклавиша | Выходиз режима |
4.Заключение.
Научилисьприменятьматематическийаппарат припрограммированиина TurboPascal.Написали программуиспользуя всезнания полученыепо курсу «Информатика».Вникли в понятиеинтерфейсаи сделали попыткув разработкесобственногодизайна программы.
Литература.
Фаронов.:«Турбо паскаль7.0. Начальныйкурс. Учебноепособие.»-М.:»Ноллидж»,1997г.
АлексеевВ.Е. и др.: «Вычислительнаятехника ипрограммирование.Практикум попрограммированиюЖПрактическоепособие.» - М.:Высшая школа,1991г.
Содержание.
Введение.
Руководствопрограммиста.
Руководствопользователя.
Заключение.
Литература.
Приложения(блок-схемы икод программы).
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.