- Процедуры работы с файлами
Pascal | Delphi | Значение |
Assign | Assignfile | Процедура связки файловой переменной с файлом на диске |
Reset | Reset | Процедура чтения из файла |
Rewrite | Rewrite | Процедура записи в файл |
Сlose | Closefile | Процедура завершения работы с файлами |
Откройте систему программирования, например Free Pascal и напечатайте следующие строки:
Var a,b,c:integer; f,f1:text;
Begin
Assign (f,’C:\in.txt’); Assign (f1,’C:\out.txt’);
Reset (f); Rewrite (f1);
If (a > b) and (a > c) then writeln(f1,a);
If (b > a) and (b > c) then writeln(f1,b);
If (c > a) and (c > b) then writeln(f1,c);
Close (f); Close (f1);
End.
Что изменилось, чего нет в тексте программы? Правильно ли написана программа? Если нет, то почему?
Мы повторили разделы, важные для изучении новой темы и теперь приступим к разбору программы «Тестирование», но для этого еще раз повторим и раскроем следующие принципы:
Принципы тестирующей системы:
1. Хорошая тестирующая система, должна быть изменяема и/или расширяема, т.е. вопросы, содержание вопроса, ответ, содержание ответа и их количество могут меняться достаточно легко без изменения исходного кода проекта. Это значит, что чтение вопросов, ответов на них и ресурсы теста должны загружаться из файла, чья структура должна быть достаточно понятна, для человека который захочет редактировать приложение.
2. Хороший тест должен содержать не только текстовое содержание вопроса и текстовое содержание ответов на вопрос, но и дополняться графическим изображением, формулой или видеоклипом, др. мультимедийным объектом. Приложение может быть дополнено компонентами отображения мультимедийной информации (изображения, аудио-видеофайлы, веб-страницы), чьи пути к ресурсам (сами файлы) будут содержаться в текстовом файле с вопросами и ответами
|
3. Хороший тест должен показывать результат ответов на вопрос, как в простом количестве правильных ответов, так и в процентном и бальном соотношении после его завершения. Исходный текст программы должен содержать процедуру подсчета количества правильных ответов, а так же расчет балла (оценки) по выбранной шкале оценивания, с использованием выражений на языке Delphi
4. Хороший тест должен быть регламентируемым, т.е. позволять администратору теста (чаще всего программисту на этапе разработки) указывать время, отводимое на тестирование. При открытии приложения и выборе теста, должна отображаться информация о времени отведенного на тестирование. Данная возможность приложения может быть достигнута с использованием компонента Timer (закладка System) для отсчета времени, и компонентов Label для отображения текущего времени.
Приступим к разработке программы тестирования. Для этого еще раз повторим:
- Процедуры работы с файлами? Названия текстовых файлов (входные/выходные)?
- Условные операторы? Примеры решения задач?
- Сохранение проекта? Размещение файлов с конфигурациями?
Программы тестирования бывают разные. Есть статичные с одной неизменной страницей, где нужно выбрать правильные варианты ответов или просто отметить понравившееся варианты. А бывают и такие, которые при нажатии на кнопку «Вперед» меняют и вопрос, и его сопровождение. Разберем оба варианта и найдем отличия использования RadioButton и СheckBox.
Пример 1. Программа перевода из мм в сантиметры и метры
Пример 2. Расчет сопротивления в электрической цепи
|
Пример 3. Расчет поездки на дачу и обратно.
Яркий пример использование компонента CheckBox (флажок) с помощью которого можно выбрать один или несколько правильных вариантов ответа. Основное отличие СheckBox от RadioButton в том что последний является переключателем, т.е. несколько пунктов уже не выделишь.
Пример 4. Программа «Тестирование»
- Создайте новый пустой проект в системе программирования Delphi
- Сохраните проект
- Перейдите в папку с сохранненым проектом и создайте текстовый файл с названием test.txt
- Откройте text.txt в программе Блокнот
- Заполните файл test.txt следующей информацией
Вопрос1. В каком году основан Костанай?
Вопрос1. В каком году открыта ШОД «Озат»?
- Сохраните документ. Сделайте короткий вывод по содержимому файла
- Перейдите к проекту Delphi. Измените размеры формы, сделав ее прямоугольной
- Разместите на форме Label1, RadioButton1, RadioButton2, RadioButton3, RadioButton4, Button1
- Перейдите в ObjectTreeView к форме Form1. Перейдите к событиям Events компонента Form1
- Выберите событие OnCreate, событие, возникающее при инициализации приложения (действие – открытие программы пользователем). Появятся следующие строки:
procedure TForm1.FormCreate(Sender: TObject);
Begin
end;
End.
Пролистайте листинг вверх, до раздела переменных var. Добавьте в раздел переменных следующие переменные. После добавления переменных вернитесь к procedure TForm1.FormCreate …
k:integer; f:textfile; s,p:string;
- Добавьте следующие строки после оператора begin
p:=extractfilepath(application.exename); //абсолютная адресация к файлам, например конфигурации или входным файлам находящимся в папке с проектом
|
Assignfile (f,’test.txt’); // cвязка файловой переменной и файла
Reset (f); // открытие файла в режиме чтения
Readln(f,s); // чтение 1 строки из файла (чтение начинается с начала документа)
Label1.Caption:=s; // присваивание cтроки считанной из файла (свойство Сaption - т.д. string)
Readln(f,s);
RadioButton1.Caption:=s;
Readln(f,s);
RadioButton2.Caption:=s;
Readln(f,s);
RadioButton3.Caption:=s;
Readln(f,s);
RadioButton4.Caption:=s;
После ввода текста программы она примет следующий вид
- Если вы все сделали правильно – запустите приложение.
50% задания выполнено! Программа запустилась, вопросы загрузились, ответы отобразились, но кнопка, благодаря которой мы можем перейти к следующему вопросу все еще не активна. Перейдем к следующему этапу.
- Событие OnClick, процедура procedure TForm1.Button1Click(Sender: TObject)
If eof (f) then showmessage (’количество правильных ответов= ’+inttostr(k)) else readln(f,s); // если достигнут конец входного файла, т.е. если достигли последнего вопроса и пользователь выбрал ответ и нажал на кнопке для проверки условия то выводится сообщение с преобразованием количества прав. ответов, подсчитываемых ниже в условии, иначе программа продолжает считывать следующую строку из файла после вариантов ответов, являющуюся правильным вариантом ответа
If (radiobutton1.caption=s) and (radiobutton1.checked) then inc(k); // проверка условия на сравнение указанного пользователем ответа с правильным ответом считанным из файла, хранимого до перехода к след. вопросу в переменной s
If (radiobutton2.caption=s) and (radiobutton2.checked) then inc(k);
If (radiobutton3.caption=s) and (radiobutton3.checked) then inc(k);
Readln(f,s); // чтение 1 строки из файла (чтение начинается с начала документа)
Label1.Caption:=s; // присваивание cтроки считанной из файла (свойство Сaption - т.д. string)
Readln(f,s);
RadioButton1.Caption:=s;
Readln(f,s);
RadioButton2.Caption:=s;
Readln(f,s);
RadioButton3.Caption:=s;
Readln(f,s);
RadioButton4.Caption:=s;
- Сохраните проект. Запустите приложение. Ответьте на все вопросы правильно и получите «5».
Примечание. Если вы хотите изменить вопросы и ответы на них закройте программу, отредактируйте тест и снова запустите приложение. Количество вопросов можно увеличивать.
Закрепление. Используя следующий расчет на естественном языке, напишите процедуру для подсчета количества правильных ответов. Для этого используйте компонент Button2 и событие OnClick. Функция trunc – отброс дробной части вещественного числа.
Процент выполненного задания:=trunc(количество правильных ответов/количество вопросов * 100); Если (процент выполнненого задания<=100) и (процент выполнненого задания >=75) тогда оценка:=5; Если (процент выполнненого задания<=75) и (процент выполнненого задания >=50) тогда оценка:=4; Если (процент выполнненого задания<75) и (процент выполнненого задания >=30) тогда оценка:=3; Если процент выполнненого задания<20 тогда оценка:=2;