Помогите пожалуйста найти ошибки!!!!
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Нужнов многомерном массиве найти максимальный и разделить его на все элементы массива, в результате чего вывести другой массив с этими числами. Чуть не забыла нужно вывести еще и номер строки и столбца максимального элемента. Вот код, там где-то ошибка, использую случайный ввод чисел, максимальный иногда находит правильно, иногда нет ((((
[syntax='delphi']
type
TForm1 = class(TForm)
Table1: TStringGrid;
Table2: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
mas:array[0..3,0..3] of real;
mas1:array[0..3,0..3] of real;
i, j:integer;
MAX:real;
begin
For i:=0 to 3 do begin
For j:=0 to 3 do begin
mas[i,j]:=Random(100)-Random(100);
Table1.Cells[i,j]:=FloatToStr(mas[i,j]);
Edit1.Text:='';
Edit2.Text:='';
end;
end;
for i:=0 to 3 do
begin
MAX:=mas[1,1];
for j:=0 to 3 do
begin
if mas[i,j]<MAX then
begin
mas[i,j]:=MAX;
Edit1.Text:=IntToStr(j);
Edit2.Text:=IntToStr(i);
end;
end;
end;
end;
end.
[/syntax]
Помогите плиииз, кто чем может!!!!
[syntax='delphi']
type
TForm1 = class(TForm)
Table1: TStringGrid;
Table2: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
mas:array[0..3,0..3] of real;
mas1:array[0..3,0..3] of real;
i, j:integer;
MAX:real;
begin
For i:=0 to 3 do begin
For j:=0 to 3 do begin
mas[i,j]:=Random(100)-Random(100);
Table1.Cells[i,j]:=FloatToStr(mas[i,j]);
Edit1.Text:='';
Edit2.Text:='';
end;
end;
for i:=0 to 3 do
begin
MAX:=mas[1,1];
for j:=0 to 3 do
begin
if mas[i,j]<MAX then
begin
mas[i,j]:=MAX;
Edit1.Text:=IntToStr(j);
Edit2.Text:=IntToStr(i);
end;
end;
end;
end;
end.
[/syntax]
Помогите плиииз, кто чем может!!!!
Во-первых, используя такой метод
[syntax='Delphi']
mas[i,j]:=Random(100)-Random(100);
[/syntax]
вы рискуете получить 0 в массиве, что приведет к вылету программы при делении.
Во-вторых, поиск максимального элемента делается не так
[syntax='Delphi']
for i:=0 to 3 do begin
MAX:=mas[1,1];
for j:=0 to 3 do begin
if mas[i,j]<MAX then
begin
mas[i,j]:=MAX;
Edit1.Text:=IntToStr(j);
Edit2.Text:=IntToStr(i);
end;
[/syntax]
а например так:
[syntax='Delphi']
MAX:=mas[1,1];
for i:=0 to 3 do
begin
for j:=0 to 3 do
begin
if mas[i,j]>MAX then
begin
MAX:=mas[i,j];
Edit1.Text:=IntToStr(j);
Edit2.Text:=IntToStr(i);
end;
end;
end;
[/syntax]
[syntax='Delphi']
mas[i,j]:=Random(100)-Random(100);
[/syntax]
вы рискуете получить 0 в массиве, что приведет к вылету программы при делении.
Во-вторых, поиск максимального элемента делается не так
[syntax='Delphi']
for i:=0 to 3 do begin
MAX:=mas[1,1];
for j:=0 to 3 do begin
if mas[i,j]<MAX then
begin
mas[i,j]:=MAX;
Edit1.Text:=IntToStr(j);
Edit2.Text:=IntToStr(i);
end;
[/syntax]
а например так:
[syntax='Delphi']
MAX:=mas[1,1];
for i:=0 to 3 do
begin
for j:=0 to 3 do
begin
if mas[i,j]>MAX then
begin
MAX:=mas[i,j];
Edit1.Text:=IntToStr(j);
Edit2.Text:=IntToStr(i);
end;
end;
end;
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
так ведь удобнее 
вставляйте код из буфера между тэгов
[noparse]
[syntax='delphi']
(сюда)
[/syntax]
[/noparse]

вставляйте код из буфера между тэгов
[noparse]
[syntax='delphi']
(сюда)
[/syntax]
[/noparse]

Насколько я понимаю если индексация идет с нуля, то правильнее наверное будет так:
[syntax='delphi']
MAX := mas[0, 0];
[/syntax]
a не [syntax='delphi']
MAX := mas[1, 1];
[/syntax]
[syntax='delphi']
MAX := mas[0, 0];
[/syntax]
a не [syntax='delphi']
MAX := mas[1, 1];
[/syntax]
Да, с одной стороны я не учел, что нумерация идет с 0, но с другой - на результате это не скажется ни каким образом.
Ни что так не ограничивает фантазию программиста, как компилятор...
В принципе - да, но вот небольшой нюанс. Если максимальным действительно окажется mas[1,1] - то Edit1 и Edit2 не поменяются
It's a long way to the top if you wanna rock'n'roll
Я вообще обычно для инициализации в таких случях использую maxint при поиске минимума и low(integer) при поиске максимума.
Ни что так не ограничивает фантазию программиста, как компилятор...
Да многие так делают, в том числе и я" писал(а):Я вообще обычно для инициализации в таких случях использую maxint при поиске минимума и low(integer) при поиске максимума.

It's a long way to the top if you wanna rock'n'roll
MOTOCoder,
Большое спасибо за помощь!!!! У меня наконец-то получилось решить эту задачку!!!!
) Одной лабой меньше стало )) А что за maxint и low? Это специальные команды такие?
Большое спасибо за помощь!!!! У меня наконец-то получилось решить эту задачку!!!!

maxint это константа, определяющая максимальное значение для типа Integer, Low(Integer) возвращает минимальное значение типа integer(точнее, по-моему любого целого типа). Кстати, по аналогии вместо maxint можно использовать High(integer).
Ни что так не ограничивает фантазию программиста, как компилятор...