Список использованных источников

Блок – схема процедуры «MainMenu»                                      (вывода на экран главного меню)

 

     
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 3

 

 

 

Описание программы 1. Назначение Данная программа показывает и обучает, как взаимодействуют основные части ЭВМ при выполнении программы. Программа написана на языке Turbo Pascal [1] для персональных ЭВМ, совместимых с IBM PC, и операционной системой MS DOS. 2. Запуск программы Находясь в каталоге с программой, в ответ на подсказку DOS набрать computer.exe и нажать клавишу Enter. Выход из программы по нажатию клавиши Esc. 3. Работа с программой После запуска программы на экране появляется главное меню выбора:  
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 4

 


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


Выбор пункта меню «Обучение»

Обучающая часть программы имеет вид:

 

 

Внизу экрана находятся функциональные клавиши

Помощь (F1), Назад (), Вперед (®), Выход (Esc):

Помощь (F1) – получить справку,

Назад () – вернуться назад,

Вперед (®) – вывести следующую информацию,

Выход (Esc) – выйти из обучения.

 

3.2 Выбор пункта меню «Проверка знаний» Тест имеет вид:   Выбор ответа производится клавишами 1, 2 и 3. При необходимости выйти можно нажать клавишу Esc и выйти из теста.
 
Вопрос # {номер вопроса}. {Текст вопроса} 1. {Вариант ответа №1}. 2. {Вариант ответа №2}. 3. {Вариант ответа №3}.

 

 


Ваш результат: Всего вопросов                                   5 Количество правильных ответов       # Оценка                                                 #
По окончании теста выводится окно итога, которое имеет вид:

 


Заключение

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

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

Список использованных источников

1. Марченко А.И. Программирование в среде Turbo Pascal 7.0. Учебное пособие. – К.: ВЕК+, М.: ДЕСС, 1999. - 496 с.

 

 

 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 5

 

 

 

Приложение А. Исходный текст программы program LEAN_Ecm;   uses Crt, Graph, Sm_Graph, Sm_Const; {-------------------} {uses}   var I: Integer; FuncKeyWindow: array [1..3] of TImage; {Массив картинок функциональных клавиш} Temp: array [1..2] of TImage;      {Массив вспомогательный} {-------------------} {var}   procedure BildWin; const TxtCol: Word = Red; {Цвет текста} RTACol: Word = Yellow; {Цвет прямоугольников} BACCol: Word = Black; {Цвет фона} {Рисуем главную картинку} begin SetBkColor(BACCol); SetColor(BRDCol); Rectangle(X0, Y0, X0 + 385, Y0 + 300); Rectangle(X0, Y0 + 305, GetMaxX - X0, YS - 5); SetColor(MemCol); {Ячейки памяти} SetLineStyle(1, 0, 0); for I:= 1 to 4 do {Ячейки памяти} begin Line(X0 + 130 + 16 * I, Y0 + 120, X0 + 130 + 16 * I, Y0 + 200); Line(X0 + 130, Y0 + 120 + 16 * I, X0 + 210, Y0 + 120 + 16 * I) end; {CPU} SetColor(CPUCol); MoveTo(X0 + 83, Y0 + 203); {0} LineTo(X0 + 7, Y0 + 203); {1} LineTo(X0 + 7, Y0 + 117); {2} LineTo(X0 + 40, Y0 + 117); {3} LineTo(X0 + 40, Y0 + 45); {4} LineTo(X0 + 127, Y0 + 45); {5} LineTo(X0 + 127, Y0 + 27); {6} LineTo(X0 + 213, Y0 + 27); {7} LineTo(X0 + 213, Y0 + 73); {8} LineTo(X0 + 127, Y0 + 73); {9} LineTo(X0 + 127, Y0 + 55); {10} LineTo(X0 + 50, Y0 + 55); {11} LineTo(X0 + 50, Y0 + 117); {12} LineTo(X0 + 83, Y0 + 117); {12} LineTo(X0 + 83, Y0 + 203); {13} SetLineStyle(0, 0, 0); {Прямоугольники} SetColor(RTACol); Rectangle(X0 + 10, Y0 + 120, X0 + 80, Y0 + 200); {УУ(ЦУУ)} Rectangle(X0 + 55, Y0 + 120, X0 + 80, Y0 + 130); {КОП} Rectangle(X0 + 130, Y0 + 120, X0 + 210, Y0 + 200); {ОЗУ} Rectangle(X0 + 130, Y0 + 30, X0 + 210, Y0 + 70); {АЛУ} Rectangle(X0 + 130, Y0 + 250, X0 + 210, Y0 + 290); {ВЗУ} Rectangle(X0 + 260, Y0 + 120, X0 + 360, Y0 + 150); {У.Ввода} Rectangle(X0 + 260, Y0 + 170, X0 + 360, Y0 + 200); {У.Вывода}   {Подписи к прямоугольникам} SetColor(TxtCol);  
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 6

 

 

 


         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп Дата  

 

SetTextJustify(2, 0); OutTextXY(X0 + 80, Y0 + 200, 'УУ(ЦУУ)'); OutTextXY(X0 + 80, Y0 + 130, 'PC'); OutTextXY(X0 + 210, Y0 + 200, 'ОЗУ'); OutTextXY(X0 + 210, Y0 + 70, 'АЛУ'); OutTextXY(X0 + 210, Y0 + 290, 'ВЗУ'); OutTextXY(X0 + 360, Y0 + 150, 'У.Ввода'); OutTextXY(X0 + 360, Y0 + 200, 'У.Вывода'); SetTextJustify(0, 0); {Стрелки Big} SetColor(ARBCol); SetFillStyle(1, FILCol); {Вид стрелки} CArrow:= BArrow; Arrow(X0 + 85, Y0 + 140, 40, 1); {ОЗУ - УУ(ЦУУ)} FloodFill(X0 + 90, Y0 + 140, ARBCol); Arrow(X0 + 150, Y0 + 75, 40, 3); {ОЗУ - АЛУ} FloodFill(X0 + 150, Y0 + 80, ARBCol); Arrow(X0 + 190, Y0 + 115, 40, 4); {АЛУ - ОЗУ} FloodFill(X0 + 190, Y0 + 110, ARBCol); Arrow(X0 + 150, Y0 + 205, 40, 3); {ВЗУ - ОЗУ} FloodFill(X0 + 150, Y0 + 210, ARBCol); Arrow(X0 + 190, Y0 + 245, 40, 4); {ОЗУ - ВЗУ} FloodFill(X0 + 190, Y0 + 240, ARBCol); Arrow(X0 + 215, Y0 + 135, 40, 1); {У.Ввода - ОЗУ} FloodFill(X0 + 220, Y0 + 135, ARBCol); Arrow(X0 + 255, Y0 + 185, 40, 2); {У.Вывода - ОЗУ} FloodFill(X0 + 250, Y0 + 185, ARBCol); {Стрелки Small} SetColor(ARSCol); {Вид стрелки} CArrow:= SArrow; Arrow(X0 + 125, Y0 + 180, 40, 2); {УУ(ЦУУ) - ОЗУ} Arrow(X0 + 125, Y0 + 270, 80, 2); {УУ(ЦУУ) - ВЗУ} Arrow(X0 + 125, Y0 + 50, 80, 2); {УУ(ЦУУ) - АЛУ = КОП} Line(X0 + 45, Y0 + 115, X0 + 45, Y0 + 50); {1} OutTextXY(X0 + 70, Y0 + 60, 'КОП');   {2} {УУ(ЦУУ) - У.Вводы, У.Вывода} Line(X0 + 45, Y0 + 205, X0 + 45, Y0 + 295); {1} Line(X0 + 45, Y0 + 295, X0 + 380, Y0 + 295); {2} Line(X0 + 380, Y0 + 295, X0 + 380, Y0 + 135); {3} Arrow(X0 + 365, Y0 + 135, 15, 1); {in}   {4} Arrow(X0 + 365, Y0 + 185, 15, 1); {out}  {5} {Носики стрелок Small} SetColor(LightGreen); Arrow(X0 + 125, Y0 + 180, 0, 2); {1} Arrow(X0 + 125, Y0 + 270, 0, 2); {2} Arrow(X0 + 125, Y0 + 50, 0, 2); {3} Arrow(X0 + 365, Y0 + 135, 0, 1); {4} Arrow(X0 + 365, Y0 + 185, 0, 1); {5} SetColor(BRDCol); Rectangle(0, 0, GetMaxX, GetMaxY); end; {BildWin} {-------------------}   procedure BildContext; const TxtCol: Word = LightBlue; begin SetColor(BRDCol); {Устанавливаем цвет границы и рисуем ее} Rectangle(XC, YC, GetMaxX - X0, YC + 300); SetTextJustify(1, 1); SetColor(TxtCol + 1); {Заголовок} OutTextXY(GetMaxX - (GetMaxX - X0 - XC) div 2 - X0, YC + 20, 'Обозначения ' +            'на схеме:');
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 7

 

 

 

CArrow:= BArrow; {Стрелки} SetColor(ARBCol); SetFillStyle(1, Blue); Arrow(XC + 50, YC + 50, 40, 2); FloodFill(XC + 40, YC + 50, ARBCol); CArrow:= SArrow; SetColor(ARSCol); Arrow(XC + 50, YC + 80, 40, 2); SetColor(LightGreen); Arrow(XC + 50, YC + 80, 0, 2); SetColor(MemCol); SetLineStyle(1, 0, 0); Line(XC + 10, YC + 110, XC + 34, YC + 110); Line(XC + 10, YC + 126, XC + 34, YC + 126); Line(XC + 14, YC + 106, XC + 14, YC + 128); Line(XC + 30, YC + 106, XC + 30, YC + 128); SetColor(CPUCol); Line(XC + 12, YC + 150, XC + 30, YC + 150); SetLineStyle(0, 0, 0); SetColor(TxtCol); SetTextJustify(0, 1); {Значения} OutTextXY(XC + 60, YC + 50, ' - Передача данных'); OutTextXY(XC + 60, YC + 80, ' - Сигнал управления'); OutTextXY(XC + 60, YC + 120, ' - Ячейка памяти'); OutTextXY(XC + 60, YC + 150, ' - Данной линией'); OutTextXY(XC + 60, YC + 160, ' обведены части'); OutTextXY(XC + 60, YC + 170, ' входящие в состав'); OutTextXY(XC + 60, YC + 180, ' процессора (ЦПУ)'); OutTextXY(XC + 20, YC + 200, '█ - содержимое файла'); OutTextXY(XC + 20, YC + 210, '1 - адрес первого операнда'); OutTextXY(XC + 20, YC + 220, '2 - адрес второго операнда'); OutTextXY(XC + 20, YC + 230, '3 - адрес результата'); SetTextJustify(0, 0) end; {Context} {-------------------}   procedure BildFuncKey; const StrFK: array [1..4] of string[11] =       ('Помощь F1', 'Назад <-', 'Вперед ->', 'Выход Esc'); FkbCol: Word = Green; TxtCol: Word = LightCyan; begin SetColor(BRDCol); Rectangle(XS, YS, GetMaxX - XS, GetMaxY - XS); SetTextJustify(1, 1); SetFillStyle(1, DarkGray); for I:= 1 to 4 do begin SetColor(FkbCol); {Установка цвета границы клавиш} Bar((GetMaxX - XS * 2) div 5 * I - Length(StrFK[I]) * 4, YS + 7,      (GetMaxX - XS * 2) div 5 * I + Length(StrFK[I]) * 4, YS + 23); Rectangle((GetMaxX - XS * 2) div 5 * I - Length(StrFK[I]) * 4, YS + 7,            (GetMaxX - XS * 2) div 5 * I + Length(StrFK[I]) * 4, YS + 23); SetColor(Black); {Установка цвета текста клавиш} OutTextXY((GetMaxX - XS * 2) div 5 * I + 2, YS + 15 - 2, StrFK[I]); SetColor(TxtCol); OutTextXY((GetMaxX - XS * 2) div 5 * I, YS + 15, StrFK[I]) end; SetTextJustify(0, 0); {Сахраняем картинки} FuncKeyWindow[1].Get(XS, YS, GetMaxX - XS, GetMaxY - XS); SetFillStyle(1, GetBkColor); Bar((GetMaxX - XS * 2) div 5 * 3 - Length(StrFK[I]) * 4, YS + 7, (GetMaxX - XS * 2) div 5 * 3 + Length(StrFK[I]) * 4, YS + 23);
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 8

 

 

 


FuncKeyWindow[3].Get(XS, YS, GetMaxX - XS, GetMaxY - XS);

FuncKeyWindow[1].Put(XS, YS);

Bar((GetMaxX - XS * 2) div 5 * 2 - Length(StrFK[I]) * 4, YS + 7,

(GetMaxX - XS * 2) div 5 * 2 + Length(StrFK[I]) * 4, YS + 23);

FuncKeyWindow[2].Get(XS, YS, GetMaxX - XS, GetMaxY - XS)

end; {FuncKey}

{-------------------}

 

{+----------------------------------------------+}

{                                           }

{ Процедуры вывода текстовой информации на экран }

{                                           }

{+----------------------------------------------+}

 

procedure Page_1;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

ClearViewPort;

SetColor(Blue);

OutTextXY(GetMaxX - X - 25, 100, '1');

SetColor(TxtCol);

MyText(0, 8, 'До начала работы программы, она находится на ВЗУ, ' +

           'в виде файла программы');

MyText(0, 16, '(*.exe или *.com).');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_1}

{-------------------}

 

procedure Page_2;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

ClearViewPort;

SetColor(Blue);

OutTextXY(GetMaxX - X - 25, 100, '2');

SetColor(TxtCol);

MyText(0, 8, 'После того как ЭВМ получила команду на запуск ' +

           'программы, содержимое');

MyText(0, 16, 'этого файла помещается в ячейку ОЗУ, начиная с ' +

           'ячейки с некоторым');

MyText(0, 24, 'стартовым адресом.');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_2}

{-------------------}

 

procedure Page_3;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

ClearViewPort;

SetColor(Blue);

OutTextXY(GetMaxX - X - 25, 100, '3');

SetColor(TxtCol);

MyText(0, 8, 'Содержимое ячейки со стартовым адресом программы ' +

           ' (первая машинная команда)');

MyText(0, 16, 'пересылается в УУ. УУ расшифровывает первую машинную ' +

           'команду и выробатывает');

MyText(0, 24, 'соответствующие ей сигналы управления для всех систем управления.');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_3}

{-------------------}

 

procedure Page_4_1;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

ClearViewPort;

         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 9

 

 

SetColor(Blue);

OutTextXY(GetMaxX - X - 25, 100, '4');

SetColor(TxtCol);

MyText(0, 8, 'Например: если первой машинной командой оказалась ' +

           'трех адресной командой');

MyText(0, 16, 'сложения двух чисел, произойдут следующие действия:');

MyText(0, 24, '- УУ посылает первый и второй адреса в ОЗУ');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_1}

{-------------------}

 

procedure Page_4_2;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

 

SetColor(TxtCol);

MyText(0, 32, '- ОЗУ пересылает содержимое ячеек с этими адресами в АЛУ,');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_2}

{-------------------}

 

procedure Page_4_3;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

MyText(0, 40, '- УУ отправляет сигнал управления (КОП) в АЛУ,');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_3}

{-------------------}

 

procedure Page_4_4;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

MyText(0, 48, '- АЛУ выполняет эту операцию (сложение) над двумя ' +

           'операндами и возвращает');

MyText(0, 56, ' результат в ОЗУ.');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_4}

{-------------------}

 

procedure Page_4_5;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

MyText(0, 64, '- УУ собщает ОЗУ третий адрес (адрес результата),');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_5}

{-------------------}

 

procedure Page_4_6;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

MyText(0, 72, '- ОЗУ помещает полученный результат в ячейку памяти.');

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end; {Page_4_6}

{-------------------}

 

procedure Page_4_7;

begin

SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn);

SetColor(TxtCol);

  MyText(0, 80, 'На этом выполнение первой машинной команды ' +

           'заканчивается, происходит');

         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 10

 

 

MyText(0, 88, 'переход к следующей по порядку машинной команде. ' +            'Содержимое ячейки ОЗУ с'); MyText(0, 96, 'адресом, следующим за стартовым, пересылается в УУ ' +            'и все повторяется.'); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) end; {Page_4_6} {-------------------}   {+------------------+} {               } { Процедуры анимации } {               } {+------------------+}   procedure Move_1; begin BLink(150, 285, 'kurs.exe'); end; {Move_1} {-------------------}   procedure Move_2; begin SetColor(Green); Animation(150, 285, -125, 2, ' █ █', True) end; {Move_2} {-------------------}   procedure Move_3; begin SetColor(GetBkColor); SetColor(Green); Animation(100, 168, -70, 1, ' 1 2 +', True) end; {Move_3} {-------------------}   procedure Move_4_1; begin SetColor(GetBkColor); OutTextXY(30, 176, ' 1 2'); SetColor(Green); Animation(47, 198, 63, 1, ' 1 2', False); SetColor(GetBkColor); OutTextXY(150, 168, ' █ █'); SetColor(Green); OutTextXY(150, 168, ' a b') end; {Move_4_1} {-------------------}   procedure Move_4_2; begin SetColor(Green); Animation(150, 160, -95, 2, ' a b', True) end; {Move_4_2} {-------------------}   procedure Move_4_3; begin setcolor(getbkcolor); OutTextXY(30, 176, ' +'); SetColor(Green); Animation(52, 160, -94, 2, '+', False) end; {Move_4_3} {-------------------}   procedure Move_4_4;  
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 11

 

 

begin SetColor(Green); Animation(52, 66, 115, 1, '+', True); OutTextXY(183, 73, '=c') end; {Move_4_4} {-------------------}   procedure Move_4_5; begin SetColor(GetBkColor); SetColor(Green); Animation(47, 198, 63, 1, '3', False); end; {Move_4_1} {-------------------}   procedure Move_4_6; begin SetColor(Green); Animation(191, 66, 94, 2, 'c', True) end; {Move_4_5} {-------------------}     procedure Help; {Помощь} const XH: Integer = 70; YH: Integer = 70; begin ClearDevice; SetColor(BRDCol); Rectangle(0, 0, GetMaxX, GetMaxY); SetColor(LightCyan); SetTextJustify(1, 0); OutTextXY(GetMaxX div 2, YH + 10,'Помощь:'); SetTextJustify(0, 0); OutTextXY(XH + 10, YH + 20,'Адрес:'); OutTextXY(XH + 10, YH + 30,'УУ:'); OutTextXY(XH + 10, YH + 40,'АЛУ:'); OutTextXY(XH + 10, YH + 50,'АЛУ+УУ:'); OutTextXY(XH + 10, YH + 60,'ВЗУ:'); OutTextXY(XH + 10, YH + 70,'ОЗУ:'); OutTextXY(XH + 10, YH + 80,'УВвода:'); OutTextXY(XH + 10, YH + 90,'УВывода:'); SetColor(Cyan); OutTextXY(XH + 90, YH + 20,'номер ячейки памяти'); OutTextXY(XH + 90, YH + 30,'устройство управления'); OutTextXY(XH + 90, YH + 40,'арифметико-логическое устройство'); OutTextXY(XH + 90, YH + 50,'процессор'); OutTextXY(XH + 90, YH + 60,'внешнее запоминающее устройство (hdd, fdd и др.)'); OutTextXY(XH + 90, YH + 70,'оперативное запоминающее устройство'); OutTextXY(XH + 90, YH + 80,'устройство ввода'); OutTextXY(XH + 90, YH + 90,'устройство вывода'); _Pause end; {Help} {-------------------}   procedure MainWin; begin ClearDevice; BildWin; BildContext; BildFuncKey end; {MainWin} {-------------------}
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 12

 

 

 

 


procedure Play;

 {-------------}

procedure SelectPage(N: Byte);

begin

case N of

 1: begin

FuncKeyWindow[2].Put(XS, YS);

Page_1;

Move_1

end;

 2: begin

FuncKeyWindow[1].Put(XS, YS);

Page_2;

Move_2

end;

 3: begin

FuncKeyWindow[1].Put(XS, YS);

Page_3;

Move_3

end;

 4: begin

FuncKeyWindow[3].Put(XS, YS);

Page_4_1;

Move_4_1;

Delay(Time_3 * 20);

Page_4_2;

Delay(Time_3 * 20);

Move_4_2;

Delay(Time_3 * 20);

Page_4_3;

Delay(Time_3 * 20);

Move_4_3;

Move_4_4;

Page_4_4;

Delay(Time_3 * 20);

Page_4_5;

Delay(Time_3 * 20);

Move_4_5;

Delay(Time_3 * 20);

Page_4_6;

Delay(Time_3 * 20);

Move_4_6;

Delay(Time_3 * 20);

Page_4_7

end

end

end; {SelectPage}

 {-------------}

 

const

Back = #75;

Next = #77;

F1 = #59;

Esc = #27;

var

ArrowsAndEsc: set of Char;

ExtentedKey: Boolean;

Flag: Boolean;

CH: Char;

N: Byte;

begin

ClearDevice;

MainWin;

N:= 0;

         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 13

 

 

ArrowsAndEsc:= [Back, Next, F1, Esc];

repeat

ExtentedKey:= False;

Flag:= False;

CH:= ReadKey;

if CH = Esc then

Flag:= True;

if CH = #0 then

begin

   CH:= ReadKey;

   ExtentedKey:= True

end;

if ExtentedKey then

case CH of

 Back: begin

    Dec(N);

    SelectPage(N);

    if N < 1 then N:= 1

  end;

 Next: begin

    Inc(N);

    SelectPage(N);

    if N > 4 then N:= 4

  end;

 F1: begin

    Temp[1].Get(X0, Y0, X0 + 380, Y0 + 300);

    Temp[2].Get(X0, Y0 + 305, GetMaxX - X0, YS - 5);

    Help;

    MainWin;

    Temp[1].Put(X0, Y0);

    Temp[2].Put(X0, Y0 + 305);

    if N <= 1 then

     FuncKeyWindow[2].Put(XS, YS);

    if N = 4 then

     FuncKeyWindow[3].Put(XS, YS)

  end

end {Case}

until Flag;

ClearDevice

end; {Play}

{-------------------}

 

procedure TextT(Col: TColor; S: TText);

begin

SetTextJustify(1, 1);

for I:= 1 to 4 do

begin

SetColor(Col[I]);

OutTextXY(GetMaxX div 2, GetMaxY div 2 + I * 10 - 40, S[I])

end;

SetTextJustify(0, 0)

end; {TextT}

{-------------------}

 

procedure TestMode;

{-----------------}

function Quastion(N: Byte; var CH: Char): Byte;

var

I: Byte;

C: Char;

CHEAt: string[1];

Code: Integer;

StrN: string[3];

Res: Byte;

Begin

         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 14

 

 

CH:= #0;

SetColor(BRDCol);

Rectangle(0, 0, GetMaxX, GetMaxY);

SetColor(White);

MyText(XT, YT, 'Вопрос #' + QuastionS[N]);

SetColor(Yellow);

for I:= 1 to 3 do

begin

if I = Ok[N] then

   Cheat:= V

else

   Cheat:= '';

MyText(XT, YT + 10 * I, Answer[N, I] + Cheat)

end;

repeat

C:= ReadKey;

if C = #27 then

begin

   SetTextJustify(1, 0);

   SetViewPort(1, GetMaxY - 100, GetMaxX - 1, GetMaxY - 1, ClipOn);

   SetColor(Red);

   OutTextXY(GetMaxX div 2, 10, 'Вы действительно хотите выйти?');

   SetColor(Green);

   OutTextXY(GetMaxX div 2, 30, 'Да(Y), Нет(N)');

   SetTextJustify(0, 0);

   C:= ReadKey;

   if C = 'y' then

     C:= #27

   else

     begin

       C:= #0;

       ClearViewPort

     end;

   SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn)

end

until C in ['1', '2', '3', #27];

if C <> #27 then

begin

 

Val(C, Res, Code);

if Res = Ok[N] then

   begin

     Quastion:= 1;

     SetColor(Green);

     MyText(GetMaxX div 2 - 20, GetMaxY - 200, 'ВЕРНО')

   end

else

   begin

     Quastion:= 0;

     SetColor(Red);

     MyText(GetMaxX div 2 - 28, GetMaxY - 200, 'НЕВЕРНО')

   end;

Delay(Time_2)

end

else

CH:= C;

ClearDevice

end; {Quastion}

{-----------------}

 

function Mark(Res: Byte): Char;

begin

case Res of

1: Mark:= '1';

2: Mark:= '2';

         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 15

 

 

3: Mark:= '3'; 4: Mark:= '4'; 5: Mark:= '5'; else Mark:= '0' end end; {Mark} {-----------------}   var I: Byte; Result: Byte; StrRes: string[2]; TempS: TText; C: Char; begin C:= #0; ClearDevice; Result:= 0; TempS:= EndofTest; for I:= 1 to 5 do begin if Quastion(I, C) = 1 then    Inc(Result); if C = #27 then Exit end; ClearDevice; SetColor(BRDCol); Rectangle(0, 0, GetMaxX, GetMaxY); Str(Result, StrRes); TempS[3]:= EndofTest[3] + StrRes; TempS[4]:= EndofTest[4] + Mark(Result); SetColor(BRDCol); Rectangle(GetMaxX div 2 - 150, GetMaxY div 2 - 60,        GetMaxX div 2 + 150, GetMaxY div 2 + 40); TextT(TestCol, TempS); _Pause; ClearDevice end; {TestMode} {-------------------}   procedure MainMenu; var C: Char; ExtentedKey: Boolean; TempCol: TColor; K: ShortInt; begin ClearDevice; TempCol[1]:= MenuCol[1]; TempCol[2]:= MenuCol[3]; TempCol[3]:= MenuCol[4]; TempCol[4]:= MenuCol[4]; K:= 1; repeat SetColor(BRDCol); Rectangle(GetMaxX div 2 - 150, GetMaxY div 2 - 60,          GetMaxX div 2 + 150, GetMaxY div 2 + 40); Rectangle(0, 0, GetMaxX, GetMaxY); ExtentedKey:= False; {флаг поступления расширенного кода} TextT(TempCol, Menu); while KeyPressed do ReadKey; {очистка буфера клавиатуры} C:= ReadKey;    {считывание кода новой нажатой клавиши} if C = #0 then   {если "да" - код расширенный} begin
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 16

 

 


   C:= ReadKey; {считывается второй символ расширенного кода}

   ExtentedKey:= True

end;

if ExtentedKey then {если код был расширенный}

case C of

   #72: K:= K - 1;

   #80: K:= K + 1

end;

if C = #13 then

case K of

   1: Play;    {Обучение}

   2: TestMode; {Проверка знаний}

   3: Exit     {Выход}

end;

if K < 1 then K:= 3;

if K > 3 then K:= 1;

for I:= 2 to 4 do

TempCol[I]:= MenuCol[4];

TempCol[K + 1]:= MenuCol[3]; {Смена цвета выделленого пункта}

until C = #27 {т.е. нажата клавиша "Esc"}

end; {MainMenu}

{-------------------}

 

begin

MyInitGraph;      {Инициализация графического режима}

Title;            {Титульный лист}

MainMenu;         {Главное меню}

CloseGraph;       {Закрытие графического режима}

end. {LEAN_Ecm;}

{-------------------}

Текст модуля Sm_Const

unit Sm_Const;

interface

uses Graph, Sm_Graph;

type

TText = array [1..4] of string;

TColor = array [1..4] of Word;

------------------- type

const

X0: Integer = 10; {Начальная координата X}

Y0: Integer = 20; {Начальная координата Y}

XS: Integer = 10; {FuncKey}

YS: Integer = 440; {FuncKey}

XC: Integer = 400; {Context}

YC: Integer = 20; {Context}

XT: Integer = 80; {Test}

YT: Integer = 150; {Test}

X: Integer = 15; {Координата вывод текста X}

Y: Integer = 330; {Координата вывод текста Y}

ARBCol: Word = LightCyan; {Цвет внешней границы стрелки Big}

ARSCol: Word = Red;      {Цвет внешней границы стрелки Small}

FILCol: Word = Blue; {Цвет стрелки Big}

MemCol: Word = LightGreen; {Цвет ячеек памяти}

CPUCol: Word = DarkGray; {Цвет CPU}

BRDCol: Word = Brown; {Цвет рамки}

TxtCol: Word = White; {Цвет текста}

BArrow: TArrow = (X1: 15; Y1: 2; Y2: 5); {Форма стрелки Big}

SArrow: TArrow = (X1: 5; Y1: 0; Y2: 1); {Форма стрелки Small}

TestCol: TColor = (Green, White, Blue, Red); {Цвет окна теста}

MenuCol: TColor = (Cyan, 0, LightGreen, Blue);

V: string[1] = '';

Q: string[9] = 'Вопрос #';

{Вопросы]

         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 17

 

Quastions: array [1..5] of string =

 

 

('1. Что такое ВЗУ?',

'2. Что в ходит в процесор?',

'3. Через какое устройство в ЭВМ происходит обмен данными?',

'4. Где в начальный момент находится программа? ',

'5. Какое из устройств расшифровывает первую машинную команду?');

{Варианты ответов}

Answer: array [1..5, 1..3] of string =

(('1. Внешнее записывающее устройство', '2. Внешнее запоминающее устройство', '3. Внутреннее запоминающее устройство'), ('1. ЦУУ + АЛУ + ВЗУ', '2. УВвода + ОЗУ', '3. ЦУУ + АЛУ + КОП'),

('1. АЛУ ','2. ОЗУ', '3. ВЗУ'),

('1. В ВЗУ','2. В АЛУ','3. В УУ'),

('1. ВЗУ', '2. ЦУУ', '3. АЛУ'));

{Номера правильных ответов}

OK: array [1..5] of Byte = (2, 3, 2, 1, 2);

{Текст Меню}

Menu: TText =('Ваш выбор:',

'Обучение',

'Проверка знаний',

'Esc - Выход');

{Текст итога тестовой части программы}

EndofTest: TText = ('Ваш результат:',

'Всего вопросов: 5',

'Количество правильных ответов: ',

'Оценка: ');

------------------- const

implementation

end.

Текст модуля Sm_graph

unit Sm_Graph;

                           interface

uses

Graph, Crt;

{-------------------} {Uses}

 

type

 

TArrow = record X1, Y1, Y2: Integer; end;

 

TImage =

object

private

Image: Pointer;

Size: Word;

public

procedure Destroy;

procedure Get(X1, Y1, X2, Y2: Integer);

procedure Put(X, Y: Integer);

end;

{-------------------} {Type}

 

const

CArrow: TArrow = (X1: 15; Y1: 2; Y2: 5);

Time_1: Word = 5000; {Время мерцания}

Time_2: Word = 15000; {Время задержки экрана после ответа на вопрос}

Time_3: Word = 300; {Время анимации}

Time_4: Word = 400; {Время задержки вывода текста по буквам}

procedure _Pause;

procedure Animation(X, Y: Integer; D: Integer; XY: Byte; S: string; Vis: Boolean);

procedure Arrow(X, Y, L: Integer; DIRectIOn: Byte);

procedure BLink(X, Y: Integer; S: string);

procedure MyInitGraph;

         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 18

 

procedure MyText(X, Y: Integer; S: string);

 

 

procedure Title;   var TempImage: TImage;                            implementation   {---------Object TImage----------} procedure TImage.Destroy; begin if Image <> nil then begin FreeMem(Image, Size); Image:= nil; Size:= 0; end end; {Timage.Destroy} {-------------------}   procedure TImage.Get(X1, Y1, X2, Y2: Integer); begin Destroy; Size:= ImageSize(X1, Y1, X2, Y2); GetMem(Image, Size); GetImage(X1, Y1, X2, Y2, Image^); end; {TImage.Get} {-------------------}   procedure TImage.Put(X, Y: Integer); begin if Image <> nil then PutImage(X, Y, Image^, 0); end; {TImage.Put} {---------Object TImage----------}   procedure MyInitGraph; var GD, GM: Integer;   begin  GD:= Detect;  InitGraph(GD, GM,'');  if GraphResult <> grOK then Halt(1); end; {MyInitGraph} {-------------------}   procedure MyText(X, Y: Integer; S: string); var I: Word; C: Char; begin  MoveTo(X, Y);  I:= 0;  repeat Inc(I); OutText(S[I]); Delay(Time_4);  until (I = Length(S)); end; {NyText} {-------------------}   procedure _Pause; begin  ReadKey; end; {_Pause}
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 19

 

 

{-------------------}   procedure Animation(X, Y: Integer; D: Integer;                XY: Byte; S: string; Vis: Boolean);                   {Animation} var DX, DY: Integer; I: Integer; begin  DX:= 1;  DY:= 1;  SetColor(Green);  if D < 0 then begin DX:= -1; DY:= -1; end;  case XY of 1: DY:= 0; 2: DX:= 0;  end;  D:= Abs(D);  for I:= 1 to D do begin TempImage.Get(I * DX + X,        I * DY + Y,        TextWidth(S) + I * DX + X,        TextHeight(S) + I * DY + Y); OutTextXY(X + I * DX, Y + TextHeight(S) + I * DY, S); Delay(Time_3); if I <> D then TempImage.Put(X + I * DX, Y + I * DY); if (I = D) and not VIs then TEMPImage.Put(X + I * DX, Y + I * DY); end; end; {Animation} {-------------------}   procedure Arrow(X, Y, L: Integer; Direction: Byte); type  COOrAR = array [1..6] of Integer; var X1: Integer; Y1: Byte; Y2: Byte; XX: COOrAR; YY: COOrAR;   procedure Change1; begin  X1:= -X1;  L:= -L end;   procedure Change2; var I: Byte; Temp: Integer; begin  for I:= 1 to 6 do begin TEMP:= XX[I]; XX[I]:= YY[I]; YY[I]:= TEMP; end;
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 20

 

 

end;   procedure ArrowCCOOr; begin  XX[1]:= X1; YY[1]:= Y2;  XX[2]:= X1; YY[2]:= Y1;  XX[3]:= L; YY[3]:= Y1;  XX[4]:= L; YY[4]:= -Y1;  XX[5]:= X1; YY[5]:= -Y1;  XX[6]:= X1; YY[6]:= -Y2; end;   var I: Byte; begin  X1:= CArrow.X1;  Y1:= CArrow.Y1;  Y2:= CArrow.Y2;  if L < X1 then L:= X1;  case Direction of 2, 4: Change1;  end;  ArrowCCOOr;  case Direction of 3, 4: Change2;  end;  MoveTo(X, Y);  for I:= 1 to 6 do LineTo(X+XX[I], Y+YY[I]);  LineTo(X, Y); end; {Arrow} {-------------------}   procedure Title; const Word_1: string = 'Курсовая работа по информатике.'; Word_2: string = 'Тема: взаимодействие основных частей ЭВМ при выполнении программы'; Word_3: string = 'Выполнили студенты группы МРС-91:'; Word_4: string = 'Егоров О.В.'; Word_5: string = 'Шетманюк М.В.'; begin  ClearDevice;  SetColor(LightGreen);  Rectangle(0, 0, GetMaxX, GetMaxY);  SetFillStyle(1, Blue);  FloodFill(1,1, LightGreen);  SetColor(LightGray);  Rectangle(25, 25,GetMaxX-25, GetMaxY-25);  SetFillStyle(1, DarkGray);  FloodFill(101,101, LightGray);  SetTextJustify(1, 0);  SetTextStyle(0,0,2);  SetColor(Black);  OutTextXY(GetMaxX div 2+1, GetMaxY div 2-1, Word_1);  SetColor(Brown);  OutTextXY(GetMaxX div 2, GetMaxY div 2, Word_1);  SetTextStyle(0,0,0);  SetColor(Red);  OutTextXY(GetMaxX div 2, GetMaxY-35, 'Хабаровск 2000');  SetColor(Black);  OutTextXY(GetMaxX div 2+1, GetMaxY div 2-1+18, Word_2);  SetColor(Brown);  OutTextXY(GetMaxX div 2, GetMaxY div 2+18, Word_2);  SetTextJustify(0, 0);
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 21

 

 

SetColor(Black);  OutTextXY(GetMaxX-Length(Word_3)*8+1-180, GetMaxY-100-1, Word_3);  SetColor(White);  OutTextXY(GetMaxX-Length(Word_3)*8-180, GetMaxY-100, Word_3);  SetColor(Black);  OutTextXY(GetMaxX+1-180, GetMaxY-90-1, Word_4);  SetColor(LightGreen);  OutTextXY(GetMaxX-180, GetMaxY-90, Word_4);  SetColor(Black);  OutTextXY(GetMaxX+1-180, GetMaxY-80-1, Word_5);  SetColor(LightGreen);  OutTextXY(GetMaxX-180, GetMaxY-80, Word_5);  _Pause;  ClearDevice; end; {Title} {-------------------}   procedure BLink(X, Y: Integer; S: string); var I: Byte; begin for I:= 1 to 3 do begin SetColor(Black); Delay(Time_1); OutTextXY(X, Y + TextHeight(S), S); SetColor(Green); Delay(Time_1); OutTextXY(X, Y + TextHeight(S), S) end end; {Blink} {-------------------}   end.    
 
         

КР. 991096.00.00.00 ПЗ

Лист
          ——–
Изм. Лист № докум. Подп. Дата 22

 

 

 

 






Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: