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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ, МОЛОДІ ТА СПОРТУ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА З В І Т до лабораторної роботи №1 з курсу: «Алгоритмічні основи криптології» на тему: «Алгоритми для виконання операцій з довгими числами» Варіант № 9 Львів – 2013р. Мета роботи - вивчити способи представлення та алгоритми для виконання операцій введення-виведення, порівняння, підсумовування, віднімання довгих чисел та навчитися розробляти програмне забезпечення для реалізації перерахованих алгоритмів на комп’ютері. Завдання Скласти блок-схеми алгоритмів, підпрограми та програму для реалізації адитивних операцій та операцій порівняння для роботи з довгими числами. Дані для лабораторні наведені в таблиці. Варіант Варіант представлення числа Заповнення невикористаних розрядів Операції х довгими числами  9 1 -1 Додавання, більше або рівно  Блок-схема алгоритму програми  Блок-схема алгоритму введення довгого числа.  Блок-схеми алгоритмів порівняння довгих чисел.  Алгоритм виведення довгого числа.  Блок-схема алгоритму додавання довгих чисел. Список ідентифікаторів констант, змінних, функцій, використаних у блок-схемі алгоритму і програмі, та їх пояснення a, b, c, d – одновимірні масиви типу integer. s – змінна типу string, що використовується для зчитування довгих чисел з файлів; Vvedennia_Chysla – метод який не має аргументів, забезпечує зчитування довгих чисел з файлів; Vyvedennia_Chysla(int[] d, string st)– метод який реалізовує виведення довгого числа d, а також він виводить на екран значення змінної st; Rivnist(int[] q1, int[] q2)- метод, який перевіряє рівність двох довгих чисел q1 s q2, даний метод повертає значення типу boolean(true або false); Bilshe(int[] q1, int[] q2) - метод, що перевіряє чи число q1 є більшим за q2, повертає значення типу bool; Dodavannia(int[] q1, int[] q2) - метод, що здійснює додавання двох довгих чисел q1 і q2. Текст програми using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Dobge_Chyslo t = new Dobge_Chyslo(); Console.ReadLine(); } } class Dobge_Chyslo { string s; int[] a, b, c, d; int i, j, n, g, osn, k, temp, f; public Dobge_Chyslo() { k = 4; osn = 10000; Zchytuvannia_a_b(); Dodavannia(a, b); Vyvedennia_Chysla(d, "a+b="); if (Bilshe(a, b) || Rivnist(a, b)) Console.WriteLine("a>=b true"); else Console.WriteLine("a>=b false"); } void Vvedennia_Chysla() { FileStream stream = new FileStream(s + ".txt", FileMode.Open); StreamReader reader = new StreamReader(stream); s = reader.ReadToEnd(); stream.Close(); n = s.Length / k; g = s.Length % k; if (g != 0) n++; c = new int[n + 1]; c[0] = n; s.ToCharArray(); for (i = s.Length - 1; i >= g; i -= k) { for (j = 0, temp = 0; j < k; j++) temp += (Convert.ToInt32(s[i - j]) - 48) * Convert.ToInt32(Math.Pow(10, j)); c[n] = temp; n--; } if (g != 0) { for (j = 0, temp = 0; j < g; j++) temp += (Convert.ToInt32(s[g - j - 1]) - 48) * Convert.ToInt32(Math.Pow(10, j)); c[n] = temp; } } void Zchytuvannia_a_b() { s = "a"; Vvedennia_Chysla(); a = new int[c[0] + 1]; for (i = 0; i < c[0] + 1; a[i] = c[i], i++) ; s = "b"; Vvedennia_Chysla(); b = new int[c[0] + 1]; for (i = 0; i < c[0] + 1; b[i] = c[i], i++) ; Vyvedennia_Chysla(a, "a="); Vyvedennia_Chysla(b, "b="); } void Vyvedennia_Chysla(int[] d, string st) { Console.Write("{0}{1}", st, d[1]); for (i = 2; i < d[0] + 1; i++) { n = d[i]; for (j = 4; n != 0; n /= 10, j--) ; for (g = 0; g < j; g++) Console.Write("0"); if (d[i] != 0) Console.Write(d[i]); } Console.WriteLine(); } bool Rivnist(int[] q1, int[] q2) { if (q1[0] != q2[0]) return false; for (i = 1; i < q1[0] + 1; i++) if (q1[i] != q2[i]) return false; return true; } bool Bilshe(int[] q1, int[] q2) { if (q1[0] < q2[0]) return false; else if (q1[0] > q2[0]) return true; for (i = 1; i < q1[0] + 1; i++) if (q1[i] < q2[i]) return false; else if (q1[i] > q2[i]) return true; return false; } void Dodavannia(int[] q1, int[] q2) { if (Bilshe(q1, q2)) n = q1[0] + 1; else n = q2[0] + 1; c = new int[n + 1]; c[0] = n; for (i = 1; i < n + 1; c[i] = 0, i++) ; for (i = c[0], j = q1[0], f = q2[0]; i > 0; i--, j--, f--) { g = 0; if (j > 0) g += q1[j]; if (f > 0) g += q2[f]; c[i] += g % osn; if (i > 1) c[i - 1] = g / osn; } g = 0; if (c[1] == 0) { n--; g += 1; } d = new int[n + 1]; d[0] = n; for (i = 1; i < n + 1; i++) d[i] = c[i + g]; } } } Результати роботи програми  
Антиботан аватар за замовчуванням

31.05.2014 14:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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