рефераты Знание — сила. Библиотека научных работ.
~ Портал библиофилов и любителей литературы ~
 

МЕНЮ

рефератыГлавная
рефератыБаза готовых рефератов дипломов курсовых
рефератыБанковское дело
рефератыГосударство и право
рефератыЖурналистика издательское дело и СМИ
рефератыИностранные языки и языкознание
рефератыПраво
рефератыПредпринимательство
рефератыПрограммирование и комп-ры
рефератыПсихология
рефератыУголовное право
рефератыУголовный процесс
рефератыУправление персоналом
рефератыНовые или неперечисленные

рефераты

РЕКЛАМА


рефераты

ИНТЕРЕСНОЕ

рефераты

рефераты

 

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

рефераты

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

| |

| |

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

| |

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

| |

| |

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

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

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

| |

| |

| |

| |

| |

| |

| |

| |

| |

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

| |

| |

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

| |

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

| |

|КР. 991096.00.00.00 ПЗ |

| |

| |

| |

| |

| |

|Выполнил: |

|студент группы МРС-91 |

|Егоров О.В. |

|зачетная книжка № 991096 |

|Руководитель работы: |

|доцент |

|Кетов А.В. |

| |

| |

| |

| |

| |

| |

|Хабаровск 2000 |

| |

| |

|Задание на курсовую работу |

|Разработать обучающую программу на тему "Взаимодействие основных частей ЭВМ|

|при выполнении программы". |

|Руководитель: |

|Реферат |

|Пояснительная записка к курсовой работе содержит 22 листа формата А4, 2 |

|рисунка, 1 использованный источник, 1 приложение. |

|ПРОГРАММА ДЛЯ ЭВМ, ПАСКАЛЬ, АЛГОРИТМИЧЕСКИЙ ЯЗЫК, ПРОГРАММИРОВАНИЕ, |

|ИНФОРМАТИКА. |

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

|сложности с удобным пользовательским интерфейсом. |

|Это достигается путем проектирования, разработки и отладки на языке Паскаль|

|обучающей программы на тему: «Взаимодействие основных частей ЭВМ при |

|выполнении программы». |

|Приведена блок-схема процедуры для вывода главного меню. В приложении |

|приведен исходный текст программы на Turbo Pascal. |

| |

|Содержание |

|Введение 3 |

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

|Описание программы 4 |

|1. Назначение 4 |

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

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

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

|3.2 Выбор пункта меню «Проверка знаний» 5 |

|Заключение 5 |

|Список использованных источников 5 |

|Приложение А. Исходный текст программы 6 |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

|Введение |

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

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

|Блок – схема процедуры «MainMenu» |

|(вывода на экран главного меню) |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

|Описание программы |

|1. Назначение |

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

|ЭВМ при выполнении программы. |

|Программа написана на языке Turbo Pascal [1] для персональных ЭВМ, |

|совместимых с IBM PC, и операционной системой MS DOS. |

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

|Находясь в каталоге с программой, в ответ на подсказку DOS набрать |

|computer.exe и нажать клавишу Enter. Выход из программы по нажатию клавиши |

|Esc. |

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

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

| |

| |

| |

| |

| |

|Выбор пунктов меню производится с помощью курсорных клавиш Вверх, Вниз и |

|нажатия клавиши Enter для запуска нужной части программы. Для выхода из |

|программы достаточно нажать клавишу Esc или выбрать в меню опцию с надписью|

|«Esc – Выход». |

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

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

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

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

|Помощь (F1), Назад ((), Вперед ((), Выход (Esc): |

|Помощь (F1) – получить справку, |

|Назад (() – вернуться назад, |

|Вперед (() – вывести следующую информацию, |

|Выход (Esc) – выйти из обучения. |

| |

| |

| |

|3.2 Выбор пункта меню «Проверка знаний» |

|Тест имеет вид: |

| |

|Выбор ответа производится клавишами 1, 2 и 3. При необходимости выйти можно|

|нажать клавишу Esc и выйти из теста. |

| |

| |

| |

| |

| |

| |

| |

|По окончании теста выводится окно итога, которое имеет вид: |

| |

| |

| |

| |

| |

|Заключение |

|В курсовой работе была спроектирована, разработана и отлажена на языке |

|программирования Паскаль обучающая программа на тему: «Взаимодействие |

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

|Программа имеет удобный для пользователя интерфейс и возможностью просмотра|

|графического изображения процессов проходящих в ЭВМ при выполнении |

|программы. |

|Список использованных источников |

|1. Марченко А.И. Программирование в среде Turbo Pascal 7.0. Учебное |

|пособие. – К.: ВЕК+, М.: ДЕСС, 1999. - 496 с. |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

|Приложение А. Исходный текст программы |

|program LEAN_Ecm; |

| |

|uses Crt, Graph, Sm_Graph, Sm_Const; |

|{-------------------} {uses} |

| |

|var |

|I: Integer; |

|FuncKeyWindow: array [1..3] of TImage; Массив картинок функциональных |

|Temp: array [1..2] of TImage; {Массив вспомогательный} |

|{-------------------} {var} |

| |

|procedure BildWin; |

|const |

|TxtCol: Word = Red; {Цвет текста} |

|RTACol: Word = Yellow; {Цвет прямоугольников} |

|BACCol: Word = Black; {Цвет фона} |

|{Рисуем главную картинку} |

|begin |

|SetBkColor(BACCol); |

|SetColor(BRDCol); |

|Rectangle(X0, Y0, X0 + 385, Y0 + 300); |

|Rectangle(X0, Y0 + 305, GetMaxX - X0, YS - 5); |

|SetColor(MemCol); |

|{Ячейки памяти} |

|SetLineStyle(1, 0, 0); |

|for I := 1 to 4 do {Ячейки памяти} |

|begin |

|Line(X0 + 130 + 16 * I, Y0 + 120, X0 + 130 + 16 * I, Y0 + 200); |

|Line(X0 + 130, Y0 + 120 + 16 * I, X0 + 210, Y0 + 120 + 16 * I) |

|end; |

|{CPU} |

|SetColor(CPUCol); |

|MoveTo(X0 + 83, Y0 + 203); {0} |

|LineTo(X0 + 7, Y0 + 203); {1} |

|LineTo(X0 + 7, Y0 + 117); {2} |

|LineTo(X0 + 40, Y0 + 117); {3} |

|LineTo(X0 + 40, Y0 + 45); {4} |

|LineTo(X0 + 127, Y0 + 45); {5} |

|LineTo(X0 + 127, Y0 + 27); {6} |

|LineTo(X0 + 213, Y0 + 27); {7} |

|LineTo(X0 + 213, Y0 + 73); {8} |

|LineTo(X0 + 127, Y0 + 73); {9} |

|LineTo(X0 + 127, Y0 + 55); {10} |

|LineTo(X0 + 50, Y0 + 55); {11} |

|LineTo(X0 + 50, Y0 + 117); {12} |

|LineTo(X0 + 83, Y0 + 117); {12} |

|LineTo(X0 + 83, Y0 + 203); {13} |

|SetLineStyle(0, 0, 0); |

|{Прямоугольники} |

|SetColor(RTACol); |

|Rectangle(X0 + 10, Y0 + 120, X0 + 80, Y0 + 200); {УУ(ЦУУ)} |

|Rectangle(X0 + 55, Y0 + 120, X0 + 80, Y0 + 130); {КОП} |

|Rectangle(X0 + 130, Y0 + 120, X0 + 210, Y0 + 200); {ОЗУ} |

|Rectangle(X0 + 130, Y0 + 30, X0 + 210, Y0 + 70); {АЛУ} |

|Rectangle(X0 + 130, Y0 + 250, X0 + 210, Y0 + 290); {ВЗУ} |

|Rectangle(X0 + 260, Y0 + 120, X0 + 360, Y0 + 150); {У.Ввода} |

|Rectangle(X0 + 260, Y0 + 170, X0 + 360, Y0 + 200); {У.Вывода} |

| |

|{Подписи к прямоугольникам} |

|SetColor(TxtCol); |

| |

| |

| |

| |

| SetTextJustify(2, 0); |

|OutTextXY(X0 + 80, Y0 + 200, 'УУ(ЦУУ)'); |

|OutTextXY(X0 + 80, Y0 + 130, 'PC'); |

|OutTextXY(X0 + 210, Y0 + 200, 'ОЗУ'); |

|OutTextXY(X0 + 210, Y0 + 70, 'АЛУ'); |

|OutTextXY(X0 + 210, Y0 + 290, 'ВЗУ'); |

|OutTextXY(X0 + 360, Y0 + 150, 'У.Ввода'); |

|OutTextXY(X0 + 360, Y0 + 200, 'У.Вывода'); |

|SetTextJustify(0, 0); |

|{Стрелки Big} |

|SetColor(ARBCol); |

|SetFillStyle(1, FILCol); |

|{Вид стрелки} |

|CArrow := BArrow; |

|Arrow(X0 + 85, Y0 + 140, 40, 1); {ОЗУ - УУ(ЦУУ)} |

|FloodFill(X0 + 90, Y0 + 140, ARBCol); |

|Arrow(X0 + 150, Y0 + 75, 40, 3); {ОЗУ - АЛУ} |

|FloodFill(X0 + 150, Y0 + 80, ARBCol); |

|Arrow(X0 + 190, Y0 + 115, 40, 4); {АЛУ - ОЗУ} |

|FloodFill(X0 + 190, Y0 + 110, ARBCol); |

|Arrow(X0 + 150, Y0 + 205, 40, 3); {ВЗУ - ОЗУ} |

|FloodFill(X0 + 150, Y0 + 210, ARBCol); |

|Arrow(X0 + 190, Y0 + 245, 40, 4); {ОЗУ - ВЗУ} |

|FloodFill(X0 + 190, Y0 + 240, ARBCol); |

|Arrow(X0 + 215, Y0 + 135, 40, 1); {У.Ввода - ОЗУ} |

|FloodFill(X0 + 220, Y0 + 135, ARBCol); |

|Arrow(X0 + 255, Y0 + 185, 40, 2); {У.Вывода - ОЗУ} |

|FloodFill(X0 + 250, Y0 + 185, ARBCol); |

|{Стрелки Small} |

|SetColor(ARSCol); |

|{Вид стрелки} |

|CArrow := SArrow; |

|Arrow(X0 + 125, Y0 + 180, 40, 2); {УУ(ЦУУ) - ОЗУ} |

|Arrow(X0 + 125, Y0 + 270, 80, 2); {УУ(ЦУУ) - ВЗУ} |

|Arrow(X0 + 125, Y0 + 50, 80, 2); {УУ(ЦУУ) - АЛУ = КОП} |

|Line(X0 + 45, Y0 + 115, X0 + 45, Y0 + 50); {1} |

|OutTextXY(X0 + 70, Y0 + 60, 'КОП'); {2} |

|{УУ(ЦУУ) - У.Вводы, У.Вывода} |

|Line(X0 + 45, Y0 + 205, X0 + 45, Y0 + 295); {1} |

|Line(X0 + 45, Y0 + 295, X0 + 380, Y0 + 295); {2} |

|Line(X0 + 380, Y0 + 295, X0 + 380, Y0 + 135); {3} |

|Arrow(X0 + 365, Y0 + 135, 15, 1); {in} {4} |

|Arrow(X0 + 365, Y0 + 185, 15, 1); {out} {5} |

|{Носики стрелок Small} |

|SetColor(LightGreen); |

|Arrow(X0 + 125, Y0 + 180, 0, 2); {1} |

|Arrow(X0 + 125, Y0 + 270, 0, 2); {2} |

|Arrow(X0 + 125, Y0 + 50, 0, 2); {3} |

|Arrow(X0 + 365, Y0 + 135, 0, 1); {4} |

|Arrow(X0 + 365, Y0 + 185, 0, 1); {5} |

|SetColor(BRDCol); |

|Rectangle(0, 0, GetMaxX, GetMaxY); |

|end; {BildWin} |

|{-------------------} |

| |

|procedure BildContext; |

|const |

|TxtCol: Word = LightBlue; |

|begin |

|SetColor(BRDCol); {Устанавливаем цвет границы и рисуем ее} |

|Rectangle(XC, YC, GetMaxX - X0, YC + 300); |

|SetTextJustify(1, 1); |

|SetColor(TxtCol + 1); {Заголовок} |

|OutTextXY(GetMaxX - (GetMaxX - X0 - XC) div 2 - X0, YC + 20, 'Обозначения '|

|+ |

|'на схеме:'); |

| |

| |

| CArrow := BArrow; {Стрелки} |

|SetColor(ARBCol); |

|SetFillStyle(1, Blue); |

|Arrow(XC + 50, YC + 50, 40, 2); |

|FloodFill(XC + 40, YC + 50, ARBCol); |

|CArrow := SArrow; |

|SetColor(ARSCol); |

|Arrow(XC + 50, YC + 80, 40, 2); |

|SetColor(LightGreen); |

|Arrow(XC + 50, YC + 80, 0, 2); |

|SetColor(MemCol); |

|SetLineStyle(1, 0, 0); |

|Line(XC + 10, YC + 110, XC + 34, YC + 110); |

|Line(XC + 10, YC + 126, XC + 34, YC + 126); |

|Line(XC + 14, YC + 106, XC + 14, YC + 128); |

|Line(XC + 30, YC + 106, XC + 30, YC + 128); |

|SetColor(CPUCol); |

|Line(XC + 12, YC + 150, XC + 30, YC + 150); |

|SetLineStyle(0, 0, 0); |

|SetColor(TxtCol); |

|SetTextJustify(0, 1); {Значения} |

|OutTextXY(XC + 60, YC + 50, ' - Передача данных'); |

|OutTextXY(XC + 60, YC + 80, ' - Сигнал управления'); |

|OutTextXY(XC + 60, YC + 120, ' - Ячейка памяти'); |

|OutTextXY(XC + 60, YC + 150, ' - Данной линией'); |

|OutTextXY(XC + 60, YC + 160, ' обведены части'); |

|OutTextXY(XC + 60, YC + 170, ' входящие в состав'); |

|OutTextXY(XC + 60, YC + 180, ' процессора (ЦПУ)'); |

|OutTextXY(XC + 20, YC + 200, '? - содержимое файла'); |

|OutTextXY(XC + 20, YC + 210, '1 - адрес первого операнда'); |

|OutTextXY(XC + 20, YC + 220, '2 - адрес второго операнда'); |

|OutTextXY(XC + 20, YC + 230, '3 - адрес результата'); |

|SetTextJustify(0, 0) |

|end; {Context} |

|{-------------------} |

| |

|procedure BildFuncKey; |

|const |

|StrFK: array [1..4] of string[11] = |

|('Помощь F1', 'Назад <-', 'Вперед ->', 'Выход Esc'); |

|FkbCol: Word = Green; |

|TxtCol: Word = LightCyan; |

|begin |

|SetColor(BRDCol); |

|Rectangle(XS, YS, GetMaxX - XS, GetMaxY - XS); |

|SetTextJustify(1, 1); |

|SetFillStyle(1, DarkGray); |

|for I := 1 to 4 do |

|begin |

|SetColor(FkbCol); {Установка цвета границы клавиш} |

|Bar((GetMaxX - XS * 2) div 5 * I - Length(StrFK[I]) * 4, YS + 7, |

|(GetMaxX - XS * 2) div 5 * I + Length(StrFK[I]) * 4, YS + 23); |

|Rectangle((GetMaxX - XS * 2) div 5 * I - Length(StrFK[I]) * 4, YS + 7, |

|(GetMaxX - XS * 2) div 5 * I + Length(StrFK[I]) * 4, YS + 23); |

|SetColor(Black); {Установка цвета текста клавиш} |

|OutTextXY((GetMaxX - XS * 2) div 5 * I + 2, YS + 15 - 2, StrFK[I]); |

|SetColor(TxtCol); |

|OutTextXY((GetMaxX - XS * 2) div 5 * I, YS + 15, StrFK[I]) |

|end; |

|SetTextJustify(0, 0); |

|{Сахраняем картинки} |

|FuncKeyWindow[1].Get(XS, YS, GetMaxX - XS, GetMaxY - XS); |

|SetFillStyle(1, GetBkColor); |

|Bar((GetMaxX - XS * 2) div 5 * 3 - Length(StrFK[I]) * 4, YS + 7, |

|(GetMaxX - XS * 2) div 5 * 3 + Length(StrFK[I]) * 4, YS + 23); |

| |

| |

| FuncKeyWindow[3].Get(XS, YS, GetMaxX - XS, GetMaxY - XS); |

|FuncKeyWindow[1].Put(XS, YS); |

|Bar((GetMaxX - XS * 2) div 5 * 2 - Length(StrFK[I]) * 4, YS + 7, |

|(GetMaxX - XS * 2) div 5 * 2 + Length(StrFK[I]) * 4, YS + 23); |

|FuncKeyWindow[2].Get(XS, YS, GetMaxX - XS, GetMaxY - XS) |

|end; {FuncKey} |

|{-------------------} |

| |

|{+----------------------------------------------+} |

|{ } |

|{ Процедуры вывода текстовой информации на экран } |

|{ } |

|{+----------------------------------------------+} |

| |

|procedure Page_1; |

|begin |

|SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); |

|ClearViewPort; |

|SetColor(Blue); |

|OutTextXY(GetMaxX - X - 25, 100, '1'); |

|SetColor(TxtCol); |

|MyText(0, 8, 'До начала работы программы, она находится на ВЗУ, ' + |

|'в виде файла программы'); |

|MyText(0, 16, '(*.exe или *.com).'); |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end; {Page_1} |

|{-------------------} |

| |

|procedure Page_2; |

|begin |

|SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); |

|ClearViewPort; |

|SetColor(Blue); |

|OutTextXY(GetMaxX - X - 25, 100, '2'); |

|SetColor(TxtCol); |

|MyText(0, 8, 'После того как ЭВМ получила команду на запуск ' + |

|'программы, содержимое'); |

|MyText(0, 16, 'этого файла помещается в ячейку ОЗУ, начиная с ' + |

|'ячейки с некоторым'); |

|MyText(0, 24, 'стартовым адресом.'); |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end; {Page_2} |

|{-------------------} |

| |

|procedure Page_3; |

|begin |

|SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); |

|ClearViewPort; |

|SetColor(Blue); |

|OutTextXY(GetMaxX - X - 25, 100, '3'); |

|SetColor(TxtCol); |

|MyText(0, 8, 'Содержимое ячейки со стартовым адресом программы ' + |

|' (первая машинная команда)'); |

|MyText(0, 16, 'пересылается в УУ. УУ расшифровывает первую машинную ' + |

|'команду и выробатывает'); |

|MyText(0, 24, 'соответствующие ей сигналы управления для всех систем |

|управления.'); |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end; {Page_3} |

|{-------------------} |

| |

|procedure Page_4_1; |

|begin |

|SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); |

|ClearViewPort; |

| |

| |

| SetColor(Blue); |

|OutTextXY(GetMaxX - X - 25, 100, '4'); |

|SetColor(TxtCol); |

|MyText(0, 8, 'Например: если первой машинной командой оказалась ' + |

|'трех адресной командой'); |

|MyText(0, 16, 'сложения двух чисел, произойдут следующие действия:'); |

|MyText(0, 24, '- УУ посылает первый и второй адреса в ОЗУ'); |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end; {Page_4_1} |

|{-------------------} |

| |

|procedure Page_4_2; |

|begin |

|SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); |

| |

|SetColor(TxtCol); |

|MyText(0, 32, '- ОЗУ пересылает содержимое ячеек с этими адресами в АЛУ,');|

| |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end; {Page_4_2} |

|{-------------------} |

| |

|procedure Page_4_3; |

|begin |

|SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); |

|SetColor(TxtCol); |

|MyText(0, 40, '- УУ отправляет сигнал управления (КОП) в АЛУ,'); |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end; {Page_4_3} |

|{-------------------} |

| |

|procedure Page_4_4; |

|begin |

|SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); |

|SetColor(TxtCol); |

|MyText(0, 48, '- АЛУ выполняет эту операцию (сложение) над двумя ' + |

|'операндами и возвращает'); |

|MyText(0, 56, ' результат в ОЗУ.'); |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end; {Page_4_4} |

|{-------------------} |

| |

|procedure Page_4_5; |

|begin |

|SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); |

|SetColor(TxtCol); |

|MyText(0, 64, '- УУ собщает ОЗУ третий адрес (адрес результата),'); |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end; {Page_4_5} |

|{-------------------} |

| |

|procedure Page_4_6; |

|begin |

|SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); |

|SetColor(TxtCol); |

|MyText(0, 72, '- ОЗУ помещает полученный результат в ячейку памяти.'); |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end; {Page_4_6} |

|{-------------------} |

| |

|procedure Page_4_7; |

|begin |

|SetViewPort(X, Y, GetMaxX - X, YS - 10, ClipOn); |

|SetColor(TxtCol); |

|MyText(0, 80, 'На этом выполнение первой машинной команды ' + |

|'заканчивается, происходит'); |

| |

| |

| MyText(0, 88, 'переход к следующей по порядку машинной команде. ' + |

|'Содержимое ячейки ОЗУ с'); |

|MyText(0, 96, 'адресом, следующим за стартовым, пересылается в УУ ' + |

|'и все повторяется.'); |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end; {Page_4_6} |

|{-------------------} |

| |

|{+------------------+} |

|{ } |

|{ Процедуры анимации } |

|{ } |

|{+------------------+} |

| |

|procedure Move_1; |

|begin |

|BLink(150, 285, 'kurs.exe'); |

|end; {Move_1} |

|{-------------------} |

| |

|procedure Move_2; |

|begin |

|SetColor(Green); |

|Animation(150, 285, -125, 2, ' ? ?', True) |

|end; {Move_2} |

|{-------------------} |

| |

|procedure Move_3; |

|begin |

|SetColor(GetBkColor); |

|SetColor(Green); |

|Animation(100, 168, -70, 1, ' 1 2 +', True) |

|end; {Move_3} |

|{-------------------} |

| |

|procedure Move_4_1; |

|begin |

|SetColor(GetBkColor); |

|OutTextXY(30, 176, ' 1 2'); |

|SetColor(Green); |

|Animation(47, 198, 63, 1, ' 1 2', False); |

|SetColor(GetBkColor); |

|OutTextXY(150, 168, ' ? ?'); |

|SetColor(Green); |

|OutTextXY(150, 168, ' a b') |

|end; {Move_4_1} |

|{-------------------} |

| |

|procedure Move_4_2; |

|begin |

|SetColor(Green); |

|Animation(150, 160, -95, 2, ' a b', True) |

|end; {Move_4_2} |

|{-------------------} |

| |

|procedure Move_4_3; |

|begin |

|setcolor(getbkcolor); |

|OutTextXY(30, 176, ' +'); |

|SetColor(Green); |

|Animation(52, 160, -94, 2, '+', False) |

|end; {Move_4_3} |

|{-------------------} |

| |

|procedure Move_4_4; |

| |

| |

|begin |

|SetColor(Green); |

|Animation(52, 66, 115, 1, '+', True); |

|OutTextXY(183, 73, '=c') |

|end; {Move_4_4} |

|{-------------------} |

| |

|procedure Move_4_5; |

|begin |

|SetColor(GetBkColor); |

|SetColor(Green); |

|Animation(47, 198, 63, 1, '3', False); |

|end; {Move_4_1} |

|{-------------------} |

| |

|procedure Move_4_6; |

|begin |

|SetColor(Green); |

|Animation(191, 66, 94, 2, 'c', True) |

|end; {Move_4_5} |

|{-------------------} |

| |

| |

|procedure Help; {Помощь} |

|const |

|XH: Integer = 70; |

|YH: Integer = 70; |

|begin |

|ClearDevice; |

|SetColor(BRDCol); |

|Rectangle(0, 0, GetMaxX, GetMaxY); |

|SetColor(LightCyan); |

|SetTextJustify(1, 0); |

|OutTextXY(GetMaxX div 2, YH + 10,'Помощь:'); |

|SetTextJustify(0, 0); |

|OutTextXY(XH + 10, YH + 20,'Адрес :'); |

|OutTextXY(XH + 10, YH + 30,'УУ :'); |

|OutTextXY(XH + 10, YH + 40,'АЛУ :'); |

|OutTextXY(XH + 10, YH + 50,'АЛУ+УУ :'); |

|OutTextXY(XH + 10, YH + 60,'ВЗУ :'); |

|OutTextXY(XH + 10, YH + 70,'ОЗУ :'); |

|OutTextXY(XH + 10, YH + 80,'УВвода :'); |

|OutTextXY(XH + 10, YH + 90,'УВывода:'); |

|SetColor(Cyan); |

|OutTextXY(XH + 90, YH + 20,'номер ячейки памяти'); |

|OutTextXY(XH + 90, YH + 30,'устройство управления'); |

|OutTextXY(XH + 90, YH + 40,'арифметико-логическое устройство'); |

|OutTextXY(XH + 90, YH + 50,'процессор'); |

|OutTextXY(XH + 90, YH + 60,'внешнее запоминающее устройство (hdd, fdd и |

|др.)'); |

|OutTextXY(XH + 90, YH + 70,'оперативное запоминающее устройство'); |

|OutTextXY(XH + 90, YH + 80,'устройство ввода'); |

|OutTextXY(XH + 90, YH + 90,'устройство вывода'); |

|_Pause |

|end; {Help} |

|{-------------------} |

| |

|procedure MainWin; |

|begin |

|ClearDevice; |

|BildWin; |

|BildContext; |

|BildFuncKey |

|end; {MainWin} |

|{-------------------} |

| |

| |

| |

|procedure Play; |

|{-------------} |

|procedure SelectPage(N: Byte); |

|begin |

|case N of |

|1: begin |

|FuncKeyWindow[2].Put(XS, YS); |

|Page_1; |

|Move_1 |

|end; |

|2: begin |

|FuncKeyWindow[1].Put(XS, YS); |

|Page_2; |

|Move_2 |

|end; |

|3: begin |

|FuncKeyWindow[1].Put(XS, YS); |

|Page_3; |

|Move_3 |

|end; |

|4: begin |

|FuncKeyWindow[3].Put(XS, YS); |

|Page_4_1; |

|Move_4_1; |

|Delay(Time_3 * 20); |

|Page_4_2; |

|Delay(Time_3 * 20); |

|Move_4_2; |

|Delay(Time_3 * 20); |

|Page_4_3; |

|Delay(Time_3 * 20); |

|Move_4_3; |

|Move_4_4; |

|Page_4_4; |

|Delay(Time_3 * 20); |

|Page_4_5; |

|Delay(Time_3 * 20); |

|Move_4_5; |

|Delay(Time_3 * 20); |

|Page_4_6; |

|Delay(Time_3 * 20); |

|Move_4_6; |

|Delay(Time_3 * 20); |

|Page_4_7 |

|end |

|end |

|end; {SelectPage} |

|{-------------} |

| |

|const |

|Back = #75; |

|Next = #77; |

|F1 = #59; |

|Esc = #27; |

|var |

|ArrowsAndEsc: set of Char; |

|ExtentedKey: Boolean; |

|Flag: Boolean; |

|CH: Char; |

|N: Byte; |

|begin |

|ClearDevice; |

|MainWin; |

|N := 0; |

| |

| |

| ArrowsAndEsc := [Back, Next, F1, Esc]; |

|repeat |

|ExtentedKey := False; |

|Flag := False; |

|CH := ReadKey; |

|if CH = Esc then |

|Flag := True; |

|if CH = #0 then |

|begin |

|CH := ReadKey; |

|ExtentedKey := True |

|end; |

|if ExtentedKey then |

|case CH of |

|Back: begin |

|Dec(N); |

|SelectPage(N); |

|if N < 1 then N := 1 |

|end; |

|Next: begin |

|Inc(N); |

|SelectPage(N); |

|if N > 4 then N := 4 |

|end; |

|F1: begin |

|Temp[1].Get(X0, Y0, X0 + 380, Y0 + 300); |

|Temp[2].Get(X0, Y0 + 305, GetMaxX - X0, YS - 5); |

|Help; |

|MainWin; |

|Temp[1].Put(X0, Y0); |

|Temp[2].Put(X0, Y0 + 305); |

|if N <= 1 then |

|FuncKeyWindow[2].Put(XS, YS); |

|if N = 4 then |

|FuncKeyWindow[3].Put(XS, YS) |

|end |

|end {Case} |

|until Flag; |

|ClearDevice |

|end; {Play} |

|{-------------------} |

| |

|procedure TextT(Col: TColor; S: TText); |

|begin |

|SetTextJustify(1, 1); |

|for I := 1 to 4 do |

|begin |

|SetColor(Col[I]); |

|OutTextXY(GetMaxX div 2, GetMaxY div 2 + I * 10 - 40, S[I]) |

|end; |

|SetTextJustify(0, 0) |

|end; {TextT} |

|{-------------------} |

| |

|procedure TestMode; |

|{-----------------} |

|function Quastion(N: Byte; var CH: Char): Byte; |

|var |

|I: Byte; |

|C: Char; |

|CHEAt: string[1]; |

|Code: Integer; |

|StrN: string[3]; |

|Res: Byte; |

|Begin |

| |

| |

| CH := #0; |

|SetColor(BRDCol); |

|Rectangle(0, 0, GetMaxX, GetMaxY); |

|SetColor(White); |

|MyText(XT, YT, 'Вопрос #' + QuastionS[N]); |

|SetColor(Yellow); |

|for I := 1 to 3 do |

|begin |

|if I = Ok[N] then |

|Cheat := V |

|else |

|Cheat := ''; |

|MyText(XT, YT + 10 * I, Answer[N, I] + Cheat) |

|end; |

|repeat |

|C := ReadKey; |

|if C = #27 then |

|begin |

|SetTextJustify(1, 0); |

|SetViewPort(1, GetMaxY - 100, GetMaxX - 1, GetMaxY - 1, ClipOn); |

|SetColor(Red); |

|OutTextXY(GetMaxX div 2, 10, 'Вы действительно хотите выйти?'); |

|SetColor(Green); |

|OutTextXY(GetMaxX div 2, 30, 'Да(Y), Нет(N)'); |

|SetTextJustify(0, 0); |

|C := ReadKey; |

|if C = 'y' then |

|C := #27 |

|else |

|begin |

|C := #0; |

|ClearViewPort |

|end; |

|SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) |

|end |

|until C in ['1', '2', '3', #27]; |

|if C <> #27 then |

|begin |

| |

|Val(C, Res, Code); |

|if Res = Ok[N] then |

|begin |

|Quastion := 1; |

|SetColor(Green); |

|MyText(GetMaxX div 2 - 20, GetMaxY - 200, 'ВЕРНО') |

|end |

|else |

|begin |

|Quastion := 0; |

|SetColor(Red); |

|MyText(GetMaxX div 2 - 28, GetMaxY - 200, 'НЕВЕРНО') |

|end; |

|Delay(Time_2) |

|end |

|else |

|CH := C; |

|ClearDevice |

|end; {Quastion} |

|{-----------------} |

| |

|function Mark(Res: Byte): Char; |

|begin |

|case Res of |

|1: Mark := '1'; |

|2: Mark := '2'; |

| |

| |

| 3: Mark := '3'; |

|4: Mark := '4'; |

|5: Mark := '5'; |

|else |

|Mark := '0' |

|end |

|end; {Mark} |

|{-----------------} |

| |

|var |

|I: Byte; |

|Result: Byte; |

|StrRes: string[2]; |

|TempS: TText; |

|C: Char; |

|begin |

|C := #0; |

|ClearDevice; |

|Result := 0; |

|TempS := EndofTest; |

|for I := 1 to 5 do |

|begin |

|if Quastion(I, C) = 1 then |

|Inc(Result); |

|if C = #27 then Exit |

|end; |

|ClearDevice; |

|SetColor(BRDCol); |

|Rectangle(0, 0, GetMaxX, GetMaxY); |

|Str(Result, StrRes); |

|TempS[3] := EndofTest[3] + StrRes; |

|TempS[4] := EndofTest[4] + Mark(Result); |

|SetColor(BRDCol); |

|Rectangle(GetMaxX div 2 - 150, GetMaxY div 2 - 60, |

|GetMaxX div 2 + 150, GetMaxY div 2 + 40); |

|TextT(TestCol, TempS); |

|_Pause; |

|ClearDevice |

|end; {TestMode} |

|{-------------------} |

| |

|procedure MainMenu; |

|var |

|C: Char; |

|ExtentedKey: Boolean; |

|TempCol: TColor; |

|K: ShortInt; |

|begin |

|ClearDevice; |

|TempCol[1] := MenuCol[1]; |

|TempCol[2] := MenuCol[3]; |

|TempCol[3] := MenuCol[4]; |

|TempCol[4] := MenuCol[4]; |

|K := 1; |

|repeat |

|SetColor(BRDCol); |

|Rectangle(GetMaxX div 2 - 150, GetMaxY div 2 - 60, |

|GetMaxX div 2 + 150, GetMaxY div 2 + 40); |

|Rectangle(0, 0, GetMaxX, GetMaxY); |

|ExtentedKey := False; {флаг поступления расширенного кода} |

|TextT(TempCol, Menu); |

|while KeyPressed do ReadKey; {очистка буфера клавиатуры} |

|C := ReadKey; {считывание кода новой нажатой клавиши} |

|if C = #0 then {если "да" - код расширенный} |

|begin |

| |

| |

| |

| C := ReadKey; {считывается второй символ расширенного кода} |

|ExtentedKey := True |

|end; |

|if ExtentedKey then {если код был расширенный} |

|case C of |

|#72: K := K - 1; |

|#80: K := K + 1 |

|end; |

|if C = #13 then |

|case K of |

|1: Play; {Обучение} |

|2: TestMode; {Проверка знаний} |

|3: Exit {Выход} |

|end; |

|if K < 1 then K := 3; |

|if K > 3 then K := 1; |

|for I := 2 to 4 do |

|TempCol[I] := MenuCol[4]; |

|TempCol[K + 1] := MenuCol[3]; {Смена цвета выделленого пункта} |

|until C = #27 {т.е. нажата клавиша "Esc"} |

|end; {MainMenu} |

|{-------------------} |

| |

|begin |

|MyInitGraph; {Инициализация графического режима} |

|Title; {Титульный лист} |

|MainMenu; {Главное меню} |

|CloseGraph; {Закрытие графического режима} |

|end. {LEAN_Ecm;} |

|{-------------------} |

|Текст модуля Sm_Const |

|unit Sm_Const; |

|interface |

|uses Graph, Sm_Graph; |

|type |

|TText = array [1..4] of string; |

|TColor = array [1..4] of Word; |

|------------------- type |

|const |

|X0: Integer = 10; {Начальная координата X} |

|Y0: Integer = 20; {Начальная координата Y} |

|XS: Integer = 10; {FuncKey} |

|YS: Integer = 440; {FuncKey} |

|XC: Integer = 400; {Context} |

|YC: Integer = 20; {Context} |

|XT: Integer = 80; {Test} |

|YT: Integer = 150; {Test} |

|X: Integer = 15; {Координата вывод текста X} |

|Y: Integer = 330; {Координата вывод текста Y} |

|ARBCol: Word = LightCyan; {Цвет внешней границы стрелки Big} |

|ARSCol: Word = Red; {Цвет внешней границы стрелки Small} |

|FILCol: Word = Blue; {Цвет стрелки Big} |

|MemCol: Word = LightGreen; {Цвет ячеек памяти} |

|CPUCol: Word = DarkGray; {Цвет CPU} |

|BRDCol: Word = Brown; {Цвет рамки} |

|TxtCol: Word = White; {Цвет текста} |

|BArrow: TArrow = (X1 : 15; Y1 : 2; Y2 : 5); {Форма стрелки Big} |

|SArrow: TArrow = (X1 : 5; Y1 : 0; Y2 : 1); {Форма стрелки Small} |

|TestCol: TColor = (Green, White, Blue, Red); {Цвет окна теста} |

|MenuCol: TColor = (Cyan, 0, LightGreen, Blue); |

|V: string[1] = ''; |

|Q: string[9] = 'Вопрос #'; |

|{Вопросы] |

|Quastions: array [1..5] of string = |

| |

| |

| |

|('1. Что такое ВЗУ?', |

|'2. Что в ходит в процесор?', |

|'3. Через какое устройство в ЭВМ происходит обмен данными?', |

|'4. Где в начальный момент находится программа? ', |

|'5. Какое из устройств расшифровывает первую машинную команду?'); |

|{Варианты ответов} |

|Answer: array [1..5, 1..3] of string = |

|(('1. Внешнее записывающее устройство', '2. Внешнее запоминающее |

|устройство', '3. Внутреннее запоминающее устройство'), ('1. ЦУУ + АЛУ + |

|ВЗУ', '2. УВвода + ОЗУ', '3. ЦУУ + АЛУ + КОП'), |

|('1. АЛУ ','2. ОЗУ', '3. ВЗУ'), |

|('1. В ВЗУ','2. В АЛУ','3. В УУ'), |

|('1. ВЗУ', '2. ЦУУ', '3. АЛУ')); |

|{Номера правильных ответов} |

|OK: array [1..5] of Byte = (2, 3, 2, 1, 2); |

|{Текст Меню} |

|Menu: TText =('Ваш выбор:', |

|'Обучение', |

|'Проверка знаний', |

|'Esc - Выход'); |

|{Текст итога тестовой части программы} |

|EndofTest: TText = ('Ваш результат:', |

|'Всего вопросов: 5', |

|'Количество правильных ответов: ', |

|'Оценка: '); |

|------------------- const |

|implementation |

|end. |

|Текст модуля Sm_graph |

|unit Sm_Graph; |

|interface |

|uses |

|Graph, Crt; |

|{-------------------} {Uses} |

| |

|type |

| |

|TArrow = record X1, Y1, Y2: Integer; end; |

| |

|TImage = |

|object |

|private |

|Image: Pointer; |

|Size : Word; |

|public |

|procedure Destroy; |

|procedure Get(X1, Y1, X2, Y2: Integer); |

|procedure Put(X, Y: Integer); |

|end; |

|{-------------------} {Type} |

| |

|const |

|CArrow: TArrow = (X1 : 15; Y1 : 2; Y2 : 5); |

|Time_1: Word = 5000; {Время мерцания} |

|Time_2: Word = 15000; {Время задержки экрана после ответа на вопрос} |

|Time_3: Word = 300; {Время анимации} |

|Time_4: Word = 400; {Время задержки вывода текста по буквам} |

|procedure _Pause; |

|procedure Animation(X, Y: Integer; D: Integer; XY: Byte; S: string; Vis: |

|Boolean); |

|procedure Arrow(X, Y, L: Integer; DIRectIOn: Byte); |

|procedure BLink(X, Y: Integer; S: string); |

|procedure MyInitGraph; |

|procedure MyText(X, Y: Integer; S: string); |

| |

| |

| |

|procedure Title; |

| |

|var |

|TempImage: TImage; |

|implementation |

| |

|{---------Object TImage----------} |

|procedure TImage.Destroy; |

|begin |

|if Image <> nil then |

|begin |

|FreeMem(Image, Size); |

|Image := nil; |

|Size := 0; |

|end |

|end; {Timage.Destroy} |

|{-------------------} |

| |

|procedure TImage.Get(X1, Y1, X2, Y2: Integer); |

|begin |

|Destroy; |

|Size := ImageSize(X1, Y1, X2, Y2); |

|GetMem(Image, Size); |

|GetImage(X1, Y1, X2, Y2, Image^); |

|end; {TImage.Get} |

|{-------------------} |

| |

|procedure TImage.Put(X, Y: Integer); |

|begin |

|if Image <> nil then |

|PutImage(X, Y, Image^, 0); |

|end; {TImage.Put} |

|{---------Object TImage----------} |

| |

|procedure MyInitGraph; |

|var |

|GD, GM : Integer; |

| |

|begin |

|GD := Detect; |

|InitGraph(GD, GM,''); |

|if GraphResult <> grOK then |

|Halt(1); |

|end; {MyInitGraph} |

|{-------------------} |

| |

|procedure MyText(X, Y: Integer; S: string); |

|var |

|I: Word; |

|C: Char; |

|begin |

|MoveTo(X, Y); |

|I := 0; |

|repeat |

|Inc(I); |

|OutText(S[I]); |

|Delay(Time_4); |

|until (I = Length(S)); |

|end; {NyText} |

|{-------------------} |

| |

|procedure _Pause; |

|begin |

|ReadKey; |

|end; {_Pause} |

| |

| |

| |

|{-------------------} |

| |

|procedure Animation(X, Y: Integer; D: Integer; |

|XY: Byte; S: string; Vis: Boolean); |

|{Animation} |

|var |

|DX, DY: Integer; |

|I: Integer; |

|begin |

|DX := 1; |

|DY := 1; |

|SetColor(Green); |

|if D < 0 then |

|begin |

|DX := -1; |

|DY := -1; |

|end; |

|case XY of |

|1: DY := 0; |

|2: DX := 0; |

|end; |

|D := Abs(D); |

|for I := 1 to D do |

|begin |

|TempImage.Get(I * DX + X, |

|I * DY + Y, |

|TextWidth(S) + I * DX + X, |

|TextHeight(S) + I * DY + Y); |

|OutTextXY(X + I * DX, Y + TextHeight(S) + I * DY, S); |

|Delay(Time_3); |

|if I <> D then |

|TempImage.Put(X + I * DX, Y + I * DY); |

|if (I = D) and not VIs then |

|TEMPImage.Put(X + I * DX, Y + I * DY); |

|end; |

|end; {Animation} |

|{-------------------} |

| |

|procedure Arrow(X, Y, L: Integer; Direction: Byte); |

|type |

|COOrAR = array [1..6] of Integer; |

|var |

|X1: Integer; |

|Y1: Byte; |

|Y2: Byte; |

|XX: COOrAR; |

|YY: COOrAR; |

| |

|procedure Change1; |

|begin |

|X1 := -X1; |

|L := -L |

|end; |

| |

|procedure Change2; |

|var |

|I: Byte; |

|Temp: Integer; |

|begin |

|for I := 1 to 6 do |

|begin |

|TEMP := XX[I]; |

|XX[I] := YY[I]; |

|YY[I] := TEMP; |

|end; |

| |

| |

| |

|end; |

| |

|procedure ArrowCCOOr; |

|begin |

|XX[1] := X1; YY[1] := Y2; |

|XX[2] := X1; YY[2] := Y1; |

|XX[3] := L; YY[3] := Y1; |

|XX[4] := L; YY[4] := -Y1; |

|XX[5] := X1; YY[5] := -Y1; |

|XX[6] := X1; YY[6] := -Y2; |

|end; |

| |

|var |

|I: Byte; |

|begin |

|X1 := CArrow.X1; |

|Y1 := CArrow.Y1; |

|Y2 := CArrow.Y2; |

|if L < X1 then L := X1; |

|case Direction of |

|2, 4: Change1; |

|end; |

|ArrowCCOOr; |

|case Direction of |

|3, 4: Change2; |

|end; |

|MoveTo(X, Y); |

|for I := 1 to 6 do |

|LineTo(X+XX[I], Y+YY[I]); |

|LineTo(X, Y); |

|end; {Arrow} |

|{-------------------} |

| |

|procedure Title; |

|const |

|Word_1: string = 'Курсовая работа по информатике.'; |

|Word_2: string = 'Тема: взаимодействие основных частей ЭВМ при выполнении |

|программы'; |

|Word_3: string = 'Выполнили студенты группы МРС-91:'; |

|Word_4: string = 'Егоров О.В.'; |

|Word_5: string = 'Шетманюк М.В.'; |

|begin |

|ClearDevice; |

|SetColor(LightGreen); |

|Rectangle(0, 0, GetMaxX, GetMaxY); |

|SetFillStyle(1, Blue); |

|FloodFill(1,1, LightGreen); |

|SetColor(LightGray); |

|Rectangle(25, 25,GetMaxX-25, GetMaxY-25); |

|SetFillStyle(1, DarkGray); |

|FloodFill(101,101, LightGray); |

|SetTextJustify(1, 0); |

|SetTextStyle(0,0,2); |

|SetColor(Black); |

|OutTextXY(GetMaxX div 2+1, GetMaxY div 2-1, Word_1); |

|SetColor(Brown); |

|OutTextXY(GetMaxX div 2, GetMaxY div 2, Word_1); |

|SetTextStyle(0,0,0); |

|SetColor(Red); |

|OutTextXY(GetMaxX div 2, GetMaxY-35, 'Хабаровск 2000'); |

|SetColor(Black); |

|OutTextXY(GetMaxX div 2+1, GetMaxY div 2-1+18, Word_2); |

|SetColor(Brown); |

|OutTextXY(GetMaxX div 2, GetMaxY div 2+18, Word_2); |

|SetTextJustify(0, 0); |

| |

| |

| |

|SetColor(Black); |

|OutTextXY(GetMaxX-Length(Word_3)*8+1-180, GetMaxY-100-1, Word_3); |

|SetColor(White); |

|OutTextXY(GetMaxX-Length(Word_3)*8-180, GetMaxY-100, Word_3); |

|SetColor(Black); |

|OutTextXY(GetMaxX+1-180, GetMaxY-90-1, Word_4); |

|SetColor(LightGreen); |

|OutTextXY(GetMaxX-180, GetMaxY-90, Word_4); |

|SetColor(Black); |

|OutTextXY(GetMaxX+1-180, GetMaxY-80-1, Word_5); |

|SetColor(LightGreen); |

|OutTextXY(GetMaxX-180, GetMaxY-80, Word_5); |

|_Pause; |

|ClearDevice; |

|end; {Title} |

|{-------------------} |

| |

|procedure BLink(X, Y: Integer; S: string); |

|var I: Byte; |

|begin |

|for I := 1 to 3 do |

|begin |

|SetColor(Black); |

|Delay(Time_1); |

|OutTextXY(X, Y + TextHeight(S), S); |

|SetColor(Green); |

|Delay(Time_1); |

|OutTextXY(X, Y + TextHeight(S), S) |

|end |

|end; {Blink} |

|{-------------------} |

| |

|end. |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

| |

-----------------------

| | | | | | . 991096.00.00.00 |8AB |

| | | | | | | 0 |

B0 | |22 | |

| | | | | . 991096.00.00.00 |8AB | | | | | | | |



рефераты





Рекомендуем



рефераты

ОБЪЯВЛЕНИЯ


рефераты

© «Библиотека»