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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2012, 15:28   #1
mozg2011
Пользователь
 
Аватар для mozg2011
 
Регистрация: 05.02.2012
Сообщений: 55
Вопрос перемножение матриц

вот посмотрите, немогу понять где ошибка
SG1 и SG2 это матрицы, которые мы вводим!
SG3 это их произведение!
вот код:

procedure TForm3.Multiply;
var
w: string;
q: Integer;
begin
for i := 0 to SG3.ColCount-1 do
for j := 0 to SG3.RowCount-1 do
begin
SG3.Cells[i,j]:='0';
end;
for i := 0 to SG3.ColCount-1 do
for j := 0 to SG3.RowCount-1 do
begin
for q := 0 to SG1.ColCount-1 do
begin
w:=IntToStr(StrToInt(SG1.Cells[i,q])*StrToInt(SG2.Cells[q,j]));
SG3.Cells[i,j]:=IntToStr(StrToInt(SG3.Cells[i,j])+StrToInt(w));
end;
end;
end;

он не хочет выводить все ячейки и пишет вот такую ошибку
is not a valid integer value.

Последний раз редактировалось mozg2011; 19.02.2012 в 15:32.
mozg2011 вне форума Ответить с цитированием
Старый 19.02.2012, 23:22   #2
mozg2011
Пользователь
 
Аватар для mozg2011
 
Регистрация: 05.02.2012
Сообщений: 55
По умолчанию

ну блин, может поможет ктонить???
mozg2011 вне форума Ответить с цитированием
Старый 20.02.2012, 03:44   #3
Прячущая Хвост
 
Регистрация: 20.10.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от mozg2011 Посмотреть сообщение
ну блин, может поможет ктонить???
Так ошибки не вижу. F7 - и гоу проверять значения глазками, авось найдёшь какое выходит не integer.

Если приложение не очень большое и не жалко, кинь архив, я посмотрю.
Прячущая Хвост вне форума Ответить с цитированием
Старый 20.02.2012, 09:58   #4
TorrentTor
Форумчанин
 
Аватар для TorrentTor
 
Регистрация: 02.11.2011
Сообщений: 105
По умолчанию

Привожу твой код в котором ты складывал (только теперь тут умножаем да и только, а то ты что-то совсем намудрил тут)
Код:
procedure TForm3.Button2Click(Sender: TObject);
var i,j: integer;
a,b: integer;
begin
for i := 0 to SG1.ColCount-1 do
for j := 0 to SG1.RowCount-1 do
begin
a:= StrToInt(SG1.Cells[i,j]);
b:= StrToInt(SG2.Cells[i,j]);
SG3.Cells[i,j]:= IntToStr(a * b);
end;
SG3.Visible:=True;
end;
TorrentTor вне форума Ответить с цитированием
Старый 20.02.2012, 10:03   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Задание кинь, а то непонятно зачем тебе тройной цикл.

Проверь, чтобы параметры гридов были одинаковы, а то может где-то выходишь за размерность.

А вообще очень вероятно что у тебя где-то в SG1/2 есть просто пустые строчки, например фиксированные колонки/столбцы, пустая строка не может быть переведена в число вот и выдает ошибку.
Можно использовать Strtointdef чтобы при неверном вводе получать законный 0, а не ошибку.
phomm вне форума Ответить с цитированием
Старый 21.02.2012, 00:53   #6
mozg2011
Пользователь
 
Аватар для mozg2011
 
Регистрация: 05.02.2012
Сообщений: 55
По умолчанию

Цитата:
Сообщение от TorrentTor Посмотреть сообщение
только теперь тут умножаем да и только, а то ты что-то совсем намудрил тут
это перемножение матриц, так не прокатит!!

Последний раз редактировалось mozg2011; 21.02.2012 в 07:38.
mozg2011 вне форума Ответить с цитированием
Старый 21.02.2012, 01:00   #7
mozg2011
Пользователь
 
Аватар для mozg2011
 
Регистрация: 05.02.2012
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Прячущая Хвост Посмотреть сообщение
Так ошибки не вижу. F7 - и гоу проверять значения глазками, авось найдёшь какое выходит не integer.
я пробовал проверять, не нашел!!
mozg2011 вне форума Ответить с цитированием
Старый 21.02.2012, 11:48   #8
GBAXA
Пользователь
 
Аватар для GBAXA
 
Регистрация: 06.05.2010
Сообщений: 73
По умолчанию

Когдато сам делал курсовую. Нужно быбо с матрицами поработать. Если надо могу модуль который сам написал скинуть. Только давно ето было и сам уже наверно не обень в нем разбирусь
GBAXA вне форума Ответить с цитированием
Старый 21.02.2012, 16:06   #9
mozg2011
Пользователь
 
Аватар для mozg2011
 
Регистрация: 05.02.2012
Сообщений: 55
По умолчанию

Цитата:
Сообщение от GBAXA Посмотреть сообщение
Когдато сам делал курсовую. Нужно быбо с матрицами поработать. Если надо могу модуль который сам написал скинуть. Только давно ето было и сам уже наверно не обень в нем разбирусь
о скинь пожаласта, попробую разобраться!
mozg2011 вне форума Ответить с цитированием
Старый 21.02.2012, 17:21   #10
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию

Последний раз когда делал перемножение матриц. Делал следующие:

Это если просто внутри составлять матрицы
Код:
var
  A,B,C:
     array of array of extended;

procedure TForm1.Button1Click(Sender: TObject);

var
  n, m, k,i,j,idigits,ipos: integer;
  s: string;
  l: Integer;

begin
  label3.Caption:='Програма начала работу'+char(13)+char(10)+DateToStr(Now)+char(13)+char(10)+TimeToStr(Now);

  idigits:=6;
  ipos:=8+idigits;

  if LabeledEdit1.Text=''
    then
      begin
        ShowMessage('Где n?');
        Exit;
      end;

  if LabeledEdit2.Text=''
    then
      begin
        ShowMessage('Где m?');
        Exit;
      end;

  if LabeledEdit3.Text=''
    then
      begin
        ShowMessage('Где k?');
        Exit;
      end;

  n:=StrToInt(LabeledEdit1.Text);
  m:=StrToInt(LabeledEdit2.Text);
  k:=StrToInt(LabeledEdit3.Text);

  SetLength(A,n,m);
  SetLength(B,m,k);
  SetLength(C,n,k);

  for i:= 0 to n-1 do
    for j:= 0 to m-1 do
      A[i,j]:=i+j+1;

  Memo1.Lines.Add('Матрица А');

  for i:= 0 to n-1 do
    begin
      s:='';
      for j := 0 to m-1 do
        s:=s+Format('%*.*e',[ipos,idigits,A[i,j]]);
      Memo1.Lines.Add(s);
    end;

  Memo1.Lines.Add('');
  Memo1.Lines.Add('Матрица B');

  for i:= 0 to m-1 do
    for j:= 0 to k-1 do
      B[i,j]:=1.0/(i+j+1.0);

  for i:= 0 to m-1 do
    begin
      s:='';
      for j := 0 to k-1 do
        s:=s+Format('%*.*e',[ipos,idigits,B[i,j]]);
      Memo1.Lines.Add(s);
    end;

  for i := 0 to n - 1 do
    for j := 0 to k - 1 do
      begin
        C[i,j]:=0;
        for l := 0 to m - 1 do
          C[i,j]:=C[i,j]+A[i,l]*B[l,j];
      end;

  Memo1.Lines.Add('');
  Memo1.Lines.Add('Матрица C');

  for i:= 0 to n-1 do
    begin
      s:='';
      for j := 0 to k-1 do
        s:=s+Format('%*.*e',[ipos,idigits,C[i,j]]);
      Memo1.Lines.Add(s);
    end;

    label4.Caption:='Програма закончила работу'+char(13)+char(10)+DateToStr(Now)+char(13)+char(10)+TimeToStr(Now);

end;
А так делал если из файла
Код:
procedure TForm1.Button2Click(Sender: TObject);

var
f_name,s: string;
fff: TextFile;
n,m,k,i,j,l,ipos,idigits: integer;

begin

  idigits:=6;
  ipos:=8+idigits;

  ForceCurrentDirectory:=true;

  if OpenDialog1.Execute
    then
      f_name:=OpenDialog1.FileName
    else
      begin
        ShowMessage ('Файл не выбран!');
        Exit;
      end;

  label3.Caption:='Програма начала работу'+char(13)+char(10)+DateToStr(Now)+char(13)+char(10)+TimeToStr(Now);

  AssignFile(fff,f_name);
  Reset (fff);
  readln(fff);
  readln(fff);
  readln(fff);
  readln(fff,n);
  readln(fff);
  readln(fff);
  readln(fff,m);
  readln(fff);

  LabeledEdit1.Text:=IntToStr(n);
  LabeledEdit2.Text:=IntToStr(m);

  SetLength(A,n,m);

  readln(fff);

  for i:=0 to n-1 do
    for j:=0 to m-1 do
      if j=m-1
        then
          readln(fff,A[i,j])
        else
          read(fff,A[i,j]);

  Memo1.Lines.Add('Матрица А');

  for i:= 0 to n-1 do
    begin
      s:='';
      for j := 0 to m-1 do
        s:=s+Format('%*.*e',[ipos,idigits,A[i,j]]);
      Memo1.Lines.Add(s);
    end;

    readln(fff);
    readln(fff);
    readln(fff,k);
    readln(fff);

    LabeledEdit3.Text:=IntToStr(k);

    SetLength(B,m,k);

    readln(fff);

    Memo1.Lines.Add('');

    for i:=0 to m-1 do
      for j:=0 to k-1 do
        if j=k-1
          then
            readln(fff,B[i,j])
          else
            read(fff,B[i,j]);

  Memo1.Lines.Add('Матрица B');

  for i:= 0 to m-1 do
    begin
      s:='';
      for j := 0 to k-1 do
        s:=s+Format('%*.*e',[ipos,idigits,B[i,j]]);
      Memo1.Lines.Add(s);
    end;

    SetLength(C,n,k);

    for i := 0 to n - 1 do
      for j := 0 to k - 1 do
        begin
          C[i,j]:=0;
          for l := 0 to m - 1 do
            C[i,j]:=C[i,j]+A[i,l]*B[l,j];
        end;

  Memo1.Lines.Add('');
  Memo1.Lines.Add('Матрица C');

  for i:= 0 to n-1 do
    begin
      s:='';
      for j := 0 to k-1 do
        s:=s+Format('%*.*e',[ipos,idigits,C[i,j]]);
      Memo1.Lines.Add(s);
    end;

  label4.Caption:='Програма закончила работу'+char(13)+char(10)+DateToStr(Now)+char(13)+char(10)+TimeToStr(Now);    

end;
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемножение матриц stscolt Помощь студентам 0 09.10.2009 16:54
Перемножение матриц jorjinho10 Паскаль, Turbo Pascal, PascalABC.NET 1 11.05.2009 12:56
Перемножение матриц Blad47 Общие вопросы C/C++ 1 02.02.2009 00:21
Перемножение матриц Арина Помощь студентам 1 18.05.2007 19:21