Matriste Çarpma İşlemi(C)
-
#include<stdio.h> #include<locale> int main() { setlocale(LC_ALL,"TURKISH"); int eb,ek,i,j,m,n,a[1000][1000],b[1000][1000],c[1000][1000],btop[1000]; printf("Satır: "); scanf("%d",&m); printf("Sütun: "); scanf("%d",&n); for(i=1;i<=m;i++) for(j=1;j<=n;j++) { printf("A[%d][%d]: ",i,j); scanf("%d",&a[i][j]); } for(i=1;i<=m;i++) for(j=1;j<=n;j++) { printf("B[%d][%d]: ",i,j); scanf("%d",&b[i][j]); } for(i=1;i<=m;i++) for(j=1;j<=n;j++) { btop[i]+=b[j][i]; } for(i=1;i<=m;i++) for(j=1;j<=n;j++) { c[i][j]=a[i][j]*btop[j]; } for(i=1;i<=m;i++) for(j=1;j<=n;j++) { eb=c[1][1]; if(c[i][j]>=eb) eb=c[i][j]; } for(i=1;i<=m;i++) for(j=1;j<=n;j++) { ek=c[1][1]; if(c[i][j]<=ek) ek=c[i][j]; } for(i=1;i<=m;i++) for(j=1;j<=n;j++) printf("C[%d][%d]: %d",i,j,c[i][j]); printf("E.K.: %d",ek); printf("E.B.: %d",eb); return 0; }
Matriste çarpma yaptırıp,elde ettiğim matrisin de en büyük ve küçük elemanlarını buldurup ekrana yazdırmak için bu kodu yazdım ama geçenlerde açtığım konudaki aynı sorun oldu Stack overflow. Nerde hata yapıyorum,nasıl düzeltebilirim?
-
up up up
-
c den pek anlamam fakat deklerasyonda elemanları int olarak tanımlamış, sonra ondalıklı olarak okutmuşsun klavyeden sanırım...
-
Bir de 1000x1000 matris açmışsın biraz kalın gelmez mi sence de.. 30x30 mtriste bir sorun çıkmadı da...
-
Ayrıca çarpma kodunuz da yanlış sanırım... birinci matrisin (sizde A ) satırı ve ikinci matrisin sütunu (B) deki elemanların (sigma a(ij)xb(ji) ) çarpımlarının toplamı olmalıdır.. yani satırdaki herbir elemanı ilgili sütundaki elemanlarla çarpıp toplamak gerekli
http://tr.wikipedia.org/wiki/Matris_(matematik)
http://turgay-ozgur.com/matrislerde-carpma.html -
Sen düz matrisi yaz biz çözebilirsek çözelim hacı. Üniversiteye hazırlanıyoruz :D
-
SAtck OF da sonuçta bir bellek taşması olayı..tahsis edilenden daha fazla kullanmaya çalışıyorsun.. çalışma ortamında hataya sebep oluyor.. obezite problemi ya da kan şekerinin düşmesi gibi..
-
mantıkta sorun yok,matriste çarpma işlemini biliyorum nasıl olacağını.yaptığım işlemi açıklayayım;
önce matrisin kaça kaçlık olacağını alıyorum
sonra çarpılacak matrislerin elemanlarını okutuyorum
o çarpıp toplama işlemini baside indirgedim a*b1+a*b2+a*b3 yerine a*(b1+b2+b3) şekline soktum formülü bu değerleri tutmak içinde btop dizisini oluşturdum.
c[i][j]=a[i][j]*btop[j] satırında her dizi elemanını 2. matrisin sütun elemanlarıyla çarpmış oldum.
hem elde edilecek matrisi hemde bu matrisin en büyük ve en küçük elemanlarını buldurup sonuçları ekrana yazdırdım.
Yani mantıkta sorun yok ama taşma var işte :/
turgay özgürün yaptığı yollada yapılabilir,onuda düşündüm ama bu yolla yapmayı seçtim.
@ephesus: lanet olsun üniversiteye :D
-
Öyle birşey yok ki... Her bir a farklıdır dolayısı ile a parantezine alıp b sütunun toplamaıyla çarpamazsın...
Satırdaki x numaralı elemanla sütundaki x numaralı elemanı çarpacak ve bu çarpımları toplayacaksın... A(1,1)xB(1,1)+A(1,2)xB(2,1)+A(1,3)xB(3,1)+..
-
ben sana demedim mi bu çalışmayacak diye gelmiş bana artistlik yapıyordun ne oldu la bebe...
-
ltcelik bunu yazdı:
-----------------------------
Öyle birşey yok ki... Her bir a farklıdır dolayısı ile a parantezine alıp b sütunun toplamaıyla çarpamazsın...Satırdaki x numaralı elemanla sütundaki x numaralı elemanı çarpacak ve bu çarpımları toplayacaksın... A(1,1)xB(1,1)+A(1,2)xB(2,1)+A(1,3)xB(3,1)+..
-----------------------------edit: matris çarpımı yanlış biliyomuşum.