Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

 Умножение на динамични масиви
Автор  jan (01.02.2005 21:52) съобщение до автора
Погледнат  1374 пъти добави към любими
Оценка добави коментар
Гласове  2 изпрати на приятел
Коментари  (2) абонирай се за C-Cplusplus
     
jan
     
 

//Умножение на масиви (като матрици), чийто размер може да се променя
//Ще умножаваме масивите matrA и matrB.Резултаът ще е matrRez.

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
//брой редове в matrA
int xA=2;
//брой колони в matrA
int yA=4;
//указател към указател
//представяме масивът като едномерен масив от указатели към
//едномерни динамични масиви
int **matrA;
//резервираме памет, ако не става излизаме
if(!(matrA=new int *[xA])) exit(0);
//На всеки елемент на горният масив се присвоява едномерен динамичен масив
for(int i=0;i<xA;i++)
    if(!(matrA[i]=new int[yA]))exit(0);

//Вторият множител.Аналогично като за A  
int xB=4;
int yB=3;
//За да бъде възможно умножението трябва броят на
//колоните на A да е равен на броя на редовете на B
if(yA!=xB)
    cout<<"Error!";
int **matrB;
if(!(matrB=new int *[xB]))exit(0);
for(int i=0;i<xB;i++)
    if(!(matrB[i]=new int[yB]))exit(0);

//Резултатът е масив с рамерност брой на редове=бр.ред. на A и
//бр.кол.=бр.кол. на B
int xR=xA;
int yR=yB;
int **matrRez;
if(!(matrRez=new int *[xR]))exit(0);
for(int i=0;i<xR;i++)
    if(!(matrRez[i]=new int[yR]))exit(0);

//Инициализираме масивът с резултата   
for(int i=0;i<xR;i++)
    for(int j=0;j<yR;j++)
       matrRez[i][j]=0;

//Въвеждане на масива A      
int imp;
for(int i=0;i<xA;i++)
    for(int j=0;j<yA;j++)
    {
        cin>>imp;
        matrA[i][j]=imp;
    }
   
//Въвеждане на масива B
for(int i=0;i<xB;i++)
    for(int j=0;j<yB;j++)
    {
        cin>>imp;
        matrB[i][j]=imp;
    }

//Фактическото умножение на матриците   
for(int i=0;i<xR;i++)
    for(int j=0;j<yR;j++)
       for(int l=0;l<yA;l++)
         matrRez[i][j]+=matrA[i][l]*matrB[l][j];

//Извеждане на matrА
for(int i=0;i<xA;i++)
{
    for(int j=0;j<yA;j++)
       cout<<matrA[i][j]<<",";
    cout<<'n';
}
    cout<<'n';
//Извеждане на matrВ
for(int i=0;i<xB;i++)
{
    for(int j=0;j<yB;j++)
       cout<<matrB[i][j]<<",";
    cout<<'n';
}
    cout<<'n';
//Извеждане на резултата
for(int i=0;i<xR;i++)
{
    for(int j=0;j<yR;j++)
       cout<<matrRez[i][j]<<",";
    cout<<'n';
}
//унищожаваме елементите на matrA
for(int i=0;i<xA;i++)
  delete [] matrA[i];
//унищожаваме matrA
delete matrA;

for(int i=0;i<xB;i++)
  delete [] matrB[i];
delete matrB;

for(int i=0;i<xR;i++)
  delete [] matrRez[i];
delete matrRez;

   return 0;
}



Ключови думи: c C++ c# умножение динамични масиви указател масив




 1 посетител чете този скрипт (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

горе < и > трябваше да са ъглови скоби, обаче сайта реши да добавя и от себе си :)

  Black`n`White на 11.07.2006 14:41

Браво на тебе !  :)

Тъкмо си мислех тези дни дали няма да е добре в STL-а на стандартния C++ да се добави контейнер от вида - "matrix <int> m1 (i)(j)" който да има свойства на матрица :)

  Black`n`White на 11.07.2006 14:36

 

 
  • Интересно от Софтуер
 
  • Интересно от myLINKS
 
 
 
 



IT-PLACE.NET © 2004 - 2008