скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

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

        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 NewF;> {функции тестового редактора}

<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


Страницы: 1, 2, 3


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.