Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Автор: Игнатов Артур
- 1. СТАТИЧЕСКАЯ ВЕРСИЯ(arr[][])
- Задание: Дана целочисленная матрица размера M x N, элементы которой могут принимать значения от нуля до ста.
- Различные строки матрицы назовём похожимы, если совпадают множества чисел, встречающихся в этих строках.
- Найти количество строк, похожих на первую строку данной матрицы.
- Алгоритм:
- Для выполнения условия "ограничености" элементов матрицы, при вводе элементов массива с помощью input-функции
- выводим ошибку, если ввёденное число < 0 или > 100.
- Сравниваем по очереди все строки с первой. Элемент первой строки сравнивается с каждым элементом n-ной строки до тех пор,
- пока он в ней не встретится один раз(в этом случае, счётчик схожих элементов строк увеличивается).
- Если количество одинаковых элементов в двух строках = количеству элементов строки - можем назвать эти две строки похожими.
- Решение задачи реализовано с помощью функций и массивов разных типов(4 варианта).
- Тесты:
- 1. Ввод: 1 2 3
- 4 5 2
- 3 1 2
- Вывод: The amount of rows that are similar to the first: 1
- 2. Ввод: 102
- Вывод: Invalid input. Entered numbers should be between 0 and 100
- 3. Ввод: 1 2 3 4 5
- 4 3 2 1 5
- 53 3 2 6 1
- 2 1 3 5 4
- Вывод: The amount of rows that are similar to the first: 2
- */
- #include <stdio.h>
- #include <stdlib.h>
- #define N 100
- #define M 100
- //Функция ввода элементов массива. Аргументы: адрес 1го элемента массива, кол-во строк и столбцов.
- void matrix_input(int* farr, int frow, int fcolumn);
- //Функция вывода элементов массива. Аргументы: адрес 1го элемента массива, кол-во строк и столбцов.
- void matrix_output(int* farr, int frow, int fcolumn);
- //Функция, которая определяет и выводит количество "похожих" с первой строк. Аргументы: адрес 1го элемента массива, кол-во строк и столбцов.
- void are_sim(int* farr, int frow, int fcolumn);
- #include "are_sim.h"
- void matrix_input(int* farr, int frow, int fcolumn)
- {
- int i, j;
- for (i = 0; i < frow; i++)
- {
- for (j = 0; j < fcolumn; j++)
- {
- printf("arr[%d][%d] = ", i, j);
- scanf_s("%d", farr + i * frow + j);
- if ((*(farr + i * frow + j) < 0) || (*(farr + i * frow + j) > 100))
- {
- puts("Invalid input. Entered numbers should be between 0 and 100");
- exit(0);
- }
- }
- puts("\n");
- }
- }
- void matrix_output(int* farr, int frow, int fcolumn)
- {
- int i, j;
- for (i = 0; i < frow; i++)
- {
- for (j = 0; j < fcolumn; j++)
- {
- printf("%d\t", *(farr + i * frow + j));
- }
- puts("\n");
- }
- }
- void are_sim(int* farr, int frow, int fcolumn)
- {
- int comparable_str, cnt_1st, comp_str_cnt;
- int similar_cnt = 0;
- int similar_strings = 0;
- for (comparable_str = 1; comparable_str < frow; comparable_str++)
- {
- for (cnt_1st = 0; cnt_1st < fcolumn; cnt_1st++)
- {
- for (comp_str_cnt = 0; comp_str_cnt < fcolumn; comp_str_cnt++)
- {
- if (*(farr + cnt_1st) == *(farr + comparable_str * frow + comp_str_cnt))
- {
- similar_cnt++;
- break;
- }
- }
- }
- if (similar_cnt == fcolumn)
- {
- similar_strings++;
- }
- similar_cnt = 0;
- }
- printf("The amount of rows that are similar to the first: %d\n", similar_strings);
- }
- #include "are_sim.h"
- int main()
- {
- int arr[N][M];
- matrix_input(arr, 2, 3);
- matrix_output(arr, 2, 3);
- are_sim(arr, 2, 3);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement