Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2011, 18:18   #1
oRik24
 
Регистрация: 13.06.2011
Сообщений: 9
По умолчанию Поиск столбца с макс. суммой элементов в двумерном массиве.

В двумерном массиве нужно найти столбец с максимальной суммой элементов и в этом столбце найти минимальный элемент. Длина строк и столбцов задаётся через эдит. Наработки есть, но ищет не верно
(кто-то выкладывал подобную задачу, только с массивом 5*5. пытался переделать - вышло не лучше). Надеюсь на помощь.
Код:
var
  Form1: TForm1;
  a:array [1..30, 1..30] of integer;
  b:array [1..30] of integer;
  i,j,sum,max,maxn,min,m,n:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;
n:=strtoint(Edit1.Text);
m:=strtoint(edit2.text);
for i:=0 to N-1 do
for j:=0 to M-1 do
a[i,j]:= Round(Sin(Random(100))*100);
StringGrid1.RowCount:=n+1;
StringGrid1.ColCount:=m+1;
with StringGrid1 do
begin
i:=0;
for j:=1 to RowCount do
Cells[i,j]:=IntToStr(j);
j:=0;
for i:=1 to ColCount do
Cells[i,j]:=IntToStr(i);
end;
with StringGrid1 do
for i:=1 to n do
for j:=1 to m do
Cells [j,i]:=IntToStr(a[i-1,j-1]);
 end;

procedure TForm1.Button3Click(Sender: TObject);
begin
for i:=1 to n+1 do    
begin
sum:=0;
for j:=1 to m+1 do
sum:=sum+a[i,j];
b[i]:=sum;
end;
max:=b[1];
maxn:=1;
for i:=2 to n+1 do
if max<b[i] then
begin
max:=b[i];
maxn:=i;
end;
edit3.text:=(inttostr(maxn)+' столбец');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
min:=a[maxn,1];
for i:=1 to n+1 do
if min>a[maxn,i] then
min:=a[maxn,i];
edit4.text:=('Значение мин элемента: '+inttostr(min));
end;
Изображения
Тип файла: jpg 1234567890.JPG (39.0 Кб, 69 просмотров)

Последний раз редактировалось oRik24; 17.06.2011 в 18:27. Причина: удалил лишнее
oRik24 вне форума Ответить с цитированием
Старый 17.06.2011, 21:38   #2
Партизанин
Пользователь
 
Аватар для Партизанин
 
Регистрация: 13.06.2011
Сообщений: 16
Лампочка Поиск минимального элемента в столбце с максимальной суммой

oRik24, могу предложить следующую реализацию:
Код:
program maxColumn;
 uses crt;
 const n = 30; {razmernost`}
 Type darray = array [1..n, 1..n] of integer; {dlya dvymernogo massiva}
 var a : darray; {massiv s dannumi}
     i, {schetchik}
     j, {schetchik}
     min, {minimal`nui element stolbca}
     col : integer; {stolbec s maximal`noi symmoi}

 {poisk nomera stolbca}
 function maxSumColumn(a : darray) : integer;
  var i, {schetchik}
      j, {schetchik}
      sum, {summa elementov stolbca}
      max, {maximal`naya summa elementov}
      col {stolbec s maximalnoi summoi} : integer;
  begin
   {iznachal`no schitaem 1-ui stolbec soderzhit max summu elementov}
   max := 0;
   col := 1;
   for i:=1 to n do
    max := max + a[i, 1];
   {iscem iskomui stolbec}
   for j := 2 to n do
   begin
    sum := 0; {obnylyaem summu}
    for i := 1 to n do
    begin
     sum := sum + a[i, j]; {schitaem summu}
    end;
    if max < sum then
    begin
     max := sum;
     col := j;
    end;
   end;

   maxSumColumn := col;
  end;

  {poisk minimal`nogo elementa v stolbce [col]}
  function minElement(a : darray; col : integer) : integer;
  var i, {schetchik}
      min {minimal`nui element} : integer;
  begin
   min := a[1, col]; {schitaem 1-ui element minimal`num}
   for i := 2 to n do
    if min > a[i, col] then
     min := a[i, col];

   minElement := min;
  end;

begin
 randomize;
 for i := 1 to n do
 begin
  for j := 1 to n do
  begin
   a[i, j] := -1 * random(100) + random(200);
   write(a[i, j], ' ');
  end;
  writeln('');
 end;

 col := maxSumColumn(a);
 min := minElement(a, col);
 writeln('');
 writeln('minimalnui element ', col, '-ogo stolbca raven ', min);

 readkey;
end.
Остаётся только добавить работу с непосредственно графическим интерфейсом (Delphi не стоит, поэтому не пробовал, чтоб не напортачить). Это уже не сложно: просто добавить вызов функций в обработчике кнопки и выводить в Edit`ы вернувшиеся значения.

Надеюсь, что помог, код проверял - работает.
Партизанин вне форума Ответить с цитированием
Старый 19.06.2011, 12:55   #3
oRik24
 
Регистрация: 13.06.2011
Сообщений: 9
По умолчанию

Партизанин, спасибо за отзыв. Перевёл данный вами код в Delphi - та же картина получилась. Не подскажите, что я не так сделал?
Код:
var
  Form1: TForm1;
  a:array [1..30, 1..30] of integer;
  i,j,sum,max,maxn,min,m,n:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;
n:=strtoint(Edit1.Text);
m:=strtoint(edit2.text);
for i:=0 to N-1 do
for j:=0 to M-1 do
a[i,j]:= Round(Sin(Random(100))*100);
StringGrid1.RowCount:=n+1;
StringGrid1.ColCount:=m+1;
with StringGrid1 do
begin
i:=0;
for j:=1 to RowCount do
Cells[i,j]:=IntToStr(j);
j:=0;
for i:=1 to ColCount do
Cells[i,j]:=IntToStr(i);
end;
with StringGrid1 do
for i:=1 to n do
for j:=1 to m do
Cells [j,i]:=IntToStr(a[i-1,j-1]);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
max:=0;
maxn:=1;
for i:=1 to n do
max:=+a[i, 1];
for j:=2 to m do
begin
sum:=0;
for i:=1 to n do
begin
sum:=sum + a[i, j];
end;
if max<sum then
begin
max:=sum;
maxn:=j;
edit3.text:=(inttostr(j)+' столбик');
end;
end;
 end;
procedure TForm1.Button4Click(Sender: TObject);
begin
min:=a[1, maxn];
for i:=2 to n do
if min>a[i, maxn] then
min:=a[i, maxn];
edit4.text:=('Значение мин элемента: '+inttostr(min));
end;
oRik24 вне форума Ответить с цитированием
Старый 21.06.2011, 13:20   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

посмотрел ТОЛЬКО процедуру заполнения массива.
и этого уже более чем достаточно...
например,
Цитата:
Код:
  a:array [1..30, 1..30] of integer;
.....
for i:=0 to N-1 do
for j:=0 to M-1 do
  a[i,j]:= Round(Sin(Random(100))*100);
Массив определён от 1. а заполняете Вы его от нуля...

Ну и читаете дальше тоже от нуля..


Мой Вам совет. В опциях компилятора включите Range Check (да и остальные Check'и тоже включите, не помешает!) - подобные ошибки сразу повылазят при запуске приложения!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти номер столбца с мин. суммой положительный элементов. olegozavr Паскаль, Turbo Pascal, PascalABC.NET 1 18.01.2011 18:59
заменить в одномерном массиве каждый из элементов суммой его делителей IRINOK Помощь студентам 2 16.12.2010 12:18
Как найти наименьшее из значений элементов столбца, который обладает наибольшей суммой модулей элементов INFINITIFX Общие вопросы C/C++ 2 11.11.2010 09:55
Сортировка отр. элементов в двумерном массиве SWAT Паскаль, Turbo Pascal, PascalABC.NET 3 02.04.2009 21:43