Из опыта создания универсальных тестовых редакторов — страница 10

  • Просмотров 5820
  • Скачиваний 185
  • Размер файла 108
    Кб

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); {открытие окна ввода}