Анализ и математическая постановка задачи. Описание алгоритма действий, структурной организации программы и ее программной реализации. Текст основной программы, модулей вывода текстовых файлов на экран, извлечения ехе-файлов и подсчёта лабораторных работ.
При низкой оригинальности работы "Программа для проверки правильности выполнения лабораторных работ за текущий семестр", Вы можете повысить уникальность этой работы до 80-100%
Меню, подменю, вывод текстовых файлов, извлечение *.ехе-файлов, вывод подпунктов меню и подменю, включение управления в меню и подменю, регистрацию, подсчет количества правильных работ целесообразно оформить в виде процедур и модулей. Процедура, рисующая главное меню, состоящее из подпунктов с темами лаб. работ за текущий семестр и подпункт справки к программе. В процедуре menu используется также процедура ramka, которая рисует рамку окна с помощью процедур Line.
Введение
Современные средства вычислительной техники и ЭВМ позволяют существенным образом повысить эффективность деятельности инженеров при решении различных задач. При этом наиболее существенным вопросом является организация взаимодействия пользователя со средствами ЭВМ. В качестве языка программирования выбран изучаемый на занятия по дисциплине «Алгоритмические языки и программирование» язык программирования «Turbo Pascal 7.0». К достоинствам этого языка можно отнести такие его характеристики, как модульность, универсальность, удобство работы с файлами, со структурированными типами данных и т.д.
1.
Анализ и математическая постановка задачи
При решении данной задачи нужно выполнить следующие действия: 1. После запуска программа должна производить регистрацию пользователя (Ф. И. О., и номер группы).
2. После регистрации на экран должно выводиться меню с пунктами по темам лабораторных работ текущего семестра.
3. При выборе пункта меню пользователю должно предоставляться подменю из двух пунктов: «Теория» и «Запуск».
4. В подпункте «Теория» на экран должны выводиться краткие сведения по средствам языка Паскаль, необходимые для выполнения данной работы.
5. При выборе подпункта «Запуск» программа должна запускать пользовательский *.ехе-файл по выбранной лабораторной работе, сравнивать результаты работы пользовательской программы с результатами эталонной, подтверждать или нет правильность ее выполнения.
6. При правильном выполнении пользовательской работы программа должна подсчитывать и фиксировать количество сделанных работ, а при успешном выполнении всех выводить сообщение «все работы зачтены».
Меню, подменю, вывод текстовых файлов, извлечение *.ехе-файлов, вывод подпунктов меню и подменю, включение управления в меню и подменю, регистрацию, подсчет количества правильных работ целесообразно оформить в виде процедур и модулей. Подпрограммы для рисования меню и подменю, вывода в них подпунктов, регистрации, и включения управления в меню и подменю с помощью курсорных клавиш посредством указателя я разместил в модуле MAIN.TPU. Подпрограммы для вывода текстовых файлов на экран дисплея и извлечения *.ехе-файлов я расположил в модулях OPENHELP.TPU и EXECUT.TPU соответственно, а для подсчета количества выполненных работ в модуле PODSHET.TPU.
2. Разработка схемы алгоритма и ее описание
Программа работает в графическом режиме. Пользователь выбирает пункт меню (клавиши ). Запускает файл с работой. Программа выполняет заданную лабораторную работу и выводит на экран сообщение о правильности ее выполнения. По результатам анализа задания можно составить укрупненную схему алгоритма (рис. 1)
Рис. 1
1. Обнуление количества правильно выполненных работ. Для этого переменной логического типа p присваивается значение false и она записывается в файлы с именами “Rx”(x = 1…7).
2. Запуск процедуры регистрации, которая состоит из следующих полей для заполнения: - фамилия;
- имя;
- отчество;
- номер группы.
3. Инициализация графического режима. В программе переменные Driver и Mode имеют тип integer, а Directory - переменная строкового типа, указывающая путь к граф. драйверу.
4. Процедура, рисующая главное меню, состоящее из подпунктов с темами лаб. работ за текущий семестр и подпункт справки к программе. Подпункты выводятся на экран с помощью процедуры OUTTEXTXY. В процедуре menu используется также процедура ramka, которая рисует рамку окна с помощью процедур Line.
5. Процедура, включающая управление курсорными клавишами в главном меню. В ней используется процедура kursor, которая рисует указатель в форме кружка. При нажатии курсорных клавиш он перемещается вверх или вниз. При нажатии Esc программа выводит количество правильно выполненных работ и данные о пользователе. При нажатии Enter открывается соответствующее подменю, в зависимости от координаты курсора. Управление в подменю аналогично управлению в меню, за исключением того, что кнопка BACK приводит к возвращению в главное меню. В подменю находятся два пункта: Theory (теория) и Run (Запуск). При выборе пункта Theory открывается окно, содержащее краткие теоретич. сведения о текущей лаб. работе. При выборе пункта Run начинается проверка правильности лабораторных работ. При этом вначале запускается пользовательская программа. Чтобы запуск произошел успешно, пользователь должен указать путь к .exe-файлу своей лабораторной работы. После запуска пользовательской программы появляется окно, в котором необходимо ввести исходные данные, вводимые при запуске программы пользователя, и полученный в ней результат. После этого запускается эталонная программа и выводит результат, который должен получиться при введенных исходных данных. Если результат, введенный пользователем, совпадает с результатом эталонной программы, то в этом же окне выводится сообщение "Ваша программа работает правильно", а в противном случае - "Ваша программа работает неправильно". После этого необходимо нажать клавишу ENTER для возвращения в подменю текущей работы.
3.Текст программы и его описание
Program kurs;
Uses Graph,CRT,OPENHELP,Main;
{$M 15012,20240,20240}
Const
Directory="C:\BP\BGI"; {задание директории для включения граф. режима}
read(f,re); {считывание данных из файла регистрации} status(stat); {считывание количества правильных лаб. работ} if stat7 then begin writeln(re.fam," ",re.name," ",re.otch," из группы ",re.gr);
writeln("Статус: сдано работ - ",stat);
end else begin writeln(re.fam," ",re.name," ",re.otch," из группы ",re.gr);
writeln("Статус: все работы зачтены");
end;
close(f);
end;
end;
until c=#13; {выполняется пока не нажата клавиша Enter} case y of {в зависимости от положения указателя открывается}
30:begin {соответствующее подменю и подключается управление,} podmenu1;{но если у=100,то открывается файл справки к программе} klavpodmenu1;
end;
40:begin podmenu2;
klavpodmenu2;
end;
50:begin podmenu3;
klavpodmenu3;
end;
60:begin podmenu4;
klavpodmenu4;
end;
70:begin podmenu5;
klavpodmenu5;
end;
80:begin podmenu6;
klavpodmenu6;
end;
90:begin podmenu7;
klavpodmenu7;
end;
100:begin restorecrtmode; {восстановление CRT-режима} oph(st); {открытие файла справки} setgraphmode(getgraphmode); {восстановление граф. режима} menu; {подключение меню и управления в нем} klavmenu;
end;
end;
end;
procedure klavpodmenu1;
var y:integer;
c:char;
st:string;
begin y:=30;
kursor(y); {включение указателя в подменю 1} repeat detectkey(c);
until c=#13; {выполняется пока не нажата клавиша Enter} case y of {определение положения указателя}
30:begin restorecrtmode;
oph(st1); {открытие файла справки к работе 1} setgraphmode(getgraphmode);
podmenu1; {рисование подменю 1 и подключение управления} klavpodmenu1;
end;
40:begin restorecrtmode;
writeln("Введите путь к своему файлу");
readln(st);
execute(st); {извлечение пользовательского файла} execute(a1_1); {извлечение файла,записывающего исх. данные и} execute(a2_1); {результат пользов. программы для первой работы,} setgraphmode(getgraphmode); {и запуск эталонной прог-мы для этой работы} podmenu1; {рисование подменю 1 и подключение управления} klavpodmenu1;
end;
50:begin menu; {возвращение в главное меню} klavmenu;
end;
end;
end;
procedure klavpodmenu2; {здесь и далее все аналогично описанию } var {процедуры klavpodmenu1} y:integer;
c:char;
st:string;
begin y:=30;
kursor(y);
repeat detectkey(c);
case c of
#80:begin podmenu2;
y:=y 10;
if y=60 then y:=30;
kursor(y);
moveto(19,y);
end;
#72:begin podmenu2;
y:=y-10;
if y=20 then y:=50;
kursor(y);
moveto(19,y);
end;
end;
until c=#13;
case y of
30:begin restorecrtmode;
oph(st2);
setgraphmode(getgraphmode);
podmenu2;
klavpodmenu2;
end;
40:begin restorecrtmode;
writeln("Введите путь к своему файлу");
readln(st);
execute(st);
execute(a1_2);
execute(a2_2);
setgraphmode(getgraphmode);
podmenu2;
klavpodmenu2;
end;
50:begin menu;
klavmenu;
end;
end;
end;
procedure klavpodmenu3;
var y:integer;
c:char;
st:string;
begin y:=30;
kursor(y);
repeat detectkey(c);
case c of
#80:begin podmenu3;
y:=y 10;
if y=60 then y:=30;
kursor(y);
moveto(19,y);
end;
#72:begin podmenu3;
y:=y-10;
if y=20 then y:=50;
kursor(y);
moveto(19,y);
end;
end;
until c=#13;
case y of
30:begin restorecrtmode;
oph(st3);
setgraphmode(getgraphmode);
podmenu3;
klavpodmenu3;
end;
40:begin restorecrtmode;
writeln("Введите путь к своему файлу");
readln(st);
execute(st);
execute(a1_3);
execute(a2_3);
setgraphmode(getgraphmode);
podmenu3;
klavpodmenu3;
end;
50:begin menu;
klavmenu;
end;
end;
end;
procedure klavpodmenu4;
var y:integer;
c:char;
st:string;
begin y:=30;
kursor(y);
repeat detectkey(c);
case c of
#80:begin podmenu4;
y:=y 10;
if y=60 then y:=30;
kursor(y);
moveto(19,y);
end;
#72:begin podmenu4;
y:=y-10;
if y=20 then y:=50;
kursor(y);
moveto(19,y);
end;
end;
until c=#13;
case y of
30:begin restorecrtmode;
oph(st4);
setgraphmode(getgraphmode);
podmenu4;
klavpodmenu4;
end;
40:begin restorecrtmode;
writeln("Введите путь к своему файлу");
readln(st);
execute(st);
execute(a1_4);
execute(a2_4);
setgraphmode(getgraphmode);
podmenu4;
klavpodmenu4;
end;
50:begin menu;
klavmenu;
end;
end;
end;
procedure klavpodmenu5;
var y:integer;
c:char;
st:string;
begin y:=30;
kursor(y);
repeat detectkey(c);
case c of
#80:begin podmenu5;
y:=y 10;
if y=60 then y:=30;
kursor(y);
moveto(19,y);
end;
#72:begin podmenu5;
y:=y-10;
if y=20 then y:=50;
kursor(y);
moveto(19,y);
end;
end;
until c=#13;
case y of
30:begin restorecrtmode;
oph(st5);
setgraphmode(getgraphmode);
podmenu5;
klavpodmenu5;
end;
40:begin restorecrtmode;
writeln("Введите путь к своему файлу");
readln(st);
execute(st);
execute(a1_5);
execute(a2_5);
setgraphmode(getgraphmode);
podmenu5;
klavpodmenu5;
end;
50:begin menu;
klavmenu;
end;
end;
end;
procedure klavpodmenu6;
var y:integer;
c:char;
st:string;
begin y:=30;
kursor(y);
repeat detectkey(c);
case c of
#80:begin podmenu6;
y:=y 10;
if y=60 then y:=30;
kursor(y);
moveto(19,y);
end;
#72:begin podmenu6;
y:=y-10;
if y=20 then y:=50;
kursor(y);
moveto(19,y);
end;
end;
until c=#13;
case y of
30:begin restorecrtmode;
oph(st6);
setgraphmode(getgraphmode);
podmenu6;
klavpodmenu6;
end;
40:begin restorecrtmode;
writeln("Введите путь к своему файлу");
readln(st);
execute(st);
execute(a1_6);
execute(a2_6);
setgraphmode(getgraphmode);
podmenu6;
klavpodmenu6;
end;
50:begin menu;
klavmenu;
end;
end;
end;
procedure klavpodmenu7;
var y:integer;
c:char;
st:string;
begin y:=30;
kursor(y);
repeat detectkey(c);
case c of
#80:begin podmenu7;
y:=y 10;
if y=60 then y:=30;
kursor(y);
moveto(19,y);
end;
#72:begin podmenu7;
y:=y-10;
if y=20 then y:=50;
kursor(y);
moveto(19,y);
end;
end;
until c=#13;
case y of
30:begin restorecrtmode;
oph(st7);
setgraphmode(getgraphmode);
podmenu7;
klavpodmenu7;
end;
40:begin restorecrtmode;
writeln("Введите путь к своему файлу");
readln(st);
execute(st);
execute(a1_7);
execute(a2_7);
setgraphmode(getgraphmode);
podmenu7;
klavpodmenu7;
end;
50:begin menu;
klavmenu;
end;
end;
end;
End.
5. Текст модуля EXECUT.TPU программа подсчет работа лабораторный
Unit execut;
Interface
Uses DOS;
Const {задание имен файлов} a1_1="dannye1.exe"; {имена файлов,считывающих исх. данные и результат} a1_2="dannye2.exe";
Const {задание названий текстовых файлов} st="help.txt";
st1="help1.txt";
st2="help2.txt";
st3="help3.txt";
st4="help4.txt";
st5="help5.txt";
st6="help6.txt";
st7="help7.txt";
procedure oph(st:string);
Implementation procedure oph(st:string); {процедура вывода текстовых файлов} var f:text; {файловая переменная типа текст} s:char; {символьная переменная} begin clrscr; {очитска экрана} assign(f,"C:\BP\BIN\KURSWORK\" st); {связывание файловой переменой} reset(f); {с конкретным текстовым файлом} while not Eof(f) do {посимвольное считывание и вывод содержимого файла} begin read(f,s);
write(s);
end;
close(f);
readln;
end;
End.
6. Текст модуля PODSHET.TPU
Unit podshet;
Interface procedure status(var stat:byte); {процедура подсчета количества вып-х работ}
Implementation procedure status(var stat:byte); {stat - счетчик} var r:file of boolean; {файловая переменная логического типа} p:boolean; {переменная логического типа} begin stat:=0; {задание счетчику правильности выполнения работ значения = 0} assign(r,"C:\BP\BIN\KURSWORK\R1.DAT"); {связывание файловой переменной} reset(r); {с файлом,содежащим результат выполнения 1-ой работы,считывание} read(r,p); {результата,и,если работа выполнена {правильно(р=true),то} if p=true {счетчик увеличивается на 1} then stat:=stat 1;
Результат работы пользовательской программы: Площадь 1-ого треугольника - 8.00
Площадь 2-ого треугольника - 7.50
Сумма площадей - 15.50
Результат работы программы - «Ваша программа работает правильно»
3. «Рекурсии».
Задание: вычислить 14-й член последовательности, определяемой формулой: v[n]=a[n]*v[n-1] a[n-1]/v[n-2], если v[1]=a[1],v[2]=a[1] a[2], где a[n]-члены массива.
Ввод исходных данных: Число членов последовательности - 14
Члены последовательности - 1,2,3,4,5,6,7,8,9,10,11,12,13,14
Результат работы пользовательской программы: 14-й член последовательности - 163737397990.00
Результат работы программы - «Ваша программа работает правильно»
4. «Модули».
Задание: вычислить площадь треугольников по координатам их вершин и найти сумму площадей этих двух треугольников.
Результат работы пользовательской программы: Площадь 1-ого треугольника - 8.00
Площадь 2-ого треугольника - 7.50
Сумма площадей - 15.50
Результат работы программы - «Ваша программа работает правильно»
5. «Записи».
Задание: создать запись, содержащую информацию о месте жительства ваших друзей и предусмотреть возможность выдачи адреса по введенной фамилии.
Ввод исходных данных: Количество друзей - 2
Фамилия 1-ого друга - Братулин
Адрес 1-ого друга - Недостоево, ул. Сельских строителей, д.52, кв.10
Фамилия 2-ого друга - Трушин
Адрес 2-ого друга - Приокский, ул. Магистральная, д. 52, кв. 24
Результат работы пользовательской программы: Фамилия друга - Братулин
Адрес друга - Недостоево, ул. Сельских строителей, д.52, кв.10
Результат работы программы - «Ваша программа работает правильно»
6. «Файлы».
Задание: Записать в файл оценки в баллах за сессии и за вступительные экзамены и вывести средний балл.
Ввод исходных данных: Количество сессий - 1
Количество экзаменов в сессии - 3
Оценка №1 за сессию №1 - 5
Оценка №2 за сессию №1 - 5
Оценка №3 за сессию №1 - 5
Оценка №1 за экзамены - 4
Оценка №2 за экзамены - 4
Оценка №3 за экзамены - 4
Результат работы пользовательской программы: Средний балл за сессию №1 - 5.00
Средний балл за экзамены - 4.00
Результат работы программы - «Ваша программа работает правильно»
7. «Множества».
Задание: Из предложения, состоящего из латинских букв вывести все гласные буквы.
Ввод исходных данных: Предложение - I live in Russia
Результат работы пользовательской программы: Гласные буквы - I i e i u i a Результат работы программы - «Ваша программа работает правильно»
Список литературы
1. Эллиот Б. Коффман . Turbo Pascal, 5-е издание: Пер. с англ. - М. : Издательский дом «Вильямс», 2003.-896 с.
2. Новичков В. С., Парфилова Н. И., Пылькин А. Н. Алгоритмизация и программирование на Турбо Паскале: Учебное пособие. - М. : Горячая линия - Телеком, 2005. - 438 с.
Размещено на
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы