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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2009, 20:52   #1
gree
Пользователь
 
Аватар для gree
 
Регистрация: 28.10.2008
Сообщений: 34
Сообщение Массивы. Delphi

Всем привет. Не могу разобраться что не так в проге. Работает не корректно.. Задание как бы такое, Нужно создать массив квадратный, и найти максимальный и минимальный элемент.
вот мой код:
Код:
var n:integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   n:=StrToInt(Edit1.Text);
   StringGrid1.ColCount:=n;
   StringGrid1.RowCount:=n;
end;
procedure TForm1.Button2Click(Sender: TObject);
var a:array[1..10,1..10] of integer;
    i,j,max,maxI,maxJ,min,minI,minJ:integer;
begin
   for i:=1 to n do
   for j:=1 to n do
a[i,j]:=StrToInt(StringGrid1.Cells[i-1,j-1]);
   min:=a[1,1];
   minI:=1;
   minJ:=1;
   for i:=1 to n do
   for j:=1 to n do
 if a[i,j]<min then
begin
min:=a[i,j];
minI:=i;
minJ:=j;
end;
label1.Caption:='минимальный элемент ='+inttostr(min);
begin
   for i:=1 to n do
   for j:=1 to n do
a[i,j]:=StrToInt(StringGrid1.Cells[i-1,j-1]);
   max:=a[1,1];
   maxI:=1;
   maxJ:=1;
   for i:=1 to n do
   for j:=1 to n do
 if a[i,j]<min then
begin
max:=a[i,j];
maxI:=i;
maxJ:=j;
end;
label2.Caption:='максимальный элемент ='+inttostr(max);
end;
end;
end.
Вот скрин:

Помогите пожалуйста..
Быть подлинно здравомыслящим уже означает много знать..
gree вне форума Ответить с цитированием
Старый 11.05.2009, 20:59   #2
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
Радость

Не разбирался в Вашем коде.
Код:
var
maxX,maxY,i,j,min,max:integer;
a:array of array of integer;
begin
 maxX:=10;
 maxY:=10;
 setLength(a,maxX,maxY);
//-----------------------------------
  for i:=0 to maxX-1 do
   for j:=0 to maxY-1 do
    a[i,j]:=StrToInt(StringGrid1.Cells[i,j]);
//-----------------------------------
 max:=A[1,1];
 min:=A[1,1];
 for j:=0 to maxY-1 do
   for i:=0 to maxX-1 do
   begin
     if a[i,j]>max then max:= a[i,j];
     if a[i,j]<minthen min:= a[i,j];
   end;
Вот это добавьте вместо вашего кода.

Последний раз редактировалось Levsha100; 11.05.2009 в 21:08.
Levsha100 вне форума Ответить с цитированием
Старый 11.05.2009, 21:07   #3
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Код:
procedure TForm1.Button2Click(Sender: TObject);
var a:array[1..10,1..10] of integer;
    i,j,max,maxI,maxJ,min,minI,minJ:integer;
begin
   for i:=1 to n do
   for j:=1 to n do 
a[i,j]:=StrToInt(StringGrid1.Cells[i-1,j-1]);
   max:=-9999;
min:=a[1,1];
   minI:=1;
   minJ:=1;
   for i:=1 to n do
   for j:=1 to n do begin
 if a[i,j]<min then
begin
min:=a[i,j];
minI:=i;
minJ:=j;
end;
 if a[i,j]>max then
begin
max:=a[i,j];
maxI:=i;
maxJ:=j;
end; 
end;
label1.Caption:='минимальный элемент ='+inttostr(min);
label2.Caption:='максимальный элемент ='+inttostr(max);

end;
А это ваш код исправленный
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Старый 11.05.2009, 21:10   #4
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

to IT-man
Ваш код немного неправильный, ошибка- не динамический массив
Levsha100 вне форума Ответить с цитированием
Старый 11.05.2009, 21:14   #5
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

а причем тут динамический массив то? и вот это
Код:
a:array of array of integer;
к чему ?
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Старый 11.05.2009, 21:17   #6
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Размерность вводится в процессе работы программы
Levsha100 вне форума Ответить с цитированием
Старый 11.05.2009, 21:24   #7
gree
Пользователь
 
Аватар для gree
 
Регистрация: 28.10.2008
Сообщений: 34
По умолчанию

Цитата:
Сообщение от IT-man Посмотреть сообщение
Код:
procedure TForm1.Button2Click(Sender: TObject);
var a:array[1..10,1..10] of integer;
    i,j,max,maxI,maxJ,min,minI,minJ:integer;
begin
   for i:=1 to n do
   for j:=1 to n do 
a[i,j]:=StrToInt(StringGrid1.Cells[i-1,j-1]);
   max:=-9999;
min:=a[1,1];
   minI:=1;
   minJ:=1;
   for i:=1 to n do
   for j:=1 to n do begin
 if a[i,j]<min then
begin
min:=a[i,j];
minI:=i;
minJ:=j;
end;
 if a[i,j]>max then
begin
max:=a[i,j];
maxI:=i;
maxJ:=j;
end; 
end;
label1.Caption:='минимальный элемент ='+inttostr(min);
label2.Caption:='максимальный элемент ='+inttostr(max);

end;
А это ваш код исправленный
А почему
Код:
...
max:=-9999;
...
??
Быть подлинно здравомыслящим уже означает много знать..
gree вне форума Ответить с цитированием
Старый 11.05.2009, 21:30   #8
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Чтобы было с чем сравнивать и не писать 5-10 лишних строк кода и я думаю числа у вас будут больше чем -9999 в любом случае
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Старый 11.05.2009, 21:42   #9
gree
Пользователь
 
Аватар для gree
 
Регистрация: 28.10.2008
Сообщений: 34
По умолчанию

Хотел спросить почему он у меня бред выводит, так потом сам догадался, что в начале массив задается как 10 на 10 и там значения не проставлены. Если значения не проставлены он принимает самую максимальную единицу integer 2117554957 за мин.. а за макс соответственно -9999.
Всем большое человеческое спасибо за помошь. только остался вопрос почему он мне значения выдавал неверные..
Быть подлинно здравомыслящим уже означает много знать..

Последний раз редактировалось gree; 11.05.2009 в 21:48.
gree вне форума Ответить с цитированием
Старый 11.05.2009, 21:49   #10
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Интересно с чего вы это взяли? Он проверяет только n на n элементов а в них значения есть из грида. Так что косяк где то в другом месте ищите.
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы (Delphi) 777UFO777 Помощь студентам 4 19.01.2010 16:51
Массивы Delphi Tesa Помощь студентам 1 06.10.2008 22:33
Массивы Delphi forumu Помощь студентам 2 11.01.2008 10:07