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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2012, 00:20   #1
Orlangur
 
Регистрация: 16.12.2011
Сообщений: 5
По умолчанию Работа с матрицей, Delphi

Задача такова:
Найти максимальный элемент матрицы и вычесть его из элементов всех столбцов, кроме того, в котором он находится.

не могу решить две проблемы:
1. собственно, вторую часть задачи (вычитает из всех столбцов, не могу сформулировать правильное условие)
2. почему выдает ошибку, когда матрица не квадратная, а прямоугольная

новичок, не судите строго

Код:
procedure TForm1.SpinEditNChange(Sender: TObject);
begin
StringGridA.ColCount:=SpinEditN.Value;
StringGridB.ColCount:=SpinEditN.Value;
end;

procedure TForm1.SpinEditMChange(Sender: TObject);
begin
StringGridA.RowCount:=SpinEditM.Value;
StringGridB.RowCount:=SpinEditM.Value;
end;

procedure TForm1.Button1Click(Sender: TObject);
var n,m,i,j,j1: integer;
    A,B: array of array of real;
    max: real;

begin
Randomize;
n:=SpinEditN.Value;
m:=SpinEditM.Value;
for i:=0 to m-1 do
    for j:=0 to n-1 do
        StringGridA.Cells[j,i]:=IntToStr(Random(100));

Setlength(A,n,m);
Setlength(B,n,m);
for i:=0 to m-1 do
    for j:=0 to n-1 do
        A[i,j]:=StrToFloat(StringGridA.Cells[i,j]);
max:=A[0,0];
for i:=0 to m-1 do
    for j:=0 to n-1 do
        if A[i,j]>max then
           max:=A[i,j];
EditMax.Text:=FloatToStr(max);

for i:=0 to m-1 do
    for j:=0 to n-1 do
        B[i,j]:=A[i,j]-max;
for i:=0 to m-1 do
    for j:=0 to n-1 do
        StringGridB.Cells[i,j]:=FloatToStr(B[i,j]);


end;


end.
Вложения
Тип файла: rar задание.rar (197.9 Кб, 7 просмотров)
Orlangur вне форума Ответить с цитированием
Старый 22.01.2012, 00:38   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
1. собственно, вторую часть задачи (вычитает из всех столбцов, не могу сформулировать правильное условие)
Когда ищешь максимальный элемент нужно добавить еще одну строчку:
Код:
for i:=0 to m-1 do
    for j:=0 to n-1 do
        if A[i,j]>max then
           begin
             max:=A[i,j];
             mx:=j;
           end;
А потом вот так:
Код:
for i:=0 to m-1 do
  for j:=0 to n-1 do
    if j<>mx then m[i,j]:=m[i,j]-max;
Цитата:
2. почему выдает ошибку, когда матрица не квадратная, а прямоугольная
По коду не догадался, какую именно ошибку?
Все тривиальное просто

Последний раз редактировалось whatever; 22.01.2012 в 03:11.
whatever вне форума Ответить с цитированием
Старый 22.01.2012, 13:19   #3
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Цитата:
2. почему выдает ошибку, когда матрица не квадратная, а прямоугольная
Код:
Setlength(A,n,m); //перевая размерность от 0 до n-1, вторая от 0 до m-1
...
for i:=0 to m-1 do
    for j:=0 to n-1 do
        A[i,j]:=StrToFloat(StringGridA.Cells[i,j]); //здесь первая размерность А от 0 до  m-1
Не забывайте что в StringGrid.Cells - первым указывается номер столбца
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с матрицей Дашка Шевцова Помощь студентам 2 21.06.2011 11:44
Работа с матрицей admiral121 Помощь студентам 1 23.12.2010 16:08
работа с матрицей AleksENN Помощь студентам 0 23.10.2010 14:13
[delphi] работа с матрицей. kiko Фриланс 5 09.01.2010 13:46
Работа с матрицей! Bin Помощь студентам 3 13.12.2009 00:30