TEST (Из опыта создания универсальных тестовых редакторов), страница 2

2016-07-31СтудИзба

Описание файла

Документ из архива "Из опыта создания универсальных тестовых редакторов", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "TEST"

Текст 2 страницы из документа "TEST"

Var a,t:integer;

Begin

Window (x+1,y+1,x1+1,y1+1); {рисование тени от окна}

TextBackGround(black);

clrscr;

Window(x,y,x1,y1); {рисование окна}

TextBackGround(blue);

clrscr;

TextColor(darkgray); {цвет текста}

Write(' ');

Write(chr(201)); {рисование уголка}

For a:=1 to 4 do Write(chr(205)); {рисование полосы}

Write(' ');

TextColor(green); {цвет текста}

Write(b); {вывод названия окна}

Write(' ');

TextColor(darkgray); {цвет текста}

For a:=1 to (x1-x-9-length(b)) do Write(chr(205)); {рисование линии}

Writeln(chr(187)); {рисование уголка}

For a:=1 to (y1-y-1) do Begin {рисование линий по бокам}

Write(' ');

Write(chr(186));

For t:=1 to (x1-x-3) do Write(' ');

Writeln(chr(186));

End;

Write(' ');

Write(chr(200)); {рисование уголка}

For a:=1 to (x1-x-3) do Write(chr(205)); {рисование линии}

Write(chr(188)); {рисование уголка}

Window(x+2,y+1,x1-2,y1-1); {открытие окна ввода внутри окна}

TextColor(black);

End;

Здесь все довольно просто: окно открывается оператором Window с указанием координат. По завершении текущего сеанса окно закрывается (закрашивается) той же командой. В данной программе окна закрываются и открываются много раз, запрашивая каждое свои данные, что выглядит намного проще, чем множество строк на экране, не так ли?

Вот как это выглядит в программе:

Window(10,22,69,22); {указывается окно с координатами}

TextBackGround(green); {задается цвет фона}

clrscr; {окно закрашивается}

Введение процедур. Основные функции редактора.

Как видно в структурной программе, функции обозначены в операторе варианта case. Для удобства обращения к ним и для установления более эффективных связей между ними я решил вынести функции в отдельные процедуры. Это создало дополнительные трудности: потребовалось изменить структуру переменных, ввести локальные переменные. В результате общий вид программы изменился, увеличилось ее быстродействие.

Я до сих пор говорил об основных функциях редактора, но не показывал их программного кода. Начнем с функции создания теста. Она создает файл теста и файл ответов, последовательно записывает вопросы и ответы и затем закрывает файл.

Procedure NewF;

Var h1:string; {объявление локальных переменных}

Begin

Window(10,10,53,15);

TextBackGround(black);

clrscr;

Window(20,10,66,15); {начальное окно}

TextBackGround(blue);

clrscr;

TextColor(black);

Write('сохранить файл как ');

Readln(a); {ввод пути создаваемого файла без расширения}

a:=a+'.ts'; {дописывание расширения}

h1:=a;

Assign(c,a); {связь переменной с файлом вопросов}

a:=a+'o'; {изменение расширения}

Assign(u,a); {связь переменной с файлом ответов}

Rewrite(c);

Rewrite(u);

Window(20,10,66,15); {закрытие окна}

TextBackGround(black);

clrscr;

Window(30,5,50,10); {открытие окна характеристик}

TextBackGround(yellow);

clrscr;

GoToXY(30,6);

Write('кол-во вопросов ');

Readln(d); {ввод количества вопросов}

Writeln(c,' ',d);

GoToXY(30,8);

Writeln('название теста '); {ввод названия теста}

Readln(f);

Writeln(c,f);

Writeln('пароль на защиту');

Readln(f); {ввод пароля}

Writeln(u,f);

Window(30,5,50,10);

TextBackGround(black);

clrscr;

For i:=1 to d do Begin

Writeln(c);

Window(10,10,53,20); {окно вопроса}

TextBackGround(lightgray);

clrscr;

Writeln(i,'-й вопрос: ');

Readln(a); {ввод вопроса}

Str(i,f);

f:=f+')'; {запись вопроса в файл}

Writeln(c,f);

Writeln(c,a);

Window(55,10,80,15); {окно количества ответов}

TextBackGround(cyan);

clrscr;

Write('количество ответов на ',i,'-й вопрос ');

Readln(e); {ввод количества ответов}

Window(10,10,53,20); {окно ответов}

TextBackGround(lightgray);

clrscr;

For j:=1 to e do Begin

Write(' ',j,')');

Readln(a); {ввод ответов}

Str(j,f);

a:=' '+f+')'+a;

Write(c,a);

End;

Write(c,'&'); {запись в файл конца ввода}

Window(55,10,80,15);

TextBackGround(cyan); {окно правильного ответа}

clrscr;

Write('Правильный ответ: ');

Readln(b); {ввод правильного ответа}

Writeln(u,b);

End;

close(u); {закрытие файлов и окон}

Reset(u);

Readln(u);

close(c);

Window(55,10,80,15);

TextBackGround(black);

clrscr;

End;

В этой, как и в других функциях, работающих с файлами, я столкнулся с проблемой записи тестов в файлах. Во-первых, я решил разделить сам тест и ответы к нему. Тест находится в файле с расширением qs, а ответы к нему- в файле с расширением qso. Второй проблемой стала остановка чтения вопроса, ведь вопросы должны выводиться не подряд, а по очереди. В связи с этим я использовал символ «&» в конце каждого вопроса и указал программе читать до этого символа, но сам символ не выводить. Можно было использовать счетчик строк, который останавливает программу после прочтения двух строк (вопрос и варианты ответов), но в случае сбоя тест приходит в негодность. Далее требовалось разместить данные о названии теста, количестве вопросов, пароле и т. п. Я разместил их по этим двум файлам. Опытные программисты заметят: зачем было использовать текстовые файлы, ведь можно было применить работу с типом «запись» и сохранять данные в нетипизированных файлах, и шифровщик бы не потребовался. Действительно, но использование типа «запись» не позволяет создавать тесты с динамическим числом ответов на вопрос. Это возможно лишь путем использования в записи динамического массива. Но это сделает работу с файлом очень сложной а сам файл будет занимать много места на диске по сравнению с обычным текстовым.

Естественно, что при поиске файла программа может его не найти, в этом случае выдается ошибка поиска. Требовалось ее обойти, выдавая собственное сообщение программы. Это осуществляется следующим образом: задается директива компиллятора на его отключение $I-, проверяется нулевой результат IORESULT=0, выдается сообщение и компиллятор включается снова $I+. Я использовал эту функцию компиллятора там, где необходимо осуществить поиск файла. Такая функция обхода компилятора называется обработкой сообщений и является составляющей объектного програмимирования.

Функция открытия теста выглядит сложнее. Она открывает указанный файл, считывает сначала пароль входа и запрашивает его, затем приступает к выполнению теста. На экран выводится вопрос и ожидается ввод цифры правильного ответа. Причем включается таймер и по завершении работы с тестом или по истечении времени программа выходит из данной функции и передает управление подпрограмме подсчета результатов и регистрации:

Procedure OpenF;

label l1;

Var f1:string; {объявление локальных переменных}

Begin

p:=0;

Window(10,10,53,15);

TextBackGround(black);

TextColor(black);

clrscr;

Window(20,10,66,15); {начальное окно}

TextBackGround(blue);

clrscr;

Writeln('какой файл открыть ');

Readln(a); {ввод пути к файлу без расширения}

a:=a+'.ts'; {прибавление расширения}

Assign(c,a); {связь переменной с файлом вопросов}

f1:=a;

a:=a+'o'; {изменение расширения}

Assign(u,a); {связь переменниой с файлом ответов}

delete(a,length(a),1);

Assign(b1,'c:\pascal\registr.dat'); {связь переменной с файлом отчета}

Append(b1); {открытие файла отчета для дозаписи}

Reset(c); {открытие файла вопросов для чтения}

Window(20,10,66,15); {закрытие начального окна}

TextBackGround(black);

clrscr;

Reset(u);

Read(c,b); {считывание пароля}

Readln(c,b);

z:=ord(b)-ord('0'); {установка времени}

z1:=z;

Window(10,10,40,12); {окно пароля}

TextBackGround(magenta);

clrscr;

Readln(u,a);

If length(a)>2 Then Begin{проверка наличия в файле пароля}

Write('введите пароль ');

Readln(f); {ввод пароля}

If a<>f Then Begin

Write('пароль неверный');

GoTo l1; {выход из процедуры}

End;

End

else Begin

close(u);

Reset(u);

End;

Readln(c,f);

Writeln('тест по теме "',f,'"'); {вывод темы теста}

z2:=60;

repeat

Window(60,20,70,21); {закрытие окна пароля}

TextBackGround(black);

clrscr;

TextColor(yellow);

z2:=z2-1; {включение таймера}

If z2<0 Then Begin

z1:=z1-1;

z2:=60;

End;

If (z1=0)and(z2=0) Then GoTo l1;

Writeln(z1,':',z2);

GetTime(g1,g2,g3,g4); {вывод текущего времени}

Write(g1,':',g2,' ',g3);

Delay(1000);

TextColor(black);

Window(10,10,53,15); {вывод вопроса, ожидание ввода ответа}

TextBackGround(cyan);

clrscr;

while not Eoln(c)or(b<>'&') do Begin

Read(c,b);

If b<>'&' Then Write(b);

End;

Writeln;

Window(55,10,80,15); {вывод сообщения о вводе ответа}

TextBackGround(blue);

clrscr;

Write('ваш ответ ');

TextColor(yellow);

repeat{таймер}

Window(60,20,70,21);

TextBackGround(black);

clrscr;

z2:=z2-1;

If z2<0 Then Begin

z1:=z1-1;

z2:=60;

End;

If (z1=0)and(z2=0) Then GoTo l1;

GetTime(g1,g2,g3,g4);

Writeln(z1,':',z2);

Write(g1,':',g2,' ',g3);

Delay(1000);

until keypressed;

Window(55,10,80,15);

TextBackGround(blue);

clrscr;

TextColor(yellow);

b:=readkey; {считывание цифры ответа}

Write(b); {считывание правильного ответа из файла}

Readln(u,k);

Readln(c);

If k=b Then p:=p+1; {сравнение ответов, начисление баллов}

Window(60,20,70,21);

TextBackGround(black); {закрытие окна отверов}

clrscr;

TextColor(black);

z2:=z2-1; {таймер}

If z2<0 Then Begin

z1:=z1-1;

z2:=60;

End;

If (z1=0)and(z2=0) Then GoTo l1;

GoToXY(70,15);

GetTime(g1,g2,g3,g4); {вывод текущего времени}

Writeln(z1,':',z2);

Write(g1,':',g2,' ',g3);

Delay(1000);

until Eof(c);

l1:f1:=f1+'o';

close(c); {закрытие всех файлов}

close(u);

Window(55,10,80,15); {закрытие окон}

TextBackGround(black);

clrscr;

Window(10,10,53,15);

TextBackGround(black);

clrscr;

Window(15,10,50,19);

TextBackGround(blue);

clrscr;

<подсчет результата>

End;

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

!!! Не забывайте закрывать файлы после использования и перезагружать их после прочтения до конца по необходимости, иначе возникнет ошибка Disk Read Error!!!

Эта ошибка может стоить вам всего файла. Очень часто после сбоя при чтении файла этот файл заново прочитать вам не удастся.

Функция редактирования теста. Является вспомогательной функцией. Она редактирует вопросы указанного теста. Сначала вводится путь к файлу теста, затем он просматривается, выбирается вопрос для редактирования, вводится номер редактируемого вопроса. Затем указанный вопрос стирается, а на его место вписывается новый. Весь процесс сопровождается работой с файлами, которые сначала создаются, открываются, затем копируются, корректируются. Старые варианты файлов удаляются, а новые записываются под их именем:

Procedure RedactF;

Begin

Window(10,10,53,15);

TextBackGround(black);

TextColor(black);

clrscr;

Window(20,10,66,15); {открытие начального окна}

TextBackGround(blue);

clrscr;

Writeln('Какой файл редактировать ');

Readln(a); {ввод пути к редактируемому файлу }

a2:=a;

Window(20,10,66,15); {закрытие начального окна}

TextBackGround(black);

clrscr;

Assign(c,a); {связь переменной с файлом вопросов}

a:=a+'o'; {изменение расширения}

Assign(u,a); {связь переменной с файлом ответов}

delete(a,length(a),1);

a:=a+'1'; {изменение расширения}

Assign(y,a); {создание нового файла вопросов}

delete(a,length(a),1);

a:=a+'2'; {изменение расширения}

Assign(a1,a); {создание нового файла ответов}

Reset(c); {установка и загрузка файлов}

Reset(u);

Rewrite(y);

Rewrite(a1);

Window(5,5,50,20); {окно просмотра файла}

TextBackGround(lightgray);

clrscr;

Writeln('Вывод вопросов через Enter:');

repeat

while not Eoln(c)or(b<>'&') do Begin {просмотр вопросов через Enter}

Read(c,b);

If b<>'&' Then Write(b);

End;

Readln(c);

Readln;

until EOF(c);

close(c); {перезапуск файла вопросов}

Reset(c);

Window(5,5,50,20); {закрытие окна просмотра файла}

TextBackGround(black);

clrscr;

Window(30,5,58,10); {окно номера редактируемого вопроса}

TextBackGround(yellow);

clrscr;

Read(c,b); {считывание количества вопросов}

Readln(c,b);

d:=ord(b)-ord('0');

Write('№ редактируемого вопроса: ');

repeat

Readln(z); {ввод № вопроса}

If z>d Then Writeln('номер превышает число вопросов'); {проверка существования номера}

until z<=d;

Window(30,5,58,10); {закрытие окна номера редактируемого вопроса}

TextBackGround(black);

clrscr;

Window(10,10,53,20); {окно вопросов}

TextBackGround(lightgray);

clrscr;

close(c); {перезапуск файла вопросов}

Reset(c);

p:=0;

repeat

while not EOLN(c) do Begin {копирование значений в другой файл}

Read(c,b);

Write(y,b);

End;

Readln(c);

Writeln(y);

p:=p+1;

until p=z*3; {установка количества копируемых строк}

p:=0;

while not (p=z-1) do Begin {стирание ненужного вопроса}

p:=p+1;

Readln(u,b);

Writeln(a1,b);

End;

while not EOLN(c) do Begin {можно было применить и цикл с параметром от 0 до 2}

Read(c,b);

Write(b);

End;

Readln(c);

Writeln;

while not EOLN(c) do Begin {вывод редактируемого вопроса на экран}

Read(c,b);

Write(b);

End;

Readln(c);

Writeln;

while not EOLN(c) do Begin

Read(c,b);

Write(b);

End;

Readln(c);

Writeln;

Writeln('Заменить на:');

Writeln(z,')'); {ввод нового вопроса}

Writeln(y,z,')');

Readln(f);

Writeln(y,f);

Window(55,10,80,15); {окно ответов}

TextBackGround(cyan);

clrscr;

Write('количество ответов на ',z,'-й вопрос ');

Readln(e); {ввод количества ответов}

Window(10,10,53,20); {окно вопросов}

TextBackGround(lightgray);

clrscr;

For j:=1 to e do Begin {ввод ответов на вопрос}

Write(' ',j,')');

Readln(a);

Str(j,f);

a:=' '+f+')'+a;

Write(y,a);

End;

Writeln(y,'&');

Window(55,10,80,15); {окно ответов}

TextBackGround(cyan);

clrscr;

Write('Правильный ответ: ');

Readln(b); {ввод правильного ответа}

Window(55,10,80,15); {закрытие окна ответов}

TextBackGround(black);

clrscr;

Writeln(a1,b);

repeat

while not EOLN(c) do Begin {дозапись значений}

Read(c,b);

Write(y,b);

End;

Readln(c);

Writeln(y);

until EOF(c);

Readln(u);

while not EOF(u) do Begin {дозапись значений в копируемый файл}

Readln(u,b);

Writeln(a1,b);

End;

Window(10,10,53,20); {закрытие окна вопросов}

TextBackGround(black);

clrscr;

close(c); {закрытие файлов}

Erase(c); {стирание старого файла вопросов}

close(u);

Erase(u); {стирание старого файла ответов}

close(y);

Rename(y,a2); {переименование файла вопросов}

a2:=a2+'o';

close(a1);

Rename(a1,a2); {переименование файла ответов}

End;

Для корректной работы процедуры требовалось реализовать чтение требуемого вопроса, здесь и пригодилось построчное чтение, о котором рассказывалось в предыдущей главе. Кроме того, требовалось скопировать данные из одного файла, исключая требуемый вопрос с последующим добавлением нового вопроса. Я реализовал это в циклах, что вы можете видеть в программном коде.

Функция просмотра результатов. Организует просмотр результатов тестирования. Просит ввести вашу фамилию. Если она есть в списке, выводит полную информацию о тесте, об оценке, о дате и т. д. Программа использует файл registr.dat для внесения туда ваших результатов. При желании файл также может быть распечатан.

Procedure SearchF;

Begin

Assign(b1,'c:\pascal\registr.dat'); {связь переменной с файлом отчета}

Reset(b1); {открытие файла для чтения}

Window(10,10,53,15); {закрытие всех окон}

TextBackGround(black);

TextColor(black);

clrscr;

Window(5,10,70,13); {окно поиска}

TextBackGround(green);

clrscr;

Write('Ваша Фамилия');

Readln(a); {ввод фамилии}

while not EOF(b1) do Begin {поиск фамилии}

Readln(b1,f); {считывание строки}

For i:=1 to length(a) do f1:=f1+f[i]; {выделение фамилии}

If a=f1 Then Begin {проверка совпадения}

Writeln(f); {вывод на экран}

c1:=true; {подтверждение запроса}

End;

f1:=''; {обнуление строки}

End;

If c1=false Then Write('Запрос не найден. Пройдите тест.');

{в случае отсутствия фамилии в списке}

Readln;

close(b1); {закрытие файла}

Window(5,10,70,13); {закрытие окна}

TextBackGround(Black);

clrscr;

End;

Задачи: выделение фамилии из строки путем поиска пробела, поиск соответствия фамилий и вывод результатов поиска на экран.

Проблемы: никаких

Функция печати данных. В Turbo Pascal имеются средства для работы с принтером. Это ключевое слово Lst, указывающиеся в операторе вывода Writeln. Следуя этой инструкции, компилятор посылает сообщения не на экран, а на принтер. Этот способ имеет существенный недостаток: данные передаются очень медленно. Также в языке нет определенной команды для окочания работы принтера, поэтому бумага остается внутри и приходится использовать внешние управляющие кнопки принтера. Программа просит указать путь к файлу, а затем распечатывает его.

Я нашел другой алгоритм работы с принтером, более быстрый, но он требует знаний языка Assembler, встроенного в Turbo Pascal:

Procedure PrintF;

Begin

TextColor(black);

Window(10,10,53,15); {начальное окно}

TextBackGround(cyan);

clrscr;

Writeln('Какой файл распечатать?'); {вывод запроса}

Window(60,24,70,24);

TextBackGround(black);

clrscr;

repeat {вывод времени}

h:=g3;

GoToXY(50,22);

GetTime(g1,g2,g3,g4);

TextColor(yellow);

Write(g1,':',g2,' ',g3);

Delay(1000);

clrscr;

until keypressed;

Window(10,10,53,15); {открытие окна ввода}

TextBackGround(cyan);

clrscr;

Readln(a); {ввод пути к файлу}

Assign(b1,a); {связь переменной с файлом}

Reset(b1); {открытие файла для чтения}

Writeln('убедитесь что ваш принтер настроен для работы в MS-DOS'); {предупреждение}

repeat {цикл работы с файлом}

Window(60,24,70,24); {закрытие окна}

TextBackGround(black);

clrscr;

h:=g3;

GoToXY(50,22);

GetTime(g1,g2,g3,g4); {вывод времени}

TextColor(yellow);

Write(g1,':',g2,' ',g3);

clrscr;

Readln(b1,f); {считывание символа}

Writeln(Lst,f); {распечатывание символа}

until EOF(b1);

Window(10,10,53,15); {закрытие окон}

TextBackGround(black);

clrscr;

End;

Проблемы: отсутствие команды для окончания работы принтера, малая скорость печати. Решение- в языке ассемблер.

Новые объектные концепции.

Современные технологии разработки программного обеспечения опираются в основном на идеи структурного программирования. К ним, в первую очередь, относятся: функциональная модульность, структурированность программ и данных, насыщенность текстов программ комментариями, открытость, надежность и т. д. Широко используемым примером такой технологии является технология «сверху-вниз». Ее суть заключается в постепенной пошаговой детализации функций, выполняемых программной системой. Серьезными недостатками технологии «сверху-вниз» являются недостаточное внимание к проектированию структур данных и слабая их связь с процедурами обработки.

Гармоничное включение в структуру языка средств объектно-ориентированного программирования делает переход от традиционных технологий программирования к объектно-ориентированному для тех, кто программирует на Турбо Паскале, достсаточно безболезненным. А то, что такой переход назрел, сомнений не вызывает. Мощные пакеты инструментальных средств, такие как Turbo Vision и Object Toolkit, способствует внедрению объектно-ориентированных методов в процессе разработки программ. Кроме того, опрос американских программистов, проведенный осенью 1991 года, показал, что в 1992 году более половины из них планирует включить средства объектно-ориентированного программироваиня в свой арсенал, поскольку считают, что это будет способствовать ускорению разработки.4

Понять основы объектного программирования вам поможет учебник по Delphi 5. Важнейшими понятиями объекта являются принцип наследования, полиморфизм, поля, методы, свойства и события объекта. В языке Turbo Pascal не полностью реализован данный подход к программированию.

Наиболее важным понятием объектно-ориентированного программирования является понятие объекта. Объект представляет собой совокупность данных и подпрограмм, предназначенных для работы с этими данными. Главным достоинством объекта является то, что он позволяет моделировать абстрактные ситуации. Это делает объектный подход к программированию довольно удобным для большинства программистов, хотя очень трудно понять объектный подход тем, кто ранее программировал на структурных языках. Тем более, что найти какой-либо справочный материал по объектам очень сложно. Поэтому я приведу основы понятия объекта.

Объект в Turbo Pascal состоит из имени, полей данных и методов. Поля данных это ете же переменные в программе, на которые опирается объект. Заголовки методов- названия процедур объекта, позволяющих работать с полями, поскольку прямой доступ к полям нежелателен. Объект объявляется следующим образом:

Объект.

Type =object

End;

После объявления объекта к нему пишутся процедуры (методы). Название процедуры состоит из двух частей: имени объекта и имени процедуры:

<Имя объекта>.<Имя процедуры>

Объектная программа.

Объектная программа- это последняя важная стадия разработки программы: в нее внедряется панель управления, что значительно облегчает диалог с системой и делает функции программы более доступными. Как видно из предыдущей главы, функции программы в структурном виде находятся в операторе варианта case, а выбор функции происходит нажатием клавиши.

Создавая объектную программу, я лишь перенес функции из оператора варианта в процедуры объекта и связал их между собой.

Новый объект- панель управления под именем panel имеет одно поле- координату синего прямоугольника, который перемещается по панели управления. На самом деле это окно синего цвета, а изменение цвета букв при перемещении создается засчет точного соответствия текста в окне и текста на панели управления. Панель имеет процедуры перемещения прямоугольника выбора, которые уменьшают и увеличивают его координату в соответствии с нажатыми клавишами. А также есть процедура выбора, при нажатии клавиши Enter управление передается ей. Она в свою очередь определяет по координате окна какую функцию необходимо запустить в данный момент.

Этапы разработки объекта Панель Управления:

  1. Определение ключевого поля перемещения окна

  2. Определение процедур работы с окном

  3. Определение пропорций окна панели управления

  4. Рисование панели управления

  5. Написание процедур работы с окном выбора

  6. Установка связей между функциями и объектом

  7. Отладка объекта

Программный код.

Program redactor;

uses crt,printer,dos;

type panel=object {объявление объекта}

x:integer; {поле объекта}

Procedure left(b:char); {описание процедуры сдвига влево окна выбора}

Procedure right(b:char); { описание процедуры сдвига вправо окна выбора }

Procedure choose; { описание процедуры выбора функции }

End;

Var a,f,f1,a2:string; {описание всех программных переменных}

b,k:char;

c,u,y,a1,b1:text;

d,e,i,j,p,z,z1,z2:integer;

c1:boolean;

g:panel;

g1,g2,g3,g4,h:word;

Procedure panel.left; {процедура сдвига влево окна выбора}

Begin

Window(x,22,x+9,22); {закрашивание следующего окна}

TextBackGround(green);

clrscr;

Закрашивание следующего окна- важная функция. Она закрашивает то синее окно, которое было выбрано перед обращением к процедуре.

Window(10,22,69,22); {основное окно панели управления}

TextBackGround(green);

clrscr;

TextColor(brown); {установка цвета текста}

Write('Новый Открыть Править Результат Печать Выход'); {нанесение надписи на панель

управления}

If x>=20 Then x:=x-10; {проверка соответствия окна выбора границам панели управления}

Этот оператор производит сравнение координат окна выбора с координатами начала панели управления. Если окно выбора “выехало” за границы панели управления, то изменений координат не производится, окно выбора остается на своем месте.

Window(x,22,x+9,22); {рисование окна выбора}

TextBackGround(blue);

clrscr;

case x of {выбор надписи на окне выбора}

Данное ветвление распознает по координате окна выбора какое слово следует в него вписать.

10:Begin

TextColor(green);

Write('Новый');

End;

20:Begin

TextColor(green);

Write('Открыть');

End;

30:Begin

TextColor(green);

Write('Править');

End;

40:Begin

TextColor(green);

Write('Результат');

End;

50:Begin

TextColor(green);

Write('Печать');

End;

60:Begin

TextColor(green);

Write('Выход');

End;

End;

End;

Procedure panel.right; {процедура сдвига окна выбора вправо}

Begin

Window(x,22,x+9,22); {закрашивание предыдущего окна}

TextBackGround(green);

clrscr;

Window(10,22,69,22); {рисование окна панели управления}

TextBackGround(green);

clrscr;

TextColor(brown); {изменение цвета текста}

Write('Новый Открыть Править Результат Печать Выход'); {нанесение текста на панель управления}

Вы, конечно, заметили, что операторы предыдущей и этой процедуры повторяются, поэтому их можно вынести в отдельную процедуру и запускать ее для обновления окна панели управления.

If x<=50 Then x:=x+10; {сравнение координат окна выбора с координатами конца окна панели

управления}

Window(x,22,x+9,22); {рисование окна выбора}

TextBackGround(blue);

clrscr;

case x of {нанесение соответствующего текста на окно выбора}

10:Begin

TextColor(green);

Write('Новый');

End;

20:Begin

TextColor(green);

Write('Открыть');

End;

30:Begin

TextColor(green);

Write('Править');

End;

40:Begin

TextColor(green);

Write('Результат');

End;

50:Begin

TextColor(green);

Write('Печать');

End;

60:Begin

TextColor(green);

Write('Выход');

End;

End;

End;

Procedure pannel; {процедура рисования панели управления}

Begin

Window(10,22,69,22);

TextBackGround(green);

clrscr;

TextColor(brown);

Write('Новый Открыть Править Результат Печать Выход');

End;

{функции тестового редактора}

<Procedure OpenF;>

<Procedure RedactF;>

<Procedure SearchF;>

<Procedure PrintF;>

Procedure panel.choose; {процедура выбора функции}

Begin

case x of {по координате окна выбора определяет нужную функцию}

10:NewF;

20:OpenF;

30:RedactF;

40:SearchF;

50:PrintF;

60:b:='e';

End;

End;

Вывод: Как видно, основную функцию управления взял на себя объект. Благодаря этому действие программы значительно упростилось, программа стала быстрее работать. Схему действия объекта можно изобразить следующим образом

Оформление программы.

В завершении работы с программой я приступил к оформлению работы. Создание титульной страницы не составило большого труда. Если вы ознакомитесь с программным кодом, то убедитесь, что все команды- из модуля crt. Они используют элементы работы с цветом фона и текста.

Procedure oform;

Begin

TextBackGround(green); {установка цвета фона}

clrscr;

TextColor(red); {цвет текста}

GoToXY(20,10); {перевод курсора в нужную позицию}

Write('Редактор Тестов'); {вывод текста}

TextColor(darkgray); {цвет текста}

GoToXY(20,12);

Writeln('автор: Цыбин Антон'); {вывод текста}

GoToXY(20,14);

Writeln('составлено 09.05.2000'); {вывод текста}

TextColor(white); {цвет текста}

GoToXY(20,16);

Writeln('нажмите клавишу'); {вывод текста}

Readln;

TextBackGround(black);

clrscr;

End;

Begin

Программа рисует титульный лист разноцветными буквами.

Основная программа.

Реализует действие всей программы, здесь сходятся все процедуры, объекты, функции, но ее действие крайне просто: сначала запускается оформление, затем системное время, а затем управление передается объекту или его методам. По завершении работы программа закрывает все окна и «сворачивает» работу программы.

g.x:=10;

oform; {оформление}

TextColor(green);

GoToXY(30,1);

Writeln('ТЕСТОВЫЙ РЕДАКТОР. V 1.01.'); {вывод информации}

GoToXY(23,2);

Writeln('составитель: Цыбин Антон (09.05.2000)');

pannel;

repeat

Window(60,24,70,24);

TextBackGround(black);

clrscr;

repeat {время}

h:=g3;

GoToXY(50,22);

GetTime(g1,g2,g3,g4);

TextColor(yellow);

Write(g1,':',g2,' ',g3);

Delay(1000);

clrscr;

until keypressed;

b:=readkey; {считывание клавиши}

По нажатию клавиши программа определяет дальнейшие действия (передача управления объекту)

case b of

'1':g.left(b);

'3':g.right(b);

'0':Begin

Window(10,10,53,15);

TextBackGround(blue);

clrscr;

g.choose;

End;

End;

until b='e';

Window(10,10,53,20); {закрытие всех окон}

TextBackGround(black);

clrscr;

Window(10,10,80,15);

TextBackGround(black);

clrscr;

Window(30,10,35,12);

TextBackGround(red);

clrscr;

TextColor(blue);

Writeln('конец!');

Readln;

End.

Программа запускает методы панели управления в соответствии с нажатой клавишей, повторный вызов происходит благодаря циклу.

Заключение: Тенденции развития программных технологий.

Вы прочитали реферат и ознакомились с принципами действия отдельных процедур, функций и всей программы в целом. Кроме того, вы поняли разницу между структурным и объектным подходами к программированию. Что касается структурных языков, о них сказано и написано почти все, но немногие знакомы с объектами. Поэтому я посвящаю заключение этой теме.

В последние несколько лет начал создаваться новый подход к программированию, названный объектным. Объекты стали вводиться и в язык Pascal, который позже был назван Object Pascal. Сам объект построен по принципу, объясняющемуся в главе «Объекты». Их преимущество заключается в принципе наследования, когда один созданный объект способен породить родственный ему объект-потомок. Многие объекты могут использовать друг друга при построении программы. Ввиду большого количества полей и методов, были созданы свойства, использующие методы. В частности, в Delphi свойства выносятся в Инспектор объектов, что делает работу с ними похожей на детскую игру. Теперь, чтобы написать программу, не надо возиться с кучей переменных и операторов. Программист может даже и не видеть текста самой программы, конструируя сразу ее внешний вид на форме. Таким образом, если на создание программы ранее уходили недели, то сейчас она создается за несколько часов.

В связи с переходом на объектные концепции, новые программы возникают на основе уже имеющихся объектов. Некоторые языки программирования написаны на основе объектов. Расширяется и пространство применения объектов, если они возникли в среде MS-DOS, то теперь, используя объекты, можно с легкостью создать текстовый редактор типа WORD или СУБД типа ACCESS. И, естественно, в такой среде можно создать мощный и удобный редактор тестов.

Но я только приступаю к изучению Delphi и не могу написать подобный редактор в той среде. Но и описанная здесь программа не останется в таком виде. В перспективе внедрение мышки и управление программой с ее помощью. Я уже знаю, как это осуществить, и использую мышь в ряде своих программ.

К программе недавно мной был написан кодировщик информации. Он универсален в применении к файлам, т. е. можно зашифровать любой файл и ни одна программа не сможет его прочитать. Расшифровать файл вы сможете используя тот же редактор, совершая те же действия. Вам требуется лишь ввести полный путь к файлу, имя файла с указанием его расширения. Далее программа сделает все за вас, включая расчет времени, необходимого для шифрования. Используйте его по вашему усмотрению для шифрования текстов тестов.

Список использованной литературы:

  1. Учебник по Turbo Pascal 7.0 1998г.

  2. Учебник по Delphi 5 (Дарахвелидзе, Котенок, Марков) 2000г.

  3. Журнал «Информатика и Образование» №1 1998г. статья Г. Н. Гутмана «Неисчерпаемый Фортран»

  4. Журнал «Земля и Вселенная» №2 1998г. статья В. П. Дьяконова «Бейсик- язык программирования ПЭВМ»

  5. Журнал «Информатика и Образование» №8 1999г. статья В. И. Курганского «Конструирование программ»

  6. Интерактивный учебник по Delphi, аннотированные ссылки в Интернет

1 Примечание: данные из учебника по Turbo Pascal

2 Примечание: данные из статьи «Конструирование программ»

3 Примечание: данные из учебника по Turbo Pascal

*Примечание автора

4 Примечание: данные из учебника по Delphi 5

24


Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее