Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx31 / Zapiska_full.docx
Скачиваний:
25
Добавлен:
01.08.2013
Размер:
542.31 Кб
Скачать

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;

Затем пользователю предоставлен набор операций над числами. В соответствии с выбором выполняется соответствующая операция.

Соседние файлы в папке docx31