Реферат: Из опыта создания универсальных тестовых редакторов - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

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

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Архив Zip, 208 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

23 Предисловие . Как известно , в настоящее время наиболее распростран енными алгоритмическими языками являются Паскаль и Си . Именно эти языки используются практически на всех действующих вычислительных системах - от супер-ЭВМ до персональных компьютеров . Что касается ПЭВМ , то лидером семейства языков Паскаль для них , без сом н ения , является Турбо Паскаль 7.0, разработанный фирмой Borland . Эта последняя версия позволила объединить в рамках единой системы мощный алгоритмический потенциал языка , методы объектно-ориентированного программирования , современную графику , удобные средст ва тестирования и отладки программ , а также обеспечить дружественный интерфейс с пользователями. Примечание : данные из учебника по Turbo Pascal Поэтому я выбрал этот язык программирования как основу для создания тестового редактора. Я решил создать т естовый редактор , потому что именно тесты в последнее время завоевывают все большую популярность . Они позволяют быстро и довольно точно проверить уровень знаний по тому или иному предмету , узнать ту или иную информацию о тестирующемся . Конечно , тест без т р уда можно составить вручную , но потребуется много времени , чтобы его размножить . Кроме того , можно в любой момент протестироваться и мгновенно узнать результаты. Разрабатывая программу шаг за шагом , я выделил основные функции , присутствующие в любом ред акторе и , конечно , в моем , а именно : 1. создание нового файла теста 2. открытие теста и тестирование 3. редактирование теста 4. просмотр результатов 5. печать файла 6. выход из программы. В процессе создания редактора я выделил основные этапы моей работы , возникающие в связи с этим задачи и их решение . Надеюсь , прочитав мою работу , вы учтете мой опыт и продолжите начатые исследования в области редакторов . Программа может быть использована учебными заведениями в качестве пособия для создания тестов. Начнем исследование со статьи о конструировании программ. Конструирование программ. Конструирование программ - один из важнейших разделов современной информатики . Бурное развитие программно-аппаратных средств , появление новых стилей и технологий про граммирования , как ни парадоксально , не снижают , а повышают уровень требований к массовой алгоритмической культуре . Практически все диалоговые системы являются программируемыми . Методика конструирования программ легко переносится на другие процедурные язы к и программирования , в том числе и объектно-ориентированные. Примечание : данные из статьи «Конструирование программ» В соответствии с технологией конструирования программ построена программа тестового редактора . Я разделил ее на этапы : 1. Создание с труктурной программы , во многом неудобной в использовании из-за отсутствия диалога , упорядоченного ввода и вывода информации и многого другого . Исходная программа имела лишь основные функции . Она была «ядром» , осуществлявшим все процессы и функции редакт о ра . В следующей главе в точности приведен текст структурной программы. 2. Разбиение сплошного текста программы на процедуры . Таким образом , текст стал занимать не так много места , исчез оператор варианта , многие метки , ссылки и т . п . Надо сказать , многие программисты предпочитают вводить процедуры в программу . Это значительно упрощает ее. 3. Введение оконной системы с помощью доступных возможностей языка (оператор Window ). Это позволило значительно упростить работу , создать диалог пользователя с программо й , уменьшить количество информации , поступающей к пользователю и количество ее «потоков». 4. Введение объекта - панели управления . Вы можете видеть ее внизу экрана . Она взяла на себя управление функциями редактора . Причем введение объекта значительно упрос тило программу . Методы работы с объектами вы можете прочитать в главе «Объектное программирование». 5. Оформление работы Структурное программирование. Структурное программирование - это программирование , технология которого предполагает использование с уперпозиции трех базовых алгоритмических структур : линейной , разветвленной и циклической . Но для создания сложных программ используются более сложные принципы . Принцип Суперпозиции - сочетание структур со взаимным вложением (сложением ). Предусматривает вза и мное включение структур . Турбо Паскаль способствует внедрению современной технологии программирования , основанной на принципах структурного программирования и пошаговом методе проектирования программ . Основные операторы языка являются хорошей иллюстра цией базовых управляющих конструкций структурного программирования . Их использование позволяет записывать сложные алгоритмы обработки данных в компактной форме. Примечание : данные из учебника по Turbo Pascal * Примечание автора Хотя Бейсик не является полностью структурным языком , в нем отражены основные концепции структурного программирования . рассмотрим их подробнее. Бейсик - язык программирования ПЭВМ. Бейсик - диалоговый язык высокого уровня , ориентированный на пользователей ПЭВМ , непрофессионало в в области вычислительной техники . Бейсик - преимущественно интерпретирующая программа , позволяющая производить построчную отладку текстов программ . Данный способ гораздо удобнее для начинающих программистов , нежели компилирование (компилятор производит о тладку только целой программы , а не по частям ), и широко используется в Паскале . Отличительной чертой структурных языков являются краткие однозначные операторы (в отличие от длиннейших команд объектного программирования ) * . В некоторых версиях Бейсика им еется встроенный редактор программ , позволяющий работать с текстом программы из командного окна . Работа с программой осуществляется в трех различных режимах : · Непосредственное общение · Ввод программ · Вычисление по введенной в ОЗУ программе В основ ном , Паскаль выполняет те же функции что и Бейсик . Однако Паскаль имеет больший потенциал в областях програмимирования , работы с «компьютерным железом» , создания собственных модулей и систем. Структурная программа. Первым этапом разработки программы стало написание текста структурной программы . Структурная программа - последовательность простых команд , операторов , реализующая ядро , то есть действие программы . Уже на этом этапе программа работает с текстовыми файлами . Для осуществления связей между от д ельными частями программы , реализующими функции редактора , я использовал оператор безусловного перехода 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 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; Объявляется переменная , из которой каждую секунду вычитается 1. Так осуществляется обратный отсчет . С исходом времени программа авт оматически переходит к выставлению оценки. Оконная система диалога. Поскольку прошлая моя работа была посвящена диалоговым системам , я учел тот опыт , но в этой программе сделал нововведение , приблизившее программу к современному «оконному» виду . Над оформлением окна пришлось посидеть не один час , так как обычное окно в виде квадрата на экране совсем не привлекательно . Я изучил строение окон в среде MS-DOS и попытался воссоздать дизайн окна в своей программе . Если вы когда-либо видели схему окна в MS- DOS , то заметили , что окно обрамляется двойной рамкой , наверху которой находится название окна . Здесь мне помогло хитрое решение . Я заглянул в таблицу символов ASCII и нашел символ двойной рамки ! Далее все просто : открывается окно , закрашивается , по краям с помощью циклов рисуется рамка и выводится название окна . Но это еще не все . Внутри окна открывается другое окно того же цвета, чтобы было незаметно . Теперь при вводе или выводе данных рамка не будет двигаться вместе с текстом , разрываться и т . д . Мы полу чаем полноценное окно. Я сделал оформление окна в виде процедуры , необходимо лишь ввести координаты окна и его название . Ниже приведен код оформления окна : Procedure windows(x,y,x1,y1:integer; b:string); Var a,t:integer; Begin Window (x+1,y+1,x 1+1,y1+1); рисование тени от окна TextBackGround(black); clrscr; Window(x,y,x1,y1); рисование окна TextBackGround(blue); clrscr; TextColor(darkgray); цвет текста Write(' '); Write(chr(201)); рисование уголка Fo r 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); En d; 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); Te xtBackGround(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:=read key; считывание цифры ответа 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); E rase(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 len gth(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 году более половины из них планирует включить средства объектно-ориентированного программироваиня в свой арсенал , поскольку считают , что это будет способствовать уск о рению разработки. Примечание : данные из учебника по Delphi 5 Понять основы объектного программирования вам поможет учебник по Delphi 5 . Важнейшими понятиями объекта являются принцип наследования , полиморфизм , поля , методы , свойства и события объекта . В языке Turbo Pascal не полностью реализован данный подход к программированию. Наиболее важным понятием объектно-ориентированного программирования является понятие объекта . Объект представляет собой совокупность данных и подпрограмм , предназначенных дл я работы с этими данными . Главным достоинством объекта является то , что он позволяет моделировать абстрактные ситуации . Это делает объектный подход к программированию довольно удобным для большинства программистов , хотя очень трудно понять объектный подход тем , кто ранее программировал на структурных языках . Тем более , что найти какой-либо справочный материал по объектам очень сложно . Поэтому я приведу основы понятия объекта. Объект в Turbo Pascal состоит из имени , полей данных и методов . Поля данных это ете же переменные в программе , на которые опирается объект . Заголовки методов - названия процедур объекта , позволяющих работать с полями , поскольку прямой доступ к полям нежелателен . Объект объявляется следующим образом : Объект. Type <имя объекта >=o bject <поля данных > <заголовки методов > End; После объявления объекта к нему пишутся процедуры (методы ). Название процедуры состоит из двух частей : имени объекта и имени процедуры : < Имя объекта >.< Имя процедуры > Объектная программа. Объект ная программа - это последняя важная стадия разработки программы : в нее внедряется панель управления , что значительно облегчает диалог с системой и делает функции программы более доступными . Как видно из предыдущей главы , функции программы в структурном ви д е находятся в операторе варианта case , а выбор функции происходит нажатием клавиши . Создавая объектную программу , я лишь перенес функции из оператора варианта в процедуры объекта и связал их между собой. Новый объект - панель управления под именем p anel имеет одно поле - координату синего прямоугольника , который перемещается по панели управления . На самом деле это окно синего цвета , а изменение цвета букв при перемещении создается засчет точного соответствия текста в окне и текста на панели управления . Панель имеет процедуры перемещения прямоугольника выбора , которые уменьшают и увеличивают его координату в соответствии с нажатыми клавишами . А также есть процедура выбора , при нажатии клавиши 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); clr scr; 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(dark gray); цвет текста 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(g reen); 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Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
- Вчера проснулась, а тебя нет. Где ты был, дорогой?
- А где ты проснулась, дорогая?
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Из опыта создания универсальных тестовых редакторов", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru