Разработка интерактивной среды обучения работеРефераты >> Программирование и компьютеры >> Разработка интерактивной среды обучения работе
1. 4. 2 Алгоритмы, достойные рассмотрения
Одним из удачно реализованных алгоритмов автор считает реализацию распознавания команд. В приложении А, в конце записки представлен исходный код программы, в котором можно рассмотреть эти процедуры. Текст выводится в окне с помощью объекта Canvas. Это вызвано необходимостью помещать картинки вперемежку с текстом. Проще всего реализуется такая идея с применением Canvas’a. При тестировании возникла проблема: при перерисовке окна (в случае временного перекрытия другим окном и т. п.) объекты, выведенные с помощью Canvas’a, не перерисовывались. Исчезали крупные фрагменты текста. В конце-концов проблема решена: запускается обработчик события OnPaint.
Каждая страница урока загружается в специальную переменную (процедура LoadPage), а потом выводится на экран процедурой DrawPage. При этом и распознаются команды.
1. 4. 3 Перспективы
Данная программа, как мне кажется, является довольно перспективным «прожектом». В следующих версиях программы, которые, несомненно, появятся, будут усовершенствованы возможности тестирования, добавятся несколько логических и графических команд, а чуть позже – и специальный редактор для упрощения создания уроков.
Кроме того, используя возможности Windows, можно будет «заставить» обучалку взаимодействовать с системой программирования Delphi, что повысит наглядность примеров и тогда Learn Delphi способна будет готовить неплохих специалистов в области компьютерных технологий.
Но и это еще не все! LD – универсальная система, в файл урока можно записать что-угодно, так что применять это средство можно и для обучения другим предметам, даже несколько удаленным от информатики, как, например, история, иностранные языки.
2 Типизированные константы
2. 1 Общая характеристика
Язык Паскаль, и, соответственно, Делфи, имеет специальный вид констант – типизированные. В отличие от обычных, констант, они могут содержать массивы, указатели, записи и значения процедурных типов. При установленной директиве компилятора {$J+} они ведут себя как обычные инициализированные переменные. При {$J-} значения не могут изменяться.
Синтаксис: Const имя_константы: тип =значение
Пример: ConstMax: 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)