- •Содержание
- •1 Задача №1.7
- •1.1 Постановка задачи и ее анализ
- •1.2 Описание структур данных
- •1.3 Проектирование программы
- •1.4 Результаты тестирования
- •2.4 Результаты тестирования
- •3.4 Результаты тестирования
- •4 Задача 4.21
- •4.1 Постановка задачи и ее анализ
- •3.2 Описание структур данных
- •4.3 Проектирование программы
- •4.4 Результаты тестирования
- •Приложение
- •Список использованных источников
1.4 Результаты тестирования
Результат сортировки приведен на рисунке 1.
Рисунок 1 – Список после сортировки
2 Задача №2.45
2.1 Постановка задачи и ее анализ
Задание: Написать библиотеку функций для работы с целыми числами любой длины. Предусмотреть операции: сложение, вычитание, умножение, деление. Отображение чисел представить в виде деков цифр.
Сперва будем считывать число как строку, затем преобразовывать в число и заносить в начало дека.
Для решения данной задачи создадим модуль, содержащий процедуры различных операций над числами. Также необходимо реализовать основные процедуры для работы с деком.
2.2 Описание структур данных
Для реализации данной программы необходимо использовать дек, имеющий следующую структуру:
type long=^el;
el = record
data:integer;
next,prev:long;
end;
Структура содержит информационное поле data(хранит цифру числа), а также поля next и prev – указатели на следующий и предыдущий элементы дека.
2.3 Проектирование программы
Сперва создаем модуль operations, который будет состоять из процедур, выполняющих операции над числами(summ,dec,double,delenie).
Возьмем, например, операцию сложения (процедура summ). Два числа – входные данные. Идея следующая: идем по 2-м декам и суммируем соответствующие элементы, для хранения числа «в уме» вводим дополнительную переменную. Похожая идея и для остальных операций. Для наглядности приведем листинг данного модуля.
Листинг модуля operations:
unit operations;
interface
implementation
type long=^el;
el = record
data:integer;
next,pred:long;
end;
procedure insert(var b:long; c:integer);
var t:long;
begin
new(t);
t^.data:=c;
t^.next:=b;
t^.pred:=nil;
b:=t;
end;
procedure summ(a,b:long; var up:long);
var x,y,z:integer;
begin
z:=0;
up:=nil;
while (a<>nil) or (b<>nil) or (z<>0) do
begin
if a<>nil then
begin
x:=a^.data;
a:=a^.next;
end
else
x:=0;
if b<>nil then
begin
y:=b^.data;
b:=b^.next;
end
else
y:=0;
insert(up,(x+y+z) mod 10);
z:=(x+y+z) div 10;
end;
end;
procedure dec(a,b:long; var up:long);
var x,y,z:integer;
begin
z:=0;
up:=nil;
while (a<>nil) or (b<>nil) or (z<>0) do
begin
if a<>nil then
begin
x:=a^.data;
a:=a^.next;
end
else
x:=0;
if b<>nil then
begin
y:=b^.data;
b:=b^.next;
end
else
y:=0;
insert(up,(x-y-z) mod 10);
z:=(x-y-z) div 10;
end;
end;
procedure double(a:long; b:byte; var up:long);
var x,y,z:integer;
begin
z:=0;
up:=nil;
while (a<>nil) do
begin
if a<>nil then
begin
x:=a^.data;
a:=a^.next;
end;
y:=b;
insert(up,(x*y+z) mod 10);
z:=(x*y+z) div 10;
end;
if z<>0 then insert(up,z);
end;
procedure delenie(a,b:long; var up:long);
var x,y,z:integer;
begin
z:=0;
up:=nil;
while (a<>nil) or (b<>nil) or (z<>0) do
begin
if a<>nil then
begin
x:=a^.data;
a:=a^.next;
end
else
x:=0;
if b<>nil then
begin
y:=b^.data;
b:=b^.next;
end
else
insert(up,(x div y+z) mod 10);
z:=(x div y+z) div 10;
end;
end;
begin
end.
Сперва пользователь вводит с клавиатуры 2 числа любой длины.
Они считываются как тип строка. С помощью процедуры init заносим в дек преобразованные строки в числа.
Листинг процедуры init:
procedure init(var b:long);
var c:string;
i:integer;
begin
readln(c);
for i:=1 to length(c) do
insert(b,ord(c[i])-ord('0'));//процедура добавления в дек
end;
Затем пользователю предоставлен набор операций над числами. В соответствии с выбором выполняется соответствующая операция.