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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2010, 15:16   #1
UnknownVirus
 
Регистрация: 21.01.2010
Сообщений: 8
Сообщение Delphi Двумерный массив

Дан двумерный массив размером n*m, заполненный случайными числами. Найти строку с минимальной суммой и в ней максимальный элемент.

Пробовал написать но так и не довел до ума.
Код:
unit Unit777;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:array[0..30,0..30] of integer;
  i,j,n,m: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.Button2Click(Sender: TObject);
var s,mins,maxe:integer;
begin
edit3.text:='';
edit4.text:='';
for i:=0 to n-1 do
begin
s:=0;
mins:=s+a[i,j];
for j:=0 to m-1 do
s:=s+a[i,j];
if s<mins then mins:=s;
edit3.text:=inttostr(mins);
end;
for j:=0 to m-1 do
begin
maxe:=a[mins,j];
if a[mins,j]>maxe then maxe:=a[mins,j];
edit4.text:=inttostr(maxe);
end;
end;
end.
так же вот сам проект:111.rar

прошу помоч за ранее спасибо!!!

Последний раз редактировалось Stilet; 16.02.2010 в 08:43.
UnknownVirus вне форума Ответить с цитированием
Старый 15.02.2010, 23:04   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

держи, не забываем говорить на крайняк просто спасибо
хочешь код, переделанный именно под твою программу, - сделаю за небольш вознаграждение, а так разбирайся (хотя чё тут разбираться???)
Код:
program Project1;
{$APPTYPE CONSOLE}
var
  N, M: Integer;
  i, j, s, k, h: Integer;
  mat: array of array of Integer; // динамич матрица
  c: array of Integer; // динамич массив, нужен для нахождения строки с мин суммой элементов
begin
  Randomize;
  Writeln('Vvedite razmernost'' matricy');
  write('N = '); Readln(N); 
  write('M = '); Readln(M);
  {устанавливаем размерность матрицы и массива}
  SetLength(mat, N, M);
  SetLength(c, M);
  {заполняем матрицу и выводим ее в консольке}
  for i:= 0 to N - 1 do begin
    for j:= 0 to M - 1 do begin
      mat[i, j]:= Random(9);
      write(mat[i, j], #32);
    end;
    writeln;
  end;
  {ищем строку с мин суммой элементов, ее индекс в перменной h}
  for i:= 0 to N - 1 do begin
    s:= 0;
    for j:= 0 to M - 1 do s:= s + mat[i, j];
    c[i]:= s;
    if i = 0 then k:= c[0];
    if c[i] < k then begin
      k:= c[i];
      h:= i;
    end;
  end;
  {ищем максимальный элемент нужной строки, его значение в переменной k}
  k:= mat[h, 0];
  for i:= 0 to M - 1 do begin
    if k < mat[h, i] then k:= mat[h, i];
  end;
  {вывод}
  Writeln(h, #32, k);
  Readln;
end.
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 15.02.2010, 23:48   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Можно чуть короче, убираем все строки, где упоминается переменная с и заменяем кусок
Код:
  {ищем строку с мин суммой элементов, ее индекс в перменной h}
  h := 0;
  for i:= 0 to N - 1 do begin
    s:= 0;
    for j:= 0 to M - 1 do s:= s + mat[i, j];
    if i = 0 then k:= s else
    if s < k then begin
      k:= s;
      h:= i
    end;
  end;
  {ищем максимальный элемент нужной строки, его значение в переменной k}
Так будет нагляднее
Код:
Writeln(h+1, #32, k);
eoln вне форума Ответить с цитированием
Старый 16.02.2010, 00:03   #4
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

eoln спс за код, массив c: array of Integer был лишним
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 16.02.2010, 00:26   #5
UnknownVirus
 
Регистрация: 21.01.2010
Сообщений: 8
По умолчанию

Всем огромное спасибо)))))
UnknownVirus вне форума Ответить с цитированием
Старый 16.02.2010, 09:06   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

N.B.
А я бы так написал:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var sm,e,q,w,minsum,maxa,max:integer;
begin                     max:=-MaxInt;
 for q:=0 to n-1 do begin sm:=0;maxa:=-MaxInt;minsum:=MaxInt;
  for w:=0 to m-1 do begin
   e:=random(200);sm:=sm+e;
   StringGrid1.Cells[q,w]:=inttostr(e);
   if maxa<e then maxa:=e;
  end;
  if minsum>sm then begin minsum:=sm; max:=maxa; end;
 end;
 caption:=IntToStr(max);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный массив на Delphi КРОШка Помощь студентам 2 15.11.2009 18:38
Двумерный массив Delphi Wise Помощь студентам 5 24.12.2007 23:10
Delphi Двумерный массив forumu Помощь студентам 3 24.12.2007 13:58
Delphi Двумерный массив forumu Помощь студентам 1 23.12.2007 02:04