Нужно помочь оптимизировать алгоритм

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
w1ze
Сообщения: 3
Зарегистрирован: 07 янв 2008, 11:00

unit Unit1;

interface

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

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Button1: TButton;
StringGrid2: TStringGrid;
Label2: TLabel;
StringGrid3: TStringGrid;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
buf1:array[1..4] of real;
mas1:array[1..4,1..3] of real;
buf2:array[1..3] of real;
mas2:array[1..3,1..3] of real;
buf3:array[1..4] of real;
mas3:array[1..2,1..4] of real;

n1,n2,n3,i,j:integer;
min1,min2,min3:real;
begin
n1:=1;
for i:=1 to 4 do
for j:=1 to 3 do
begin
mas1[i,j]:=strtofloat(form1.StringGrid1.cells[i-1,j-1]);
buf1:=0;
end;
for i:=1 to 4 do
for j:=1 to 3 do
if mas1[i,j]>0 then
buf1:=buf1+mas1[i,j];
min1:=buf1[1];
for i:=1 to 4 do
if buf1< min1 then
begin
min1:=buf1;
n1:=i;
end;
form1.Label1.Caption:='меньше всего положительных элементов в столбце № '+IntToStr(n1)+' их сумма= '+floattostr(min1);

//------------------------------

n2:=1;
for i:=1 to 3 do
for j:=1 to 3 do
begin
mas2[i,j]:=strtofloat(form1.StringGrid2.cells[i-1,j-1]);
buf2:=0;
end;
for i:=1 to 3 do
for j:=1 to 3 do
if mas2[i,j]>0 then
buf2:=buf2+mas2[i,j];
min2:=buf2[1];
for i:=1 to 3 do
if buf2< min2 then
begin
min2:=buf2;
n2:=i;
end;
form1.Label2.Caption:='меньше всего положительных элементов в столбце № '+IntToStr(n2)+' их сумма= '+floattostr(min2);

//---------------------------------------

n3:=1;
for i:=1 to 2 do
for j:=1 to 4 do
begin
mas3[i,j]:=strtofloat(form1.StringGrid3.cells[i-1,j-1]);
buf3[i]:=0;
end;
for i:=1 to 2 do
for j:=1 to 4 do
if mas3[i,j]>0 then
buf3[i]:=buf3[i]+mas3[i,j];
min3:=buf3[1];
for i:=1 to 2 do
if buf3[i]< min3 then
begin
min3:=buf3[i];
n3:=i;
end;
form1.Label3.Caption:='меньше всего положительных элементов в столбце № '+IntToStr(n3)+' их сумма= '+floattostr(min3);


end;

end.


в 1 функцию или процедуру =)

кто мог бы помочь, стукните в icq 4903800 =)

файл исходника и проги моно скачать тут: http://www.ipoteka62.ru/2.rar (160 кб) =)
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

Опиши проблему.
w1ze
Сообщения: 3
Зарегистрирован: 07 янв 2008, 11:00

дык, проблема только в коде, над сделать 1 функцию или процедуру =) а то код много места занимает, да и вобщее повторяется, только с разными массивами..
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

На каждый грид идет своя функиця. Ничего лишнего там нету. (В этом случае)
Если бы это был динамический грид с указанием полей, а не стабильно 3, тогда была бы 1 функция.

В цикле проще использовать :
StringGrid.ColCount
StringGrid.RowCount
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

Сделал с динамическим гридом(пользователь задает кол-во столбцов и строк), иначе уменьшить функцию не получиться.
Добавился еще кое какой код, но он не значителен.

Код: Выделить всё

  n1:=1;
  for i := 1 to StringGrid1.ColCount do
    for j := 1 to StringGrid1.RowCount do
    begin
      mas1[i,j]:=strtofloat(StringGrid1.cells[i-1,j-1]);
      buf1[i]:=0;
    end;
  for i := 1 to StringGrid1.ColCount do
    for j := 1 to StringGrid1.RowCount do
  if mas1[i,j]>0 then
    buf1[i]:=buf1[i]+mas1[i,j];
  min1:=buf1[1];
  for i := 1 to StringGrid1.ColCount do
    if buf1[i]< min1 then
      begin
        min1:=buf1[i];
        n1:=i;
      end;
  Label2.Caption:='меньше всего положительных элементов в столбце № '+IntToStr(n1)+' их сумма= '+floattostr(min1);
Исходники: http://rapidshare.com/files/81985600/re.zip.html
w1ze
Сообщения: 3
Зарегистрирован: 07 янв 2008, 11:00

хера се, крут, после работы проверю, отпишусь как и чего =))
Ответить