Алгоритми для виконання операцій з довгими числами

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2010
Тип роботи:
Лабораторна робота
Предмет:
Інші
Група:
ІБ – 44
Варіант:
2

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»  Алгоритми для виконання операцій з довгими числами Лабораторна робота № 2 Виконав: студент гр.ІБ-44 Перевірив: Костів Ю.М. Львів – 2010 Мета роботи: - вивчити алгоритми множення та ділення довгих чисел та навчитись розробляти програмне забезпечення для реалізації цих алгоритмів на комп’ютері ; дослідити швидкодію виконання операцій над довгими числами . Завдання: - поділити два довгих числа.  Список ідентифікаторів констант, змінних і функцій, використаних у головній програмі і підпрограмах та їх пояснення MaxDig – константа що вказує на максимальну довжину масиву; Osn – константа що вказує на основу; ch – елемент типу CHAR; b,c,a,sp,j,i - змінні, що використовуються у підпрограмах Процедури : Readlong- введення довгого числа Writelong – виведення довгого числа Sub - віднімання Mul – множення More - порівняння FindBin – функція ділення стовпчиком MakeDel – вираховування зсуву Long_Div_Long – ділення const maxdig=1000; osn=10000; Type Tlong=Array[0..maxdig] of integer; procedure readlong(var a:Tlong); {vvid} var ch:char; i:integer; begin fillchar(a,sizeof(a),0); read(ch); while not (ch In['0'..'9']) do read(ch); while ch In['0'..'9'] do begin for i:=a[0] downto 1 do begin a[i+1]:=a[i+1]+(longint(a[i])*10) div osn; a[i]:=(longint(a[i])*10) mod osn; end; a[1]:=a[1]+ord(ch)-ord('0'); if a[a[0]+1]>0 then inc(a[0]); read(ch); end; end; procedure writelong(const a:Tlong); {vuvid} var ls,s:String; i:integer; begin str(osn div 10,ls); write(a[a[0]]); for i:=a[0]-1 downto 1 do begin str(a[i],s); while length(s)<length(ls) do s:='0'+s; write(s); end; end; Procedure Sub (Var A : TLong; Const B : TLong; Const sp : Integer); {vidnimannya} Var i, j : Integer; Begin For i := 1 To B[0] Do Begin Dec(A[i+sp], B[i]); j:= i; while (A[j+sp] < 0) and (j <= A[0]) Do Begin Inc(A[j+sp], Osn) ; Dec(A[j+sp+1]); Inc(j); end; End; i := A[0]; While (i > 1) And (A[i] = 0) Do Dec(i); A[0] := i End; Procedure Mul(Const A : TLong; Const K : Longint; Var C : TLong);{mnogennya} Var i : Integer; Begin FillChar (c, SizeOf(c), 0); If K = 0 Then Inc(c[0]) Else Begin For i:= 1 To A[0] Do Begin C[i+1] := (LongInt(A[i]) * K + C[i]) Div Osn; C[i] := (LongInt(A[i])* K + C[i]) Mod Osn End; If C[A[0]+1] > 0 Then C[0]:= A[0] + 1 Else C[0]:= A[0] End; End; Function More(Const A, B : Tlong; Const sdvig : Integer) : Byte; {porvn9nn9} Var i : Integer; Begin If A[0] > B[0] + sdvig Then More := 0 Else If A[0] < B[0] + sdvig Then More := 1 Else Begin i := A[0]; While (i > sdvig) And (A[i] = B[i-sdvig]) Do Dec(i); If i = sdvig Then Begin More:=0; For i := 1 To sdvig Do If A[i] > 0 Then Exit; More := 2; end Else More := Byte(A[i] < B[i-sdvig]) End end; Function FindBin(Var Ost : Tlong; Const B : TLong; Const sp : Integer) : Longint; {func dilennya stovp4ikom} Var Down, Up : Word; C : TLong; Begin Down := 0;Up := osn; While Up - 1 > Down Do Begin Mul(B, (Up + Down) Div 2, C); Case More(Ost, C, sp) Of 0: Down := (Down + Up) Div 2; 1: Up := (Up + Down) Div 2; 2: Begin Up := (Up + Down) Div 2; Down := Up End; End; End; Mul(B, (Up + Down) Div 2, C); If More (Ost, C, 0) = 0 Then Sub(Ost, C, sp) Else begin Sub (C, Ost, sp); Ost := C end; FindBin := (Up + Down) Div 2; End; Procedure MakeDel(Const A, B : TLong; Var Res, Ost : TLong); {vuraxuvann9 zsuvu} Var sp : Integer; Begin Ost := A; sp := A[0] - B[0]; If More(A, B, sp) = 1 Then Dec(sp); Res[0] := sp + 1; While sp >= 0 Do Begin Res[sp + 1] := FindBin(Ost, B, sp); Dec(sp); End; End; Procedure Long_Div_Long(Const A, B : TLong; Var Res, Ost : TLong); {dilennya} Begin FillChar(Res, SizeOf(Res), 0); Res[0] := 1; FillChar(Ost, SizeOf(Ost), 0); Ost[0] := 1; Case More(A, B, 0) Of 0: MakeDel(A, B, Res, Ost); 1: Ost:=A; 2: Res[1] := 1; End; End; var a,b,c,res,ost:Tlong; Time : LongInt; begin assign(input,'Input.txt'); reset(input); readlong(a); readlong(b); close(input); Start(Time); Long_div_long(a,b,res,ost); Stop(Time); assign(output,'Output.txt'); rewrite(Output); write('rezultat='); writelong(res); writeln(''); write('ostacha='); writelong(ost); writeln(''); close(output); end. Програма для виведення результату VAR f :Text; var a,b:string; BEGIN Assign(f, 'output.txt'); reset(f); readln(f,a); readln(f,b); writeln(a); writeln(b); readln; Close(f); END. Блок-схема ділення довгих чисел  Блок- схема процедури введення  SHAPE \* MERGEFORMAT  ai Вивести ai кінець i= MaxDig... MaxDig –a0; i=i+1 i=i+1 початок  Результат роботи програми rezultat=7 ostacha=674045226790376543 Висновок: на даній лабораторній роботі я вивчив алгоритм множення та ділення довгих чисел та навчився розробляти програмне забезпечення для реалізації цих алгоритмів на комп’ютері ; дослідив швидкодію виконання операцій над довгими числами .
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!