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

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

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

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

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

Міністерство освіти і науки України Національний університет «Львівська Політехніка» Інститут комп’ютерних технологій автоматики та метрології Кафедра захисту інформації  Звіт Про виконання лабораторної роботи № 1 з дисципліни «Алгоритмічні основи криптології» (Варіант2) Мета роботи: – вивчити способи представлення та алгоритми для виконання операцій введення-виведення, порівняння, підсумовування, віднімання довгих чисел та навчитися розробляти програмне забезпечення для реалізації перерахованих алгоритмів на комп’ютері. 2. ЗАВДАННЯ 2.1. Домашня підготовка до роботи 1) Вивчити основні способи представлення довгих чисел та алгоритми для реалізації операцій введення, виведення, порівняння, а також арифметичних операцій додавання-віднімання довгих чисел. 2) Скласти блок-схеми алгоритмів та підпрограми для реалізації операцій введення та виведення довгих чисел. Варіанти представлення довгих чисел та способи заповнення невикористаних розрядів беруться за вказівкою викладача з таблиці 5. 3) Скласти блок-схеми алгоритмів, підпрограми та програму для реалізації адитивних операцій та операцій порівняння для роботи з довгими числами. 2.2. Робота в лабораторії 1) Ввести в комп'ютер програми згідно з отриманим завданням. 2) Відлагодити програми. При необхідності скоригувати блок-схеми алгоритмів та програми у відповідності з виявленими логічними та синтаксичними помилками. 3) Остаточні версії блок-схем, програм та отримані результати занести у звіт з лабораторної роботи. № з/п Варіант представлення числа Заповнення невикористаних розрядів Операції з довгими числами  2 2 -1 Віднімання, менше   Список ідентифікаторів, змінних використаних у програмі: go() – метод класу Syst, який викликає початок роботи програми. less() – метод класу Syst, який забезпечує порівняння довгих чисел на «менше» sub() – метод класу Syst, який забезпечує віднімання другого числа від першого з визначенням знаку результата. read() – метод класу Syst, який реалізує зчитування чисел з текстових файлів і запис їх у масиви для подальшої обробки. WriteLine() – метод класу Console, який забезпечує вивід з переходом на новий рядок. Write() – метод класу Console який забезпечує вивід без переходу на новий рядок. ReadLine() – метод класу Console, який забезпечує зчитування даних з клавіатури. ToInt32() – метод класу Convert, який забезпечує приведення даних до типу int. ToString() – метод класу Convert, який забезпечує приведення даних до рядкового типу. Main() – метод класу Program, з якого починається робота програми. Clear() – метод класу Console, який забезпечує очищення екрану. Exists() – метод класу File, який перевіряє чи існує файл за поданою у дужках адресою. OpenText() – метод класу File, який забезпечує відкриття файлу за поданою у дужках адресою. Блок-схеми: Блок-схема до методу less():   Блок-схема до методу Sub()  Остаточна версія програми: using System; using System.Collections.Generic; using System.Text; using System.IO; namespace AOK_1 { class Syst { const int maxDig = 1000; int[] a = new int[maxDig]; int[] b = new int[maxDig]; string longNum1; string longNum2; public bool e; public bool z; public int minus; public const int osn = 10000; bool read() { #region//початкове заповнення масивів а та b a[0] = 0; for (int i = 1; i < a.Length; i++) { a[i] = -1; } b[0] = 0; for (int i = 1; i < b.Length; i++) { b[i] = -1; } #endregion Console.WriteLine("введiть шлях до файлiв 1 та 2:"); longNum1 = Console.ReadLine(); longNum2 = Console.ReadLine(); #region//перевірка існування файлів if (!File.Exists(longNum1)) { Console.WriteLine("файл {0} не iснує!", longNum1); Console.WriteLine("щоб продовжити натисніть 1"); string s = Console.ReadLine(); if (s == "1") { read(); } else { return false; } return false; } if (!File.Exists(longNum2)) { Console.WriteLine("файл {0} не iснує!", longNum2); Console.WriteLine("щоб продовжити натисніть 1"); string s = Console.ReadLine(); if (s == "1") { read(); } else { return false; } return false; } #endregion Console.ReadLine(); Console.Clear(); #region //зчитування першого файла StreamReader sr1 = File.OpenText(longNum1); try { Console.WriteLine(); char[] c = new char[1]; //int k = 0; while (sr1.Peek() >= 0) { sr1.Read(c, 0, c.Length); Console.Write(c[0]); a[0] += 1; #region //додавання зчитаного символу до масиву int i = maxDig - 1; while (a[i] != -1 && i > 0) { if (a[i - 1] != -1) { i--; } else { if (a[i] * 10 + Convert.ToInt32(Convert.ToString(c[0])) >= osn) { int j = i; a[j - 1] = Convert.ToInt32(Convert.ToString(c[0])); for (j = i; j < maxDig; j++) { a[j - 1] += (a[j] * 10) % osn; a[j] = (a[j] * 10) / osn; } } else { a[i - 1] = (a[i] * 10 + Convert.ToInt32(Convert.ToString(c[0]))) % osn; a[i] = (a[i] * 10 + Convert.ToInt32(Convert.ToString(c[0]))) / osn; } break; } } if (a[maxDig - 1] == -1) { a[maxDig - 1] = Convert.ToInt32(Convert.ToString(c[0])); } #endregion } nenulA(); #region //виведення отриманого масиву на екран Console.WriteLine(); for (int i = maxDig - 1; i >= (maxDig - a[0] - 1); i--) { Console.WriteLine("a[{0}]={1}", i, a[i]); } Console.WriteLine(); Console.WriteLine("a[0]=" + a[0]); #endregion FileInfo f = new FileInfo(longNum1); Console.WriteLine("\nlength={0}, k={1}", f.Length, a[0]); } catch (Exception e) { Console.WriteLine("The process failed: {0}", e.ToString()); } sr1.Close(); #endregion Console.ReadLine(); Console.Clear(); #region //зчитування другого файла StreamReader sr2 = File.OpenText(longNum2); try { Console.WriteLine(); char[] c; int k; while (sr2.Peek() >= 0) { k = 0; c = new char[1]; sr2.Read(c, k, c.Length); Console.Write(c[0]); b[0] += 1; #region ///додавання зчитаного символа до масиву int i = maxDig - 1; while (b[i] != -1 && i > 0) { if (b[i - 1] != -1) { i--; } else { if (b[i] * 10 + Convert.ToInt32(Convert.ToString(c[0])) >= osn) { int j = i; b[j - 1] = Convert.ToInt32(Convert.ToString(c[0])); for (j = i; j < maxDig; j++) { b[j - 1] += (b[j] * 10) % osn; b[j] = (b[j] * 10) / osn; } } else { b[i - 1] = (b[i] * 10 + Convert.ToInt32(Convert.ToString(c[0]))) % osn; b[i] = (b[i] * 10 + Convert.ToInt32(Convert.ToString(c[0]))) / osn; } break; } } if (b[maxDig - 1] == -1) { b[maxDig - 1] = Convert.ToInt32(Convert.ToString(c[0])); } #endregion } nenulB(); #region //виведення отриманого масиву на екран Console.WriteLine(); for (int i = maxDig - 1; i >= (maxDig - b[0] - 1); i--) { Console.WriteLine("b[{0}]={1}", i, b[i]); } Console.WriteLine(); Console.WriteLine("b[0]=" + b[0]); #endregion FileInfo f = new FileInfo(longNum2); Console.WriteLine("\nlength={0}, k={1}", f.Length, b[0]); } catch (Exception e) { Console.WriteLine("The process failed: {0}", e.ToString()); } sr2.Close(); Console.WriteLine(); Console.ReadLine(); Console.Clear(); return true; #endregion } #region//ліквідація нульових елементів(зсув при заповненні) void nenulA() { while (a[maxDig-1]==0) { { for (int i = maxDig - 1; i > 0; i--) { a[i] = a[i - 1]; a[1] = -1; } } } } void nenulB() { while (b[maxDig - 1] == 0) { { for (int i = maxDig - 1; i > 0; i--) { b[i] = b[i - 1]; b[1] = -1; } } } } #endregion public void go() { read(); less(); sub(); } #region//порівняння менше - робоче:) bool less() { if (a[0] < b[0]) { Console.WriteLine("число а менше числа b: a<b"); e=true; } else { Console.WriteLine("число а не менше числа b: a NOT<b"); e = false ; } for (int i = a[0]; i > 0; i--) { if (a[i] == b[i]) { continue; } else { if (a[i] < b[i]) { Console.WriteLine("a<b"); e = true; } else { Console.WriteLine("a NOT<b"); e = false; } } } return e; } #endregion #region//віднімання - робоче void sub() { Console.Clear(); int[] c = new int[maxDig]; int[] c1 = new int[maxDig]; int[] c2 = new int[maxDig]; #region//визначення знаку результата less(); if (e == true) { c1 = b; c2 = a; minus = 1; } if (e == false) { c1 = a; c2 = b; minus = 0; } else { c = c1; Console.WriteLine("результат вiднiмання c=0 - числа рiвнi"); } #endregion for (int i = maxDig - 1; i > 0; i--) { if (c1[i] >= c2[i]) { if (c2[i] == -1) { c2[i] = 0; c1[i] = c1[i] - c2[i]; } else { c1[i] = c1[i] - c2[i]; } } else { if (c2[i] == -1) { c2[i] = 0; c1[i] = c1[i] + osn; c1[i - 1] = c1[i - 1] - 1; c1[i] = c1[i] - c2[i]; } else { c1[i] = c1[i] + osn; c1[i - 1] = c1[i - 1] - 1; c1[i] = c1[i] - c2[i]; } } } c = c1; Console.WriteLine(); #region//виведення отриманого масиву if (minus == 1) { Console.WriteLine("число вiд'ємне:"); } for (int i = maxDig - 1; i >= (maxDig - c[0] - 1); i--) { Console.WriteLine("c[{0}]={1}", i, c[i]); } Console.WriteLine("\n c[0]=" + c[0]); Console.WriteLine(); #endregion string rez; rez=Convert.ToString(c[999]); for (int i = maxDig - 2; i > 0; i--) { if (c[i] != -1) { rez = rez + Convert.ToString(c[i]); } else { break; } } Console.WriteLine("отримане число:"); if (minus == 1) Console.Write("-"); Console.WriteLine(rez); } #endregion } class Program { static void Main(string[] args) { DovgiChisla got = new DovgiChisla(); got.go(); } } } Результати роботи програми: Виведення на екран масивів, що представляє перше та друге довге число:  .  Виведення результату віднімання:   Висновок: Дана програма виконує зчитування довгих чисел з файлів, адресу яких введено з клавіатури; записує числа у масиви, виконує порівняння на менше і віднімання від першого числа другого.
Антиботан аватар за замовчуванням

16.04.2012 20:04-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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