2016-03-21 24 views
-2
#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
int ar1[3][3] = {{1,0,0},{0,1,0},{0,0,1}}; 
int ar2[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; 
int ar3[3][3]; 
int i,j,k; 
for(i=0;i<3;i++) 
{ 
    ar3[i][j] = 0; 
    for(j=0;j<3;j++) 
    { 
     for(k=0;k<3;k++) 
     { 
      ar3[i][j] = ar3[i][j]+(ar1[i][k]*ar2[k][j]); 
     } 
    } 
} 
for(i=0;i<3;i++) 
{ 
    for(j=0;j<3;j++); 
    printf("%d\t",ar3[i][j]); 
} 
getch(); 
return 0; 
} 

Dev C++ uygulamasında kodu derlediğimde herhangi bir hata vermez, ancak çalışamaz ve uygulama çalışmayı durdurur. Bunun nesi var? beklendiği gibi hatalı sonuçlar, çalışma sırasında parçalama arızası, bazı nadir durumlarda üzerinde bile çalışabilir - Eğer fay çeşitleri yol açabilir tanımsız davranış, olsun o kadar satıraNeden bu matris çarpım kodu çalışmıyor

+0

C ve C++ ** farklı ** dillerdir! Bu C gibi görünüyor! – Olaf

+2

@Olaf: Bir C++ derleyicisi kullanıyor. Bu kod (hata hariç) geçerli C++'dur. Lütfen [(API) eksikliğine dayanarak yeniden etiketleme yapmayın] (http://meta.stackoverflow.com/a/252433/103167) –

+0

'için (j = 0; j <3; j ++); ne istersen, '' 'kaldır. –

cevap

6

ar3[i][j] = 0; 

j hala çöp .

Bu çizgiyi ikinci döngü içinde taşıyın.

1

arr3[i][j], 0'u int arr3[i][j]={0}; olarak başlatmalısınız. Ayrıca çarpım matrisini görüntülerken ikinci döngüyü j ile kapattınız. Bunu kapatma, aksi halde istenilen çıktıyı elde edemezsin. Onu düzelttim. Umarım bu senin problemini çözer.

#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
int ar1[3][3] = {{1,0,0},{0,1,0},{0,0,1}}; 
int ar2[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; 
int ar3[3][3] = {0}; // here goes initialization 
int i,j,k; 
for(i=0;i<3;i++) 
{ 
    for(j=0;j<3;j++) 
    { 
    for(k=0;k<3;k++) 
    { 
     ar3[i][j] = ar3[i][j]+(ar1[i][k]*ar2[k][j]); 
    } 
    } 
} 
for(i=0;i<3;i++) 
{ 
    for(j=0;j<3;j++) 
    { 
    printf("%d\t",ar3[i][j]); 
    } 
    printf("\n"); 
} 
getch(); 
return 0; 
} 
+1

Sürümünüzde hala cevabımda bahsettiğim vahşi yazı var. –

+0

oh evet aslında buna bakmadım. Cevap coz j = 3 değiştirmeyecek teşekkürler ve bir [i] [3] çıkış yok. Yine de, –

+0

'yi düzelttiğiniz için teşekkür ederiz. J', sadece bir iç döngüden sonra, 3'lük bir denklemden sonra, yani bir şekilde bir yazının "[i] [- 100500]" gibi bir yere yazılmasını sağlarsa, bu mümkün değildir. İlk kez – Vasfed