Имя переменной
|
Назначение
|
Тип
|
Ограничения
|
i
|
integer
|
-32768.32767
|
Sum
|
Сумма общего
взноса за все участки всеми садоводами
|
integer
|
-32768.32767
|
gd
|
Переменная,
определяющая драйвер графического устройства
|
integer
|
-32768.32767
|
gm
|
параметр (mode)
|
integer
|
-32768.32767
|
m
|
Координата
точки внутри сектора
|
integer
|
-32768.32767
|
n
|
Координата
точки внутри сектора
|
integer
|
-32768.32767
|
a
|
Угол в
диаграмме
|
real
|
2.9E -
39.1.7E38
|
b
|
Сохранение
предыдущего значения а
|
real
|
2.9E -
39.1.7E38
|
ss
|
Переменная для
контроля данных
|
string
|
не более 255
|
TGartner
|
Запись
|
record
|
__
|
FIO
|
ФИО садоводов
|
string
|
не более 50
символов
|
NumberSot
|
Количество
соток
|
integer
|
-32768.32767
|
Prise1
|
Годовой взнос
за сотку
|
integer
|
-32768.32767
|
PriseAll
|
Сумма годового
взноса
|
integer
|
-32768.32767
|
GartnerArray
|
Список
садоводов
|
TGartner
|
не более 50
|
NumberGartner
|
Число садоводов
|
integer
|
-32768.32767
|
n
|
Число записей
|
integer
|
-32768.32767
|
f
|
Файловая
переменная
|
File
of TGartner
|
__
|
Имя файла
|
string
|
не более 255
|
j
|
Управляющая
переменная
|
integer
|
-32768.32767
|
menu
|
Атрибут поиска
|
integer
|
1 - 3
|
buf
|
Переменная для
временного хранения какого-либо числа
|
integer
|
-32768.32767
|
BufArray
|
Временный
массив
|
TGartner
|
не более 50
|
KeyArray
|
Массив ключей
|
byte
|
0.255
|
3.
Методы решения задач
Построение круговой диаграммы предполагает следующий
алгоритм:
) вычислить относительную частоту для каждого из
интервалов в процентах Pj = 100 Fj / N;
2) вычертить окружность радиуса R < Yэ,max/2;
) вычерчивать радиусы окружности, отстоящие друг от
друга на углы 3,6 P1; 3,6 P2; 3,6 P3 и т.д.;
) заштриховать секторы;
) внутри каждого сектора или рядом с ним вывести
значение Pj;
) вывести надпись, поясняющую название показателя, для
которого построена диаграмма.
Создание пользовательской штриховки предполагает следующие
действия:
- создание первоначального эскиза (на
квадратном поле (в клетку) заштриховываются произвольные клетки вплоть до
получения желаемого результата);
- заштрихованные области заменяются
единицами;
- получившиеся по горизонтали числа
необходимо перевести из двоичной системы счисления в шестнадцатеричную;
- числа используются для создания пользовательской
заливки (в программе им предшествует знак "$").
Сортировка подсчетом, используемая в данном курсовом проекте,
заключается в том, чтобы попарно сравнить значения всех ключей и при этом для
каждого ключа подсчитать количество меньших его ключей, затем каждый i-й
элемент массива (запись) устанавливается на место, номер которого равен
меньшему ключу + 1.
При реализации алгоритма используются три массива:
для исходных данных;
для подсчета результатов сравнения ключей;
для результата сортировки.
4. Описание
программы
Курсовой проект состоит из основной программы (Kurs) и модуля UNIT (IO).
Основная программа отвечает за вывод на экран и
функционирование меню (вертикальное, выбор пункта меню - по функциональной
клавише), а также за построение круговой диаграммы. Для построения круговой
диаграммы используется процедура "Paint". Заполнитель для
круговой диаграммы разработан пользователем.
Модуль UNIT содержит восемь процедур: "Input", "Output1", "OutputAll", "Readfile", "Writefile", "DeleteGartner1", "Search", "Sort".
Процедура "Input" отвечает за ввод данных с клавиатуры.
Процедура "Output1" отвечает за вывод садовода с адресом i. Процедура "OutputAll" отвечает за вывод
списка всех садоводов. Процедура "Readfile" позволяет
произвести чтение из файла, процедура "Writefile" - запись в файл.
Процедура "DeleteGartner1" удаляет садовода из списка (атрибут - ФИО). Процедура
"Search" производит поиск садоводов по одному из трех атрибутов:
ФИО, количество соток или общий взнос. Прцедура "Sort" отвечает за
сортировку списка садоводов по возрастанию (ключ сортировки - количество
соток).
5. Методика
отладки программы
Отладка - это процесс поиска и исправления ошибок,
препятствующих корректной работе программы.
Существует три основных типа ошибок:
- ошибки этапа компиляции
или синтаксические ошибки;
- ошибки этапа выполнения
или семантические ошибки;
- логические ошибки.
Ошибки этапа компиляции или синтаксические ошибки происходят,
когда исходный код программы нарушает правила синтаксиса Паскаля. Компилятор не
может скомпилировать программу, пока она не будет содержать только допустимые
операторы Паскаля.
Наиболее общей причиной ошибок этапа компиляции являются
ошибки набора (опечатки), пропущенные точки с запятой, ссылки на неописанные
переменные, передача неверного числа (или типа) параметров процедуры или
функции и присваивание переменной значения неверного типа.
После исправления ошибки компиляцию необходимо выполнить
заново. После устранения в программе всех синтаксических ошибок и ее успешной
компиляции программа будет готова к выполнению и поиску ошибок этапа выполнения
и логических ошибок.
Примеры сообщений программы при ошибках этапа компиляции:
- Error 3: Unknown identifier;
- Error 4: Duplicate identifier;
- Error 37: END expected;
- Error 85: "; " expected;
- Error 113:
Error in statement и
др.
Ошибки этапа выполнения или семантические ошибки происходят
при запуске успешно откомпилированной программы, которая при выполнении делает
что-то недопустимое. То есть, программа содержит допустимые операторы Паскаля,
но при выполнении этих операторов что-то происходит неверно. Например,
программа может пытаться открыть для ввода несуществующий файл или выполнить
деление на ноль.
Пример сообщения программы при ошибке этапа выполнения:
- Error 62: Division by zero.
Логические ошибки - это ошибки проектирования и реализации
программы. То есть, операторы, используемые в программе, допустимы, но
выполняемые ими действия отличаются от предполагаемых.
Логические ошибки приводят к некорректному или
непредвиденному изменению значений переменных, неправильному отображению
графики или невыполнению кода тогда, когда это ожидается.
Для того чтобы исправить логические ошибки, целесообразно
использовать пошаговую отладку программы. При исполнении программы по шагам
поиск и исправление ошибки заметно облегчится.
6.
Руководство пользователя
Запуск программы осуществляется двойным нажатием левой
клавиши мыши по значку исполняемого модуля с названием Kurs.
После открытия окна программы пользователь видит вертикальное
меню. Выбор пункта меню осуществляется функциональными клавишами (рисунок В. 1).
При выборе пункта меню "Ввод данных" программа
предлагает ввести предполагаемое количество данных. После чего поэлементно
запрашивает ФИО садовода, количество соток, цену одной сотки (рисунок В.2).
При выборе пункта меню "Запись в файл" программа
предлагает ввести имя файла (предпочтительно латинскими буквами).
При выборе пункта меню "Чтение из файла" программа
запрашивает имя ранее созданного файла.
При выборе пункта меню "Вывод данных" программа выводит
на экран заполненную базу данных (рисунок В.3).
При выборе пункта меню "Поиск" пользователю предлагается
выбрать атрибут, по которому будет производится поиск (ФИО, количество соток,
общий взнос). После выбора атрибута необходимо ввести атрибут, принадлежащий
искомому садоводу. Если садовод будет найден, на экран будут выведены данные о
нем (рисунок В.5).
При выборе пункта меню "Сортировка" список садоводов
будет отсортирован по возрастанию (ключ сортировки - количество соток).
При выборе пункта меню "Диаграмма" на экран будет
выведена круговая диаграмма, отражающая соотношение годовых взносов всех
садоводов с соответствующими подписями (рисунок В.4).
программа язык turbo pascal
При выборе пункта меню "Дополнение данных"
повторяется алгоритм пункта "Ввод данных".
При выборе пункта меню "Выход из программы" будет
произведен выход из программного приложения.
Все изменения, произошедшие в базе данных можно увидеть,
выбрав пункт меню "Вывод данных".
В любое время пользователь может вернуться в меню, нажав
клавишу Enter.
Таблица 2 - Сообщения программы
Сообщение
программы
|
Действия
пользователя
|
Примечания
|
"Введите
число записей"
|
Необходимо
ввести количество вводимых элементов, после чего нажать клавишу Enter
|
Вводимое число
должно быть строго больше нуля и принадлежать к целому типу
|
"Введите
ФИО->"
|
Ввод ФИО
садовода производится через Enter
|
Рекомендуется
вводить латинскими буквами, чтобы в последствии избежать трудностей при
выводе данных на диаграмме
|
Сообщение
программы
|
Действия
пользователя
|
Примечания
|
"Введите
количество соток и цену одной сотки"
|
Ввод количество
соток и цены одной сотки производиться через Enter
|
Значения
количества соток и цены одной сотки должны быть целочисленными
|
"Введите
ФИО удаляемого садовода"
|
Вводится ФИО
садовода
|
__
|
"Введите
атрибуты поиска"
|
Необходимо
выбрать атрибут поиска из трех предлагаемых и ввести соответствующий ему
номер
|
__
|
|
|
|
|
|
Заключение
В ходе выполнения курсового проекта были разработаны
программы на языке Turbo Pascal, проработан ряд вопросов, решаемых в
технологической цепочке создания программного обеспечения. В качестве среды
программирования использовался Free Pascal IDE.
Общее задание на курсовое проектирование состояло в
разработке прикладной программы и пользовательской документации.
Разработанная программа предполагает использование предметной
области "Садовод", входными данными которой являются: ФИО, количество
соток, годовой взнос за сотку (руб.); вычисляемое поле - сумма годового взноса.
Вид меню - вертикальное, выбор пункта меню осуществляется с помощью
функциональных клавиш.
Для сортировки данных и построения диаграммы использовано
вычисляемое поле. Тип сортировки - сортировка подсчетом. Вид диаграммы -
круговая, способ закрашивания - специальная штриховка.
Литература
1. Долгушева
Л.Н. Электронное учебное пособие. ver 1.2.2010. - Пенза, ПГТА
2. Информатика:
Базовый курс/Под ред. С.В. Симоновича. - СПБ.: Питер, 2002. Алгоритмизация и
основы программирования / Г.И. Светозарова. - М.: Высшая школа, 2006. - 128 с.
. Культин
Н.Б. Turbo Pascal в задачах и примерах, 2007.
. Немнюгин
С.А. Turbo Pascal. Практикум. 2007.
. Немнюгин
С.А. Turbo Pascal. Программирование на языке высокого уровня. 2006.
. Павловская
Е.А., Паскаль. Программирование на языке высокого уровня: Учебник для вузов. -
СПб.: Питер, 2007. - 393 с.
. Пикулин
В.В., Долгушева Л.Н., Бармин М.А., Информатика и программирование:
Учебно-методическая разработка. - Пенза: Изд-во Пенз. гос. технол. академии,
2006. - с.
Приложения
Приложение А.
текст программы
А.1. Текст основной программы (Kurs)
uses crt, IO,graph;: FillPatternType=
($00,$11,$10,$12,$7e,$fa,$18,$00);InputData;: =0;;;paint;R=100; x=150; y=150;
colorG=7;sum: integer;,gm,m,n,err, i: integer;
a,b: real; ss:
string;(gd,gm);(gd,gm,'');GraphResult<>grOk then Halt
(1);(colorG);(x,y,R);: =0;: =0;i: =1 to NumberGartner do: =sum+GartnerArray
[i]. PriseAll;i: =1 to NumberGartner do: =a+2*Pi*GartnerArray [i].
PriseAll/sum;(x,y,x+round (R*cos (a)),y+round (R*sin (a)));;: =0; b: =0; i:
=0;i: =1 to NumberGartner do: =a;: =a+2*Pi*GartnerArray [i].
PriseAll/sum;(FillPattern,Random (GetMaxColor));
m: = (2*x+round (R*cos (a- (a-b) /2))) div 2;
n: = (2*y+round (R*sin (a- (a-b) /2))) div
2;(m,n,colorG);(GartnerArray [i]. PriseAll,ss);(m,n,ss);
RectAngle (3*R, i*25, 3*R+20, i*25+20);
FloodFill (3*R+2, i*25+3,colorG);(3*R+30, i*25+5,
GartnerArray [i]. fio);;;: =0;;('F1-Ввод данных');('F2-Запись в файл'); ('F3-Чтение из файла');
Writeln ('F4-Вывод данных');
Writeln ('F5-Удаление');
Writeln ('F6-Поиск');
Writeln ('F7-Сортировка');
Writeln ('F8-Диаграмма');
Writeln ('F9-Дополнение данных');
Writeln ('F10-Выход из программы');
case readkey of
#59: begin clrscr; inputdata; end;
#60: begin clrscr; writefile; end;
#61: begin clrscr; readfile; end;
#62: begin clrscr; Outputall; end;
#63: begin clrscr; Deletegartner1; end;
#64: begin clrscr; Search; end;
#65: begin clrscr; sort; end;
#66: paint;
#67: begin clrscr; input; end;
#68: halt;;false;.
А.2. Текст модуля программы (IO)
unit IO;crt;Nconst=50;=record: string [50];:
integer;,PriseAll: integer;;Input;Output1 (i:
integer);OutputAll;ReadFile;WriteFile;DeleteGartner1;Search;Sort;GartnerArray:
array [1. Nconst] of TGartner;: integer;Input;n, i: integer;;('Ввод данных в массив. Следуйте пошаговой
инструкции. Ввод очередного элемента завершайте нажатием клавиши Enter');
writeln;
Writeln ('Введите число записей->');
Readln (n);i: =1 to n doGartnerArray
[NumberGartner+1] do('Садовод №', i);('Введите ФИО->');(FIO); ('Введите количество
соток->');
{$I-}(NumberSot);
{$I+}IOResult<>0 then
Writeln ('Введен недопустимый символ! ');;;;; ('Введите цену одной
сотки->');
{$I-}(Prise1);
{$I+}IOResult<>0 then
Writeln ('Введен недопустимый символ! ');;;;;:
=Prise1*NumberSot;(NumberGartner);();;('Ввод окончен');;;Output1 (i: integer);;GartnerArray [i] do('ФИО',FIO);('Количество соток',NumberSot); ('Цена одной сотки',Prise1);
Writeln ('Общий взнос',PriseAll);;;;OutputAll;i,j: integer;
writeln;
writeln ('Вывод данных на экран. Для возврата в меню
нажмите клавишу Enter');
writeln;;(#218);i: =1 to 67
do(#196);(#191);(#179,'ФИО': 30,#179,'Кол. соток': 12,#179,'Цена 1-й': 10,#179,'Итог: 12,#179);i:
=1 to NumberGartner doGartnerArray [i] do(#179,Fio: 30,#179,NumberSot:
12,#179,Prise1: 10,#179,PriseAll: 12,#179);;(#192);j: =1 to 67
do(#196);(#217);;;ReadFile;f: file of TGartner; fileName: string;
writeln;
writeln ('Чтение данных из файла. Введите имя уже существующего
файла, затем нажмите клавишу Enter');
writeln;
writeln;
Write ('Введите имя файла->');
Readln (fileName);(f,fileName);
{$I-}(f);
{$I+}IOResult<>0then
writeln ('Указанный файл не найден! ');;;;not (Eof
(f)) do(NumberGartner);(f,GartnerArray [NumberGartner]);;(f);('Ввод окончен!
');;;WriteFile;f: file of TGartner; fileName: string; i: integer;
writeln;
writeln ('Запись данных в файл. Введите имя файла, затем
нажмите клавишу Enter');
writeln;;NumberGartner=0 then ('Список садоводов пуст!
');
readln;;;('Введите имя файла->');(fileName);(f,fileName);(f);i:
=1 to NumberGartner do(f,GartnerArray [i]);(f); ('Запись завершена');
readln;
end;
procedure DeleteGartner1;
var fio: string; i,j: integer;
begin
writeln;
writeln ('Удаление элемента массива. Введите
предлагаемый атрибут, затем нажмите клавишу Enter');
writeln;
writeln;
Write ('Введите ФИО садовода->');
Readln (fio);i: =1 to NumberGartner
doGartnerArray [i]. FIO=fio thenj: =i to NumberGartner-1 do[j]: =GartnerArray
[j+1];('Запись успешно удалена');(NumberGartner);;;; ('Садовод с такими
данными не найден! ');;;Search;menu,buf, i: integer; fio: string; key:
boolean;;(‘Поиск элемента массива. Выберете один из
предлагаемых атрибутов поиска, введите соответствующий ему номер и нажмите Enter');
writeln;
writeln;
Writeln ('Введите атрибуты поиска: ');
Writeln ('1-ФИО');
Writeln ('2-Количество соток');
Writeln ('3-Общий взнос');
Write ('->');
{$I-}(menu);
{$I+}IOResult<>0 then
Writeln ('Введен недопустимый символ! ');;;;;:
=false;menu of
:('Введите ФИО->');(fio);i: =1 to NumberGartner
dofio=GartnerArray [i]. FIO thenkey=false then Writeln ('Найденные записи: ');(i);:
=true;; key=false then Writeln ('Садоводы с требуемыми атрибутами не найдены');
readln;
end;
:
begin
Write ('Введите количество соток->');
{$I-}(buf);
{$I+}IOResult <>0 then
Writeln ('Введен недопустимый символ! ');;;;;i: =1
to NumberGartner dobuf=GartnerArray [i]. NumberSot thenkey=false then Writeln
('Найденные записи: ');(i);:
=true;; key=false then Writeln (' Садоводы с требуемыми атрибутами не
найдены');
readln;
end;
:
begin
Write ('Введите сумму общего взноса->');
{$I-}(buf);
{$I+}IOResult <>0 then
Writeln ('Введен недопустимый символ! ');;;;i: =1 to
NumberGartner dobuf=GartnerArray [i]. PriseAll thenkey=false then Writeln ('Найденные записи: ');(i);:
=true;;;
if key=false then Writeln ('Садоводы с требуемыми
атрибутами не найдены');
readln;;;;Sort;bufArray: array [1. Nconst] of
TGartner;: array [1. Nconst] of byte; i,j: integer;NumberGartner=0 then('Список садоводов пуст! ');;;;i: =1
to NumberGartner do [i]: =0;
writeln;
Writeln ('Сортировка по возрастанию');
for i: =1 to NumberGartner-1 doj: =i+1 to
NumberGartner doGartnerArray [i]. PriseAll>GartnerArray [j]. PriseAllinc
(keyArray [i]) else inc (keyArray [j]);i: =1 to NumberGartner do[keyArray [i]
+1]: =GartnerArray [i];i: =1 to NumberGartner do[i]: =bufArray [i]; ('Список отсортирован!
');
readln;
end.
Приложение В.
результаты работы программы
Рисунок В. 2-Вид окна программы после запуска
Рисунок В. 3-Ввод данных с клавиатуры
Рисунок В. 4-Вывод данных на экран
Рисунок В. 5-вывод на экран круговой диаграммы
Рисунок В.1. 6-Поиск по заданному атрибуту