Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра «Захисту інформації»
/
Звіт
Про виконання лабораторної роботи #1
На тему:
“ АЛГОРИТМИ ДЛЯ ВИКОНАННЯ ОПЕРАЦІЙ З ДОВГИМИ ЧИСЛАМИ ”
Мета роботи.
Вивчити способи представлення та алгоритми для виконання операцій введення-виведення, порівняння, підсумовування, віднімання довгих чисел та навчитися розробляти програмне забезпечення для реалізації перерахованих алгоритмів на комп’ютері.
Завдання.
Номер з/п
Варіант представлення числа
Заповнення невикористаних розрядів
Операції з довгими числами
2
2
-1
Віднімання, менше
Виконання роботи.
Текст програми
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 50
#define OSN 10000
void InputNum(const char *str, long a[MAX_LEN])
{
int j,i=strlen(str); long ln;
char *tmp=(char*)malloc(i>>3<<2+8);
strcpy(tmp, str); j=0;
do
{
tmp[i]=0; i-=4; if(i<0) i=0;
sscanf(&tmp[i], "%d", &ln), a[MAX_LEN - ++j]=ln;
} while (i);
while (j<MAX_LEN) a[MAX_LEN - ++j]=-1;
free(tmp);
}
void OutputNum(long a[MAX_LEN])
{
int i,fn=0;
while (fn<MAX_LEN && a[fn]==-1) fn++;
if(fn==MAX_LEN) return;
for (i=fn;i<MAX_LEN; i++)
printf((i==fn) ? "%d" : "%04d", a[i]);
}
int Less(long a[MAX_LEN], long b[MAX_LEN])
{
int i=-1;
while (++i<MAX_LEN)
if (a[i]==b[i]) continue;
else return a[i]<b[i] ? 1 : -1;
return 0;
}
int SubNum(long ta[MAX_LEN], long tb[MAX_LEN], long c[MAX_LEN])
{
long *a, *b, tmp; int j,i,to=MAX_LEN-1,minus=0;
if (Less(ta,tb)==1) a=tb, b=ta, minus=1; else a=ta, b=tb;
for (i=0;i<MAX_LEN;i++) c[i]=a[i];
for (i=MAX_LEN-1; ; i--)
{
if (b[i]==-1) break;
tmp=c[i]-b[i];
if(tmp<0)
{
tmp+=OSN, j=i;
while (c[j-1]-1<0 && j>0) c[j-1]+=-1+OSN, j--;
c[j-1]--;
}
c[i]=tmp;
}
i=0; while (c[i]<=0 && i<MAX_LEN-1) c[i++]=-1;
return minus;
}
int main()
{
char *szA=(char*)malloc(500);
char *szB=(char*)malloc(500);
int g;
long a[MAX_LEN], b[MAX_LEN], c[MAX_LEN];
printf("a = "), scanf("%s", szA), printf("b = "), scanf("%s", szB);
InputNum(szA,a), InputNum(szB,b);
g=SubNum(a,b,c);
printf("a - b = "); if(g) printf("-"); OutputNum(c);
printf("\n"); free(szA), free(szB);
return 0;
}
Результат виконання.
Блок-схеми підпрограм та функцій.
А) Блок-схема алгоритму введення довгого числа.
/
Б) Алгоритм виведення довгого числа.
/
В) Блок-схеми алгоритмів порівняння довгих чисел.
/
Г) Блок-схема алгоритму віднімання довгих чисел.
/
Список ідентифікаторів констант, змінних, процедур і функцій, використаних у блок-схемах алгоритмів і програм, та їх пояснення.
МахLen
Максимальна довжина матриці
Osn
Основа ділення
InputNum
Функція введення довгого числа
OutputNum
Функція виведення довгого числа
Less
Функція порівняння «менше»
SubNum
Функція віднімання 2х довгих чисел
Main
Основна функція (
Tmp
Змінна для тимчасового зберігання даних
I,J
Рахівники
A[MaxLen]
Матриця, заповнюєма довгими числами
Fn
Значення даного елементу масиву
Minus
Значення, яке повертає функція SubNum, - є результатом віднімання двох довгих чисел
szA
Розмір пам’яті для А
szB
Розмір пам’яті для В
Висновок:
На цій л.р. я написав програму на мові С, яка виконує віднімання двох довгих чисел. =\