Учебная работа. Реферат: Тест программных программ

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Реферат: Тест программных программ

тест программных программ

Вступление.

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

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

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

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

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

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

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

5. печать файла

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

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

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

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

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

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

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

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

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

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

5. Оформление работы

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

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

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

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

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

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

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

· Конкретное общение

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

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

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

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

Первым шагом разработки программки сделалось написание текста структурной программки. Структурная программа- последовательность обычных установок, операторов, реализующая ядро, другими словами действие программки. Уже на этом шаге программка работает с текстовыми файлами. Для воплощения связей меж отдельными частями программки, реализующими функции редактора, я употреблял оператор бесспорного перехода 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,x1+1,y1+1); {
рисование тени от окна
}

TextBackGround(black);

clrscr;

Window(x,y,x1,y1); {рисование окна}

TextBackGround(blue);

clrscr;

TextColor(darkgray); {цвет текста}

Write(‘ ‘);

Write(chr(201)); {рисование уголка}

For 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);

End;

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);

TextBackGround(black);

clrscr;

End;

В данной нам, как и в остальных функциях, работающих с файлами, я столкнулся с неувязкой записи тестов в файлах. Во-1-х, я решил поделить сам тест и ответы к нему. тест находится в файле с расширением qs
, а ответы к нему- в файле с расширением qso
. 2-ой неувязкой стала остановка чтения вопросца, ведь вопросцы должны выводиться не попорядку, а по очереди. В связи с сиим я употреблял знак «&» в конце всякого вопросца и указал программке читать ранее знака, но сам знак не выводить. Можно было употреблять счетчик строк, который останавливает программку опосля чтения 2-ух строк (вопросец и варианты ответов), но в случае сбоя тест приходит в негодность. Дальше требовалось расположить данные о заглавии теста, количестве вопросцев, пароле и т. п. Я расположил их по сиим двум файлам. Бывалые программеры увидят: для чего было употреблять текстовые файлы, ведь можно было применить работу с типом «запись» и сохранять данные в нетипизированных файлах, и шифровщик бы не потребовался. Вправду, но внедрение типа «запись» не дозволяет создавать испытания с динамическим числом ответов на вопросец. Это может быть только методом использования в записи динамического массива. Но это сделает работу с файлом весьма сложной а сам файл будет занимать много места на диске по сопоставлению с обыденным текстовым.

естественно, что при поиске файла программка может его не отыскать, в этом случае выдается ошибка поиска. Требовалось ее обойти, выдавая собственное сообщение программки. Это осуществляется последующим образом: задается директива компиллятора на его отключение $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:pascalregistr.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:=readkey; {считывание числа ответа}

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);

Erase(u); {стирание старенького файла ответов}

close(y);

Rename(y,a2); {переименование файла вопросцев}

a2:=a2+’o’;

close(a1);

Rename(a1,a2); {переименование файла ответов}

End;

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

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

Procedure SearchF;

Begin

Assign(b1,’c:pascalregistr.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;

Опосля объявления объекта к нему пишутся процедуры (способы). Заглавие процедуры состоит из 2-ух частей: имени объекта и имени процедуры:

<
Имя объекта
>.<
имя процедуры
>

Объектная программка.

Объектная программа- это крайняя принципиальная стадия разработки программки: в нее внедряется панель управления, что существенно упрощает диалог с системой и делает функции программки наиболее доступными. Как видно из предшествующей главы, функции программки в структурном виде находятся в операторе варианта 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

]]>