Member 13561377 Ответов: 2

Как найти наименьшие элементы данной матрицы, а затем самый большой из них?


В заданной матрице А=[aij]m×n, введенной через клавиатуру, найдите наименьшие элементы в строке, а затем самый большой из них (самый большой из самых маленьких). Застряв на этом на некоторое время, я, кстати, нуб в программировании на Си. Прошу прощения, если этот вопрос покажется вам абсурдно глупым, но это мой предел. Буду признателен за любой ответ. Ваше здоровье!

Что я уже пробовал:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int a[10][10],maxr[10],maxs[10],i,j,n;
printf("enter rows for the matrix\n");
scanf("%d",&n);
printf("input the elements of the matrix\n");
for(i=0;i++)
{
printf("a[%d][%d]:",i,j);
scanf("%d",&a[j]);
}

2 Ответов

Рейтинг:
9

W∴ Balboos, GHB

Вещи, которые вы должны сделать:
1 - разделите задачи: ввод и анализ
2 - выделите матричное хранилище динамически (размер a[][]), аналогично для других массивов. а что, если это 20х3? ваш код (вероятно) потерпит крах.
3 - думайте просто: вы сравниваете два элемента в строке и сохраняете меньший, затем сравниваете следующий с текущим меньшим из первых двух и сохраняете меньший из них, и т. д.
4 - Примените модифицированное (3) , чтобы найти наибольшее из сохраненных наименьших значений.

Тестирование кода: создайте матрицу в коде [no scanf()] и используйте ее для тестирования. Это устраняет зависимость от метода ввода, и вы можете легко повторять попытки с утомительным вводом с клавиатуры.



CPallini

"Тестирование вашего кода: создайте матрицу в коде [no scanf()] и используйте ее для тестирования. Это устраняет зависимость от метода ввода, и вы можете легко повторять попытки с утомительным вводом с клавиатуры."
Ну, вы можете скормить программу, перенаправляющую текстовый файл на stdin.

W∴ Balboos, GHB

Ага - но это исключает функциональность ввода (я положил идею разделения на отдельные задачи/задачи). Тем не менее, всегда есть несколько способов решить одну и ту же проблему.

Рейтинг:
19

CPallini

Начните собирать входные данные:

#include <stdio.h>
#include <stdlib.h>
#define N 10

int main()
{
  int m[N][N];
  int n,r,c;

  // get matrix dimension
  printf("please enter the number of the rows\n");
  if ( scanf("%d",&n) != 1 || n < 1 || n > N )
  {
    exit(-1); // TODO: better error handling here
  }

  // collect matrix items
  for (r = 0; r < n; ++r)
    for (c = 0; c < n; ++c)
    {
      printf("please enter item[%d][%d]\n", r,c);
      if ( scanf("%d", &m[r][c] ) != 1)
      {
        exit(-1); // TODO: better error handling here
      }
    }

  // show the matrix items
  for (r = 0; r < n; ++r)
  {
    for (c = 0; c < n; ++c)
      printf("%5d", m[r][c]);
    printf("\n");
  }
}
Обратите внимание, что вам не нужны массивы для хранения кандидатов в ваш конечный результат. Просто сохраните текущий минимум текущей строки и текущий максимум (из минимумов).