исновок
У ході виконання даної роботи був сформований калькулятор великий «кінцевої» арифметики lt; Z 8; +, * gt; для чотирьох дій (+, -, *, /) на основі малої «кінцевої» арифметики, із заданим правилом, і виконуються властивості коммутативности (+, *), асоціативності (+), дистрибутивності * щодо +, задані адитивна одиниця «0» і мультиплікативна одиниця «1», х * 0=0. Калькулятор підтримує роботу з негативними числами, захищений від некоректного введення даних.
Розташування чисел даної арифметики в порядку зростання: 0 lt; 1 lt; 3 lt; 6 lt; 7 lt; 5 lt; 4 lt; 2.
Код програми можна легко пристосувати для будь-якої кінцевої арифметики, для цього необхідно знати правило «+1». В принципі, при незначній зміні програми можна навіть зробити так, щоб користувач сам вводив необхідну йому кінцеву арифметику, причому не тільки для 8 цифр. Також користувачеві не доступна реалізована в програмі функція порівняння. При заповненні таблиць не враховувалася їх симетричність.
Список використаної літератури
1. Підручник Ф.А. Новикова «Дискретна математика для програмістів».
. Підручник з програмування, автор Павловська Т. А ..
3.Учебнік «Алгоритми: побудова та аналіз», автор Кормен, Лейзерсон, Ривест, Штайн. lt; # justify gt; Програми
Додаток 1. Приклад роботи програми
Додаток 2. Лістинг програми
# include lt; iostream gt;
# include lt; conio.h gt; std :: cout; std :: cin; std :: endl; int razr=8; Plus [razr] [razr];// створюємо двомірний масив (від 0 до 7) PlusP [razr] [razr]; Mult [razr] [razr]; MultP [razr] [razr]; Print (int matrix [] [razr], int matrix1 [] [ razr])
{(int i=0; i lt; razr; i ++)//висновок таблиць на екран
{(int j=0; j lt; razr; j ++) lt; lt; matrix [i] [j] lt; lt; raquo ;; lt; lt; raquo ;; (int j=0; j lt; razr; j ++) lt; lt; matrix1 [i] [j] lt; lt; raquo ;; lt; lt; endl;
} lt; lt; endl;
}
Find (int n)//використовується в порівнянні двох чисел і реалізації таблиці по додаванню і перенесенню по додаванню
{(int i=0; i lt; razr; i ++) (Plus [1] [i] == n)
{i;
} - 1;
} ObratPlus (int n)
{temp; (int i=0; i lt; 8; i ++) (Plus [i] [n] == 0) temp=i;
return temp;
} Sravn (int a, int b)//порівняння. якщо з меншого віднімає більше, то міняє місцями числа.
{(a == 0) return false; (b == 0) return true; rez=false; ostA=a, ostB=b, temp; n1, n2; (int i=0 ; ostA gt; 0 || ostB gt; 0; i ++)
{= 0;=0;=ostA% 10; (temp!=0)
{temp=Find (temp); ++;
} (temp!=0);=ostB% 10; (temp!=0)
{= Find (temp); ++;
} (temp!=0); (n1!=n2) (n2 gt; n1)=false;=true; /=10; /=10;
} rez;
} Summ (int a, int b, bool p)//додавання
{rez=0, bp=0; ostA=a, ostB=b, tempA, tempB; i=1; (i; ostA gt; 0 || ostB gt; 0; i *=10)
{=ostA%10;=(p)?ostB%10:ObratPlus(ostB%10);+=Plus[Plus[tempA][tempB]][bp]*i;(p==true)=PlusP[tempA][tempB]+PlusP[Plus[tempA][tempA]][bp];//вычитание
{(Sravn (ostB% 10, tempA) || (tempA == ostB% 10 amp; amp; bp!=0))
{= 2;
} bp=0;
} /=10; /=10;
} +=bp * i; rez;
} CheckSum (int a, int b, bool p)//перевірка a gt; b, якщо ні, міняє місцями, а результат у додаванні примножує на - 1
{need=false; (p == false)=Sravn (b, a); (p == false amp; amp; need == true) (- 1) * Summ ((need )? b: a, (need)? a: b, p); Summ ((need)? b: a, (need)? a: b, p);
} Umnog (int a, int b)//множення
{REZ=0; ostB=b; (int j=1; ostB gt; 0; j *=10)
{tempB=ostB% 10; tempREZ=0; ostA=a; i=1; dopU=0; (i; ostA gt; 0; i *=10)
{tempA=ostA% 10; tempDop=Summ (Mult [tempA] [tempB], dopU, 1); +=tempDop% 10 * i;=Summ (tempDop/10, MultP [tempA ] [tempB], 1); /=10;
} +=dopU * i;=Summ (REZ, tempREZ * j, 1); /=10;
} REZ;
} Delen (int a, int b, int * mod)//функція поділу
{(Sravn (b, a))
{