АЛГОРИТМИ ДЛЯ ВИКОНАННЯ ОПЕРАЦІЙ З ДОВГИМИ ЧИСЛАМИ

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра «Захисту інформації» / Звіт Про виконання лабораторної роботи #1 На тему: “ АЛГОРИТМИ ДЛЯ ВИКОНАННЯ ОПЕРАЦІЙ З ДОВГИМИ ЧИСЛАМИ ” Мета роботи. Вивчити способи представлення та алгоритми для виконання операцій введення-виведення, порівняння, підсумовування, віднімання довгих чисел та навчитися розробляти програмне забезпечення для реалізації перерахованих алгоритмів на комп’ютері. Завдання. Номер з/п Варіант представлення числа Заповнення невикористаних розрядів Операції з довгими числами  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; } Результат виконання. Блок-схеми підпрограм та функцій. А) Блок-схема алгоритму введення довгого числа. / Б) Алгоритм виведення довгого числа. / В) Блок-схеми алгоритмів порівняння довгих чисел. / Г) Блок-схема алгоритму віднімання довгих чисел. / Список ідентифікаторів констант, змінних, процедур і функцій, використаних у блок-схемах алгоритмів і програм, та їх пояснення. Мах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

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