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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2013, 18:39   #1
Denis0993
 
Регистрация: 26.05.2013
Сообщений: 5
Восклицание Умножение матриц (Delphi)

Неверно умножает матрицы, пожалуйста помогите найти ошибку.
Код:
procedure TForm5.BitBtn2Click(Sender: TObject);// умножение матриц(StringGrid1 и StringGrid2)
var Sg1,Sg2,Sg3: 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;
      Sg1:=StrToInt(StringGrid1.Cells[i,k]);
      Sg2:=StrToInt(StringGrid2.Cells[k,j]);
        for k:=0 to StringGrid2.RowCount-1 do
        Sg3:=Sg3+Sg1*Sg2;
        StringGrid3.Cells[j,i]:=IntToStr(Sg3);
      end;
   end;
end;

Последний раз редактировалось Denis0993; 26.05.2013 в 19:38.
Denis0993 вне форума Ответить с цитированием
Старый 26.05.2013, 20:01   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Скорее всего:
Код:
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;
Но стоит переписать весь код:
1) Перенести оба стринггрида в динамические массивы, проверяя на корректность данные
2) Перемножить 2 массива
3) Перенести данные из массива-результата в стринггрид
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.05.2013, 22:09   #3
Denis0993
 
Регистрация: 26.05.2013
Сообщений: 5
По умолчанию

с массивами не люблю работать и не понимаю я их =(( пожалуйста объясните где в моем коде ошибка и покажите правильный вариант =ю
Denis0993 вне форума Ответить с цитированием
Старый 26.05.2013, 22:49   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Лучше 1 раз разобраться с массивами, так как это одна из ступенек к более сложным понятиям. Многие алгоритмы основаны на использовании массива.

Я показал Вам правильный вариант (насколько он правилен, Вы убедитесь сами при тестировании) - приведенный мною код, Ваша ветка else. Это исправит ошибки счета, но не спасет от ошибочно заполненных стринггридов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.05.2013, 21:44   #5
Denis0993
 
Регистрация: 26.05.2013
Сообщений: 5
По умолчанию

спасибо разобрался с массивами и сделал =)
Denis0993 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение матриц BDA Общие вопросы C/C++ 2 20.11.2011 01:06
умножение матриц затерявшисьвдебрях Помощь студентам 0 25.01.2011 22:13
Умножение матриц) Guzal Общие вопросы C/C++ 1 26.10.2010 21:56
Delphi. Умножение матриц. Manik Помощь студентам 39 26.12.2009 14:20