1

Тема: Цілочислова матриця. Подробніше в повідомлені.

Використовую VSCode мова С.

Дано цілочислову матрицю А розмірності nxm. В ній 2 найбільші елементи замінити нулями.
Мені потрібно зробити ввід вхідних данних які на фото щоб виводилося вихідні данні як на фото.
Я зробив код в якому лиш я вводжу цифри які входят в матрицю і код сам заміняє 2 найбільших елемента.
Силка на фото:
https://i.postimg.cc/rsw3dNFf/1111.png


#include <stdio.h>
int main()
{
  int a[2][3]; // массив из 3 строк и 2 столбцов
  int i, j, mx, i1, j1, i2, j2;
  // Ввід елементів массива
  for (i = 0; i<3; i++)  // цикл по строкам
  {
    for (j = 0; j<2; j++) // цикл по столбцам
    {
      printf("a[%d][%d] = ", i, j);
      scanf("%d", &a[i][j]);
    }
  }
  // Вивід елементів массива
  for (i = 0; i<3; i++)  // цикл по строкам
  {
    for (j = 0; j<2; j++) // цикл по столбцам
    {
      printf("%d ", a[i][j]);
    }

    printf("\n"); // перевод на новую строку
  }

// Пошук першого найбільшого 
  mx = -2147483648;  i1 = 0; j1 = 0;
  for (i = 0; i<3; i++)  // цикл по строкам
  {
    for (j = 0; j<2; j++) // цикл по столбцам
    {
      if (a[i][j] > mx) 
         { mx = (a[i][j]); i1 = i; j1 = j; } 
    }
  }  
// Пошук другого найбільшого 
  mx = -2147483648 ;  i2 = i1 ; j2=j1 ; 
  for (i = 0; i<3; i++)  // цикл по строкам
  {
    for (j = 0; j<2; j++) // цикл по столбцам
    {
      if ( (a[i][j] > mx) && (i != i1) && (j != j1) )
         { mx = (a[i][j]); i2 = i ; j2 = j ; } 
    }
  }  
//
  a[i1][j1] = 0;
  a[i2][j2] = 0;
// Вивід елементів масива
  for (i = 0; i<3; i++)  // цикл по строкам
  {
    for (j = 0; j<2; j++) // цикл по столбцам
    {
       
       printf("%d ", a[i][j]);
    }
    
    printf("\n"); // перевод на новую строку
  }
  getchar(); getchar();

  
  return 0;
}

2

Re: Цілочислова матриця. Подробніше в повідомлені.

1) вам це потрібно в графічному інтерфейсі зробити (С нібито ж не ООП)
2) коментарі іноземною =(
3) чому в перемінній mx записане таке гіганське відємне число?

3 Востаннє редагувалося tchort (28.09.2021 16:35:36)

Re: Цілочислова матриця. Подробніше в повідомлені.

вам це потрібно в графічному інтерфейсі зробити (С нібито ж не ООП)

А це ще навіщо? Ніяк ні. В умові такого немає. (ООП тут ні до чого.)

int i, j; // Загально прийнята практика вимагає проводити оголошення та ініціалізацію змінної лічильника у відповідному "блоці" опису структури циклу.

4

Re: Цілочислова матриця. Подробніше в повідомлені.

tchort написав:

вам це потрібно в графічному інтерфейсі зробити (С нібито ж не ООП)

А це ще навіщо? Ніяк ні. В умові такого немає.

ну ця особа сказала що їй потрібно як на фото ¯\_(ツ)_/¯

можна так :D?
      | 0 0 |
A = | 0 0 |
      | 0 0 |

ух, ще б 10 хвилинної затримки небуло, було б класно))

5

Re: Цілочислова матриця. Подробніше в повідомлені.

мені потрібно щоб я вводив n=3 m=2 і
      | 7 3 |
A = | -1 3 |
      | 2 5 |
і щоб  тільки 2 найбільших числа мінялися на 0.

6

Re: Цілочислова матриця. Подробніше в повідомлені.

Прихований текст
#include <stdio.h>
int main()
{
    int size_i;
    int size_j;

    printf("ширина: ");
    scanf("%d", &size_i);
    printf("висота: ");
    scanf("%d", &size_j);

    int max_elements = 2; //можна змінювати (кількість елементів які замінятся на 0)
    int a[size_i][size_j];

    /* ввід  даних */
    for (int j = 0; j<size_j; j++) {
        for (int i = 0; i<size_i; i++) {
            printf("a[%d][%d] = ", j, i);
            scanf("%d", &a[i][j]);
        }
    }

    /* вивід даних */
    for (int j = 0; j<size_j; j++) {
        for (int i = 0; i<size_i; i++) {
        printf("%d ", a[j][i]);
        }
    printf("\n");
    }

    for (int k = 0; k<max_elements; k++) {
        int max_element = a[0][0];

        /* пошук максимального елемента */
        for (int i = 0; i<size_i; i++) {
            for (int j = 0; j<size_j; j++) {
                if (max_element < a[i][j]) {
                    max_element = a[i][j];
                }
            }
        }
        
        /* заміна елемента на 0 */
        for (int i = 0; i<size_i; i++) {
            for (int j = 0; j<size_j; j++) {
                if (max_element == a[i][j]) {
                    a[i][j] = 0;
                }
            }
        }

        printf("%d", max_element);
    }

    printf("\n\n");

    /* вивід даних */
    for (int j = 0; j<size_j; j++) {
        printf("| ");
        for (int i = 0; i<size_i; i++) {
            printf("%d ", a[i][j]);
        }
        printf("|\n");
    }
}

згодится?

7

Re: Цілочислова матриця. Подробніше в повідомлені.

mamkin haker да дуже добре дякую за допомогу!

8

Re: Цілочислова матриця. Подробніше в повідомлені.

Алгоритм Хакера невдалий - якщо там будуть усі числа від'ємні, то він не працює.
mx виставляється в найменше можливе значення, це прийнятний варіант для пошуку максимуму.
А ви зробили лише одну дрібну помилку - в умові для другого числа:
     

if ( (a[i][j] > mx) && ((i != i1) || (j != j1)) )

Бачите?
В цілому ж два найбільших числа краще шукати за один цикл (в цьому випадку подвійний).

9 Востаннє редагувалося mamkin haker (28.09.2021 20:27:59)

Re: Цілочислова матриця. Подробніше в повідомлені.

koala дякую, непомітив що з відємними працює погано :3