рефераты
Главная

Рефераты по рекламе

Рефераты по физике

Рефераты по философии

Рефераты по финансам

Рефераты по химии

Рефераты по хозяйственному праву

Рефераты по цифровым устройствам

Рефераты по экологическому праву

Рефераты по экономико-математическому моделированию

Рефераты по экономической географии

Рефераты по экономической теории

Рефераты по этике

Рефераты по юриспруденции

Рефераты по языковедению

Рефераты по юридическим наукам

Рефераты по истории

Рефераты по компьютерным наукам

Рефераты по медицинским наукам

Рефераты по финансовым наукам

Рефераты по управленческим наукам

Психология и педагогика

Промышленность производство

Биология и химия

Языкознание филология

Издательское дело и полиграфия

Рефераты по краеведению и этнографии

Рефераты по религии и мифологии

Рефераты по медицине

Рефераты по сексологии

Рефераты по информатике программированию

Краткое содержание произведений

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

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

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

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

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

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

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

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

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

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

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


© 2012 Рефераты, курсовые и дипломные работы.