DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

Рік:
2018
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Алгоритмічні основи криптології
Група:
БІ 21

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра БІТ З В І Т до лабораторної роботи №1 з курсу: «Алгоритмічні основи криптології» на тему: «Алгоритми для виконання операцій з довгими числами» Варіант 9 Мета роботи Вивчити способи представлення та алгоритми для виконання операцій введення-виведення, порівняння, підсумовування, віднімання довгих чисел та навчитися розробляти програмне забезпечення для реалізації перерахованих алгоритмів на комп’ютері. Завдання Скласти блок-схеми алгоритмів та підпрограми для реалізації операцій введення та виведення довгих чисел. Скласти блок-схеми алгоритмів, підпрограми та програму для реалізації адитивних операцій та операцій порівняння для роботи з довгими числами. / Блок-схема алгоритму / / / Список ідентифікаторів констант, змінних, процедур і функцій, використаних в програмі, та їх пояснення convert_to_long_var – функція, що перетворює введені дані у довге число; Sub – функція, що додає два довгих числа; long_var1 та long_var2 – змінні, які містять у собі довгі числа; basis – основа позиційної системи числення; Simile – функція, що виконує порівняння; Текст програми #include <iostream> #include <conio.h> #include <string> using namespace std; int* convert_to_long_var(int*, string, int); int* Sub(int*, int*, int*, int); bool Simile(int*, int*, int); void main() { setlocale(LC_CTYPE, "Ukrainian"); string numb1, numb2; int *long_var1 = new int; int *long_var2 = new int; cout << "n1: "; getline(cin, numb1); cout << "n2: "; getline(cin, numb2); int basis; cout << "basis: "; cin >> basis; cout << endl; long_var1 = convert_to_long_var(long_var1, numb1, basis); cout << endl; long_var2 = convert_to_long_var(long_var2, numb2, basis); for (int i = 1; i < long_var1[0] + 1; i++) { cout << long_var1[i] << ' '; } cout << endl << endl; for (int i = 1; i < long_var2[0] + 1; i++) { cout << long_var2[i] << ' '; } cout << endl << endl; if (Simile(long_var1, long_var2, basis) == true) cout << "Числа рiвнi" << endl; else cout << "Числа не рiвнi" << endl; int *res_long_var = new int; res_long_var = Sub(long_var1, long_var2, res_long_var, basis); cout << endl << "Сума = "; for (int i = 1; i < res_long_var[0] + 1; i++) { cout << res_long_var[i] << ' '; } _getch(); } int* convert_to_long_var(int *long_var, string numb, int basis) { int osn = 0; while (basis % 10 != 1) { basis /= 10; osn++; } int size_numb = numb.size(); int quantity, zero; if (size_numb % osn != 0) { quantity = (size_numb / osn) + 1; zero = osn - (size_numb % osn); } else { quantity = size_numb / osn; zero = 0; } char *tmp = new char[osn]; long_var = new int[quantity + 1]; long_var[0] = quantity; for (int i = 1; i <= quantity; i++) { if (i == quantity) { int j = 0; for (; j < zero; j++) { tmp[j] = '0'; } for (; j < osn; j++) { tmp[j] = (char)numb[size_numb - osn*i + j]; } long_var[quantity - i + 1] = atoi(tmp); for (int t = 0; t < osn; t++) { tmp[t] = ' '; } } else { for (int k = 0; k < osn; k++) { tmp[k] = (char)numb[size_numb-osn*i + k]; } long_var[quantity - i + 1] = atoi(tmp); for (int t = 0; t < osn; t++) { tmp[t] = ' '; } } } return long_var; } int* Sub(int *long_var1, int *long_var2, int *res_long_var, int basis) { int size1 = long_var1[0] + 1; int size2 = long_var2[0] + 1; int size_max, size_min; int *tmp; int counter = 0; while (basis % 10 != 1) { basis /= 10; counter++; } char *_max = new char[counter]; for (int i = 0; i < counter; i++) _max[i] = '9'; int max = atoi(_max); //максимальне число в 1 розряді if (size1 >= size2) { res_long_var = long_var1; tmp = long_var2; size_max = size1; size_min = size2; } else { res_long_var = long_var2; tmp = long_var1; size_max = size2; size_min = size1; } int remainder = 0; for (int i = 1; i < size_min; i++) { res_long_var[size_max - i] += tmp[size_min - i] + remainder; remainder = 0; if (res_long_var[size_max - i] > max) { res_long_var[size_max - i] -= (max + 1) ; remainder = 1; } if (i == size_min-1 && res_long_var[size_max - i] == max && remainder == 1) { for (int i = 1; i < size_min; i++) { res_long_var[size_max - i + 1] = res_long_var[size_max - i]; } res_long_var[1] = 1; res_long_var[0]++; return res_long_var; } if (i == size_min - 1 && remainder == 1) { res_long_var[size_max - i - 1] += 1; } } return res_long_var; } bool Simile (int *long_var1, int *long_var2, int basis) { int size = long_var1[0] + 1; for (int i = 0; i < size; i++) if (long_var1[i] != long_var2[i]) return false; return true; } Результати виконання програми. / Висновок У ході лабораторної роботи я вивчила способи представлення та алгоритми для виконання операцій введення-виведення, порівняння, підсумовування, віднімання довгих чисел та навчилася розробляти програмне забезпечення для реалізації перерахованих алгоритмів на комп’ютері.
Антиботан аватар за замовчуванням

28.11.2018 23:12

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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