Advertisement
Qellex

lab 8 - v2

Jun 24th, 2022 (edited)
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.43 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <time.h>
  5. #include <locale.h>
  6. #include <windows.h>
  7. #include <malloc.h>
  8.  
  9. typedef struct
  10. {
  11.     float Re;
  12.     float Im;
  13. } complex;
  14.  
  15. //Операция вычисления модуля комплексного числа
  16. float modul(complex x)
  17. {
  18.     return sqrt(x.Re * x.Re + x.Im * x.Im);
  19. }
  20. //Операция вычисления аргумента комплексного числа
  21. float arg(complex x)
  22. {
  23.     return x.Im / x.Re;
  24. }
  25. //Сумма комплексного числа
  26. complex summ(complex x, complex y)
  27. {
  28.     complex s;
  29.     s.Re = x.Re + y.Re;
  30.     s.Im = x.Im + y.Im;
  31.     return s;
  32. }
  33. //Разность комплексного числа
  34. complex razn(complex x, complex y)
  35. {
  36.     complex s;
  37.     s.Re = x.Re - y.Re;
  38.     s.Im = x.Im - y.Im;
  39.     return s;
  40. }
  41. // произведение
  42. complex proiz(complex x, complex y)
  43. {
  44.     complex s;
  45.     s.Re = x.Re * y.Re - x.Im * y.Im;
  46.     s.Im = x.Re * y.Im + x.Im * y.Re;
  47.     return s;
  48. }
  49. //Частного двух комплексных чисел
  50. complex chast(complex x, complex y)
  51. {
  52.     complex s;
  53.     s.Re = (x.Re * y.Re + x.Im * y.Im) / (y.Re * y.Re + y.Im * y.Im);
  54.     s.Im = (x.Im * y.Re - y.Im * x.Re) / (y.Re * y.Re + y.Im * y.Im);
  55.     return s;
  56. }
  57.  
  58. //Вывод
  59. void printC(complex q)
  60. {
  61.     printf("%.2f+%.2fi\n", q.Re, q.Im);
  62. }
  63.  
  64. // тройкa чисел, произведение которых имеет наибольший модуль
  65. void max_mod(complex* q, int count) {
  66.     if (count < 3) {
  67.         printf("Недостаточно данных для нахождения наибольшего модуля для трех чисел.\n");
  68.         return;
  69.     }
  70.     float max = 0;
  71.     int namber1 = -1, namber2 = -1, namber3 = -1;
  72.     for (int i = 0; i < count - 2; i++) {
  73.         for (int j = i + 1; j < count - 1; j++) {
  74.             for (int k = j + 1; k < count; k++) {
  75.                 if (max < modul(proiz(q[i], proiz(q[j], q[k])))) {
  76.                     max = modul(proiz(q[i], proiz(q[j], q[k])));
  77.                     namber1 = i; namber2 = j; namber3 = k;
  78.                 }
  79.             }
  80.         }
  81.     }
  82.         printf("Список комплексных чисел произведение, которых имеют наибольший модуль:\n");
  83.         printC(q[namber1]); printC(q[namber2]); printC(q[namber3]);
  84. }
  85.  
  86. // модуль и аргумент суммы заданных N комплексных чисел
  87. void sum_mod_arg(complex* q, int count) {
  88.     complex x; x.Im = q[0].Im; x.Re = q[0].Re;
  89.     for (int i = 1; i < count; i++)
  90.         x = summ(x, q[i]);
  91.     printf("Для суммы заданных комплексных числе, модуль равен %.2f, аргумент равен %.2f\n", modul(x), arg(x));
  92. }
  93.  
  94. void main() {
  95.     SetConsoleCP(1251); SetConsoleOutputCP(1251);
  96.     int N;
  97.     printf("Введите кол-во комплексных чисел: ");
  98.     scanf_s("%i", &N);
  99.     //распределение памяти под массив
  100.     complex* q = (complex*)malloc(N * sizeof(complex));
  101.     // ввод
  102.     for (int i = 0; i < N; i++) {
  103.         printf("Введите Re и Im комплексного числа под номером %d:\n", i);
  104.         scanf_s("%f%f", &q[i].Re, &q[i].Im);
  105.     }
  106.  
  107.     max_mod(q, N);
  108.     sum_mod_arg(q, N);
  109.  
  110.     system("pause");
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement