МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ, МОЛОДІ ТА СПОРТУ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
З В І Т
до лабораторної роботи №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];
}
}
}
Результати роботи програми