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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2008, 23:34   #1
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию Delphi. Проблема с матрицей

Здраствуйте !!

Есть задание: Дана матрица A(n,n). Найти максимальный элемент на побочной диагонали и поменять местами строку со столбцом на пересечении где был найден максимальный элемент.


Проблема следующая: у меня происходит замена только когда то максимальное число находится в центре и матрица 3х3. При другой размерности матрицы вообще ничего не происходит.
StringGrid2 использовал чтобы туда сохранялось первоначальное значение столбца где был найден максимальный элемент.

Вот то что я написал:

Код:
procedure TForm1.Button8Click(Sender: TObject); // Кнопка "Вычислить" на закладке "TStringGrid"
var
i,j,max,c,r:integer;
begin

max:=StrToInt(StringGrid1.Cells[0,n-1]);

for i:=0 to n-1 do
  for j:=0 to n-1 do
  begin
  if i+j=n-1 then
    begin
    if StrToInt(StringGrid1.Cells[j,i]) > max then
    begin
    max:=StrToInt(StringGrid1.Cells[j,i]);
    c:=j; // СОХРАНЯЮ НОМЕР СТОЛБЦА ГДЕ НАЙДЕН МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ
    r:=i;  // СОХРАНЯЮ НОМЕР СТРОКИ ГДЕ НАЙДЕН МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ
    end;
    end;

   Panel1.Caption:='Максимальное число: ' + IntToStr(max);

  end;

// ТУТ Я ПЫТАЮСЬ МЕНЯТЬ
     
for i:=0 to n-1 do    
  for j:=0 to n-1 do
  begin
  StringGrid2.Cols[c]:=StringGrid1.Cols[c];
  StringGrid1.Cols[c]:= StringGrid1.Rows[r];
  StringGrid1.Rows[r]:=StringGrid2.Cols[c];
  end;

end;
Если кто понял что мне нужно , пожалуйста помогите..

Последний раз редактировалось POPOV; 22.09.2008 в 00:17.
POPOV вне форума Ответить с цитированием
Старый 21.09.2008, 23:57   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Найти максимальный элемент на главной диагонали
Код:
max:=StrToInt(StringGrid1.Cells[0, 0]);
c:=0;
for i:=0 to n-1 do
if StrToInt(StringGrid1.Cells[i, i]) > max then
begin
  max:=StrToInt(StringGrid1.Cells[i, i]);
  c:=i
end;
Panel1.Caption:='Максимальное число: ' + IntToStr(max);

StringGrid2.Cols[0]:=StringGrid1.Cols[c];
StringGrid1.Cols[c]:= StringGrid1.Rows[c];
StringGrid1.Rows[c]:=StringGrid2.Cols[0];

Последний раз редактировалось eoln; 22.09.2008 в 00:00.
eoln вне форума Ответить с цитированием
Старый 22.09.2008, 00:02   #3
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Главная диагональ
dr.Chas вне форума Ответить с цитированием
Старый 22.09.2008, 00:17   #4
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Блин, люди извините , перепутал когда писал: не "ГЛАВНОЙ", а "ПОБОЧНОЙ". Сам максимальный элемент правильно находит, а вот с зменой строки на столбец проблема..

Последний раз редактировалось POPOV; 22.09.2008 в 00:21.
POPOV вне форума Ответить с цитированием
Старый 22.09.2008, 00:26   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

max:=StrToInt(StringGrid1.Cells[0,0]) ==> max:=StrToInt(StringGrid1.Cells[0,n-1]);
StringGrid1.Cells[i, i] ==> StringGrid1.Cells[i, n-1-i]
eoln вне форума Ответить с цитированием
Старый 22.09.2008, 01:13   #6
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
max:=StrToInt(StringGrid1.Cells[0,0]) ==> max:=StrToInt(StringGrid1.Cells[0,n-1]);
StringGrid1.Cells[i, i] ==> StringGrid1.Cells[i, n-1-i]

Можете пояснить ?, я что-то непонял..

Почему например максимальному изначально присвоить первый элемент StringGrid'а если я работаю с побочной диагональю.
И что вы имели ввиду во второй строке вашего поста (что на что менять).
POPOV вне форума Ответить с цитированием
Старый 22.09.2008, 01:24   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Почему например максимальному изначально присвоить первый элемент
max:=StrToInt(StringGrid1.Cells[0,n-1] - это верхний правый элемент матрицы. Более подробно:
Код:
max:=StrToInt(StringGrid1.Cells[0,n-1]);
c:=0;
for i:=0 to n-1 do
if StrToInt(StringGrid1.Cells[i, n-1-i]) > max then
begin
  max:=StrToInt(StringGrid1.Cells[i, n-1-i]);
  c:=i
end;
Panel1.Caption:='Максимальное число: ' + IntToStr(max);

Последний раз редактировалось eoln; 22.09.2008 в 02:06. Причина: уточнение
eoln вне форума Ответить с цитированием
Старый 22.09.2008, 01:42   #8
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

В StringGrid'е ведь сначала в квадратных скобках указывается столбец, затем строка. Опять же с внесёнными поправками правильно меняет местами строку и столбец только в матрице 3х3 и только если максимальным является центральный элемент матрицы.

Для примера ввожу матрицу:

1 2
3 4

При правильной работе должно получиться:

4 2
3 1

А у меня сейчас получается так:

1 3
2 4
POPOV вне форума Ответить с цитированием
Старый 22.09.2008, 06:54   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ну если все знаешь, так переставь местами 0 и n-1, подумаешь, опечатался человек, так что из этого бодягу разводить.
puporev вне форума Ответить с цитированием
Старый 22.09.2008, 07:11   #10
Slicker
Пользователь
 
Регистрация: 25.08.2008
Сообщений: 51
По умолчанию

Цитата:
Сообщение от POPOV Посмотреть сообщение
В StringGrid'е ведь сначала в квадратных скобках указывается столбец, затем строка. Опять же с внесёнными поправками правильно меняет местами строку и столбец только в матрице 3х3 и только если максимальным является центральный элемент матрицы.

Для примера ввожу матрицу:

1 2
3 4

При правильной работе должно получиться:

4 2
3 1

А у меня сейчас получается так:

1 3
2 4

Если тебе нужно записать столбцы в строки, тоесть транспонирование матрицы, то получиться должно как раз таки

1 3
2 4
Slicker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с обратной матрицей в DELPHI(или Pascal)!!!!!!!! Lencom Помощь студентам 2 11.05.2008 09:48
Помогите с матрицей Zolotce Помощь студентам 4 21.04.2008 14:15
Задача с матрицей H[o][o]K Помощь студентам 1 15.12.2007 16:51
Задача с матрицей на Delphi POPOV Помощь студентам 28 29.10.2007 06:39
проблема с матрицей kommunist Помощь студентам 8 14.10.2007 19:29