Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. /* Автор: Игнатов Артур
  2.  
  3. 1. СТАТИЧЕСКАЯ ВЕРСИЯ(arr[][])
  4.  
  5. Задание: Дана целочисленная матрица размера M x N, элементы которой могут принимать значения от нуля до ста.
  6. Различные строки матрицы назовём похожимы, если совпадают множества чисел, встречающихся в этих строках.
  7. Найти количество строк, похожих на первую строку данной матрицы.
  8.  
  9. Алгоритм:
  10. Для выполнения условия "ограничености" элементов матрицы, при вводе элементов массива с помощью input-функции
  11. выводим ошибку, если ввёденное число < 0 или > 100.
  12. Сравниваем по очереди все строки с первой. Элемент первой строки сравнивается с каждым элементом n-ной строки до тех пор,
  13. пока он в ней не встретится один раз(в этом случае, счётчик схожих элементов строк увеличивается).
  14. Если количество одинаковых элементов в двух строках = количеству элементов строки - можем назвать эти две строки похожими.
  15. Решение задачи реализовано с помощью функций и массивов разных типов(4 варианта).
  16.  
  17. Тесты:
  18.  
  19. 1. Ввод: 1 2 3
  20. 4 5 2
  21. 3 1 2
  22. Вывод: The amount of rows that are similar to the first: 1
  23.  
  24. 2. Ввод: 102
  25. Вывод: Invalid input. Entered numbers should be between 0 and 100
  26.  
  27. 3. Ввод: 1 2 3 4 5
  28. 4 3 2 1 5
  29. 53 3 2 6 1
  30. 2 1 3 5 4
  31. Вывод: The amount of rows that are similar to the first: 2
  32. */
  33.  
  34. #include <stdio.h>
  35. #include <stdlib.h>
  36. #define N 100
  37. #define M 100
  38.  
  39. //Функция ввода элементов массива. Аргументы: адрес 1го элемента массива, кол-во строк и столбцов.
  40. void matrix_input(int* farr, int frow, int fcolumn);
  41.  
  42.  
  43. //Функция вывода элементов массива. Аргументы: адрес 1го элемента массива, кол-во строк и столбцов.
  44. void matrix_output(int* farr, int frow, int fcolumn);
  45.  
  46.  
  47. //Функция, которая определяет и выводит количество "похожих" с первой строк. Аргументы: адрес 1го элемента массива, кол-во строк и столбцов.
  48. void are_sim(int* farr, int frow, int fcolumn);
  49.  
  50.  
  51. #include "are_sim.h"
  52.  
  53. void matrix_input(int* farr, int frow, int fcolumn)
  54. {
  55. int i, j;
  56.  
  57. for (i = 0; i < frow; i++)
  58. {
  59. for (j = 0; j < fcolumn; j++)
  60. {
  61. printf("arr[%d][%d] = ", i, j);
  62. scanf_s("%d", farr + i * frow + j);
  63.  
  64. if ((*(farr + i * frow + j) < 0) || (*(farr + i * frow + j) > 100))
  65. {
  66. puts("Invalid input. Entered numbers should be between 0 and 100");
  67. exit(0);
  68. }
  69. }
  70.  
  71. puts("\n");
  72. }
  73. }
  74. void matrix_output(int* farr, int frow, int fcolumn)
  75. {
  76. int i, j;
  77.  
  78. for (i = 0; i < frow; i++)
  79. {
  80. for (j = 0; j < fcolumn; j++)
  81. {
  82. printf("%d\t", *(farr + i * frow + j));
  83. }
  84.  
  85. puts("\n");
  86. }
  87. }
  88. void are_sim(int* farr, int frow, int fcolumn)
  89. {
  90. int comparable_str, cnt_1st, comp_str_cnt;
  91. int similar_cnt = 0;
  92. int similar_strings = 0;
  93.  
  94. for (comparable_str = 1; comparable_str < frow; comparable_str++)
  95. {
  96. for (cnt_1st = 0; cnt_1st < fcolumn; cnt_1st++)
  97. {
  98. for (comp_str_cnt = 0; comp_str_cnt < fcolumn; comp_str_cnt++)
  99. {
  100. if (*(farr + cnt_1st) == *(farr + comparable_str * frow + comp_str_cnt))
  101. {
  102. similar_cnt++;
  103. break;
  104. }
  105. }
  106. }
  107.  
  108. if (similar_cnt == fcolumn)
  109. {
  110. similar_strings++;
  111. }
  112.  
  113. similar_cnt = 0;
  114. }
  115.  
  116. printf("The amount of rows that are similar to the first: %d\n", similar_strings);
  117. }
  118.  
  119. #include "are_sim.h"
  120.  
  121. int main()
  122. {
  123. int arr[N][M];
  124.  
  125. matrix_input(arr, 2, 3);
  126.  
  127. matrix_output(arr, 2, 3);
  128.  
  129. are_sim(arr, 2, 3);
  130.  
  131. system("pause");
  132.  
  133. return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement