C++ - Matrisleri Tek Boyutlu Diziyle Çarpma(Yardım)
-
Merhaba müritler, şimdi elimde iki tane tek boyutlu dizi var fakat bunları matrismiş gibi pointer kullanarak çarpmam lazım. Sabahtan beri düşünüyorum bir türlü bulamadım.
Örnek:
a1(3x4'lük bir matrisi temsilen) = [2, 3, 4, 5, 1, 3, 5, 4, 0, 4, 4, 7]
a2(4x5'lik bir matrisi temsilen) = [1, 2, 3, 4, 5, 2, 9, 43, 44, 21, 32, 32, 32, 43, 54, 1, 3, 3, 4, 5]
-
Normal matris çarpımını biliyor musun ?
2 boyutlu mxn lik matriside x*m+n olarak yazabilirsin x satır sayın
-
Hocam mod almayı biliyosan yapman lazım :)
-
@SinusX
evet matris çarpımını biliyorum fakat, yazdığınla ne yapmam gerektiğini çıkartamadım
@NmC
evet hocam evet, mod almayı da biliyorum, fakat ben çözüm önerisi bekliyodum sizden
-
afer bunu yazdı:
-----------------------------@SinusX
evet matris çarpımını biliyorum fakat, yazdığınla ne yapmam gerektiğini çıkartamadım
@NmC
evet hocam evet, mod almayı da biliyorum, fakat ben çözüm önerisi bekliyodum sizden
-----------------------------çözüm önerdim zaten :)
2 matrisin olduğunu düşün 3x1 1x2 olarak sonucu 3x2 lik matris olacak
a [1,2,3]
b [1,2] olsun
sonucun [1,2,3,2,4,6] olacak
mxi ile ixn çarparsan mxn lik matrisin oluşacak
tek boyuta indirdiğinde nasıl yaparsın genelleyelim
mxn lik matrisinde x satır sayınsa amn =m.x+n diye formule ederiz
mesela 3x3 lük matriste a12 2. eleman 3.0+2 = 2 gibi
Amxn lik bir matrisle Bixj lik iki matrisi çarpalım n=i olmalı sonucta Cmxj olsun
C11 = A11*B11 + A12*B21 + A13*B31 + ... + A1m*Bi1
C12 = A21*B12 + A22*B22 + A23*B32 + ... + A2m*Bi2
.
.
.
Cmj = Am1*B1j + Am2*B2j + Am3*B3j + ... + Amn*Bij
sen burda iki boyutluya göre çarptın ama sana tek boyut lazım o zaman ne yapman gerekiyor Amn ve Bij lerini tek boyut gibi yazman gerekiyor
Amn = m*x+n x=0,1,2...
Bij = i*y+j y=0,1,2...
olarak yazdın mı sorun hallolur
-
Hocam pointer tarafini bilemem ama ben sana m x n ve n x r seklinde verilmis iki matrisi carpan programi vereyim :
#include <iostream>
using namespace std;
int main(){
cout<<"Lutfen ilk matrisinizin boyutlarini giriniz"<<endl;
int m,n;
cin>>m;
cin>>n;
cout<<"Lutfen ikinci matrisinizin boyutlarini giriniz"<<endl;
int r;
cin>>n;
cin>>r;
cout<<"Lutfen ilk matrisinizin verilerini giriniz"<<endl;
int first_matrix[m][n];
int second_matrix[n][r];
int input;
for(int row = 0 ; row < m ; row++){
for (int col = 0 ; col < n ; col++){
cin>>input;
first_matrix[row][col] = input;
}
}
cout<<"Lutfen ikinci matrisinizin verilerini giriniz"<<endl;
for (int row = 0 ; row < n ;row++){
for (int col = 0 ; col < r ; col++){
cin>>input;
second_matrix[row][col] = input;
}
}
int sonuc_matrix[m][r];
cout<<"sonuc matrisiniz su sekildedir : "<<endl;
for(int row = 0 ; row < m ; row++){
for (int col = 0 ; col < r ; col++){
sonuc_matrix[row][col] = 0;
for (int i = 0 ; i < n ; i++){
sonuc_matrix[row][col] = sonuc_matrix[row][col] + first_matrix[row][i] * second_matrix[i][col];
}
}
}
for(int row = 0 ; row < m ; row++){
for (int col = 0 ; col < r ; col++){
cout<<" "<<sonuc_matrix[row][col];
}
cout<<endl;
}
}
-
pointer ın pointer ını kullanarak tamamiyle dinamik 2 boyutlu matris yapsana.
Daha önce bir arkadaşımız pointer'ın pointer'ı hakkında bir soru sormuştu. Onunla ilgili cevap vermiştim kod olarak. İncelersen kullanımını anlarsın.
http://www.tahribat.com/Forum-C-Ile-Degisik-Bir-Matris-Soru-144891/1/#1698899
Zaten verdiğim örnekte 3 boyutlu dinamik matris örneği olduğu için kavrayabilecegini dusunuyorum. Anlaman 5 ila 30 dk ını alır.