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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2016, 19:57   #1
Tucan
Новичок
Джуниор
 
Регистрация: 17.04.2016
Сообщений: 7
Вопрос Транспонировать матрицу и умножить ее на начальную.

Дана матрица с другой размерностью,но,в целях экономии времени пока использую 2х3.Не могу разобраться с умножением.В ответе получаются 2 столбца в первом 0 0 ,во втором 14 14.Может взглянете,подскажете,что не так?)
вот сам код:
Код:
program zadacha;

var
  a: array[1..2, 1..3] of integer;
  b: array[1..3, 1..2] of integer;
  c: array[1..2, 1..3] of integer;
  i, j, k: integer;

begin
  writeln('Введите матрицу');
  for i := 1 to 2 do 
    for j := 1 to 3 do
    
    begin
      write( 'a[', i, ',', j, ']=');
      readln(a[i, j]); 
    end;
  writeln('---- Введенная матрица: -----');
  for i := 1 to 2 do 
  begin
    for j := 1 to 3 do
      
      write('    ', a[i, j]:2, '  ');
    writeln;
  end;
  
  for i := 1 to 3 do 
  begin
    for j := 1 to 2 do
      b[i, j] := a[j, i];
  end;
  writeln;
  writeln('---- Транспонированная матрица: -----');
  for i := 1 to 3 do
  begin
    for j := 1 to 2 do
      write('      ', b[i, j]:3, '  ');
    writeln;
  end;
  writeln;
  
  for i := 1 to 2 do 
  begin
    for j := 1 to  2 do
      c[i, j] := 0;
    for k := 1 to 3 do
      c[i, j] := c[i, j] + A[i, k] * B[k, j];
  end;
  writeln('---- Результат умножения: -----');
  for i := 1 to 2 do
  begin
    for j := 1 to 2 do
      write(c[i, j]:4);
    writeln;
  end;
end.
Вот,кстати скрин результата: https://pp.vk.me/c630827/v630827021/...azioU9BtdY.jpg

А вот так должно получиться при умножении:https://pp.vk.me/c630827/v630827021/...UsURJ4oRgc.jpg

Последний раз редактировалось BDA; 17.04.2016 в 21:51.
Tucan вне форума Ответить с цитированием
Старый 17.04.2016, 20:49   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
for i := 1 to 2 do 
  for j := 1 to  2 do
  begin
    c[i, j] := 0;
    for k := 1 to 3 do
      c[i, j] := c[i, j] + A[i, k] * B[k, j];
  end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 17.04.2016, 21:18   #3
Tucan
Новичок
Джуниор
 
Регистрация: 17.04.2016
Сообщений: 7
По умолчанию

Блин,точно.Операторные скобки не там открыл.
Огромное спасибо!
Tucan вне форума Ответить с цитированием
Старый 17.04.2016, 22:28   #4
Tucan
Новичок
Джуниор
 
Регистрация: 17.04.2016
Сообщений: 7
По умолчанию

Если не сложно,посмотрите уже почти готовый код с другой размерностью.Опять проблемы с умножением,но на этот раз программа не хочет умножать,а лишь выдает ошибку вроде:"Индекс находится вне границ массива".Уже все перепробывал,и кстати,в одном случае программа выдавала матрицу,но с размером 4х4 .
P.S.забыл сказать.В матрице 5 строк и 4 столбца
Код:
program zadacha;

var
  a: array[1..5, 1..4] of integer;
  b: array[1..4, 1..5] of integer;
  c: array[1..5, 1..4] of integer;
  i, j, k: integer;

begin
  writeln('Введите матрицу');
  for i := 1 to 5 do 
    for j := 1 to 4 do
    
    begin
      write( 'a[', i, ',', j, ']=');
      readln(a[i, j]); 
    end;
  writeln('---- Введенная матрица: -----');
  for i := 1 to 5 do 
  begin
    for j := 1 to 4 do
      
      write('    ', a[i, j]:2, '  ');
    writeln;
  end;
  
  for i := 1 to 4 do 
    for j := 1 to 5 do
       begin
       b[i, j] := a[j, i];
  end;
  writeln;
  writeln('---- Транспонированная матрица: -----');
  for i := 1 to 4 do
  begin
    for j := 1 to 5 do
      write('      ', b[i, j]:3, '  ');
    writeln;
  end;
  writeln;{верно до сюда}
  
  for i := 1 to 5 do 
  for j := 1 to 5 do
 begin
      c[i, j] := 0;
    for k := 1 to 4 do {ТОЧНО}
      c[i, j] := c[i, j] + A[i, k] * B[k, j];
  end;
  writeln('---- Результат умножения: -----');
  for i := 1 to 5 do
  begin
    for j := 1 to 5 do
      write(c[i, j]:5 );
    writeln;
end;
end.

Последний раз редактировалось Tucan; 17.04.2016 в 22:42.
Tucan вне форума Ответить с цитированием
Старый 17.04.2016, 22:37   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Tucan, я в дельфю обычно не лезу, хотя и разбираюсь. Но, пожалуйста, оформляй код, как здесь принято. Чё, трудно нажать на стронг (решёточка сверху)? Ну читать конечно можно, но мы уж так привыкли. Вложенности, нам самим вычислять? О_оооо! Это пока у тебя одна прога, в ней ты хозяин. Когда их штук по 20 в месяц, да ещё и не тобой написаны.... Ой!
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 17.04.2016 в 22:41.
Smitt&Wesson вне форума Ответить с цитированием
Старый 17.04.2016, 22:46   #6
Tucan
Новичок
Джуниор
 
Регистрация: 17.04.2016
Сообщений: 7
По умолчанию

На счет выделения кода-извиняюсь)Я здесь недавно.Сам хотел спросить как это сделать.
Далее.Причем здесь Delphi,если тема Паскаль?
И,наконец,есть люди настолько нашаренные и написавшие не один десяток кодов,что им достаточно взглянуть на код,чтобы сказать,где допущена ошибка.Хотя вы это,наверно,и без меня знаете.
Tucan вне форума Ответить с цитированием
Старый 17.04.2016, 22:49   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
 for i := 1 to 5 do 
  for j := 1 to 5 do
 begin
      c[i, j] := 0;
матрица C не имеет 5 столбцов.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.04.2016, 22:56   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Tucan Посмотреть сообщение
И,наконец,есть люди настолько нашаренные и написавшие не один десяток кодов,что им достаточно взглянуть на код,чтобы сказать,где допущена ошибка.Хотя вы это,наверно,и без меня знаете.
Увы, но таких нет. Это - миф, бродяший среди нубов. Программистами не становятся, а рождаются. 90% здешних постояльцев - прирождённые программисты. Да, споры и между нами бывают. Но, это скорее выяснение приоритетов, чем их концепций.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 17.04.2016, 22:56   #9
Tucan
Новичок
Джуниор
 
Регистрация: 17.04.2016
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
матрица C не имеет 5 столбцов.
Как это не имеет? https://pp.vk.me/c630827/v630827021/...HCWqFhq6T4.jpg
Tucan вне форума Ответить с цитированием
Старый 17.04.2016, 23:00   #10
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
матрица C не имеет 5 столбцов.
Серёг, ты о чём? В задачке матрица 2х3. Или я что-то опять не правильно понял?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. транспонировать матрицу Vadislav Помощь студентам 2 16.11.2014 19:00
C# транспонировать матрицу xq1b Помощь студентам 2 21.11.2012 16:02
Транспонировать матрицу на паскале sidestep Паскаль, Turbo Pascal, PascalABC.NET 1 24.09.2011 15:54
Транспонировать матрицу Nerside92 Помощь студентам 1 24.12.2009 21:40
как умножить матрицу(3на4) на матрицу(4на3) в делфи? Ромка678 Помощь студентам 1 28.11.2009 08:01