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

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

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

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

Рік:
2009
Тип роботи:
Звіт
Предмет:
Алгоритмічні основи криптології
Варіант:
1

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

Міністерство освіти і науки України Національний університет ″Львівська політехніка″ Кафедра захисту інформації  g Звіт про виконання лабораторної роботи №1 з курсу “ АЛГОРИТМІЧНІ ОСНОВИ КРИПТОЛОГІЇ ” на тему: “ Алгоритми для виконання операцій з довгими числами ” Виконав: ст. гр. ІБ-44 Перевірив: Лагун А.Е. Львів 2009 Мета роботи: вивчити способи представлення та алгоритми для виконання операцій введення-виведення, порівняння, підсумовування, віднімання довгих чисел та навчитися розробляти програмне забезпечення для реалізації перерахованих алгоритмів на комп’ютері. Завдання : Домашня підготовка до роботи 1) Вивчити основні способи представлення довгих чисел та алгоритми для реалізації операцій введення, виведення, порівняння, а також арифметичних операцій додавання-віднімання довгих чисел. 2) Скласти блок-схеми алгоритмів та підпрограми для реалізації операцій введення та виведення довгих чисел. Варіанти представлення довгих чисел та способи заповнення невикористаних розрядів беруться за вказівкою викладача з таблиці 5. 3) Скласти блок-схеми алгоритмів, підпрограми та програму для реалізації адитивних операцій та операцій порівняння для роботи з довгими числами. Дані для роботи беруться з таблиці 1 за вказівкою викладача. Таблиця 1. Робота в лабораторії 1) Ввести в комп'ютер програми згідно з отриманим завданням. 2) Відлагодити програми. При необхідності скоригувати блок-схеми алгоритмів та програми у відповідності з виявленими логічними та синтаксичними помилками. 3) Остаточні версії блок-схем, програм та отримані результати занести у звіт з лабораторної роботи. Блок -схема головної програми  SHAPE \* MERGEFORMAT початок vvedit 1 chuslo: masivCh1 a = Input(masivCh1) vvedit 2 chuslo: masivCh2 b = Input(masivCh2) a+b= C=SumLong(a,b) Output(c) a>b: g=More(a,b) g=0 true false ні так кінець  Список ідентифікаторів констант, змінних і функцій, використаних у головній програмі і підпрограмах , та їх пояснення MaxDigit – константа що вказує на максимальну довжину масиву; Osn – константа що вказує на основу; Input() ввід довгого числа з клавіатури; Output() вивід довгого числа на екран; SumLong() додавання двох довгих чисел; More() порівняння двох довгих - чи перше число більше за друге; ch – елемент типу CHAR; masCh – массив елементів типу CHAR; a[] – массив, що представляє довге число; b[]– массив, що представляє довге число; c[]– массив, що представляє довге число; i, j, k – цілі змінні, що використовуються в циклі. Остаточна версія програми #include <stdio.h> #include <stdlib.h> #include <ctype.h> #define MaxDig 100 #define Osn 10000 Int *Input( char masivCh[]) { int *a,result,a22; char ch; a = (int*)malloc(MaxDig*sizeof(int)); int i = 0; int j = 0; for(i = 0; i < MaxDig; i++) { a[i] = 0; } for(j = 0; masivCh[j] != NULL; j++) { if ( isdigit(masivCh[j]) ) { for (i = a[0]; i >= 1; i--) { a[i + 1] = a[i + 1] + (a[i] * 10) / Osn; a[i] = a[i] * 10 % Osn; } ch = masivCh[j]; a22 = atoi(&ch); a[1] = a[i+1] + a22; if (a[a[0] + 1] > 0) a[0]++; } } return a; } void Output(int *b) { int N = 0; int NN = 1; int p; int b_Osn = b[0]; int i = 0; for(i = b[0]; i>=1 ; i--) { N = b[i]; if (N == 0) NN = 0; for (p = 1; N > 0; p = p*10) { N = N / 10; } while (Osn - p != 0) { if (b[0] == i) break; printf("%c",'0'); p = p*10; } if (NN == 1) { result = b[i]; printf("%d",result); } NN = 1; N = 0; } } Int *SumLong(int a[], int b[]) { int k; int *c; c= (int*)malloc(MaxDig*sizeof(int)); int i; for( i = 0; i < MaxDig; i++) { c[i] = 0; } if(a[0] > b[0]) { k = a[0]; } else { k = b[0]; } for(i = 1; i <= k; i++) { c[i + 1] = (c[i] + a[i] + b[i]) / Osn; c[i] = (c[i] + a[i] + b[i]) % Osn; } if (c[k + 1] == 1) { c[0] = k + 1; } else { c[0] = k; } return c; } int More(int a[], int b[]) { int e; if (a[0] > b[0]) { e = 1; } else { e = 0; } for (long i = a[0]; i >= 1; i--) { if (a[i] == b[i]) { continue; } else if (a[i] > b[i]) { e = 1; } else { e = 0; } } return e; } int main() { int *a = 0, *b =0, *c = 0, g; char masivCh1[100] , masivCh2[100]; puts("vvedit 1 chuslo:"); gets(masivCh1); a = Input(masivCh1); puts("vvedit 2 chuslo:"); gets(masivCh2); b = Input(masivCh2); c = SumLong(a,b); printf("\na+b="); Output(c); printf("\na>b:"); g=More(a,b); if(g) puts("false"); else puts("true"); system("PAUSE"); return 0; } Результат роботи програми 
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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