2011-03-06 2 views
0

Bonjour j'essaie de programmer l'ajout de 2 matrices dans une nouvelle (et ça marche quand je lance le programme pas à pas) mais pour une raison quelconque VS 2010 me donne une erreur d'accès après il fait l'addition.Débutant - implémentation d'addition matricielle en C++

Voici le code.

#include <iostream> 
#include <cstdio> 
#include <conio> 
using namespace std; 

class operatii 
{ 
    typedef double mat[5][5]; 
    mat ms,m1,m2; 
    int x1,x2,y1,y2; 
public: 
    void preg(); 
    int cit_val(); 
    void cit_mat(int&,int&,double[5][5]); 
    void suma(); 
    void afisare(int&,int&,double[5][5]); 
}; 

void operatii::preg() 
{ 
cit_mat(x1,y1,m1); 
cit_mat(x2,y2,m2); 
suma(); 
afisare(x1,y1,ms); 
} 

int operatii::cit_val() 
{ 
int n; 
cin>>n; 
return n; 
} 

void operatii::cit_mat(int& x,int& y,double m[5][5]) 
{ 
char r; 
cout<<"Matrice patratica? Y/N "; 
cin>>r; 
if ((r=='y')||(r=='Y')) 
{ 
    cout<<"Numar linii si coloane: "; 
    x=cit_val(); 
    y=x; 
} 
else 
{ 
    cout<<"Numar linii: "; 
    x=cit_val(); 
    cout<<"Numar coloane: "; 
    y=cit_val(); 
} 
for (int i=1;i<=x;i++) 
    for (int j=1;j<=y;j++) 
     cin>>m[i][j]; 
} 

void operatii::suma() 
{ 
if ((x1==x2)&&(y1==y2)) 
    for (int i=1;i<=x1;i++) 
     for (int j=1;i<=y1;j++) 
      ms[i][j]=m1[i][j]+m2[i][j]; 
else cout<<"Eroare"; 
} 

void operatii::afisare(int& x,int& y,double m[5][5]) 
{ 
cout<<endl; 
for (int i=1;i<=x;i++) 
{ 
    for (int j=1;j<=y;j++) 
     cout<<m[i][j]; 
    cout<<endl; 
} 
} 

void main() 
{ 
operatii matrice; 
matrice.preg(); 
system("PAUSE"); 
} 

Tout type d'aide serait apprécié.

Répondre

6

Les tableaux sont basés sur 0 en C++.

Changer vos différentes variantes de for (somevar=1; somevar<=something)-for (somevar=0; somevar<something)

Vous écrivez après la fin de vos tableaux, qui remplace l'adresse de retour de la pile, ce qui conduit à un retour au code nonexecutable, conduisant à nouveau à une violation d'accès.

En outre,

for (int j=1;i<=y1;j++) 

Je pense que vous voulez utiliser j pas i ici. Ces erreurs sont beaucoup plus faciles à voir si vous utilisez des noms de variables plus longs et plus distincts que "i" et "j", tels que par exemple. "Ligne" et "Colonne"

+0

ligne et col serait plus conventionnel –