![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Главная Рефераты по рекламе Рефераты по физике Рефераты по философии Рефераты по финансам Рефераты по химии Рефераты по хозяйственному праву Рефераты по цифровым устройствам Рефераты по экологическому праву Рефераты по экономико-математическому моделированию Рефераты по экономической географии Рефераты по экономической теории Рефераты по этике Рефераты по юриспруденции Рефераты по языковедению Рефераты по юридическим наукам Рефераты по истории Рефераты по компьютерным наукам Рефераты по медицинским наукам Рефераты по финансовым наукам Рефераты по управленческим наукам Психология и педагогика Промышленность производство Биология и химия Языкознание филология Издательское дело и полиграфия Рефераты по краеведению и этнографии Рефераты по религии и мифологии Рефераты по медицине Рефераты по сексологии Рефераты по информатике программированию Краткое содержание произведений |
Реферат: Взаимодействие основных частей ЭВМ при выполнении программыРеферат: Взаимодействие основных частей ЭВМ при выполнении программы
Целью курсовой работы является разработка программы для ЭВМ средней сложности с удобным интерфейсом на языке программирования Паскаль. Блок – схема процедуры «MainMenu» (вывода на экран главного меню)
Описание программы 1. НазначениеДанная программа показывает и обучает, как взаимодействуют основные части ЭВМ при выполнении программы. Программа написана на языке Turbo Pascal [1] для персональных ЭВМ, совместимых с IBM PC, и операционной системой MS DOS. 2. Запуск программыНаходясь в каталоге с программой, в ответ на подсказку DOS набрать computer.exe и нажать клавишу Enter. Выход из программы по нажатию клавиши Esc. 3. Работа с программойПосле запуска программы на экране появляется главное меню выбора:
Выбор пунктов меню производится с помощью курсорных клавиш Вверх, Вниз и нажатия клавиши Enter для запуска нужной части программы. Для выхода из программы достаточно нажать клавишу Esc или выбрать в меню опцию с надписью «Esc – Выход». 3.1 Выбор пункта меню «Обучение»Обучающая часть программы имеет вид: Внизу экрана находятся функциональные клавиши Помощь (F1), Назад (¬), Вперед (®), Выход (Esc): Помощь (F1) – получить справку, Назад (¬) – вернуться назад, Вперед (®) – вывести следующую информацию, Выход (Esc) – выйти из обучения. 3.2 Выбор пункта меню «Проверка знаний»Тест имеет вид: Выбор ответа производится клавишами 1, 2 и 3. При необходимости выйти можно нажать клавишу Esc и выйти из теста.
В курсовой работе была спроектирована, разработана и отлажена на языке программирования Паскаль обучающая программа на тему: «Взаимодействие основных частей ЭВМ при выполнении программы». Программа имеет удобный для пользователя интерфейс и возможностью просмотра графического изображения процессов проходящих в ЭВМ при выполнении программы. Список использованных источников1. Марченко А.И. Программирование в среде Turbo Pascal 7.0. Учебное пособие. – К.: ВЕК+, М.: ДЕСС, 1999. - 496 с.
Приложение А. Исходный текст программы 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);
|
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, 'Обозначения ' + 'на схеме:');
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);
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;
|
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, 'На этом выполнение первой машинной команды ' + 'заканчивается, происходит');
|
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;
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} {-------------------}
|
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;
|
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
|
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';
|
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
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] = 'Вопрос #'; {Вопросы]
|
('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;
|
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}
{-------------------} 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;
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);
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.
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
© 2012 Рефераты, курсовые и дипломные работы. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||