Взаимодействие основных частей ЭВМ при выполнении программы
| |
| |
|Министерство образования РФ |
| |
|Хабаровский государственный технический университет |
| |
| |
|Институт (факультет) Институт информационных технологий |
|Кафедра Компьютерное проектирование и сертификация машин |
|Специальность Металлорежущие станки и инструменты |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|Взаимодействие основных частей ЭВМ при выполнении программы |
| |
| |
|Пояснительная записка к курсовой работе |
| |
|По дисциплине «Информатика» |
| |
|КР. 991096.00.00.00 ПЗ |
| |
| |
| |
| |
| |
|Выполнил: |
|студент группы МРС-91 |
|Егоров О.В. |
|зачетная книжка № 991096 |
|Руководитель работы: |
|доцент |
|Кетов А.В. |
| |
| |
| |
| |
| |
| |
|Хабаровск 2000 |
| |
| |
|Задание на курсовую работу |
|Разработать обучающую программу на тему "Взаимодействие основных частей ЭВМ|
|при выполнении программы". |
|Руководитель: |
|Реферат |
|Пояснительная записка к курсовой работе содержит 22 листа формата А4, 2 |
|рисунка, 1 использованный источник, 1 приложение. |
|ПРОГРАММА ДЛЯ ЭВМ, ПАСКАЛЬ, АЛГОРИТМИЧЕСКИЙ ЯЗЫК, ПРОГРАММИРОВАНИЕ, |
|ИНФОРМАТИКА. |
|Целью курсовой работы является разработка программы для ЭВМ средней |
|сложности с удобным пользовательским интерфейсом. |
|Это достигается путем проектирования, разработки и отладки на языке Паскаль|
|обучающей программы на тему: «Взаимодействие основных частей ЭВМ при |
|выполнении программы». |
|Приведена блок-схема процедуры для вывода главного меню. В приложении |
|приведен исходный текст программы на Turbo Pascal. |
| |
|Содержание |
|Введение 3 |
|Блок – схема процедуры «MainMenu» (вывода на экран главного меню) 3 |
|Описание программы 4 |
|1. Назначение 4 |
|2. Запуск программы 4 |
|3. Работа с программой 4 |
|3.1 Выбор пункта меню «Обучение» 4 |
|3.2 Выбор пункта меню «Проверка знаний» 5 |
|Заключение 5 |
|Список использованных источников 5 |
|Приложение А. Исходный текст программы 6 |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|Введение |
|Целью курсовой работы является разработка программы для ЭВМ средней |
|сложности с удобным интерфейсом на языке программирования Паскаль. |
|Блок – схема процедуры «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] = 'Вопрос #'; |
|{Вопросы] |
|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; |
|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} |
| |
| |
| |
|{-------------------} |
| |
|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. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
-----------------------
| | | | | | . 991096.00.00.00 |8AB |
| | | | | | | 0 |
B0 | |22 | |
| | | | | . 991096.00.00.00 |8AB | | | | | | | |