Перемножение матриц в Си

Тема в разделе "WASM.BEGINNERS", создана пользователем Freecod, 27 апр 2007.

  1. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Стыдно, но совсем не помню алгебру :) Что-то там строка на столбец... и всё. Дальше провал).
    И как это оформить в Си?

    #define M_LONG 1000
    #define N_LONG 500

    // mas1= 1000x500
    // mas2= 500x1000
    //...
    for (i=0; i<M_LONG * N_LONG; i++) // попытка намутить это дело в цикле...
    {
    for (j; j>N_LONG; j++)
    {
    *(mas1 + i)= *(mas1 + i) * *(mas2 + j + r); \\ r - ряд
    }

    cout << *(mas1 + i) << "\t";
    j=0;
    r++;
    //...

    }
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Взять учебник по С и переписать с книги на монитор.
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Freecod
    A = B*C, число столбцов B должно совпадать с числом строк C, перемножаются строки на столбцы по формуле
    a[i,j] = b[i,1]*c[1,j] + b[i,2]*c[2,j] + ... + b[i,n]*c[n,j]
     
  4. DurA

    DurA New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2007
    Сообщения:
    7
    А можно весь код увидеть, как он выглядит? Оч надо... Туплю ф этом по жудкому, а задачки сдать надо в ближайшую неделю.. Иначе турнут....
     
  5. shurik

    shurik Александр

    Публикаций:
    0
    Регистрация:
    27 авг 2006
    Сообщения:
    52
    Адрес:
    Украина
    Алгоритм уже crypto написал.
    Вот его реализация для матрицы 2х2.
    Думаю под произвольную матрицу не составит труда переделать :)

    Код (Text):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3.  
    4. int m1[2][2] = {{3,1},
    5.                       {8,2}};
    6. int m2[2][2] = {{2,0},
    7.                      {1,3}};
    8.  
    9. int rez[2][2];
    10. int main()
    11. {
    12.   int i = 0, j = 0, k = 0;
    13.   for (i = 0; i < 2; i++)
    14.   {
    15.     for (j = 0; j < 2; j++)
    16.     {
    17.       rez[i][j] = 0;
    18.       for (k = 0; k < 2; k++)
    19.         rez[i][j] += m1[i][k] * m2[k][j];
    20.     }
    21.   }
    22.  
    23.   for (i = 0; i < 2; i++)
    24.   {
    25.     for (j = 0; j < 2; j++)
    26.       printf("%3d", rez[i][j]);
    27.     printf("\n");
    28.   }
    29.   return 0;
    30. }
    Удачи в сдаче сессии
     
  6. DurA

    DurA New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2007
    Сообщения:
    7
    Пасибаа))))))))
     
  7. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
  8. DurA

    DurA New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2007
    Сообщения:
    7
  9. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Это как понять???
     
  10. DurA

    DurA New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2007
    Сообщения:
    7
    Вопрос снят...