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

31184
знака
40
таблиц
4
изображения

Министерство образования РФ

 

Хабаровский государственный технический университет

Институт (факультет) Институт информационных технологий

Кафедра Компьютерное проектирование и сертификация машин

Специальность Металлорежущие станки и инструменты

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

Пояснительная записка к курсовой работе

По дисциплине «Информатика»

КР. 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

КР.991096.00.00.00 ПЗ

Изм.

Лист

№ докум.

Подп.

Дата

Разраб.

Егоров О.В.

 

 

ВЗАИМОДЕЙСТВИЕ

ОСНОВНЫХ

ЧАСТЕЙ ЭВМ

ПРИ ВЫПОЛНЕНИИ

ПРОГРАММЫ

Пояснительная записка

Лит.

Лист

Листов

Провер.

Кетов А.В.

 

 

У

2 22

Принял

Кетов А.В.

 

 

ХГТУ

Кафедра КПСМ

МРС-91

 

 

 

 

Утв.

 

 

 

 

C := ReadKey

 
Скругленный прямоугольник: НачалоВведение

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

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

K := K - 1

 

 

 

 

 

 

КР. 991096.00.00.00 ПЗ Лист

 

 

 

 

 

——–

Изм.

Лист

№ докум.

Подп.

Дата

3
 

Описание программы 1. Назначение

Данная программа показывает и обучает, как взаимодействуют основные части ЭВМ при выполнении программы.

Программа написана на языке Turbo Pascal [1] для персональных ЭВМ, совместимых с IBM PC, и операционной системой MS DOS.

2. Запуск программы

Находясь в каталоге с программой, в ответ на подсказку DOS набрать computer.exe и нажать клавишу Enter. Выход из программы по нажатию клавиши Esc.

3. Работа с программой

После запуска программы на экране появляется главное меню выбора:

Подпись: Ваш Выбор:
Обучение
Проверка знаний
Esc – Выход


 

 

 

 

 

КР. 991096.00.00.00 ПЗ Лист

 

 

 

 

 

——–

Изм.

Лист

№ докум.

Подп.

Дата

4
 

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

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

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

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

Помощь (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
 

Информация о работе «Взаимодействие основных частей ЭВМ при выполнении программы»
Раздел: Информатика, программирование
Количество знаков с пробелами: 31184
Количество таблиц: 40
Количество изображений: 4

Похожие работы

Скачать
18684
3
0

... № темы Наименование Темы Объем, час. в том числе,   лекции, час. лабораторные работы, час.     1 2 3 4 5 6 7 8 1 семестр Введение в информатику и вычислительную технику Основы устройства и функционирования ЭВМ Операционная система Windows Современная вычислительная техника Программные ...

Скачать
31507
0
2

... пользователя. С помощью клавиатуры управляют компьютерной системой, а с помощью монитора получают от нее оклик. Принцип действия. Клавиатура относится к стандартным средствам персонального компьютера. Ее основные функции не нуждаются в поддержке специальными системными программами (драйверами). Необходимое программное обеспечения для начала работы с компьютером уже имеется в микросхеме ПЗУ в ...

Скачать
23606
0
0

... , региональных задач. 3).Средние ЭВМ – машины очень широкого распространения. 4).Малые ЭВМ. 5).ПЭВМ (персональные ЭВМ). 6).Микро ЭВМ и микропроцессоры. 7).Сети ЭВМ.Общие принципы построения современных ЭВМ. Основным принципом построения ЭВМ является программное управление, в основе которого лежит представление алгоритма решения любой задачи в виде программы вычислений. Алгоритм – это ...

Скачать
60039
6
8

... из-за динамической подзагрузки программы из файловой системы) и отлаживать его производительность по той же методике, которая была описана выше применительно к программе целиком. 5. Средство анализа эффективности MPI программ 5.1 Постановка задачи В системе DVM существуют развитые средства анализа эффективности выполнения параллельной DVM-программы. Эти средства являются более мощными, ...

0 комментариев


Наверх