Поиск минимального элемента
В листинге 4.4 приведена программа поиска минимального элемента в двумерном массиве (N на M элементов), заполненном целыми числами. Под поиском подразумевается нахождение номера строки и столбца необходимого элемента в двумерном массиве. При этом, если минимальных элементов несколько, то достаточно найти индексы только одного из них. Блок-схема алгоритма приведена на рис. 4.1.
Листинг 4.4. Поиск индексов минимального элемента в двумерном массиве
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
#define N 10
#define NM 11
#define M 20
#define MM 21
void main()
{
int A[NM][NM];
int I,J,Min,Imin,Jmin;
for (I=1;I<=N; I++)
for (J=1;J<=M; J++)
A[I][J]=rand()%100;
Min= A[1][1];
Imin=1;
Jmin=1;
for (I=1;I<=N; I++)
for (J=1;J<=M; J++)
{
if( A[I][J]< Min)
{
Min=A[I][J];
Imin=I; Jmin=J;
}
}
cout<<" I= "<<Imin;
cout<<" J= "<<Jmin;
_getch();
}

Рис. 4.1. Блок-схема к программе листинга 4.4
Изменим предыдущую программу так, чтобы в результате на экран выводились индексы всех минимальных элементов. В этом случае (листинг 4.5) нам потребуется дополнительный цикл для просмотра всех элементов.
Листинг 4.5. Поиск индексов всех минимальных элементов в двумерном массиве
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
#define N 10
#define NM 11
#define M 20
#define MM 21
void main()
{
int A[NM][NM];
int I,J,Min;
for (I=1;I<=N; I++)
for (J=1;J<=M; J++)
A[I][J]=rand()%100;
Min= A[1][1];
for (I=1;I<=N; I++)
for (J=1;J<=M; J++)
{
if( A[I][J]< Min)
Min=A[I][J];
}
for (I=1;I<=N; I++)
for (J=1;J<=M; J++)
if( A[I][J] == Min)
{
cout<<" I="<<I;
cout<<" J="<<J;
}
_getch();
}
Поиск номера строки с минимальной суммой
Рассмотрим задачу поиска номера строки массива, для которой сумма элементов минимальна. Алгоритм представлен на рис. 4.2, а текст программы в листинге 4.6.
Листинг 4.6. Поиск номера строки с минимальной суммой элементов
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
#define N 10
#define NM 11
#define M 20
#define MM 21
void main()
{
int A[NM][NM];
int I,J,Imin,Sum,SumMin;
for (I=1;I<=N; I++)
for (J=1;J<=M; J++)
A[I][J]=rand()%100;
for (I=1; I<=N;I++)
{
Sum=0;
for( J=1; J<= M;J++)
Sum=Sum+A[I][J];
if (I == 1)
{
Imin=1;
SumMin=Sum;
}
else
{
if( SumMin>Sum )
{
SumMin=Sum;
Imin=I;
}
}
}
cout<<"Номер строки с минимальной суммой элементов "<<Imin;
_getch();
}

Рис. 4.2. Блок-схема к программе листинга 4.6
Подсчет числа учащихся
В двумерном массиве хранится информация о количестве учеников в каждом классе всех параллелей школы (параллели нумеруются от 1 до 11). Так, в каждой строке двумерного массива сначала располагается число классов в определенной параллели, а затем последующие элементы содержат число учащихся в каждом классе данной параллели. Пример одной из строк двумерного массива выглядит так:
4 25 23 27 28,
что означает четыре класса в параллели и, соответственно, 25 учеников в первом из классов параллели, 23 ученика во втором классе параллели и т. д.
Необходимо написать программу, которая позволит автоматически определить общее число учащихся в классах с 5-й по 10-ю параллель включительно. Для определенности будем считать, что в каждой параллели не более пяти классов. В листинге 4.7 приведена программа, решающая данную задачу. Для заполнения информации о числе классов в параллелях и числа учащихся мы использовали датчик случайных чисел. Число учащихся в классе варьируется от 20 до 30.
Листинг 4.7. Подсчет числа учащихся в параллелях
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
#define N 11
#define NM 12
#define M 7
#define MM 8
void main()
{
int A[NM][NM];
int I,J,Schet;
for (I=1;I<=N; I++)
A[I][1]=rand()%6;
for (I=1; I<=N;I++)
for (J=1;J<=A[I][1];J++)
A[I][J+1]=20+rand()%10;
Schet=0;
for (I=5;I<= 10;I++)
for (J=1; J<= A[I][1];J++)
Schet=Schet+ A[I][J+1] ;
cout<<" Schet ="<<Schet;
_getch();
}
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
