Использование динамических списков-сотрудники
Титульный лист
Лист задания
Содержание
Введение
Язык программирования «Pascal» был разработан Н. Виртом первоначально для целей обучения программированию вообще. С этой точки зрения Паскаль имеет некоторое преимущество перед однотипными языками - такими, как, например, язык Си.
По своей идеологии Паскаль близок к современной методике и технологии программирования. Этот язык весьма полно отражает идеи структурного программирования, что отчетливо проявляется в основных управляющих структурах, предусмотренных в Паскале.
При разработке прикладного программного обеспечения паскаль позволяет выполнить проект в короткие сроки, предоставляя для этого множество функций и процедур для оперирования стандартными типами данных. Удобство программирования, представленное языком, не имеет аналогов. Данная тенденция сохранилась и в последующих редакциях и модификаций паскаля, например, - Delphi.
Целью данного курсового проекта является разработка программного обеспечения для ведения штатного расписания сотрудников с возможностью сохранения данных на диск и отображения величины заработных плат в виде графика.
1 Постановка задачи на разработку программы
Необходимо разработать программу, выполняющую следующие функции:
– ввод данных,
– запись данных в файл,
– чтение данных из файла,
– вывод данных на экран,
– дополнение данных,
– удаление данных,
– сортировка данных,
– построение диаграммы по данным из файла и вывод ее на экран.
Для сортировки данных и построения диаграммы использовать вычисляемое поле (можно выполнять сортировку дополнительно по любому другому полю по усмотрению разработчика).
2 Состав и структура исходных данных и результатов
Для хранения штатного расписания в оперативной памяти и в файле используется тип записи со структурой, представленной в таблице 1.
Таблица 1 – Состав и структура исходных данных
Имя переменной |
Назначение |
Тип |
Ограничения |
Num |
Штатный номер сотрудника |
Integer |
От 0 до 32767 |
FIO |
ФИО сотрудника |
String |
Не более 255 символов |
WORK |
Должность сотрудника |
String |
Не более 255 символов |
OKL |
Оклад сотрудника |
Real |
>0 |
Perc |
Процент надбавки для сотрудника |
Real |
>0 |
3 Методы решения задач
Для сортировки списка сотрудника используется вычисляемое поле «Заработная плата», которое вычисляется по формуле:
.
Для выполнения сортировки используется сортировка методом «пузырька». Данный метод выполняется в цикле, пока происходит обмен элементов. Условием выхода из цикла является отсутствие перестановок. Так как производится проход по односвязному списку, то для уменьшения количества обращений обмен элементов производится путем обмена информационной части найденного указателя и следующего элемента с использованием промежуточных переменных.
Вывод диаграммы на экран осуществляется с помощью стандартных функций графической подсистемы, предоставляемых модулем Graph.
4 Описание программы
Для реализации курсового проекта был разработан отдельный модуль, куда были вынесены все процедуры для обработки данных.
В файле исходного текста основной программы осуществляется подключение разработанного модуля и вызов процедуры «меню»:
program kr;
uses m_unit;
begin
menu;
clear_s;
end.
В модуле «m_unit» описаны следующие процедуры:
- procedure menu ;
- procedure init_s ;
- procedure new_s ;
- procedure view_s ;
- procedure del_s ;
- procedure get_s ;
- procedure out_s ;
- procedure draw_s ;
- procedure sort_s ;
- procedure clear_s;
- procedure show_s.
Процедура menu осуществляет вывод на экран пунктов меню и предоставляет пользователю выбор действия. Выбор пользователя осуществляется нажатием функциональных клавиш:
procedure menu;
var
ch:Char;
begin
Init_s;
repeat
textcolor(11);
TextBackground(1);
clrscr;
writeln('F1.Новый F2.Просмотр F3.Удалить F4.Диаграмма F5.Открыть F6.Сохранить ESC-Выход');
ch :=ReadKey;
if (ch=#27) then exit;
if (ch = #0) then
begin
ch :=ReadKey;
end;
case ch of
#59:new_s ;
#60:view_s ;
#61:del_s ;
#62:draw_s ;
#63:get_s ;
#64:out_s ;
end;
until ch = #27;
end;
Для добавления элемента в список в ручном режиме используется процедура new_s. Работа с указателями построена таким образом, что добавление нового сотрудника осуществляется в конец списка. Ввод информационной части указателя происходит в диалоговом режиме с выводом подсказок о заполняемом значении. После ввода информации осуществляется показ введенной информации в табличном виде.
procedure new_s; {Процедура добавления сотрудника в список}
var
tmp,ends:m_rec;
begin
clrscr;
textcolor(10); {зел цвет}
if Head = Nil then
begin
new(head);
head^.next := NIL;
tmp := head;
end
else
begin
tmp := Head;
while (tmp^.Next<>NIL) do
begin
tmp := tmp^.Next;
end;
ends:=tmp;
new(tmp);
ends^.next := tmp;
tmp^.Next := NIL;
end;
{Заполним поля структуры}
{ Num :Integer;
FIO :string;
WORK :string;
OKL :real;
Perc :real;
}
write('Номер сотрудника:');
readln(tmp^.Num);
write('ФИО:');
readln(tmp^.FIO);
write('Должность:');
readln(tmp^.Work);
write('Оклад:');
readln(tmp^.OKL);
write('Надбавка(%):');
readln(tmp^.Perc);
{ Для автотестов}
{ tmp^.Num :=1;
tmp^.FIO := 'asdasd';
tmp^.WORK := '123aasdsdasd';
tmp^.OKL :=123;
tmp^.Perc :=1;
}
textcolor(14);
writeln('Добавлена запись:');
textcolor(10);
{Шапка}
writeln('╔════╦═══════════════
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
writeln('║');
{вывод текущей записи}
writeln('╠════╬═══════════════
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
writeln('║');
{подвал}
writeln('╚════╩═══════════════
textcolor(11);
write('Для продолжения нажмите любую клавишу');
readkey;
end;
Процедура сортировки sort_s осуществляет проход по списку со сравнением текущего элемента и следующего. Сравнение происходит по вычисляемому полю «Заработная плата». Если данное поле у текущего элемента больше, чем у следующего, то происходит обмен информационными частями между указателями. Проход списка с целью сортировки осуществляется до тех пор, пока имеются перестановки. Если после прохода не было перестановок, цикл завершается и список считается отсортированным.
procedure sort_s; {Процедура сортировки списка по ЗП}
var
t1,t2:m_rec;
HaveChange:boolean;
Num :Integer;
FIO :string;
WORK :string;
OKL :real;
Perc :real;
begin
HaveChange:=true;
while HaveChange do
begin
HaveChange:=false;
t1:=head;
while t1^.next<>nil do
begin
t2:=t1^.next;
if ((t1^.OKL*(1+0.01*t1^.Perc)) > (t2^.OKL*(1+0.01*t1^.Perc))) then
begin
HaveChange:=true;
Num := t1^.NUM;
FIO := t1^.FIO;
WORK := t1^.WORK;
OKL := t1^.OKL;
Perc := t1^.Perc;
t1^.NUM:=t2^.NUM;;
t1^.FIO:=t2^.FIO;;
t1^.WORK:=t2^.WORK;
t1^.OKL:=t2^.OKL;
t1^.Perc:=t2^.Perc;
t2^.NUM:=NUM;;
t2^.FIO:=FIO;;
t2^.WORK:=WORK;
t2^.OKL:=OKL;
t2^.Perc:=Perc;
end;
t1:=t1^.next;
end;
end;
end;
Полный текст программы приведен в приложении А.
Схема алгоритма программы приведена в приложении Б.
5 Методика отладки программы
В результате выполнения работы была написана программа для ведения штатного расписания сотрудников. Для тестирования был подготовлен исходный набор данных. Выполнение программы показало корректную работу.
Результаты тестирования приведены в приложении В.
6 Руководство пользователя
При запуске программы пользователь видит на экране горизонтальное меню выбора действий. Выбор пункта меню осуществляется при помощи функциональных клавиш F1-F6, выход из программы осуществляется по нажатию клавиши «ESC» (см. рисунок 1).
Рисунок 1 – Окно программы при старте.
Для оперирования информацией о сотрудниках используются клавиши:
- F1. Добавление сотрудника в список;
- F2. Просмотр списка сотрудников;
- F3. Удаление сотрудника из списка.
При добавлении нового сотрудника на экран выводится подсказка о вводимой информации. После ввода всех полей на экран выводится в табличном виде внесенная информация (см. рисунок 2).
Рисунок 2 – Добавление нового сотрудника.
При просмотре всего списка сотрудников происходит вывод информации в табличном виде на экран. Для удаления сотрудника необходимо указать номер сотрудника по штатному расписанию. Программа предоставляет возможность сохранения информации на диск. При сохранении файла, пользователю необходимо указать имя файла. Если происходило открытие существующего файла, то имя файла вводить не нужно. При открытии файла со штатным расписанием сотрудников необходимо указывать полный путь к файлу и имя файла. Если файл находится в каталоге программы, то указывается только имя файла.
Заключение
В результате выполнения курсового проекта была разработана программа введения штатного расписания сотрудников и подготовлена документация на разработанное программное обеспечение. Проведенное тестирование показало корректность работы программы.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1. Климова Л.М. PASCAL 7.0 Практическое программирование. Решение типовых задач. - М.: КУДИЦ-ОБРАЗ, 2000.
2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. -М.: Наука, 1987.
3. Аладьев В.З., Тупало В.Г. Turbo-Pascal для всех. - Киев: Технiка, 1993.
4. Белецкий, Ян. Турбо Паскаль с графикой для персональных компьютеров. - М.: Машиностроение, 1991.
5. Джонс Ж., Харроу К. Решение задач с системой Турбо Паскаль. -М.: Финансы и статистика, 1991.
6. Епанешников А.М. Программирование в среде Turbo Pascal 7.0. -М.: Диалог-МИФИ, 1996.
7. Климов Ю.С. Программирование в среде Turbo-Pascal 6.0. - Мн.: выш. шк., 1992.
8. Сергиевский М.В. Язык, среда программирования. - М.: Машиностроение, 1994.
9. Турбо Паскаль 7.0. -Киев: торгово-издательское бюро BHV, 1995.
10. Фаронов В.В. Турбо Паскаль 7.0. начальный курс. - М.: "Нолидж", 1997.
11. Фаронов В.В. Турбо Паскаль 7.0. Практика программирования. - М.: "Нолидж", 1997.
Приложение А
Приложение А
(обязательное)
Исходный текст программы
program kr;
uses m_unit,crt;
begin
menu;
clear_s;
end.
unit m_unit;
interface
type
m_rec = ^my_record;
my_record = record
Num :Integer;
FIO :string;
WORK :string;
OKL :real;
Perc :real;
Next :m_rec;
end;
procedure menu ; {Процедура вывода меню}
procedure init_s ; {Процедура производит при старте заполнение начальных параметров}
procedure new_s ; {Процедура добавления сотрудника в список}
procedure view_s ; {Процедура просмотра списка сотрудников}
procedure del_s ; {Процедура удаления сотрудника из списка}
procedure get_s ; {Процедура загрузки списка сотрудников из файла}
procedure out_s ; {Процедура сохранения списка в файл}
procedure draw_s ; {Процедура вывода диаграммы на экран}
procedure sort_s ; {Процедура сортировки списка по ЗП}
procedure clear_s; {Процедура очищает список}
procedure show_s ; {Процедура прорисовки диаграммы}
var
Head:m_rec; {Указатель на начало списка}
SeekFil:string; {Имя текущего файла}
implementation
uses crt,graph;
procedure init_s; {Процедура производит при старте заполнение начальных параметров}
begin
Head:=NIL; {Список иначально пуст}
SeekFil:='New.bin';
end;
procedure menu;
var
ch:Char;
begin
Init_s;
repeat
textcolor(11);
TextBackground(1);
clrscr;
writeln('F1.Новый F2.Просмотр F3.Удалить F4.Диаграмма F5.Открыть F6.Сохранить ESC-Выход');
ch :=ReadKey;
if (ch=#27) then exit;
if (ch = #0) then
begin
ch :=ReadKey;
end;
case ch of
#59:new_s ;
#60:view_s ;
#61:del_s ;
#62:draw_s ;
#63:get_s ;
#64:out_s ;
end;
until ch = #27;
end;
{*****************************
procedure out_str(n:integer;s:string);
var
ii:integer;
jj:integer;
begin
if (length(s) > n) then
begin
for ii:=1 to n do
begin
write(s[ii]);
end;
end
else
begin
JJ:=0;
for ii:=1 to Length(s) do
begin
write(s[ii]);
inc(jj);
end;
for ii:=jj to n do
begin
write(' ');
end;
end;
end;
{*****************************
procedure new_s; {Процедура добавления сотрудника в список}
var
tmp,ends:m_rec;
begin
clrscr;
textcolor(10); {зел цвет}
if Head = Nil then
begin
new(head);
head^.next := NIL;
tmp := head;
end
else
begin
tmp := Head;
while (tmp^.Next<>NIL) do
begin
tmp := tmp^.Next;
end;
ends:=tmp;
new(tmp);
ends^.next := tmp;
tmp^.Next := NIL;
end;
{Заполним поля структуры}
{ Num :Integer;
FIO :string;
WORK :string;
OKL :real;
Perc :real;
}
write('Номер сотрудника:');
readln(tmp^.Num);
write('ФИО:');
readln(tmp^.FIO);
write('Должность:');
readln(tmp^.Work);
write('Оклад:');
readln(tmp^.OKL);
write('Надбавка(%):');
readln(tmp^.Perc);
{ Для автотестов}
{ tmp^.Num :=1;
tmp^.FIO := 'asdasd';
tmp^.WORK := '123aasdsdasd';
tmp^.OKL :=123;
tmp^.Perc :=1;
}
textcolor(14);
writeln('Добавлена запись:');
textcolor(10);
{Шапка}
writeln('╔════╦═══════════════
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
writeln('║');
{вывод текущей записи}
writeln('╠════╬═══════════════
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
writeln('║');
{подвал}
writeln('╚════╩═══════════════
textcolor(11);
write('Для продолжения нажмите любую клавишу');
readkey;
end;
{*****************************
{Процедура добавления сотрудника в список из файла}
procedure new_sf(Num :Integer; FIO :string; WORK :string; OKL :real; Perc :real);
var
tmp,ends:m_rec;
begin
clrscr;
textcolor(10); {зел цвет}
if Head = Nil then
begin
new(head);
head^.next := NIL;
tmp := head;
end
else
begin
tmp := Head;
while (tmp^.Next<>NIL) do
begin
tmp := tmp^.Next;
end;
ends:=tmp;
new(tmp);
ends^.next := tmp;
tmp^.Next := NIL;
end;
{Заполним поля структуры}
tmp^.Num := NUM;
tmp^.FIO := FIO;
tmp^.WORK := WORK;
tmp^.OKL := OKL;
tmp^.Perc := Perc;
end;
{*****************************
{*****************************
{*****************************
procedure view_s; {Процедура просмотра списка сотрудников}
var
tmp:m_rec;
begin
clrscr;
textcolor(10);
{Шапка}
writeln('╔════╦═══════════════
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
writeln('║');
tmp :=head;
while (tmp<> NIL) do
begin
{вывод текущей записи}
writeln('╠════╬═══════════════
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
writeln('║');
tmp := tmp^.next;
end;
{подвал}
writeln('╚════╩═══════════════
textcolor(11);
write('Для продолжения нажмите любую клавишу');
readkey;
end;
{*****************************
{*****************************
{*****************************
procedure get_s; {Процедура загрузки списка сотрудников из файла}
var
ch:char;
f :file of my_record;
s :string;
tmp:my_record;
begin
clrscr;
textcolor(15);
if head <> NIL then
begin
writeln('При загрузке файла с диска может произойти потеря текущего списка');
writeln('Выберите действие:');
writeln(' - Enter - продолжить, не сохраняя;');
writeln(' - ESC - сохранить текущий список и продолжить.');
repeat
ch:=readkey;
until ((ch =#27) or (ch = #13));
if (ch = #27) then
begin
out_s; {Сохранить текущий список}
end;
end;
clear_s; {Процедура очищает список}
{далее загрузка данных}
textcolor(10);
write('Имя файла для открытия:');
textcolor(11);
readln(s);
assign(f,s);
{$I-} {// Отключаем контроль ввода/вывода}
RESET(F);
{$I+} {// Включаем контроль ввода/вывода}
if IOResult <> 0 {// Выход, если файл не открыт}
then
begin
textcolor(12);
writeln ('Невозможно открыть файл');
end
else
begin
SeekFil:=s;
while (not EOF(f)) do
begin
read(f,tmp);
new_sf(tmp.Num, tmp.FIO,tmp.WORK, tmp.OKL,tmp.Perc);
end;
Close(f);
end;
textcolor(10);
write('Для продолжения нажмите любую клавишу');
readkey;
sort_s;
end;
{*****************************
{*****************************
{*****************************
procedure out_s; {Процедура сохранения списка в файл}
var
s:string;
f :file of my_record;
tmp:my_record;
t:m_rec;
begin
if SeekFil = 'New.bin' then
begin
textcolor(10);
write('Имя файла:');
textcolor(11);
readln(s);
end
else
begin
s:=SeekFil;
end;
assign(f,s);
{$I-} { Отключаем контроль ввода/вывода}
REWRITE(F);
{$I+} { Включаем контроль ввода/вывода}
if IOResult <> 0 {Выход, если файл не создан}
then
begin
textcolor(12);
writeln ('Невозможно сохранить файл');
end
else
begin
SeekFil:=s;
t:=head;
while (t<>NIL) do
begin
tmp.Num := t^.NUM;
tmp.FIO := t^.FIO;
tmp.WORK := t^.WORK;
tmp.OKL := t^.OKL;
tmp.Perc := t^.Perc;
write(f,tmp);
t:=t^.next;
end;
Close(f);
end;
textcolor(10);
write('Для продолжения нажмите любую клавишу');
readkey;
end;
{*****************************
{*****************************
{*****************************
procedure sort_s; {Процедура сортировки списка по ЗП}
var
t1,t2:m_rec;
HaveChange:boolean;
Num :Integer;
FIO :string;
WORK :string;
OKL :real;
Perc :real;
begin
HaveChange:=true;
while HaveChange do
begin
HaveChange:=false;
t1:=head;
while t1^.next<>nil do
begin
t2:=t1^.next;
if ((t1^.OKL*(1+0.01*t1^.Perc)) > (t2^.OKL*(1+0.01*t1^.Perc))) then
begin
HaveChange:=true;
Num := t1^.NUM;
FIO := t1^.FIO;
WORK := t1^.WORK;
OKL := t1^.OKL;
Perc := t1^.Perc;
t1^.NUM:=t2^.NUM;;
t1^.FIO:=t2^.FIO;;
t1^.WORK:=t2^.WORK;
t1^.OKL:=t2^.OKL;
t1^.Perc:=t2^.Perc;
t2^.NUM:=NUM;;
t2^.FIO:=FIO;;
t2^.WORK:=WORK;
t2^.OKL:=OKL;
t2^.Perc:=Perc;
end;
t1:=t1^.next;
end;
end;
end;
{*****************************
{*****************************
{*****************************
procedure del_s; {Процедура удаления сотрудника из списка}
var
t1,t2:m_rec;
num:integer;
begin
clrscr;
textcolor(10);
write('Номер сотрудника:');
textcolor(13);
readln(num);
textcolor(10);
t1:=head;
t2:=head;
while(t1<>nil) do
begin
if t1^.num = num then
begin
if t1 = head then
begin
if t1^.Next = NIL then
begin
dispose(head);
head := NIL;
break;
end
else
begin
head := t1^.next;
dispose(t1);
end
end
else
begin
if t1^.next <> NIL then
begin
t2^.Next:=t1^.next;
dispose(t1);
t1:=t2;
end
else
begin
t2^.next:=Nil;
dispose(t1);
t1:=t2;
end;
end;
end;
t2:=t1;
if t1<> NIL then
begin
t1:=t1^.next;
end;
end;
write('Для продолжения нажмите любую клавишу');
readkey;
end;
{*****************************
{*****************************
{*****************************
procedure clear_s; {Процедура очищает список}
var
tmp:m_rec;
begin
tmp:=Head;
while (tmp<>NIL) do
begin
Head:=tmp^.next;
dispose(tmp);
tmp:=Head;
end;
head := NIL;
end;
{*****************************
{*****************************
{*****************************
function InitGraf:Integer; {функция инициализирует графический режим}
var
CodeError:Integer; {0 - Нет ошибок. Или код ошибки}
gd,gm:integer; {Драйвер и режим}
begin
CodeError:= 0; {Первичная инициализация, предполагается что все пройдет без ошибок}
gd:=detect;
InitGraph(gd,gm,'');
If GraphResult <> grOk then
begin
CodeError :=GraphResult; {Возвращается код ошибок}
end
else
begin
CodeError := 0; {Возвращается 0, ошибок нет}
end;
InitGraf:=CodeError;
end;
{*****************************
{*****************************
{*****************************
procedure draw_s; {Процедура вывода диаграммы на экран}
begin
clrscr;
if InitGraf = 0 then
begin
Show_s;
CloseGraph;
end
else
begin
textcolor(12);
writeln('Ошибка инициализации видеодрайвера');
readkey;
end;
end;
{*****************************
{*****************************
{*****************************
procedure show_s; {Процедура прорисовки диаграммы}
var
cnt: Integer;
tmp: m_rec;
Ht : integer; {высота экрана}
Wt : integer; {Ширина экрана}
i : integer;
mx : real ; {Максимальная ЗП}
ZmY: real ; {Масштаб по Y}
ZmX: real ; {Масштаб по X}
x0,y0:integer;
ZP:real;
s: string;
begin
cnt:=0;
mx:=0;
wt:=GetMaxX;
Ht:=GetMaxY;
tmp:=head;
while (tmp<>NIL) do
begin
inc(cnt);
if ((tmp^.OKL*(1+0.01*tmp^.Perc))
mx:=(tmp^.OKL*(1+0.01*tmp^.
tmp:= tmp^.next;
end;
if mx<>0 then ZmY:= ht/mx
else ZmY:=1;
moveto(0,ht);
tmp:=head;
if cnt<>0 then ZmX:=Wt/Cnt
else ZmX:=1;
i:=1;
x0:=0;
y0:=ht;
while (tmp<>NIL) do
begin
ZP:=(tmp^.OKL*(1+0.01*tmp^.
lineto(x0,Ht-trunc(ZP*ZmY));
lineto(x0+trunc(ZmX),Ht-trunc(
lineto(x0+trunc(ZmX),Ht);
X0:=x0+trunc(ZmX);
tmp:= tmp^.next;
end;
{Рисуем ось ЗП и подписываем ее}
moveto(0,ht);
setcolor(10);
lineto(0,0);
SetTextStyle(1, HorizDir, 1);
outtextXY(1,10,'ZP 1234567890');
for i:=1 to 5 do
begin
moveto(0,i*trunc(ht/5));
lineto(5,i*trunc(ht/5));
x0:=trunc(mx/(6-i));
str(x0,s);
outtext(s);
end;
readkey;
end;
end.
Приложение Б
Приложение Б
(обязательное)
Схема алгоритма программы
Рисунок Б.1 – Схема алгоритма главной программы
Рисунок Б.2 – Схема алгоритма процедуры сортировки
Рисунок Б.3 – Схема алгоритма вывода графика на экран
Приложение В
Приложение В
(обязательное)
Результаты тестирования

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