Смекни!
smekni.com

Языки программирования

Предисловие.

   Как известно, в настоящее время наиболеераспространенными алгоритмическими языками являются Паскаль и Си. Именно этиязыки используются практически на всех действующих вычислительных системах- отсупер-ЭВМ до персональных компьютеров. Что касается ПЭВМ, то лидером семействаязыков Паскаль для них, без сомнения, является Турбо Паскаль 7.0, разработанныйфирмой Borland. Эта последняяверсия позволила объединить в рамках единой системы мощный алгоритмическийпотенциал языка, методы объектно-ориентированного программирования, современнуюграфику, удобные средства тестирования и отладки программ, а также обеспечитьдружественный интерфейс с пользователями.[1]Поэтому я выбрал этот язык программирования как основу для создания тестовогоредактора.

   Я решил создать тестовый редактор, потомучто именно тесты в последнее время завоевывают все большую популярность. Онипозволяют быстро и довольно точно проверить уровень знаний по тому или иномупредмету, узнать ту или иную информацию о тестирующемся. Конечно, тест безтруда можно составить вручную, но потребуется много времени, чтобы егоразмножить. Кроме того, можно в любой момент протестироваться и мгновенноузнать результаты.

   Разрабатывая программу шаг за шагом, явыделил основные функции, присутствующие в любом редакторе и, конечно, в моем,а именно:

создание новогофайла теста

открытие тестаи тестирование

редактированиетеста

просмотррезультатов

печать файла

выход изпрограммы.

   В процессе создания редактора я выделилосновные этапы моей работы, возникающие в связи с этим задачи и их решение.Надеюсь, прочитав мою работу, вы учтете мой опыт и продолжите начатыеисследования в области редакторов. Программа может быть использована учебнымизаведениями в качестве пособия для создания тестов.

   Начнем исследование со статьи оконструировании программ.

Конструированиепрограмм.

   Конструирование программ - один изважнейших разделов современной информатики. Бурное развитиепрограммно-аппаратных средств, появление новых стилей и технологийпрограммирования, как ни парадоксально, не снижают, а повышают уровеньтребований к массовой алгоритмической культуре. Практически все диалоговыесистемы являются программируемыми. Методика конструирования программ легкопереносится на другие процедурные языки программирования, в том числе иобъектно-ориентированные.[2]

   В соответствии с технологиейконструирования программ построена программа тестового редактора. Я разделил еена этапы:

Созданиеструктурной программы, во многом неудобной в использовании из-за отсутствиядиалога, упорядоченного ввода и вывода информации и многого другого. Исходнаяпрограмма имела лишь основные функции. Она была «ядром», осуществлявшим  все процессы и функции редактора. Вследующей главе в точности приведен текст структурной программы.

Разбиениесплошного текста программы на процедуры. Таким образом, текст стал занимать нетак много места, исчез оператор варианта, многие метки, ссылки и т. п. Надосказать, многие программисты предпочитают вводить процедуры в программу. Этозначительно упрощает ее.

Введениеоконной системы с помощью доступных возможностей языка (оператор Window). Это позволило значительно упроститьработу, создать диалог пользователя с программой, уменьшить количествоинформации, поступающей к пользователю и количество ее «потоков».

Введениеобъекта- панели управления. Вы можете видеть ее внизу экрана. Она взяла на себяуправление функциями редактора. Причем введение объекта значительно упростилопрограмму. Методы работы с объектами вы можете прочитать в главе «Объектноепрограммирование».

Структурноепрограммирование.

   Структурное программирование- этопрограммирование, технология которого предполагает использование суперпозициитрех базовых алгоритмических структур: линейной, разветвленной и циклической.Но для создания сложных программ используются более сложные принципы. ПринципСуперпозиции- сочетание структур со взаимным вложением (сложением).Предусматривает взаимное включение структур. 

   Турбо Паскаль способствует внедрениюсовременной технологии программирования, основанной на принципах структурногопрограммирования и пошаговом методе проектирования программ. Основные операторыязыка являются хорошей иллюстрацией базовых управляющих конструкцийструктурного программирования. Их использование позволяет записывать сложныеалгоритмы обработки данных в компактной форме.[3]

   Хотя Бейсик не является полностьюструктурным языком, в нем отражены основные концепции структурногопрограммирования. рассмотрим их подробнее.

Бейсик- языкпрограммирования ПЭВМ.

   Бейсик - диалоговый язык высокого уровня,ориентированный на пользователей ПЭВМ, непрофессионалов в областивычислительной техники. Бейсик - преимущественно интерпретирующая программа,позволяющая производить построчную отладку текстов программ. Данный способгораздо удобнее для начинающих программистов, нежели компилирование (компиляторпроизводит отладку только целой программы, а не по частям), и широкоиспользуется в Паскале. Отличительной чертой структурных языков являютсякраткие однозначные операторы (в отличие от длиннейших команд объектногопрограммирования)*.

   В некоторых версиях Бейсика имеетсявстроенный редактор программ, позволяющий работать с текстом программы изкомандного окна. Работа с программой осуществляется в трех различных режимах:

Непосредственноеобщение

Ввод программ

Вычисление повведенной в ОЗУ программе

   В основном, Паскаль выполняет те же функциичто и Бейсик. Однако Паскаль имеет больший потенциал в областяхпрограмимирования, работы с «компьютерным железом», создания собственныхмодулей и систем.

Структурнаяпрограмма.

   Первым этапом разработки программы сталонаписание текста структурной программы. Структурная программа-последовательность простых команд, операторов, реализующая ядро, то естьдействие программы. Уже на этом этапе программа работает с текстовыми файлами.Для осуществления связей между отдельными частями программы, реализующимифункции редактора, я использовал оператор безусловного перехода GoTo.

   Ниже приведена схема структурной программытестового редактора, объясняющая соответствующий подход к программированию.Основной список операторов вырезан и заменен на .Конечный вид программы будет приведен в главе “Объектное программирование”объектов.

Program redactor;

uses crt,printer; {подключение модулей}

label l1,l2,l3,l4; {метки}

  Vara,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 ThenBegin

                                Writeln('5')

                                Writeln(b1,’5’);

                                End;

        else Ifz>=70 Then Begin

                                        Writeln('4')

                                        Writeln(b1,’4’);

                                        End;

        else Ifz>=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-ddo Write(b1,' ');

        Write('Имя: '); {вписывание имени, процедураповторяется}

        Readln(a);

       Write(b1,a);

       d:=length(a);

        Fori:=1 to 11-d do Write(b1,' ');

        Write('Отчесчтво: '); {вписываниеотчества, процедура повторяется }

        Readln(a);

       Write(b1,a);

       d:=length(a);

        Fori:=1 to 17-d do Write(b1,' ');

       Write(b1,f);

       d:=length(f);

        Fori:=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

        elseBegin

            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; {включение таймера}

        Ifz2