Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- ///ФУНКЦИЯ ПЕЧАТЬ МАТРИЦЫ
- void printmatrix(int **a, int n, int m, int i , int j, int new){
- if(new==0){
- printf("\033[1;33m---{ ВВЕДЕННАЯ МАТРИЦА }---\033[0m\n");
- }else{
- printf("\033[1;33m---{ НОВАЯ МАТРИЦА }---\033[0m\n");
- }
- for(i=0; i<n; i++)
- {
- for(j=0; j<m; j++)
- printf("%d\t", a[i][j]);
- printf("\n");
- }
- }
- ///ФУНКЦИЯ ПОИСКА СЕРДЛОВЫХ ТОЧЕК
- void serdldot(int **a, int n, int m, int i , int j)
- {
- int min[n]; // Минимумы строк
- int max[m]; // Максимумы столбцов
- // Найти минимумы строк и максимумы столбцов
- min[0] = a[0][0];
- max[0] = a[0][0];
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < m; j++)
- {
- if (a[i][j] < min[i]) min[i] = a[i][j];
- if (a[i][j] > max[j]) max[j] = a[i][j];
- }
- }
- // Проверить какие элементы являются седловой точкой
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- if ((a[i][j] == min[i]) && (a[i][j] == max[j]))
- {
- printf("Найдена седловая точка: строка %d, столбец %d\n",i, j);
- }
- }
- }
- }
- ///ФУНКЦИЯ ПРОВЕРКИ ОТРИЦАТЕЛЬНЫХ ЭЛЕМЕНТОВ В СТРОКАХ
- void negativestroke(int **a, int n, int m, int i , int j){
- int summ = 0;
- printf("Все строки с отрицательными значениями:\n");
- for(i=0; i<n; i++)
- for(j=0; j<m; j++)
- {
- if(a[i][j] < 0){
- for(j=0; j<m; j++)
- {
- summ += a[i][j];
- }
- printf("# Строка %d, сумма элементов: %d \n", i+1, summ);
- }
- }
- if(summ==0){
- printf("\033[1;33m[Уведомление]\033[0m В данной матрице нет строк с отрицательными значениями\n");
- }
- }
- ///ФУНКЦИЯ ПОИСКА КРАТНЫХ ЭЛЕМЕНТОВ k
- void kratno(int **a, int n, int m, int i , int j){
- int k=0, counter=0, max=0;
- if(m!=n){
- printf("Матрица не является квадратной\n");
- }else
- {
- printf("Введите число k: ");
- scanf("%d",&k);
- for(i=0; i<n; i++)
- {
- for(j=0; j<m; j++)
- {
- if((a[i][j]%k) == 0){
- counter++;
- if(a[i][j]>max){
- max= a[i][j];
- }
- }
- }
- }
- }
- printf("Число элементов кратных k: %d\n",counter);
- printf("Наибольший из кратных элементов: %d\n",max);
- }
- ///ФУНКЦИЯ ЗАМЕНЫ МАКСИМАЛЬНОГО ЭЛЕМЕНТА
- void maxelementchange(int **a, int n, int m, int i , int j){
- int max=0, min=a[0][0], id_x=0, id_y=0, id_xx=0, id_yy=0, temp=0;
- for(i=0; i<n; i++)
- {
- for(j=0; j<m; j++)
- {
- if(a[i][j] > max){
- max = a[i][j];
- id_x = i;
- id_y = j;
- }
- if(a[i][j] < min){
- min = a[i][j];
- id_xx = i;
- id_yy = j;
- }
- }
- }
- temp = a[id_x][id_y];
- a[id_x][id_y]=a[id_xx][id_yy];
- a[id_xx][id_yy]= temp;
- printf("Максимальный элемент массива: %d\n",max);
- printf("Минимальный элемент массива: %d\n",min);
- printmatrix(a, n, m, i , j, 1);
- }
- /////ГЛАВНАЯ ЧАСТЬ ПРОГРАММЫ
- int main()
- {
- int i,j,k,n,m, todo;
- printf ("\033[1;33mПРОГРАММА ДЛЯ ОБРАБОТКИ МАТРИЦЫ\033[0m\n");
- printf ("(1) Введите количество строк: ");
- scanf("%d", &n);
- printf ("(2) Введите количество столбцов: ");
- scanf("%d", &m);
- int **a = (int **) malloc(n * sizeof(int *));
- for (i = 0; i < n; i++)
- {
- a[i] = (int *) malloc(m * sizeof(int));
- }
- for(i=0; i<n; i++)
- for(j=0; j<m; j++)
- {
- printf("Введите [%d][%d]= ", i+1,j+1);
- scanf("%d",&a[i][j]);
- }
- printmatrix(a, n, m, i , j, 0);
- printf("Доступные команды:\n");
- printf("[1] Найти сумму элементов в строках, где есть хотя бы 1 отриц. элемент\n");
- printf("[2] Найти номера всех сердловых точек матрицы\n");
- printf("[3] Найти число элементов кратных k и наибольших из них\n");
- printf("[4] Найти максимальные и минимальные элементы и поменять их местами\n");
- printf("Выберите действие: ");
- scanf("%d", &todo);
- int MinJ,MaxJ; //индексы столбца минимума и максимума
- int MinI,MaxI; //индексы строк минимума и максимума
- switch (todo) {
- case 1:
- negativestroke(a, n, m, i , j);
- break;
- case 2:
- serdldot(a, n, m, i , j);
- break;
- case 3:
- kratno(a, n, m, i , j);
- break;
- case 4:
- maxelementchange(a, n, m, i , j);
- break;
- default:
- printf("Введенной команды не существует\n");
- break;
- }
- ///ОЧИСТКА ПАМЯТИ МАССИВА
- for (i = 0; i < n; i++)
- {
- free(a[i]);
- }
- free(a);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement