Рефераты

Разработка интерактивной среды обучения работе

Разработка интерактивной среды обучения работе

Министерство образования Украины

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

Кафедра ПО ЭВМ

Курсовой проект по дисциплине:

«Основы программирования и алгоритмические языки»

Тема:

«Разработка интерактивной среды обучения работе в Borland Delphi»

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

|Ст. гр. ИПД-99-1 | |

|Иванов А. В. | |

| |Работа защищена с оценкой: |

| | |

| | |

| |Комиссия: |

| |доц. Ерохин А. Л. |

| |доц. Четвериков Г. Г. |

| |проф. Дударь З. В. |

Харьков, 2000 г.

ХГТУРЭ

Кафедра ПО ЭВМ

Задание

на курсовую работу по дисциплине «ОП и АЯ»

ст. гр. ИПД-99-1 Иванова А. В.

Тема: «Разработка интерактивной среды обучения работе в Borland Delphi»

І Разработать интерактивную среду обучения работе в Delphi, котрая

имела бы такие возможности:

. Подавать учебный материал в наглядном виде

. Иметь возможности иллюстрирования

. Иметь средства для тестирования приобретенных знаний

ІІ Типизированные константы. Их синтаксис и применение.

Дата выдачи задания: Дата защиты:

Студент: Иванов А. В.

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

Реферат

Данная работа содержит 34 страницы, включая приложение; 2 таблицы; 4

иллюстрации.

Цель работы: создать, используя систему программированя Delphi,

обучающую программу

Объект исследования: обучающая система, разработанная в Delphi 5,

использующая для хранения уроков текстовые файлы, подобные по структуре

файлам HTML. В перспективе планируется объединение формата уроков с данным

форматом.

Ключевые слова:

DELPHI, ОБУЧАЮЩАЯ СИСТЕМА, ТИПИЗИРОВАННЫЕ КОНСТАНЫ, ФОРМАТ ФАЙЛОВ УРОКОВ,

ПЕРСПЕКТИВЫ

Содержание

Реферат 3

Содержание 4

Введение 5

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

1. 1 Основные характеристики 6

1. 2 Руководство для пользователя 6

1. 3 Описание команд формата .LES 7

1. 3. 1 Текстовые команды 8

1. 3. 2 Графические команды 9

1. 3. 3 Логические команды 10

1. 4 Описание внутренней структуры программы 11

1. 4. 1 Общая организация 11

1. 4. 2 Алгоритмы, достойные рассмотрения 11

1. 4. 3 Перспективы 12

2 Типизированные константы 13

2. 1 Общая характеристика 13

2. 2 Константы-массивы 13

2. 3 Константы-записи 14

2. 4 Процедурные константы 15

2. 5 Константы-указатели 16

2. 6 Примеры программ 17

Выводы 21

Перечень ссылок 22

Приложение А 23

Введение

На Земле каждый час увеличивается количество компьютеров. Они

работают с программами, количество которых тоже растет. Написаны все

программы с использованием разных языков программирования – С++, Delphi,

Assembler. Изучение таких языков мало уступает по сложности изучению

обычных, человеческих. Это очень сложный и трудоемкий процесс.

Для его облегчения и упрощения создаются различные обучающие

программы. Компьютер учит человека. Такой «учитель» никогда не устает,

всегда объективен, не обижается…

В данной работе представлена подобная программа, способная (как мне

кажется), обучить начинающего программиста основам визуальной среды Delphi

и языка Паскаль.

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

1. 1 Основные характеристики

Рассматриваемая программа имеет возможность использования уроков,

хранящихся в файлах, что позволяет создавать уроки, не изменяя кода

программы.

Файл урока представляет собой текстовый файл с расширением .LES; в нем

сдержится текст урока и специальные команды, заставляющие программу,

выполнять некоторые действия, например, выводить текст таким-то цветом,

изменять размер шрифта, вставлять картинки. Описание команд будет приведено

ниже.

1. 2 Руководство для пользователя

Выполняемый файл называется LD. EXE. После его запуска на экране

появляется окно, показанное на рис. 1. 1

[pic]

Рисунок 1. 1 – Окно, возникающее после запуска

По нему «ползет» надпись: «Добро пожаловать в программу Learn

Delphi!!!». Для входа в программу надо нажать кнопку «ОК». Следующее окно

показано на рис. 1. 2:

[pic]

Рисунок 1. 2 – Окно выбора нужного урока

Пользователь выбирает нужный ему урок и нажимает кнопку «Загрузить».

После этого он видит основное окно, в которое загружена первая страница

урока. Это окно представлено на рис. 1. 3 (стр. 8).

В правом нижнем углу окна помещены три кнопки SpeedButton:

Переход на предыдущую страницу

Переход на следующую страницу

Выход из текущего урока (появляется окно выбора уроков).

1. 3 Описание команд формата .LES

Как уже было сказано выше, данная программа имеет специальную систему

команд. Они делятся на три типа:

. Текстовые

. Графические

. Логические.

Все команды предваряются символами /:, чтобы их можно было отличить

от обычного текста, выводимого на экран.

Все, что не имеет в начале символов /: будет выведено!

[pic]

Рисунок 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):

[pic]

Рисунок 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 q<>clwhite 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

readln(f,s);

if s='/:color' then begin

readln(f,s);

if s='black' then q:=clblack;

if s='red' then q:=clred;

if s='blue' then q:=clblue;

if s='green' then q:=clgreen;

if s='gray' then q:=clgray;

if s='yellow' then q:=clyellow;

frmlesson.canvas.font.Color:=q

end;

if s='/:name' then begin

readln(f,s);

canvas.Font.Name:=s

end;

if s='/:size' then begin

readln(f,q);

canvas.Font.Size:=q

end;

if s='/:newpage' then inc(i)

end

end;

{ for i:=1 to pages[pp-2] do readln(f);

for i:=1 to pp do pages[pp]:=0;

dec(pp,2);

if pp=0 then begin

readln(f);

frmlesson.canvas.Font:=fontemp;

end;}

frmlesson.cmdYes.hide;

frmlesson.cmdno.hide;

frmlesson.pic1.hide;

frmlesson.pic2.hide;

frmlesson.pic3.hide;

texty:=1;

sp:=0;

loadpage;

if pp=1 then speedbutton1.enabled:=false;

drawpage;

end;

procedure TfrmLesson.FormActivate(Sender: TObject);

begin

formcreate(sender);

end;

end.

unit resfrm;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Grids;

type

TfrmResult = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

procedure FormActivate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

frmResult: TfrmResult;

implementation

uses runfrm, lessonfrm;

{$R *.DFM}

procedure TfrmResult.FormActivate(Sender: TObject);

begin

with stringgrid1 do begin

colwidths[0]:=150;

cells[1,0]:='Количество';

cells[0,1]:='Вопросов';

cells[0,2]:='Правильных ответов';

cells[1,1]:=inttostr(frmlesson.nq);

cells[1,2]:=inttostr(frmlesson.npq);

end

end;

procedure TfrmResult.Button1Click(Sender: TObject);

begin

frmresult.Hide;

frmrun.Show

end;

procedure TfrmResult.FormClose(Sender: TObject; var Action: TCloseAction);

begin

action:=cahide;

frmrun.Show

end;

end.

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

[pic]

[pic]

[pic]


© 2010 Современные рефераты