|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Проверти пожалуйста код
Здравствуйте ! Помогите пожалуйста с задачей:
Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: а) умножением элементов каждой строки 1-й матрицы на наибольшее из значений элементов соответствующей строки второй матрицы; б) прибавлением к элементам каждого столбца 1-й матрицы произведения элементов соответствующих строк второй матрицы Вот примерно что я сделал: создаю две таблицы StringGrid1 и StringGrid2 которые заполняются с помощью генератора случ. чисел. Теперь моя главная проблема чтобы при нажатие Button 2 или Button 3 выполнялось условие (а), а результат выводился в третию таблицу StringGrid3, и так же для условия (б),результат выводтится но не тот. Вот примерный код: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; StringGrid3: TStringGrid; Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const n=3; var Form1: TForm1; a,b: array[0..n,0..n] of integer; i,j:integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin for j:=0 to n do begin for i:=0 to n do begin a[i,j]:=random(15); stringgrid1.Cells[i,j]:=inttostr(a[i,j]); b[i,j]:=random(15); stringgrid2.Cells[i,j]:=inttostr(b[i,j]); end; end; end; procedure TForm1.Button2Click(Sender: TObject); {выполняю условие а} var i,j,k,max:integer; begin begin for i:=0 to n do begin max:=b[i,1]; for j:=0 to n do if b[i,j]> max then max:=b[i,j]; {ищем максимальное в строке второй матрицы} for k:=1 to n do a[i,k]:=a[i,k]*max; {умножаем элементы строки первой матрицы} for i:=0 to n do for j:=0 to n do StringGrid3.Cells[i,j]:=IntToStr(b[i,j]); end; end; end; procedure TForm1.Button3Click(Sender: TObject); {Выполняю условие б} var i,j,k,p:integer; begin begin for i:=0 to n do begin p:=1; for j:=1 to n do p:=p*b[i,j]; {считаем призведение в строке второй матрицы} for k:=1 to n do a[i,k]:=a[i,k]+p; {прибавляем к элементам строки первой матрицы} for i:=0 to n do for j:=0 to n do StringGrid3.Cells[i,j]:=IntToStr(a[i,j]); end; end; end; end. Последний раз редактировалось Admin, 26.11.2008 в 10:23. |
#2
|
|||
|
|||
В основном у тебя все верно, просто с коэффициентами i и j напутался. Вот это вроде рабочий вариант
Код:
procedure TForm1.Button2Click(Sender: TObject); var Max, i, j: integer; begin for i := 0 to n do begin Max := B[0, i]; for j := 1 to n do if B[j, i] > Max then Max := B[j, i]; // максимальное значение for j := 0 to n do StringGrid3.Cells[j, i] := IntToStr(A[j, i]*Max); // перемножаем соотв. коэффициенты end; end; procedure TForm1.Button3Click(Sender: TObject); var Mul, i, j: integer; begin for i := 0 to n do begin Mul := 1; for j := 0 to n do Mul := Mul*B[j, i]; // находим произведение элементов строки for j := 0 to n do StringGrid3.Cells[i, j] := IntToStr(A[i, j] + Mul); end; end; |