Предисловие.
Как известно, в настоящее время наиболее распространенными алгоритмическими языками являются Паскаль и Си. Именно эти языки используются практически на всех действующих вычислительных системах- от супер-ЭВМ до персональных компьютеров. Что касается ПЭВМ, то лидером семейства языков Паскаль для них, без сомнения, является Турбо Паскаль 7.0, разработанный фирмой Borland. Эта последняя версия позволила объединить в рамках единой системы мощный алгоритмический потенциал языка, методы объектно-ориентированного программирования, современную графику, удобные средства тестирования и отладки программ, а также обеспечить дружественный интерфейс с пользователями.[1] Поэтому я выбрал этот язык программирования как основу для создания тестового редактора.
Я решил создать тестовый редактор, потому что именно тесты в последнее время завоевывают все большую популярность. Они позволяют быстро и довольно точно проверить уровень знаний по тому или иному предмету, узнать ту или иную информацию о тестирующемся. Конечно, тест без труда можно составить вручную, но потребуется много времени, чтобы его размножить. Кроме того, можно в любой момент протестироваться и мгновенно узнать результаты.
Разрабатывая программу шаг за шагом, я выделил основные функции,
присутствующие в любом редакторе и, конечно, в моем, а именно:
1. создание нового файла теста
2. открытие теста и тестирование
3. редактирование теста
4. просмотр результатов
5. печать файла
6. выход из программы.
В процессе создания редактора я выделил основные этапы моей работы, возникающие в связи с этим задачи и их решение. Надеюсь, прочитав мою работу, вы учтете мой опыт и продолжите начатые исследования в области редакторов. Программа может быть использована учебными заведениями в качестве пособия для создания тестов.
Начнем исследование со статьи о конструировании программ.
Конструирование программ.
Конструирование программ - один из важнейших разделов современной
информатики. Бурное развитие программно-аппаратных средств, появление новых
стилей и технологий программирования, как ни парадоксально, не снижают, а
повышают уровень требований к массовой алгоритмической культуре.
Практически все диалоговые системы являются программируемыми. Методика
конструирования программ легко переносится на другие процедурные языки
программирования, в том числе и объектно-ориентированные.[2]
В соответствии с технологией конструирования программ построена
программа тестового редактора. Я разделил ее на этапы:
1. Создание структурной программы, во многом неудобной в использовании из- за отсутствия диалога, упорядоченного ввода и вывода информации и многого другого. Исходная программа имела лишь основные функции. Она была
«ядром», осуществлявшим все процессы и функции редактора. В следующей главе в точности приведен текст структурной программы.
2. Разбиение сплошного текста программы на процедуры. Таким образом, текст стал занимать не так много места, исчез оператор варианта, многие метки, ссылки и т. п. Надо сказать, многие программисты предпочитают вводить процедуры в программу. Это значительно упрощает ее.
3. Введение оконной системы с помощью доступных возможностей языка
(оператор Window). Это позволило значительно упростить работу, создать диалог пользователя с программой, уменьшить количество информации, поступающей к пользователю и количество ее «потоков».
4. Введение объекта- панели управления. Вы можете видеть ее внизу экрана.
Она взяла на себя управление функциями редактора. Причем введение объекта значительно упростило программу. Методы работы с объектами вы можете прочитать в главе «Объектное программирование».
5. Оформление работы
Структурное программирование.
Структурное программирование- это программирование, технология которого предполагает использование суперпозиции трех базовых алгоритмических структур: линейной, разветвленной и циклической. Но для создания сложных программ используются более сложные принципы. Принцип Суперпозиции- сочетание структур со взаимным вложением (сложением). Предусматривает взаимное включение структур.
Турбо Паскаль способствует внедрению современной технологии программирования, основанной на принципах структурного программирования и пошаговом методе проектирования программ. Основные операторы языка являются хорошей иллюстрацией базовых управляющих конструкций структурного программирования. Их использование позволяет записывать сложные алгоритмы обработки данных в компактной форме.[3]
Хотя Бейсик не является полностью структурным языком, в нем отражены основные концепции структурного программирования. рассмотрим их подробнее.
Бейсик- язык программирования ПЭВМ.
Бейсик - диалоговый язык высокого уровня, ориентированный на
пользователей ПЭВМ, непрофессионалов в области вычислительной техники.
Бейсик - преимущественно интерпретирующая программа, позволяющая
производить построчную отладку текстов программ. Данный способ гораздо
удобнее для начинающих программистов, нежели компилирование (компилятор
производит отладку только целой программы, а не по частям), и широко
используется в Паскале. Отличительной чертой структурных языков являются
краткие однозначные операторы (в отличие от длиннейших команд объектного
программирования)*.
В некоторых версиях Бейсика имеется встроенный редактор программ,
позволяющий работать с текстом программы из командного окна. Работа с
программой осуществляется в трех различных режимах:
. Непосредственное общение
. Ввод программ
. Вычисление по введенной в ОЗУ программе
В основном, Паскаль выполняет те же функции что и Бейсик. Однако Паскаль
имеет больший потенциал в областях програмимирования, работы с
«компьютерным железом», создания собственных модулей и систем.
Структурная программа.
Первым этапом разработки программы стало написание текста структурной программы. Структурная программа- последовательность простых команд, операторов, реализующая ядро, то есть действие программы. Уже на этом этапе программа работает с текстовыми файлами. Для осуществления связей между отдельными частями программы, реализующими функции редактора, я использовал оператор безусловного перехода GoTo.
Ниже приведена схема структурной программы тестового редактора,
объясняющая соответствующий подход к программированию. Основной список
операторов вырезан и заменен на . Конечный вид программы
будет приведен в главе “Объектное программирование” объектов.
Program redactor;
uses crt,printer; {подключение модулей}
label l1,l2,l3,l4; {метки}
Var a,f,f1,a2:string; {раздел описаний} b,k:char; c,u,y,a1,b1:text; d,e,i,j,p,z:integer; c1:boolean;
Procedure oform; {процедура оформления начала программы}
Begin
End;
Begin oform; {оформление начала программы}
Writeln('Новый файл(New),Открыть файл(Open),Редактирование(Redact),');
{вывод
альтернативных функций}
Writeln('Просмотр результатов(Search),Выход(Any key)'); b:=readkey; {выбор нужной функции} case b of {оператор варианта}
По нажатию соответствующей клавиши происходит выбор функции.
'n','в':Begin l1: {выполнение функции}
End;
'o','й':Begin l2: {выполнение функции}
End;
'r','Є':Begin l3: {выполнение функции}
End;
's','ы':Begin l4: {выполнение функции}
End;
End;
Writeln('Новый файл(New),)Открыть файл(Open),Редактировать(Redact)');
{запрос о выборе перед
выходом}
Writeln('Просмотр результатов(Search),Выход(Any key)'); b:=readkey; {выбор варианта} case b of {оператор варианта}
'n','т':GoTo l1; {ссылка на метку}
'o','щ':GoTo l2;
'r','к':GoTo l3;
's','ы':GoTo l4;
End;
Набор операторов безусловного перехода для возвращения к той или иной
функции.
End.
На экран выводится список возможных функций программы. Для выбора определенной функции необходимо нажать соответствующую клавишу (указана в скобках заглавной буквой). Затем оператор варианта запускает нужную функцию. Как видно, учтен случай непереключенного алфавита (буквы вводятся как латинские, так и русские).
Перед выходом вновь выводится данный запрос (так как цикл неуместен) и в случае выбора определенной функции происходит ссылка на функцию.
Интерфейс структурной программы
Доработка программы.
После отладки начальной программы потребовалось ввести дополнительные
функции. Помимо стандартной функции создания и открытия готового теста,
появились такие как редактирование тестов, подсчет результатов и
выставление оценки, таймер, составление отчета, защита тестов от просмотра.
Но самое главное- это усовершенствование интерфейса, введение оконной
диалоговой системы.
Рассмотрим перечисленные функции. Функция подсчета результата записана так: z:=p*100 div z; {расчет количества правильных ответов}
Writeln('количество правильных ответов: ',p);
Write('оценка '); {выставление оценки}
If z>=90 Then Begin
Writeln('5')
Writeln(b1,’5’);
End; else If z>=70 Then Begin
Writeln('4')
Writeln(b1,’4’);
End; else If z>=40 Then Begin
Writeln('3')
Writeln(b1,’3’);
End; else Begin
Writeln('2')
Writeln(b1,’2’);
End;
Readln;
Write('Фамилия: '); {вписывание фамилии}
Readln(a); d:=length(a); {выставление пробелов}
Write(b1,a); {запись в файл}
For i:=1 to 14-d do Write(b1,' ');
Write('Имя: '); {вписывание имени, процедура повторяется}
Readln(a);
Write(b1,a); d:=length(a);
For i:=1 to 11-d do Write(b1,' ');
Write('Отчесчтво: '); {вписывание отчества, процедура повторяется }
Readln(a);
Write(b1,a); d:=length(a);
For i:=1 to 17-d do Write(b1,' ');
Write(b1,f); d:=length(f);
For i:=1 to 8 do Write(b1,' ');
GetDate(g1,g2,g3,g4); {проставление даты}
Writeln(b1,g3,'.',g2,'.',g1); close(b1);
Window(15,10,50,19);
TextBackGround(black); clrscr;
Программа рассчитывает количество правильных ответов по формуле, в
соответствии с этим выставляет оценку, спрашивает ваши ФИО, записывает их в
файл, проставляет название теста и дату его прохождения. При этом
используется метод работы со строками: конкатенация(слияние) строк.
Проблемой стало корректное вписывание в файл строки, так как количество
букв может быть разным, поэтому программа проставляет пробелы в файл между
данными, используя данные о длине строк фамилии, имени, отчества и вычитая
их из постоянного числа
Таймер, системное время.
Таймер был разработан для отсчета времени на тест, время вводится
предварительно составителем теста. Кроме того, параллельно с выводом
времени на тест выводится текущее системное время. Действие таймера
основано на переменной-счетчике, которая через определенные промежутки
времени уменьшает свое значение на 1(секунду). Системное время выводится
благодаря процедуре GetTime.
Repeat {цикл счетчика времени}
Window(60,20,70,21); {окно вывода времени}
TextBackGround(black); clrscr; z2:=z2-1; {обратный отсчет секунд}
If z22 Then Begin{проверка наличия в файле пароля}
Write('введите пароль ');
Readln(f); {ввод пароля}
If af 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