Министерство образования Украины
Харьковский государственный технический университет радиоэлектроники
Кафедра ПО ЭВМ
Курсовой проект по дисциплине:
«Основы программирования и алгоритмические языки»
Тема:
«Разработка интерактивной среды обучения работе в Borland Delphi»
Работу выполнил:
Ст. гр. ИПД-99-1
Иванов А. В. Руководитель:
Работа защищена с оценкой:
Комиссия:
доц. Ерохин А. Л.
доц. Четвериков Г. Г.
проф. Дударь З. В.
Харьков, 2000 г.
ХГТУРЭ
Кафедра ПО ЭВМ
Задание
на курсовую работу по дисциплине «ОП и АЯ»
ст. гр. ИПД-99-1 Иванова А. В.
Тема: «Разработка интерактивной среды обучения работе в Borland Delphi»
І Разработать интерактивную среду обучения работе в Delphi, котрая имела
бы такие возможности:
Подавать учебный материал в наглядном виде
Иметь возможности иллюстрирования
Иметь средства для тестирования приобретенных знаний
ІІ Типизированные константы. Их синтаксис и применение.
Дата выдачи задания: Дата защиты:
Студент: Иванов А. В.
Руководитель:
Реферат
Данная работа содержит 34 страницы, включая приложение; 2 таблицы; 4
иллюстрации.
Цель работы: создать, используя систему программированя Delphi,
обучающую программу
Объект исследования: обучающая система, разработанная в Delphi 5,
использующая для хранения уроков текстовые файлы, подобные по структуре
файлам HTML. В перспективе планируется объединение формата уроков с
данным форматом.
Ключевые слова:
DELPHI, ОБУЧАЮЩАЯ СИСТЕМА, ТИПИЗИРОВАННЫЕ КОНСТАНЫ, ФОРМАТ ФАЙЛОВ
УРОКОВ, ПЕРСПЕКТИВЫ
Содержание
TOC \o “1-3” Реферат PAGEREF _Toc481415753 \h 3
Содержание PAGEREF _Toc481415754 \h 4
Введение PAGEREF _Toc481415755 \h 5
1 Описание программы PAGEREF _Toc481415756 \h 6
1. 1 Основные характеристики PAGEREF _Toc481415757 \h 6
1. 2 Руководство для пользователя PAGEREF _Toc481415758 \h 6
1. 3 Описание команд формата .LES PAGEREF _Toc481415759 \h 7
1. 3. 1 Текстовые команды PAGEREF _Toc481415760 \h 8
1. 3. 2 Графические команды PAGEREF _Toc481415761 \h 9
1. 3. 3 Логические команды PAGEREF _Toc481415762 \h 10
1. 4 Описание внутренней структуры программы PAGEREF _Toc481415763 \h
11
1. 4. 1 Общая организация PAGEREF _Toc481415764 \h 11
1. 4. 2 Алгоритмы, достойные рассмотрения PAGEREF _Toc481415765 \h 11
1. 4. 3 Перспективы PAGEREF _Toc481415766 \h 12
2 Типизированные константы PAGEREF _Toc481415767 \h 13
2. 1 Общая характеристика PAGEREF _Toc481415768 \h 13
2. 2 Константы-массивы PAGEREF _Toc481415769 \h 13
2. 3 Константы-записи PAGEREF _Toc481415770 \h 14
2. 4 Процедурные константы PAGEREF _Toc481415771 \h 15
2. 5 Константы-указатели PAGEREF _Toc481415772 \h 16
2. 6 Примеры программ PAGEREF _Toc481415773 \h 17
Выводы PAGEREF _Toc481415774 \h 21
Перечень ссылок PAGEREF _Toc481415775 \h 22
Приложение А PAGEREF _Toc481415776 \h 23
Введение
На Земле каждый час увеличивается количество компьютеров. Они работают
с программами, количество которых тоже растет. Написаны все программы с
использованием разных языков программирования – С++, Delphi, Assembler.
Изучение таких языков мало уступает по сложности изучению обычных,
человеческих. Это очень сложный и трудоемкий процесс.
Для его облегчения и упрощения создаются различные обучающие программы.
Компьютер учит человека. Такой «учитель» никогда не устает, всегда
объективен, не обижается…
В данной работе представлена подобная программа, способная (как мне
кажется), обучить начинающего программиста основам визуальной среды
Delphi и языка Паскаль.
1 Описание программы
1. 1 Основные характеристики
Рассматриваемая программа имеет возможность использования уроков,
хранящихся в файлах, что позволяет создавать уроки, не изменяя кода
программы.
Файл урока представляет собой текстовый файл с расширением .LES; в нем
сдержится текст урока и специальные команды, заставляющие программу,
выполнять некоторые действия, например, выводить текст таким-то цветом,
изменять размер шрифта, вставлять картинки. Описание команд будет
приведено ниже.
1. 2 Руководство для пользователя
Выполняемый файл называется LD. EXE. После его запуска на экране
появляется окно, показанное на рис. 1. 1
Рисунок 1. 1 – Окно, возникающее после запуска
По нему «ползет» надпись: «Добро пожаловать в программу Learn
Delphi!!!». Для входа в программу надо нажать кнопку «ОК». Следующее
окно показано на рис. 1. 2:
Рисунок 1. 2 – Окно выбора нужного урока
Пользователь выбирает нужный ему урок и нажимает кнопку «Загрузить».
После этого он видит основное окно, в которое загружена первая страница
урока. Это окно представлено на рис. 1. 3 (стр. 8).
В правом нижнем углу окна помещены три кнопки SpeedButton:
Переход на предыдущую страницу
Переход на следующую страницу
Выход из текущего урока (появляется окно выбора уроков).
1. 3 Описание команд формата .LES
Как уже было сказано выше, данная программа имеет специальную систему
команд. Они делятся на три типа:
Текстовые
Графические
Логические.
Все команды предваряются символами /:, чтобы их можно было отличить от
обычного текста, выводимого на экран.
Все, что не имеет в начале символов /: будет выведено!
Рисунок 1. 3 – Окно урока
1. 3. 1 Текстовые команды
Таблица 1. 1 – Текстовые команды
/:size
размер шрифта Устанавливает размер шрифта. Размер вводится сразу после
команды.
Пример:
Таблица 1. 1 – Текстовые команды (продолжение)
/:size
750
/:color
цвет Устанавливает цвет выводимого текста. Поддерживает основные цвета:
red, blue, black, yellow, green, grey.
Пример:
/:color
red
/:style
стиль Устанавливает стиль выводимого текста:
1 – нормальный,
2 – полужирный,
3 – подчеркнутый,
4 – курсив,
5 – перечеркнутый.
Пример:
/:style
5
/:font
имя Загружает другой шрифт.
Пример:
/:font
Times New Roman
/:newpage Дает знать системе, что дальше следует новая страница.
1. 3. 2 Графические команды
В данной версии программы имеется только одна графическая команда –
/:picture, которая загружает и помещает по указанным координатам
картинку из файла в формате .BMP.
Синтаксис:
/:Picture
X-координата рисунка.
Y-координата. рисунка.
имя файла рисунка
На одну страницу можно поместить до трех картинок. Этого в большинстве
случаев достаточно.
1. 3. 3 Логические команды
Логическая команда в данной версии тоже одна. Это /:question.
Синтаксис:
/:question
текст вопроса
правильный ответ (1-“Да” 2-“Нет”)
Результатом выполнения является присутствие на странице вопроса,
обведенного двойной красной рамкой. Справа, после текста вопроса,
находятся две кнопки – «Да» и «Нет». Пользователь нажимает на кнопку,
которая символизирует, по его, юзера, мненеию, правильный ответ и
кнопки сразу становятся неактивными. Программа посчитывает количество
правильных и неправильных ответов и в конце работы выставляет оценку.
На странице не допускается размещать больше одного вопроса!
Версия программы, представленная в курсовой работе является
DEMO-версией, поэтому вообще в уроке допускается лишь одна логическая
команда.
4 Описание внутренней структуры программы
1. 4. 1 Общая организация
Программа имеет четыре окна: frmMain, frmRun, frmLesson и frmRes. В
табл. 1. 2 представлены функции, выполняемые каждым из них:
Таблица 1. 2 Функции, выполняемые окнами в программе
Название окна Функции, которые выполняет в программе
frmMain Данное окно появляется, когда пользователь запускает
программу. Оно служит как-бы приглашением к работе. Показано данное окно
на рис. 1. 1.
FrmRun После frmMain пользователь попадает в окно frmRun. Здесь он
может выбрать нужный урок и загрузить его или выйти из программы.
Показано оно на рис. 1. 2.
FrmLesson Основное окно для обучения. В нем выводится текст урока, все
картинки и вопросы. В модуле этого окна описаны все подпрограммы для
обработки файлов уроков. Показано это окно на рис. 1. 3.
FrmRes После прохождения урока пользователь должен знать, как он усвоил
материал. В данном окне помещена таблица с числом вопросов и правильных
ответов. Это очнь простое окно, поэтому не представлено на рисунках.
1. 4. 2 Алгоритмы, достойные рассмотрения
Одним из удачно реализованных алгоритмов автор считает реализацию
распознавания команд. В приложении А, в конце записки представлен
исходный код программы, в котором можно рассмотреть эти процедуры. Текст
выводится в окне с помощью объекта Canvas. Это вызвано необходимостью
помещать картинки вперемежку с текстом. Проще всего реализуется такая
идея с применением Canvas’a. При тестировании возникла проблема: при
перерисовке окна (в случае временного перекрытия другим окном и т. п.)
объекты, выведенные с помощью Canvas’a, не перерисовывались. Исчезали
крупные фрагменты текста. В конце-концов проблема решена: запускается
обработчик события OnPaint.
Каждая страница урока загружается в специальную переменную (процедура
LoadPage), а потом выводится на экран процедурой DrawPage. При этом и
распознаются команды.
4. 3 Перспективы
Данная программа, как мне кажется, является довольно перспективным
«прожектом». В следующих версиях программы, которые, несомненно,
появятся, будут усовершенствованы возможности тестирования, добавятся
несколько логических и графических команд, а чуть позже – и специальный
редактор для упрощения создания уроков.
Кроме того, используя возможности Windows, можно будет «заставить»
обучалку взаимодействовать с системой программирования Delphi, что
повысит наглядность примеров и тогда Learn Delphi способна будет
готовить неплохих специалистов в области компьютерных технологий.
Но и это еще не все! LD – универсальная система, в файл урока можно
записать что-угодно, так что применять это средство можно и для обучения
другим предметам, даже несколько удаленным от информатики, как,
например, история, иностранные языки.
2 Типизированные константы
2. 1 Общая характеристика
Язык Паскаль, и, соответственно, Делфи, имеет специальный вид констант
– типизированные. В отличие от обычных, констант, они могут содержать
массивы, указатели, записи и значения процедурных типов. При
установленной директиве компилятора {$J+} они ведут себя как обычные
инициализированные переменные. При {$J-} значения не могут изменяться.
Синтаксис: Const имя_константы: тип =значение
Пример: Const Max: integer=200
2. 2 Константы-массивы
Чтобы задать какую-либо константу-массив, нужно описать значения всех
элементов. Значения описываются в круглых скобках, через запятую.
Например:
Const Digits: array[1..5] of byte=(1, 2, 3, 4, 5)
В данном примере объявляется константа-массив Digits типа Byte. Ей
сразу присваиваются числа от 1 до 5.
Константы-массивы часто используются для задания строк, оканчивающихся
символом #0. В этом случае описание выглядит так:
Const Stroka: array[1..5] of char=(‘Hello’)
Константой может быть и многомерный массив. Для этого каждое его
измерение помещается в круглые скобки. Пример:
type TCube = array[0..1, 0..1, 0..1] of Integer;
const Maze: TCube = (((0, 1), (2, 3)), ((4, 5), (6,7)))
Создается массив Maze, где:
Maze[0,0,0] = 0
Maze[0,0,1] = 1
Maze[0,1,0] = 2
Maze[0,1,1] = 3
Maze[1,0,0] = 4
Maze[1,0,1] = 5
Maze[1,1,0] = 6
Maze[1,1,1] = 7
Все константы-массивы не могут содержать файловых переменных ни на
каком уровне.
2. 3 Константы-записи
Для задания константы-записи необходимо заполнить ее поля согласно
синтаксису: Имя_поля: значение. Значения разделяются точками с запятой и
все выражение помещается в круглые скобки. Значения должны быть
представлены константами. Поля должны быть перечисленны в том порядке, в
каком они размещены в описании записи. Поле-описатель, если такое есть,
должно быть заполнено; в случае записи с вариантами только вариант,
выбранный описателем может использоваться.
Примеры:
type
TPoint = record
X, Y: Single;
end;
TVector = array[0..1] of TPoint;
TMonth = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
TDate = record
D: 1..31;
M: TMonth;
Y: 1900..1999;
end;
const
Origin: TPoint = (X: 0.0; Y: 0.0);
Line: TVector = ((X: -3.1; Y: 1.5), (X: 5.8; Y: 3.0));
SomeDay: TDate = (D: 2; M: Dec; Y: 1960);
Все константы-записи не могут содержать файловых переменных ни на каком
уровне.
2. 4 Процедурные константы
Для определения процедурной константы нужна процедура с подходящими
параметрами. Например:
function Calc(X, Y: Integer): Integer;
begin
…
end;
type TFunction = function(X, Y: Integer): Integer;
const MyFunction: TFunction = Calc;
После такого описания, функция вызывается:
I := MyFunction(5, 7)
Вы также можете присвоить константе значение nil.
2. 5 Константы-указатели
Такие константы содержат адрес в памяти переменной или подпрограммы.
При их объявлении констант нужно следить за тем, чтобы адрес, на который
она указывает, использовался. Примеры:
Константа содержит адрес переменной:
const PI: ^Integer = @I;
Константа содержит адрес подпрограммы:
const PF: Pointer = @MyFunction;
Вы можете объявить константу типа PChar со строчным значением, т. к.
литералы хранятся в памяти как глобальные константы.
Адреса локальных (размещенных в стеке) и динамических переменных не
могут быть помещены в подобную константу.
2. 6 Примеры программ
Ниже приведены примеры программ, использующих типизированные константы.
Они написаны в Delphi, но в виде консольного приложения – чтобы не
загромождать текст программ описанием форм и других объектов, к которым
данная задача не имеет отношения.
Тексты программ-примеров помещены на дискете с курсовой работой в
директории EXAMPLES.
Пример 1.
program Example1;
{$APPTYPE CONSOLE}
{Данная программа-пример демонстрирует применение констант-массивов.
Преобразует численный формат даты в обычный, с названием месяца}
uses
SysUtils;
const month:array[1..12] of
string[20]=(‘January’,’February’,’March’,’April’,’May’,
‘June’,’July’,’August’,’September’,’October’,’November’, ‘December’);
var d:string[10];
s:string[30];
s1:string[3];
begin
write(‘Enter date (dd:mm:yyyy): ‘);
readln(d);
s:=”;
if copy(d,1,1)‘1’ then begin
if copy(d,2,1)=’1′ then s1:=’`st’ else
if copy(d,2,1)=’2′ then s1:=’`nd’ else
if copy(d,2,1)=’3′ then s1:=’`rd’
end else s1:=’`th’;
s:=copy(d,1,2)+s1+’ of ‘+month[strtoint(copy(d,4,2))]+’ ‘
+copy(d,7,4);
writeln(s);
readln
end.
Пример 2.
unit Example2frm;
{Этот пример показывает,как применяются константы-записи. Здесь строится
многоугольник (с применением метода Polyline объекта Canvas),а
координаты вершин многоугольника содержатся в массиве констант-записей.}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
PolyLines:array[1..4] of
tpoint=((x:170;y:20),(x:320;y:320),(x:20;y:320), (x:170;y:20));
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Canvas.Pen.Width:=3;
form1.canvas.Polyline(polylines)
end;
end.
Окно этой программы-примера приведено на рис. 2. 1 (стр. 20):
Рисунок 2. 1 – Окно программы-примера
Выводы
В данной работе представлена образовательная программа, разработанная в
среде программирования Borland Delphi 5. К ней прилагается файл урока,
описывающего основы Delphi. Но вообще, эту систему обучения можно
«заставить» обучать какой-угодно дисциплине – для этого достаточно
создать файлы уроков и записать их имена в файл конфигурации.
В процессе разработки программы детально изучены графические
возможности Делфи и объекта Canvas.
Во второй части работы рассмотрены типизированные константы в Паскале,
их применение. Даны примеры программ.
Перечень ссылок
1. Культин Н. Delphi 4. Программирование на Object Pascal. BHV,
Санкт-Петербург, 1999. – 480 с., ил.
2. Дэн Оузьер и др. Delphi 3. Освой самостоятельно. М.: “Издательство
БИНОМ”, 1998 г. – 560 с.: ил.
3. Бондарев В. М., Рублинецкий В. И., Качко Е. Г. Основы
программирования. Харьков: Фолио; Ростов н/Д: Феникс, 1998 – 368 с.
4. Справочная система Delphi
5. Фаронов В. В. Delphi 4. Учебный курс. М.: «Нолидж», 1999 – 464 с.,
ил.
Приложение А
Ниже дан исходный код всех модулей программы
unit Mainfrm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
ExtCtrls, StdCtrls;
type
TfrmMain = class(TForm)
Image1: TImage;
Timer1: TTimer;
Button1: TButton;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
uses runfrm;
{$R *.DFM}
var x:integer;
procedure TfrmMain.Timer1Timer(Sender: TObject);
var r:trect;
begin
r.Left:=x;
r.Top:=150;
r.Bottom:=170;
r.Right:=frmmain.Width;
frmmain.canvas.fillrect(r);
frmmain.canvas.TextOut(x,151,’Добро пожаловать в программу “Learn
Delphi” !!!’);
dec(x,3);
if x0 then frmresult.show else frmrun.Show
end;
procedure TfrmLesson.SpeedButton3Click(Sender: TObject);
begin
frmlesson.hide;
frmresult.show
end;
procedure TfrmLesson.FormPaint(Sender: TObject);
begin
texty:=2;
if first then begin
first:=false;
fontemp:=frmlesson.canvas.font;
drawpage
end else begin
nopaint:=true;
drawpage;
nopaint:=false
end
end;
procedure TfrmLesson.FormShow(Sender: TObject);
var s,name:string;
begin
nq:=0;
first:=true;
nopaint:=true;
assignfile(f,lessonname);
reset(f);
while not eof(f) do begin
readln(f,s);
if s=’/:question’ then inc(nq)
end;
closefile(f);
reset(f);
readln(f,name);
frmlesson.Caption:=name;
textY:=2;
loadpage;
frmlesson.Canvas.textout(20,20,”);
end;
procedure TfrmLesson.FormDeactivate(Sender: TObject);
begin
nopaint:=true
end;
procedure TfrmLesson.Timer1Timer(Sender: TObject);
var q:tcolor;
x,y:integer;
begin
{ if not frmlesson.Visible then exit;
x:=random(frmlesson.Width);
y:=random(frmlesson.Height);
if (x in [pic1.Left..pic1.Left+pic1.Width]) or (y in
[pic1.Top..pic1.Top+pic1.Height]) then exit;
q:=frmlesson.canvas.pixels[x,y];
if qclwhite then begin
nopaint:=true;
texty:=1;
drawpage
end;
frmlesson.canvas.pixels[x,y]:=clred;}
end;
procedure TfrmLesson.FormCreate(Sender: TObject);
begin
npq:=0;
ap:=1;
pp:=0;
numpage:=1;
end;
procedure TfrmLesson.cmdYesClick(Sender: TObject);
begin
if ap=1 then inc(npq);
frmlesson.cmdYes.enabled:=false;
frmlesson.cmdno.enabled:=false;
end;
procedure TfrmLesson.cmdNoClick(Sender: TObject);
begin
if ap=2 then inc(npq);
frmlesson.cmdYes.enabled:=false;
frmlesson.cmdno.enabled:=false;
end;
procedure TfrmLesson.SpeedButton2Click(Sender: TObject);
begin
canvas.Rectangle(0,0,width,height);
pic1.Hide;
pic2.Hide;
pic3.Hide;
frmlesson.Repaint;
{ pic1.show;
pic1.hide; }
inc(numpage);
if not speedbutton1.enabled then speedbutton1.Enabled:=true;
frmlesson.cmdYes.hide;
frmlesson.cmdno.hide;
{ frmlesson.pic1.hide;}
frmlesson.pic2.hide;
frmlesson.pic3.hide;
texty:=1;
sp:=0;
loadpage;
drawpage;
if eof(f) then speedbutton2.Enabled:=false
end;
procedure TfrmLesson.SpeedButton1Click(Sender: TObject);
var i:byte;
q:integer;
s:string[100];
begin
pic1.Hide;
pic2.Hide;
pic3.Hide;
frmlesson.Repaint;
dec(numpage);
if not speedbutton2.enabled then speedbutton2.Enabled:=true;
closefile(f);
reset(f);
canvas.Font:=pagefonts[numpage];
if numpage=1 then begin
readln(f);
speedbutton1.Enabled:=false
end else begin
i:=0;
while i
Нашли опечатку? Выделите и нажмите CTRL+Enter