Помогите пожалуйста найти ошибки!!!!

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Аватара пользователя
Регина
Сообщения: 11
Зарегистрирован: 10 апр 2008, 17:35

Нужнов многомерном массиве найти максимальный и разделить его на все элементы массива, в результате чего вывести другой массив с этими числами. Чуть не забыла нужно вывести еще и номер строки и столбца максимального элемента. Вот код, там где-то ошибка, использую случайный ввод чисел, максимальный иногда находит правильно, иногда нет ((((
[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]

Помогите плиииз, кто чем может!!!!
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Во-первых, используя такой метод
[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]
Изображение
PeiGik
Сообщения: 5
Зарегистрирован: 18 дек 2007, 12:20

Насколько я понимаю если индексация идет с нуля, то правильнее наверное будет так:
[syntax='delphi']
MAX := mas[0, 0];
[/syntax]
a не [syntax='delphi']
MAX := mas[1, 1];
[/syntax]
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Да, с одной стороны я не учел, что нумерация идет с 0, но с другой - на результате это не скажется ни каким образом.
Ни что так не ограничивает фантазию программиста, как компилятор...
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

В принципе - да, но вот небольшой нюанс. Если максимальным действительно окажется mas[1,1] - то Edit1 и Edit2 не поменяются
It's a long way to the top if you wanna rock'n'roll
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Я вообще обычно для инициализации в таких случях использую maxint при поиске минимума и low(integer) при поиске максимума.
Ни что так не ограничивает фантазию программиста, как компилятор...
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):Я вообще обычно для инициализации в таких случях использую maxint при поиске минимума и low(integer) при поиске максимума.
Да многие так делают, в том числе и я ;)
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Регина
Сообщения: 11
Зарегистрирован: 10 апр 2008, 17:35

MOTOCoder,
Большое спасибо за помощь!!!! У меня наконец-то получилось решить эту задачку!!!! ;) ) Одной лабой меньше стало )) А что за maxint и low? Это специальные команды такие?
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

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