Operation on matrices with pointers/Pointerlar ve Diziler Üzerinde hafıza işlemleri
/***********************************************************
Memory Allocation and Matrices Operations with pointers
************************************************************/
#include <iostream>
#include <ctimegt>
#include <cstdlibgt>
using namespace std;
/**********************************************************************************
*FONKSİYONUN ADI: multip_matrix
*ALDIĞI PARAMETRELER: int** ve int
*DÖNÜŞ DEĞERİ: void
*AMACI: İki boyutlu 2 diziyi matris ve işaretçi aritmetiğine göre çarpan fonksiyon
**********************************************************************************/
void multip_matrix(int **a, int **b, int **c, int k, int m, int n){
int i,j,l;
int sum=0;
for(l=0;l<n;l++)
for(i=0;i<k;i++){
for(j=0;j<m;j++){
sum+=*(*(b+j)+l)**(*(a+i)+j);
}
*(*(c+i)+l) = sum;
sum = 0;
}
}
/**********************************************************************************
*FONKSİYONUN ADI: multip_array
*ALDIĞI PARAMETRELER: int* ve int
*DÖNÜŞ DEĞERİ: void
*AMACI: Tek boyutlu 2 diziyi matris ve işaretçi aritmetiğine göre çarpan fonksiyon
**********************************************************************************/
void multip_array(int *a, int *b, int *c, int k, int m, int n){
int i,j,l;
int sum = 0;
for(l=0;l<n;l++)
for(i=0;i<k;i++){
for(j=0;j<m;j++)
sum += *(a+j+i*k)**(b+j*n+l);
*(c+i*n+l) = sum;
sum = 0;
}
}
int main(){
srand(time(NULL));
int k,m,n;
int x = 0;
int i,j,z,l;
int sayac = 0;
cout << "Matrislerin Boyutlarini Girin (k,m,n seklinde)" <<endl;
cin >> k >> m >> n;
//a dizisi için hafızadan yer alınıyor ve dizi oluşturuluyor
int **a;
a = new int*[k];
for(i=0;i<k;i++)
a[i] = new int[m];
for(j=0;j<k;j++)
for(z=0;z<m;z++)
a[j][z] = rand()%6;
//a dizisinin elemanlar ekrana bastırılıyor
cout << "1.matris"<<endl;
for(i=0;i<k;i++)
for(j=0;j<m;j++){
cout << a[i][j]<<" ";
sayac++;
if(sayac == m){
cout<<endl;
sayac = 0;
}
}
cout << endl;
//b dizisi için hafızadan yer alınıyor ve dizi oluşturuluyor
int **b ;
b = new int*[m];
for(i=0;i<m;i++)
b[i] = new int[n];
for(j=0;j<m;j++)
for(z=0;z<n;z++)
b[j][z] = rand()%6;
//b dizisinin elemanlar ekrana bastırılıyor
cout << "2.matris"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++){
cout << b[i][j]<<" ";
sayac++;
if(sayac == n){
cout<<endl;
sayac = 0;
}
}
cout << endl;
//c dizisi için hafızadan yer alınıyor ve dizi oluşturuluyor
int **c = new int*[k];
for(i=0;i<k;i++)
c[i] = new int[n];
system("pause");
//multip_matrix fonksiyon çağrısı
multip_matrix(a,b,c,k,m,n);
//multip matrix fonksiyonu ile oluşturulan iki boyutlu çarpım dizisinin ekrana bastırılması
cout << "carpim matrisi"<<endl;
for(i=0;i<k;i++)
for(j=0;j<n;j++){
printf("%2d ",c[i][j]);
sayac++;
if(sayac == n){
cout<<endl;
sayac = 0;
}
}
//tek boyutlu diziler icin hafızadan yer alınıyor
int *dizi1 = new int[k*m];
int *dizi2 = new int[m*n];
int *dizi3 = new int[k*n];
for(i=0;i<k;i++)
for(j=0;j<m;j++){
dizi1[x] = a[i][j];
x++;
}
x=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++){
dizi2[x] = b[i][j];
x++;
}
cout<<endl;
system("pause");
//multip_array fonksiyon çağrısı
multip_array(dizi1,dizi2,dizi3,k,m,n);
//multip array fonksiyonu ile oluşturulan tek boyutlu çarpım dizisinin ekrana bastırılması
for(i=0;i<k*n;i++)
cout<< *(dizi3+i) <<" ";
cout<<endl;
//Her bir dizi için bellekten alınan yerler geri veriliyor
for(i=0;i<k*m;i++)
delete a[i];//Try This
delete [] a;
for(i=0;i<m*n;i++)
delete b[i];//Try This
delete [] b;
delete [] dizi1;
delete [] dizi2;
delete [] dizi3;
system("pause");
return 0;
}
Ekran çıktısı aşağıdaki gibidir
No comments:
Post a Comment