ДОСЛІДЖЕННЯ ШВИДКОДІЇ ВИКОНАННЯ МУЛЬТИПЛІКАТИВНИХ ОПЕРАЦІЙ З ДОВГИМИ ЧИСЛАМИ

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

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

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

Рік:
2024
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Захист інформації
Група:
ІБ – 44

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра «Захисту інформації» Звіт Про виконання лабораторної роботи #2 На тему: “ ДОСЛІДЖЕННЯ ШВИДКОДІЇ ВИКОНАННЯ МУЛЬТИПЛІКАТИВНИХ ОПЕРАЦІЙ З ДОВГИМИ ЧИСЛАМИ ” Львів-2009 Мета роботи. Вивчити способи представлення та алгоритми для виконання операцій введення-виведення, порівняння, підсумовування, віднімання довгих чисел та навчитися розробляти програмне забезпечення для реалізації перерахованих алгоритмів на комп’ютері. Завдання. Номер з/п Варіант представлення числа Заповнення невикористаних розрядів Операції з довгими числами  2 2 -1 Віднімання, менше  Мультиплікативна операція: швидке множення Виконання роботи. Текст програми #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LEN 50 #define OSN 10000 void InputNum(const char *str, long a[MAX_LEN]) { int j,i=strlen(str); long ln; char *tmp=(char*)malloc(i>>3<<2+8); strcpy(tmp, str); j=0; do { tmp[i]=0; i-=4; if(i<0) i=0; sscanf(&tmp[i], "%d", &ln), a[MAX_LEN - ++j]=ln; } while (i); while (j<MAX_LEN) a[MAX_LEN - ++j]=-1; free(tmp); } void OutputNum(long a[MAX_LEN]) { int i,fn=0; while (fn<MAX_LEN && a[fn]==-1) fn++; if(fn==MAX_LEN) return; for (i=fn;i<MAX_LEN; i++) printf((i==fn) ? "%d" : "%04d", a[i]); } int Less(long a[MAX_LEN], long b[MAX_LEN]) { int i=-1; while (++i<MAX_LEN) if (a[i]==b[i]) continue; else return a[i]<b[i] ? 1 : -1; return 0; } int SubNum(long ta[MAX_LEN], long tb[MAX_LEN], long c[MAX_LEN]) { long *a, *b, tmp; int j,i,to=MAX_LEN-1,minus=0; if (Less(ta,tb)==1) a=tb, b=ta, minus=1; else a=ta, b=tb; for (i=0;i<MAX_LEN;i++) c[i]=a[i]; for (i=MAX_LEN-1; ; i--) { if (b[i]==-1) break; tmp=c[i]-b[i]; if(tmp<0) { tmp+=OSN, j=i; while (c[j-1]-1<0 && j>0) c[j-1]+=-1+OSN, j--; c[j-1]--; } c[i]=tmp; } i=0; while (c[i]<=0 && i<MAX_LEN-1) c[i++]=-1; return minus; } int main() { char *szA=(char*)malloc(500); char *szB=(char*)malloc(500); int g; long a[MAX_LEN], b[MAX_LEN], c[MAX_LEN]; printf("a = "), scanf("%s", szA), printf("b = "), scanf("%s", szB); InputNum(szA,a), InputNum(szB,b); g=SubNum(a,b,c); printf("a - b = "); if(g) printf("-"); OutputNum(c); printf("\n"); free(szA), free(szB); return 0; } Результат виконання. 66555221236121 12312464143123 a-b=54242757092998 Блок-схеми підпрограм та функцій. А) Блок-схема алгоритму введення довгого числа.  Б) Алгоритм виведення довгого числа.  В) Блок-схеми алгоритмів порівняння довгих чисел.  В) Блок-схема алгоритму швидкого множення двох довгих чисел.  Список ідентифікаторів констант, змінних, процедур і функцій, використаних у блок-схемах алгоритмів і програм, та їх пояснення. МахLen Максимальна довжина матриці  Osn Основа ділення  InputNum Функція введення довгого числа  OutputNum Функція виведення довгого числа  Less Функція порівняння «менше»  SubNum Функція віднімання 2х довгих чисел  Main Основна функція   Tmp Змінна для тимчасового зберігання даних  I,J Рахівники  A[MaxLen] Матриця, заповнюєма довгими числами  Fn Значення даного елементу масиву  Minus Значення, яке повертає функція SubNum, - є результатом віднімання двох довгих чисел  szA Розмір пам’яті для А  szB Розмір пам’яті для В   Висновок: На цій л.р. я досліджував методи множення довгих чисел та їхню швидкодію. Також було виявлено, що метод «ШВИДКОГО МНОЖЕННЯ» є дійсно швидким.
Антиботан аватар за замовчуванням

29.12.2011 17:12-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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