15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
1

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

10.10.2013, 21:30. Показов 8622. Ответов 15
Метки нет (Все метки)

Написать программу поиска в двумерном массиве максимального и минимального элемента массива. Массив должен быть динамическим.
Реализовать поиск, желательно, через один цикл. Я написал программу, но она работает не стабильно
Delphi
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
   var i,j,max,min,n,m:integer; mas: array of array of integer;
   flag:boolean;
begin
Write('Enter  the lines: ');
readln(n); //строк
Write('Enter the columns: ');
readln(m); //столбцов
SetLength(mas,m,n);//создание массива
writeln;
//заполнил массив элементами
for i:=0 to n do
begin
  for j:=0 to m do
  begin
    mas[i,j]:=-10+random(110);
    write(mas[i,j],' ');
  end;
writeln;
  end;
  //обнуление всех переменных
  max:=mas[1,1]; min:=mas[1,1];//присвоил один из элементов массива переменным
  i:=0; j:=0; flag:=true;
while(flag) do
begin
   if max<mas[i,j] then begin max:=mas[i,j]; end ;
   if min>mas[i,j] then begin min:=mas[i,j]; end  ;
   if i=n-1 then begin  flag:=false ; end;
   if  j=m-1 then begin  i:=i+1; j:=0;  end;
   j:=j+1;
end;
//ln;//задержка
writeln;
 
writeln('Maximum: ',max);
writeln('Minimum: ',min);
readln;
mas:=NIL; //высвобождение памяти выделенной под массив
 
end.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2013, 21:30
Ответы с готовыми решениями:

Поиск максимального четного элемента в массиве
Задан целочисленный массив a из n строк и m столбцов. Найти значение максимального элемента среди...

Поиск максимального/минимального элемента в динамическом массиве
Необходимо из главного массива glmas,сформированного из элементов стринггрида выбрать минимальные...

Поиск максимального элемента в двумерном массиве
Public Function Max(ByVal ArrM(,) As Integer) As Integer Dim C1, C2 As Integer ...

Поиск максимального элемента в двумерном массиве
Здравствуйте! Собственно вопрос - оптимальный алгоритм. Есть ли тут вообще алгоритм который находит...

15
angstrom
10.10.2013, 21:36 2
Delphi
1
max:=mas[1,1]; min:=mas[1,1];//присвоил один из элементов массива переменным
Почему Min и Max получают значения не из 0, 0?
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
10.10.2013, 21:58  [ТС] 3
на тот случай, если я переделаю рандом он будет выдавать элементы < 0 проблема в том, что программа падает
0
angstrom
10.10.2013, 22:13 4
А ничего, что динамические массивы начинаются с 0, а не с 1-цы? Получается, что просчёт будет вестись не для всего массива.
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
10.10.2013, 22:21  [ТС] 5
Цитата Сообщение от angstrom Посмотреть сообщение
А ничего, что динамические массивы начинаются с 0, а не с 1-цы? Получается, что просчёт будет вестись не для всего массива.
ну исправь, пожалуйста, я не вижу где я начал массив с единицы.
0
angstrom
10.10.2013, 22:23 6
Строка 28.
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
10.10.2013, 22:30  [ТС] 7
На этот момент массив уже заполнен элементами, я просто присваиваю элемент массива переменной
0
пофигист широкого профиля
4580 / 3050 / 847
Регистрация: 15.07.2013
Сообщений: 17,535
10.10.2013, 22:31 8
Лажа в сочетании 35 и 36 строк кода. Переписать вёсь поиск нафиг с использованием циклов for и больше так не извращаться.
0
angstrom
10.10.2013, 22:36 9
Delphi
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
program Test;
 
{$APPTYPE CONSOLE}
 
uses
  Math;
 
var
  i, j, _max, _min, n, m : Integer; 
  mas  : array of array of Integer;
begin
  Randomize;
  Write('Enter  the lines: ');
  ReadLn(n);                // строк
  Write('Enter the columns: ');
  ReadLn(m);                // столбцов
  SetLength(mas, m, n);         // создание массива
  WriteLn;
  
  // заполнил массив элементами
  for i := 0 to n - 1 do
  begin
    for j := 0 to m - 1 do
    begin
      mas[i, j] := -10 + Random(110);
      write(mas[i, j], ' ');
    end;
    WriteLn;
  end;
  
  _max := mas[0, 0]; 
  _min := mas[0, 0];            // присвоил один из элементов массива переменным
 
  for i := 0 to n - 1 do
    for j := 0 to m - 1 do
    begin
      _max := Max(mas[i, j], _max);
      _min := Min(mas[i, j], _min);
    end;
 
  WriteLn;
  WriteLn('Maximum: ', _max);
  WriteLn('Minimum: ', _min);
  ReadLn;
end.
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
10.10.2013, 23:15  [ТС] 10
спасибо, но просто у меня задание было уложится в один цикл. Вы случайно не знаете наиболее подходящий алгоритм?
0
angstrom
10.10.2013, 23:32
  #11

Не по теме:


Цитата Сообщение от okman Посмотреть сообщение
...желательно, через один цикл...
Желательно, не значит обязательно.
Цитата Сообщение от okman Посмотреть сообщение
...у меня задание было уложится в один цикл...
Смотри выше, но... ваши преподы извращенцы.

пофигист широкого профиля
4580 / 3050 / 847
Регистрация: 15.07.2013
Сообщений: 17,535
11.10.2013, 00:32 12
Цитата Сообщение от okman Посмотреть сообщение
у меня задание было уложится в один цикл. Вы случайно не знаете наиболее подходящий алгоритм?
Delphi
1
2
3
4
for i:=0 to n*m-1 do begin
  _max:=Max(mas[i div m,i mod m],_max);
  _min:=Min(mas[i div m,i mod m],_min);
end;
P.S. Насчет преподов согласен с angstrom

Добавлено через 28 минут

Не по теме:

P.S.
Оптимизацию выключил, но код в посте #12 творит поистине что-то чудесатое.

1
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
13.10.2013, 18:56  [ТС] 13
спасибо большое, а можете описать логику работы?
0
пофигист широкого профиля
4580 / 3050 / 847
Регистрация: 15.07.2013
Сообщений: 17,535
13.10.2013, 19:08 14
Цитата Сообщение от okman Посмотреть сообщение
а можете описать логику работы?
А нет тут никакой логики. Только арифметика с использованием операторов целочисленного деления.
0
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
13.10.2013, 19:19  [ТС] 15
Цитата Сообщение от northener Посмотреть сообщение
А нет тут никакой логики. Только арифметика с использованием операторов целочисленного деления.
Это вы сам разработали алгоритм или нашли где-то, просто я никак не могу найти понятный для меня алгоритм
Delphi
1
2
3
4
5
6
7
8
9
10
for d:=1 to (n*m) do
begin
   if  j=m+1 then begin i:=i+1; j:=1;  end;
   {если j=m,то есть цикл прошел все элементы строки,
              я обнуляю j  и наращиваю i, чтобы перейти на следующую строку }
    _max:=Max(mas[i,j],_max);
   _min:=Min(mas[i,j],_min);
 
    j:=j+1;
end;
я вот этот написал, но когда n>m программа падает) Если можете, то объясните свой)
0
пофигист широкого профиля
4580 / 3050 / 847
Регистрация: 15.07.2013
Сообщений: 17,535
13.10.2013, 20:17 16
Цитата Сообщение от okman Посмотреть сообщение
Это вы сам разработали алгоритм
Я же говорю что тут нет никакого алгоритма.
Предположим n = 5, m = 11. Тогда переменная цикла i будет меняться от 0 до 54.
i div m дает целое от деления. Для i от 0 до 10 это будет 0. i mod m дает остаток от деления. Для i от 0 до 10 это будет 0, 1, 2..10. Таким образом при i от 0 до 10 проверяться будут элементы массива от mas[0,0] до mas[0,10], для i от 11 до 21 будут проверяться элементы от mas[1,0] до mas[1,10]. И так далее.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2013, 20:17
Помогаю со студенческими работами здесь

Поиск максимального по модулю элемента в двумерном массиве
Почему для нахождения наибольшего по модулю элемента используется нулевая ячейка arr? int max...

Поиск максимального значения в двумерном массиве
using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

В двумерном массиве найти индекс максимального и минимального элемента
Программа выдает ошибку: нельзя преобразовать тип real к integer. Суть программы: нужно в...

В двумерном массиве вывести индексы максимального и минимального элемента
В двумерном массиве вывести индексы максимального и минимального элемента, а также расположить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru