- •Содержание
- •1 Задача №1.46
- •1.1 Постановка задачи и ее анализ
- •1.2 Описание структур данных
- •1.3 Проектирование программы
- •1.4 Результаты тестирования
- •2.4 Результаты тестирования
- •3.4 Результаты тестирования
- •4 Задача 4.7
- •4.1 Постановка задачи и ее анализ
- •4.2 Описание алгоритма
- •4.3 Проектирование программы
- •4.4 Результаты тестирования
- •Список использованных источников
Содержание
1 Задача №1.46_______________________________________________3
1.1. Постановка задачи и её анализ________________________
1.2. Описание структур данных___________________________
1.3. Проектирование программы__________________________
1.4. Результаты тестирования_____________________________
1.5. Оформление_______________________________________
2 Задача №2.20____________________________________________11
2.1. Постановка задачи и её анализ________________________
2.2. Описание структур данных___________________________
2.3. Проектирование программы__________________________
2.4. Результаты тестирования_____________________________
3 Задача №3.13______________________________________________14
3.1. Постановка задачи и её анализ________________________
3.2. Описание структур данных___________________________
3.3. Проектирование программы__________________________
3.4. Результаты тестирования_____________________________
4 Задача №4.7_______________________________________________19
4.1. Постановка задачи и её анализ________________________
4.2. Описание алгоритма_________________________________
4.3. Проектирование программы__________________________
4.4. Результаты тестирования____________________________
Список использованных источников_______________________22
1 Задача №1.46
1.1 Постановка задачи и ее анализ
Задание :
Линейный список записей содержит шестизначные номера телефонов и информацию о сумме задолженности абонента данного телефона. Записи об одном абоненте могут повторяться. Программа должна выводить суммарную задолженность абонента по введенному номеру телефона. Операции со списком реализовать подпрограммами.
Создаём линейный список, а после пишем процедуры для решения поставленной задачи.
1.2 Описание структур данных
Описание динамической структуры, линейный список:
type
type_info = record {описание данных о должниках}
num:string [6];{Номер должника}
dolg:string;{ Долг}
end;
type_ukaz = ^type_elem;{описание указателя на элемент линейного списка}
type_elem = record {тип элементов}
info: type_info;{поле с данными о списке должников}
ukaz: type_ukaz;{указатели на следующий эл-т}
end;
var
beg_spis, st, sp: type_ukaz;{указатели на: начало списка, текущее положение, следующее}
1.3 Проектирование программы
Для решения поставленной задачи, нам потребуется несколько процедур: Input_in_spis (процедура, которая вводит данные из файла в линейный список), Output_from_spis (процедура, которая выводит данные на экран), Poisk_and_output (процедура, которая позволяет найти должника).
Сперва заполняем наш список данными из файла. Пользователь считывать с файла информацию о должниках.
Для создания списка реализована процедура Input_in_spis.
procedure Input_in_spis;
var
f_input: text;
i: byte;
fn: string;
begin
clearmem;
repeat
write('Введите имя базы данных: ');
readln(fn);
if not FileExists(fn) then
writeln('Ошибка ввода. Попробуйте ещё раз');
until FileExists(fn);
assign(f_input,fn);
reset(f_input);
new(st);
beg_spis:= st;
while not eof(f_input) do
begin
with st^.info do
begin
readln(f_input,num);
readln(f_input,dolg);
end;
sp:= st;
new(st);
sp^.ukaz:= st;
end;
sp^.ukaz:= nil;
close(f_input);
end;
Далее введенные данные можно вывести на экран или сразу же перейти к выводу информации о необходимом нам абоненте.
{ввывод линейного списка на экран}
procedure Output_from_spis;
var
i,k: byte;
label label3;
begin
clrscr;
writeln('нажмите f1 для просмотра возможных команд');
writeln('|___________________________________________ |');
writeln('| База должников |');
writeln('|__________________________________________________|');
writeln('| | |');
writeln('| Номер абонента | Долг |');
writeln('| | |');
writeln('|__________________________|__________________________|');
st:= beg_spis;
label3:
k:=0;
i:=1;
while st<>nil do
begin
y:=14;
with st^.info do
begin
writeln('| | |');
writeln('|__________________________________________________|');
gotoxy(1,wherey-2);write(i,' ',num);inc(i);
gotoxy(24,wherey);write(dolg);
gotoxy(1,wherey+2);
k:=k+1;
end;
st:= st^.ukaz;
if (k=11) then begin
Write('___________________________________________________________');
Writeln('Дальше - f1');
while ReadKey <> #59 do
begin
end;
clrscr;
goto label3;
end;
end;
Write('________________________________________________________________________________');
Writeln('Обратно - f1');
while ReadKey <> #59 do
begin
end;
clrscr;
begin chose; end;
end;
{-------------------------------------------------------------------}
{поиск}
procedure POISK_AND_OUTPUT;
var poisk: string;
sum: integer;
flag: boolean;
begin
begin clrscr; end;
writeln('Пожалуйста,введите номер или промежуточную сумму задолженности!');
read(poisk);
flag:= false;
st:= beg_spis;
sum:=0;
while st<>nil do
begin
with st^.info do
if ((num=poisk) or
(dolg=poisk)) then
begin
flag:= true;
Writeln('Номер должника:',num,' ','Задолженность: ',dolg);
sum:=sum + StrToInt(dolg);
gotoxy(1,wherey+2);
end;
sp:= st;
st:= st^.ukaz;
end;
If st=nil then Writeln('Итоговая задолженность данного обонента:',sum);
gotoxy(1,wherey+1);
if (flag = false) then
begin
gotoxy(1,wherey-1);
writeln('Данный абонент не является должником!');
end;
Writeln('Обратно - f1');
while ReadKey <> #59 do
begin
end;
clrscr;
sum:=0;
begin chose; end;
end;