Взаимодействие основных частей ЭВМ при выполнении программы

Описание:
Тип работы: реферат


Задание на курсовую работу
Разработать обучающую программу на тему "Взаимодействие основных частей ЭВМ при выполнении программы".
Руководитель:
Реферат
Пояснительная записка к курсовой работе содержит 22 листа формата А4, 2 рисунка, 1 использованный источник, 1 приложение.
Доступные действия
Введите защитный код для скачивания файла и нажмите "Скачать файл"
Защитный код
Введите защитный код

Нажмите на изображение для генерации защитного кода

Текст:


Задание на курсовую работу
Разработать обучающую программу на тему "Взаимодействие основных частей ЭВМ при выполнении программы".
Руководитель:
Реферат
Пояснительная записка к курсовой работе содержит 22 листа формата А4, 2 рисунка, 1 использованный источник, 1 приложение.
ПРОГРАММА ДЛЯ ЭВМ, ПАСКАЛЬ, АЛГОРИТМИЧЕСКИЙ ЯЗЫК, ПРОГРАММИРОВАНИЕ, ИНФОРМАТИКА.
Целью курсовой работы является разработка программы для ЭВМ средней сложности с удобным пользовательским интерфейсом.
Это достигается путем проектирования, разработки и отладки на языке Паскаль обучающей программы на тему: «Взаимодействие основных частей ЭВМ при выполнении программы».
Приведена блок-схема процедуры для вывода главного меню. В приложении приведен исходный текст программы на Turbo Pascal.





Введение
Целью курсовой работы является разработка программы для ЭВМ средней сложности с удобным интерфейсом на языке программирования Паскаль.
Блок – схема процедуры «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
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.







Информация о файле
Название файла Взаимодействие основных частей ЭВМ при выполнении программы от пользователя z3rg
Дата добавления 14.4.2009, 18:30
Дата обновления 14.4.2009, 18:30
Тип файла Тип файла (zip - application/zip)
Скриншот Не доступно
Статистика
Размер файла 61.68 килобайт (Примерное время скачивания)
Просмотров 1583
Скачиваний 0
Оценить файл