HuMMaI 0 / 0 / 1 Регистрация: 09.11.2015 Сообщений: 30 |
||||
1 |
||||
Найти наименьший элемент двумерного массива13.11.2015, 23:44. Показов 18249. Ответов 2 Метки нет (Все метки)
Найти наименьший элемент двумерного массива. Размер MXN. Элементы задаются на интервале [-30, 45].
0 |
ZX Spectrum-128 6805 / 4564 / 4817 Регистрация: 05.06.2014 Сообщений: 22,438 |
||||
13.11.2015, 23:47 |
2 |
|||
1 |
Puporev Почетный модератор 64287 / 47586 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
||||
14.11.2015, 08:24 |
3 |
|||
0 |
У вас проверка выделения памяти не на месте — вы проверяете if (!a)
уже после того, как с этим a
работали. Только это все равно неважно, потому что раз вы используете new
, а не new(std::nothrow)
, то если не хватит памяти, он не вернет нулевой указатель, а сгенерирует исключение. Так что эта проверка лишняя.
Номер элемента в друмерном массиве определяется двумя индексами, а не одним, так что я бы делал так:
int i_min = 0, j_min = 0, no = 0;
int low = a[0][0];
int no_min = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++, no++) {
if (low > a[i][j]) {
low = a[i_min = i][j_min = j];
no_min = no;
}
}
}
cout << "Min[" << i_min << "][" << j_min
<< "] #" << no_min << " = " low << endl;
Некий номер no
добавил по совету из ответа avp, но, по-моему, говорить об одном номере нельзя — все равно ведь у вас не настоящий двухмерный массив, и в памяти числа располагаются не подряд.
9.5K
02 декабря 2006 года
ROLpogo
80 / / 22.08.2006
Код:
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
float GetMinElement(float **t, int a, int b)
{
float MinValue = t[0][0];
for (int i = 0; i < a; i++)
for (int j = 0; j < b; j++)
if ( MinValue > t[j] )
MinValue = t[j];
return MinValue;
}
void main()
{
float **t;
int i, j, a, b;
printf(«a = «);
scanf(«%i», &a);
printf(«b = «);
scanf(«%i», &b);
printf(«n»);
t = (float**)malloc( a * sizeof(float*) );
for (i = 0; i < a; i++)
t = (float*)malloc( b * sizeof(float) );
for (i = 0; i < a; i++)
for (j = 0; j < b; j++)
{
printf(«x[%i][%i] = «, i, j);
scanf(«%f», &t[j]);
}
printf(«nDim before calculate:n»);
for (i = 0; i < a; i++)
for (j = 0; j < b; j++)
printf(«x[%i][%i] = %fn», i, j, t[j]);
float MinElem = GetMinElement(t, a, b);
if ( MinElem != 0. )
for (i = 0; i < a; i++)
for (j = 0; j < b; j++)
t[j] /= MinElem;
printf(«nMin Element is: %fn», MinElem);
printf(«nDim after calculate:n»);
for (i = 0; i < a; i++)
for (j = 0; j < b; j++)
printf(«x[%i][%i] = %fn», i, j, t[j]);
for (i = 0; i < a; i++)
free( t );
free(t);
getch();
}
1.
В соревнованиях по плаванию принимали
участие 5 спортсменов. Соревнования
состояли из 3 заплывов. Результаты
заплывов записали в таблицу размерностью
3х5. Получить одномерный массив размером
3, элементами которого будут лучшие
результаты в каждом из заплывов.
USES
Crt;
VAR
RZ:ARRAY[0..3,0..5]
OF INTEGER; LR:ARRAY[0..3] OF INTEGER;
I,J:BYTE;
BEGIN
ClrScr;
WriteLn;
{
Заполнение
таблицы
}
FOR
I:=1 TO 3 DO Begin
WriteLn(‘
Введите результаты ‘,I,’ заплыва’);
FOR
J:=1 TO 5 DO Begin
Write(J,’
участник
— ‘); ReadLn(RZ[I,J]);
End;
End;
WriteLn;
{
Определение лучшего результата в каждом
из заплывов }
FOR
I:=1 TO 3 DO Begin
LR[I]:=RZ[I,1];
FOR
J:=2 TO 5 DO
IF
RZ[I,J]<LR[I] THEN LR[I]:=RZ[I,J];
WriteLn(‘
Лучший результат ‘,I,’ заплыва = ‘,LR[I]);
End;
END.
2.
Дан двумерный массив размерностью 5х6,
заполненный целыми числами. Сформировать
одномерный массив, каждый элемент
которого равен наибольшему по модулю
элементу соответствующего столбца.
USES
Crt;
VAR
M:ARRAY[0..5,0..6]
OF INTEGER; MAX:ARRAY[0..6] OF INTEGER;
I,J:BYTE;
BEGIN
ClrScr;
Randomize;
WriteLn(‘
Значения элементов двумерного массива’);
FOR
I:=1 TO 5 DO Begin
FOR
J:=1 TO 6 DO Begin
M[I,J]:=Random(20)-8;
Write(M[I,J]:3);
End;
WriteLn;
End;
WriteLn;
{
Формирование одномерного массива}
WriteLn(‘
Значения элементов одномерного массива’);
FOR
J:=1 TO 6 DO Begin
MAX[J]:=ABS(M[1,J]);
FOR
I:=2 TO 5 DO
IF
ABS(M[I,J]) > MAX[J] THEN MAX[J]:=ABS(M[I,J]);
Write(MAX[J]:3);
End;
END.
3.
Дан двумерный массив размерностью NхM,
заполненный случайным образом.
Определить, есть ли в данном массиве
строка, в которой имеется два элемента
массива, имеющие наибольшее значение.
USES
Crt;
CONST
N=6; M=8;
VAR
A:ARRAY[0..N,0..M]
OF INTEGER;
I,J,K,FL:BYTE;
MAX:INTEGER;
BEGIN
ClrScr;
Randomize;
{
Заполнение двумерного массива случайным
образом и вывод в виде прямоугольной
матрицы }
WriteLn(‘
Значения элементов двумерного массива’);
FOR
I:=1 TO N DO Begin
FOR
J:=1 TO M DO Begin
A[I,J]:=Random(20);
Write(A[I,J]:3);
End;
WriteLn;
End;
WriteLn;
{
Нахождение наибольшего значения }
MAX:=A[1,1];
FOR
I:=1 TO N DO
FOR
J:=1 TO M DO
IF
A[I,J]>MAX THEN MAX:=A[I,J];
WriteLn(‘
Максимальное значение = ‘,MAX);
{
Нахождение строки, в которой два элемента
имеют наибольшее значение }
FL:=0;
FOR
I:=1 TO N DO Begin
K:=0;
FOR
J:=1 TO M DO
IF A[I,J]=MAX THEN Inc(K);
IF
K=2 THEN Begin WriteLn(‘В ‘,I,’ строке два элемента
имеют наибольшее значение’);
FL:=1;
End;
End;
IF
FL=0 THEN WriteLn(‘ Нет строк, в которых два
элемента имеют наибольшее значение’);
END.
Примеры
для самостоятельного решения:
Дан
двумерный массив размерностью 5×7,
заполненный случайным образом. Найти
наименьший и наибольший элементы
двумерного массива, поменять их местами.
Дан
двумерный массив размерностью NxM,
заполненный случайным образом. Получить
одномерный массив, элементами которого
являются сумма наименьшего и наибольшего
элементов соответственной строки
двумерного массива..
Формулировка задачи:
Найти наименьший элемент двумерного массива. Размер MXN. Элементы задаются на интервале [-30, 45].
Код к задаче: «Найти наименьший элемент двумерного массива»
textual
a[i, j] :=-30+random[76];
Полезно ли:
10 голосов , оценка 4.300 из 5