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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2013, 18:11   #1
Tonikmod
 
Регистрация: 11.11.2013
Сообщений: 9
По умолчанию Delphi умножение матриц

Помогите найти ошибку в коде программе. Просто если умножать матрицы 2х2*2х2 то все работает, а допустим 3х2*2х3 неполучаеться. Напишите пожалуйста где ошибка
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ComCtrls;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    UpDown1: TUpDown;
    Edit1: TEdit;
    Edit2: TEdit;
    UpDown2: TUpDown;
    Label1: TLabel;
    Label2: TLabel;
    StringGrid3: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure StringGridKeyPress(Sender: TObject; var Key: Char);
    procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
    procedure UpDown2Click(Sender: TObject; Button: TUDBtnType);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,j:byte;
begin
for i:=0 to StringGrid1.ColCount-1 do
for j:=0 to StringGrid1.RowCount-1 do
StringGrid1.Cells[i,j]:=IntToStr(random(1)-0);


end;

procedure TForm1.Button2Click(Sender: TObject);
var i,j:byte;
begin
for i:=0 to StringGrid2.ColCount-1 do
for j:=0 to StringGrid2.RowCount-1 do
StringGrid2.Cells[i,j]:=IntToStr(random(1)-0);

end;

procedure TForm1.StringGridKeyPress(Sender: TObject; var Key: Char);
begin
  case key of
  #8, '0'..'9' :;
   '-' :
   begin
   key:=#0
   end;
  else
  key:=#0;
end;
end;

procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
var i,j:integer;
begin
StringGrid1.ColCount:=StrToInt(Edit1.Text);
StringGrid2.RowCount:=StrToInt(Edit1.Text);
StringGrid1.Width:=StringGrid1.ColCount*(StringGrid1.DefaultColWidth+2);
StringGrid2.Height:=StringGrid2.RowCount*(StringGrid2.DefaultRowHeight+2);
for i:=0 to StringGrid1.ColCount-1 do begin
for j:=0 to StringGrid2.RowCount-1 do begin


end;
end;
end;

procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType);
var i,j:integer;
begin
StringGrid2.ColCount:=StrToInt(Edit2.Text);
StringGrid1.RowCount:=StrToInt(Edit2.Text);
StringGrid2.Width:=StringGrid2.ColCount*(StringGrid1.DefaultColWidth+2);
StringGrid1.Height:=StringGrid1.RowCount*(StringGrid2.DefaultRowHeight+2);
for i:=0 to StringGrid1.ColCount-1 do begin
for j:=0 to StringGrid2.RowCount-1 do begin

end;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
 var Sg1,Sg2,Sg3,i,j,n,k: integer;
begin
for i:=0 to StringGrid1.RowCount-1 do
  for j:=0 to StringGrid2.ColCount-1 do
   begin
   if n<>1 then
    if (StringGrid1.Cells[i,j]='') or (StringGrid2.Cells[i,j]='') then
     begin
      MessageBox(handle, PChar('Ìàòðèöû çàïîë
íåíû íåïðàâèëüíî!'),
        PChar('Âíèìàíèå!'), MB_OK+MB_ICONWARNING);
      n:=n+1;
      break;
     end
      else
      begin
  Sg3:=0;
  for k:=0 to StringGrid2.RowCount-1 do

  begin
      Sg1:=StrToInt(StringGrid1.Cells[i,k]);
      Sg2:=StrToInt(StringGrid2.Cells[k,j]);
      Sg3:=Sg3+(Sg1*Sg2);
  end;
 StringGrid3.Cells[j,i]:=IntToStr(Sg3);
end;
end; end;



end.

Последний раз редактировалось Stilet; 12.11.2013 в 18:35.
Tonikmod вне форума Ответить с цитированием
Старый 12.11.2013, 18:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
неполучаеться
Как именно проявляется ошибка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2013, 18:42   #3
Tonikmod
 
Регистрация: 11.11.2013
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Как именно проявляется ошибка?
Безымянный.jpg
Вот такая ошибка
Tonikmod вне форума Ответить с цитированием
Старый 13.11.2013, 00:20   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
for i:=0 to StringGrid1.RowCount-1 do
  for j:=0 to StringGrid2.ColCount-1 do
   begin
   if n<>1 then
    if (StringGrid1.Cells[i,j]='')
в этом кривом StringGrid в методе Cells указываются индексы сначала индекс СТОЛБЦА, потом индекс СТРОКИ!

я не вижу, чтобы Вы это учитывали.

Это раз.

а во-вторых, считывайте данные в массивы и оперируйте (перемножайте) их.
Иначе с этими индексами сам чёрт ногу сломит!

ну и третье. если не разберётесь, то выкладывайте исходники своего проекта (в архиве), посмотрим...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.11.2013, 01:03   #5
Tonikmod
 
Регистрация: 11.11.2013
Сообщений: 9
По умолчанию Извеняюсь но мне не разобраться

Вот сам проект. Помогите пожайлустаАрхив WinRAR.rar
Tonikmod вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение двух матриц одинаковой размерности 3х3 в Delphi Htebazile Помощь студентам 8 19.09.2013 18:18
Умножение матриц (Delphi) Denis0993 Помощь студентам 4 27.05.2013 21:44
Умножение матриц BDA Общие вопросы C/C++ 2 20.11.2011 01:06
Умножение матриц) Guzal Общие вопросы C/C++ 1 26.10.2010 21:56
Delphi. Умножение матриц. Manik Помощь студентам 39 26.12.2009 14:20