Advertisement
Solingen

z1.2.cpp

Dec 21st, 2024
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Функция для нормализации числа по модулю 7
  5. int mod7(int x)
  6. {
  7.     // чтобы не было отрицательных результатов
  8.     return (x % 7 + 7) % 7;
  9. }
  10.  
  11. // Сложение
  12. int addF7(int a, int b)
  13. {
  14.     return (mod7(a) + mod7(b)) % 7;
  15. }
  16.  
  17. // Вычитание
  18. int subF7(int a, int b)
  19. {
  20.     return mod7(mod7(a) - mod7(b));
  21. }
  22.  
  23. // Умножение
  24. int mulF7(int a, int b)
  25. {
  26.     return (mod7(a) * mod7(b)) % 7;
  27. }
  28.  
  29. // Поиск обратного элемента
  30. int invF7(int b)
  31. {
  32.     b = mod7(b);
  33.     if (b == 0)
  34.     {
  35.         return -1; // сигнал ошибки, обратного нет
  36.     }
  37.     int x = 1;
  38.     while (x < 7)
  39.     {
  40.         if ((b * x) % 7 == 1) return x;
  41.         x++;
  42.     }
  43.     return -1; // если что-то пойдёт не так
  44. }
  45.  
  46. // Деление a / b
  47. int divF7(int a, int b)
  48. {
  49.     int inv = invF7(b);
  50.     if (inv == -1)
  51.     {
  52.         // Деление не определено
  53.         return -1;
  54.     }
  55.     return mulF7(a, inv);
  56. }
  57.  
  58. // Возведение a в степень b (a^b)
  59. int powF7(int base, int exp)
  60. {
  61.     int result = 1;
  62.     int i = 0;
  63.     while (i < exp)
  64.     {
  65.         result = mulF7(result, base);
  66.         i++;
  67.     }
  68.     return result;
  69. }
  70.  
  71. int main()
  72. {
  73.     int a, b;
  74.     char op;
  75.  
  76.     cout << "Введите выражение (a op b), op ∈ {+, -, *, /, ^}\n";
  77.     cin >> a >> op >> b;
  78.  
  79.     // Сразу приводим a и b к [0..6]
  80.     a = mod7(a);
  81.     b = mod7(b);
  82.  
  83.     int answer = 0;
  84.     bool valid = true;
  85.  
  86.     if (op == '+')
  87.     {
  88.         answer = addF7(a, b);
  89.     }
  90.     else if (op == '-')
  91.     {
  92.         answer = subF7(a, b);
  93.     }
  94.     else if (op == '*')
  95.     {
  96.         answer = mulF7(a, b);
  97.     }
  98.     else if (op == '/')
  99.     {
  100.         answer = divF7(a, b);
  101.         if (answer == -1)
  102.         {
  103.             cout << "Ошибка: деление на 0 или нет обратного в F7\n";
  104.             valid = false;
  105.         }
  106.     }
  107.     else if (op == '^')
  108.     {
  109.         answer = powF7(a, b);
  110.     }
  111.     else
  112.     {
  113.         cout << "Неизвестная операция\n";
  114.         valid = false;
  115.     }
  116.  
  117.     if (valid)
  118.     {
  119.         cout << "Результат по модулю 7: " << answer << endl;
  120.     }
  121.     return 0;
  122. }
  123.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement