Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > матрицы n*n


Автор: Bony 28.12.2005, 06:56
Дана матрицы A,B,C n -ого порядка, найти матрицу (A+B)*C!!

Пасибо!!!! завтра последний срок! Я конечно понимаю , у меня наглости хоть отбовляй, но все же....

Автор: Бегемот 28.12.2005, 08:51
А язык-то какой?! smile

Автор: mvdr 28.12.2005, 09:02
насколько я помню: сума матриц=сумме их соответствующих элементов
умножение = умножению соотв. элементов.
Тогда просто циклом прогоняем от 1 до n и в новую матрицу заносим элементы: d[i,j]:=(a[i,j]+b[i,j])*c[i,j]
Добавлено @ 09:07
Код

program 1;
uses crt;
const n=10; {нужное число}
var A,B,C,D:array[1..10] of integer;
 i, j:integer;
begin clrscr;
{ввод массивов А В С}
for i:=1 to n do
for j:=1 to n do
d[i,j]:=(a[i,j]+b[i,j])*c[i,j];
{вывод массива D};
readkey;
end.


Автор: Guest 28.12.2005, 09:51
Язвк Си!

Владимир Сергеевич, спасибо, а не составит труда на Си!!



Автор: mvdr 28.12.2005, 09:56
Цитата(Guest @ 28.12.2005, 09:51)
не составит труда на Си!!
составит . Но смысл же простой:
  • задание размерности
  • заполение массивов
  • вычисление по формуле каждого элемента нового массива d[i,j]:=(a[i,j]+b[i,j])*c[i,j]
  • вывод нового массива

Автор: Akina 28.12.2005, 09:57
Цитата
насколько я помню: сумма матриц=сумме их соответствующих элементов

да

Цитата
умножение = умножению соотв. элементов.

нет
Код

Result(i,j) = Summ(Matrix1(i,k)*Matrix2(k,j))

Автор: mvdr 28.12.2005, 10:05
Akina, точно, строка на столбец.

Автор: Bony 28.12.2005, 10:47
Код

Result(i,j) = Summ(Matrix1(i,k)*Matrix2(k,j))


Вот это я не понял!!!

Автор: Akina 28.12.2005, 11:54
Цитата(Bony @ 28.12.2005, 11:47)
Вот это я не понял!!!

А что непонятного? для того чтобы получить элемент матрицы-произведения Result(i,j) - i-й столбец j-й строки - нужно сложить произведения элементов i-го столбца первой матрицы на соответствующий элемент j-й строки второй матрицы.

Код

for (i=0;i<N;i++)
{
  for (j=0;j<N;j++)
  {
    Result(i,j) = 0;
    for (k=0;k<N;k++)
    {
      Result(i,j) += Matrix1(i,k) * Matrix2(k,j);
    }
  }
}

Автор: Bony 28.12.2005, 12:14
Это реализованно умножение!!

А сложение так?
Код

Summ(i,j)=0;
for (i=0;i<N;i++)
{
  for (j=0;j<N;j++)
  {
    Summ(i,j)+=Matrix1(i,j)+Matrix(i,j);
  }
}



Автор: Bony 28.12.2005, 13:27
А как сделать чтоб порядок задавал пользователь??

smile

И как ввести матрицу?
так что ли
Код

printf("vvedite");
for(i=0;i<n;i++)
scanf("%d%d", &m[][],&m[][]) // вот здесь незнаю че в скобках писать!

Автор: Akina 28.12.2005, 13:32
Цитата(Bony @ 28.12.2005, 13:14)
А сложение так?

Нет.
Код

for (i=0;i<N;i++)
{
  for (j=0;j<N;j++)
  {
    Result[i,j] = Matrix1[i,j] + Matrix[i,j];
  }
}


Цитата(Bony @ 28.12.2005, 14:27)
И как ввести матрицу?


Код

cout << "Вводим очередную матрицу, аднака...\n";
for (i=0;i<N;i++)
{
  for (j=0;j<N;j++)
  {
    cout << "\nM(",i,",",j,")=";
    cin >> Matrix(i,j);
  }
}

Автор: Bony 28.12.2005, 13:53
Matrix(i,j); - это функция??
Или этот массив надо просто определить int matrix[n][n]?

Автор: Бегемот 28.12.2005, 15:04
Bony, Matrix - это массив!
Если хочешь, что бы порядок задавал пользователь, создавай массив динамически....
Код

int N;
cout << "Введите порядок матрицы! : ";
cin >> N;
int **Matrix = new int *[N];
for(int i=0; i<N; i++)
   Matrix[i] = new int [N];
......................................
//освобождаем выделенную память
delete[] Matrix;

...ну или объявляй его с заведомо большой размерностью!(Плохой совет! Его не слушай)

Автор: Bony 28.12.2005, 15:21
А если порядок const например 5, можешь код кинуть?? Войди в моё положений!!!

Условие:

Дана матрицы A,B,C n -ого порядка, найти матрицу (A+B)*C!!

Автор: Бегемот 28.12.2005, 16:30
Bony, код не идеальный, делал упор на то, что бы было понятно!
Расписал всё последовательно!
Код

#include<iostream.h>
#include<conio.h>
int main(int argc, char* argv[])
{
   const n = 5;
   int A[n][n];
   int B[n][n];
   int C[n][n];
   int Sum[n][n];
   int Result[n][n];
// Вводим элементы матрицы A
   cout << "Введите матрицу A\n";
   for (int i=0;i<n;i++)
      for (int j=0;j<n;j++)
      {
         cout << "A[" << i << "][" << j<< "] = ";
         cin >> A[i][j];
      }
// Вводим элементы матрицы B
   cout << "\nВведите матрицу B\n";
   for (int i=0;i<n;i++)
      for (int j=0;j<n;j++)
      {
         cout << "B[" << i << "][" << j<< "] = ";
         cin >> B[i][j];
      }
// Вводим элементы матрицы C
   cout << "\nВведите матрицу C\n";
   for (int i=0;i<n;i++)
      for (int j=0;j<n;j++)
      {
         cout << "C[" << i << "][" << j<< "] = ";
         cin >> C[i][j];
      }
// Считаем сумму матрицы A и B
   for (int i=0;i<n;i++)
      for (int j=0;j<n;j++)
         Sum[i][j] = A[i][j] + B[i][j];
// Считаем произведение суммы матриц (A + B) и матрицы C
   for (int i=0;i<n;i++)
      for (int j=0;j<n;j++)
      {
         Result[i][j] = 0;
         for (int k=0;k<n;k++)
            Result[i][j] += Sum[i][k] * C[k][j];
      }
// Выводим результат
   cout << "\nРезультат работы программы\n";
   for (int i=0;i<n;i++)
      for (int j=0;j<n;j++)
      {
         cout << "Result[" << i << "][" << j<< "] = ";
         cout << Result[i][j] << endl;
      }
   getch();
   return 0;
}



Автор: Bony 28.12.2005, 16:41
Вот спасибо!! Настоящие такое спасибо!!!

А что это за ошибка: Multiple declaration for 'i' ?

Автор: Бегемот 28.12.2005, 16:50
Bony, это значит, что ты более чем один раз объявляешь переменную 'i'

Автор: Akina 28.12.2005, 16:58
Цитата(Bony @ 28.12.2005, 17:41)
А что это за ошибка: Multiple declaration for 'i' ?

убери декларации i,j,k в циклах for и вытащи их наверх.

Автор: Бегемот 28.12.2005, 17:01
Цитата
убери декларации i,j,k в циклах for и вытащи их наверх

Akina, в циклах объявлены локальные переменные. Область их действия - тело цикла!

Автор: Bony 28.12.2005, 17:11
Akina спасибо, все раьотает как по маслу!!

Ребятки, спасибо, теперь меня доаустят к экзамену, и у меня есть шанс перейти на 2-ой семестр!

Я понимаю спасибо в карман не положишь, но все же - СПАСИБО!!!

Автор: Akina 28.12.2005, 17:35
smile При такой учебе у тебя мало шансов дойти до 3-го семестра.
Добавлено @ 17:37
Цитата
в циклах объявлены локальные переменные. Область их действия - тело цикла!

Ясен пень... но сразу возникает 2 вопроса: 1) зачем? в данном конкретном случае. 2) откуда double definition? вот это и вправду загадка.

Автор: Bony 28.12.2005, 18:21
Цитата(Akina @ 28.12.2005, 17:35)
При такой учебе у тебя мало шансов дойти до 3-го семестра.

Но ведь такие замечательные люди как вы!(щутка!!!)
Цитата(Akina @ 28.12.2005, 16:58)
убери декларации i,j,k в циклах for и вытащи их наверх.

Действительно, наверх вытащил и за работало!!!!

Автор: Бегемот 28.12.2005, 21:01
Цитата
Действительно, наверх вытащил и за работало!!!!

Ничего не понимаю! smile

Автор: nurkan 1.6.2007, 14:46
Дана матрица размера NxN, содержащая как положительные, так и отрицательные элементы.
И нужно их разложить на треугольные матрицы,методом Хаушолдера или же другими методами,кроме метода Холецкого.
Помогите написать программу на C++.
Буду очень признателен.За ранее благодарю!!!!  

Автор: Rodman 1.6.2007, 15:19
nurkan, 
M
Rodman
создай свой топик. Только правильно!
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)