Как найти наименьший элемент двумерного массива

HuMMaI

0 / 0 / 1

Регистрация: 09.11.2015

Сообщений: 30

1

Найти наименьший элемент двумерного массива

13.11.2015, 23:44. Показов 18249. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Найти наименьший элемент двумерного массива. Размер MXN. Элементы задаются на интервале [-30, 45].

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Uses crt;
Var a: array[1..50,1..50] of integer;
      i, j, n, m, min: integer;
Begin
clrscr;
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
   begin
       For j:=1 to n do
          begin 
               a[i,j]:=int(rnd*76)-30;  write(a[i,j],’ ‘); 
          end;
      writeln;
   end;
min:=a[1,1];
  For i:=1 to m do
  For j:=1 to n do
     if a[i,j]< min then min:=a[i,j];
  Writeln(‘наименьшее число   ‘,min);
End.



0



ZX Spectrum-128

Эксперт Pascal/Delphi

6805 / 4564 / 4817

Регистрация: 05.06.2014

Сообщений: 22,438

13.11.2015, 23:47

2

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
uses
  crt;
 
var
  a: array[1..50, 1..50] of integer;
  i, j, n, m, min: integer;
 
begin
  clrscr;
  Write('сколько строк?'); Readln(m);
  Write('сколько столбцов?'); Readln(n);
  for i := 1 to m do
  begin
    for j := 1 to n do
    begin
      a[i, j] := round(random * 76) - 30;  write(a[i, j], ' ');
    end;
    writeln;
  end;
  min := a[1, 1];
  for i := 1 to m do
    for j := 1 to n do
      if a[i, j] < min then min := a[i, j];
  Writeln('наименьшее число   ', min);
end.



1



Puporev

Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

14.11.2015, 08:24

3

Pascal
1
a[i, j] :=-30+random[76];



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

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти координаты точки если известна середина
  • Как найти непроверяемые орфограммы что это такое
  • Как найти мультик по картинке
  • Как исправить ошибку в полисе осаго росгосстрах электронном
  • Как найти среднее количество часов за год

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии