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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ, МОЛОДІ ТА СПОРТУ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА З В І Т до лабораторної роботи №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:39

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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