Ошибки в задаче "Определить наименьший элемент каждой четной строки двумерного массива" - C (СИ)
Формулировка задачи:
Задание: определить наименьший элемент каждой четной строки матрицы A[M,N]
Проблемы следующие:
1. Из-за того, что цикл - несколько раз идет отображение этого минимума. Как вывести отдельно так, чтобы только 1 раз - не знаю.
2. mini в любом случае отображается как 0
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define n 4
#define m 4
void main()
{
int i,j,mas[m][n];
int mini,min;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
printf("[%d][%d]:\t",i,j);
scanf("%d",&mas[i][j]);
}
min=mas[0][0];
for(i=0;i<n;i+=2)
for(j=0;j<m;j++)
{
if(min>mas[i][j])
mini=mas[i][j];
printf("Min of %d is %d\n",i,mini);
}
getch();
}Решение задачи: «Ошибки в задаче "Определить наименьший элемент каждой четной строки двумерного массива"»
textual
Листинг программы
for (i = 0; i < n; i += 2) {
imin = 0;
for (j = 1; j < m; j++)
{
if (mas[i][imin] > mas[i][j])
mini = j;
}
printf("Min of %d is %d\n", i, mas[i][mini]);
}
Объяснение кода листинга программы
- В цикле
forперебираются все четные строки массиваmasс шагом 2 (предполагается, что первая строка массива - нечетная и не содержит четных элементов). - Для каждой строки инициализируется переменная
iminравная 0, которая будет использоваться для хранения минимального элемента текущей строки. - В цикле
forперебираются все элементы текущей строки, начиная со второго (индекс 1), при этом условие цикла не выполняется для первого элемента строки (индекс 0), так как он уже был учтен при инициализацииimin. - Если текущий элемент больше элемента с индексом
imin, тоiminприсваивается индекс текущего элемента. - После завершения внутренних циклов, выводится сообщение о минимальном элементе текущей строки.
- Значение
miniне используется в дальнейшем коде и может быть удалено без потери функциональности.