lostyazilim
tr.link

C 'de Pointer İle Matris Yapımı

6 Mesajlar 4.099 Okunma
lstbozum
tr.link

Yavuzs Yavuzs WM Aracı Kullanıcı
  • Üyelik 30.10.2015
  • Yaş/Cinsiyet 30 / E
  • Meslek Üniversite Öğrencisi
  • Konum Trabzon
  • Ad Soyad Y** S**
  • Mesajlar 33
  • Beğeniler 12 / 0
  • Ticaret 0, (%0)
C programlama dilinde yalnızca pointer kullanarak nasıl matris yazdırabiliriz? Mantık olarak dizilerdeki gibi olduğunu düşünüyorum fakat dizilerde :


for (i=0 ; i<5 ; i++) {
for (j=0 ; j<5 ; j++) {
printf("%c",matris[i][j]) ;
}
}

şeklinde yazabiliyorken bunu pointer'de nasıl tanımlayabiliriz?
 

 

wmaraci
reklam

ennrh ennrh WM Aracı Kullanıcı
  • Üyelik 16.03.2016
  • Yaş/Cinsiyet 28 / E
  • Meslek öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad E** K**
  • Mesajlar 451
  • Beğeniler 38 / 78
  • Ticaret 7, (%100)
Benim bildiğim kadarıyla bu dizilere özgü bir özellik. Dizilerde şöyle bir durum var. Dizinin ilk elemanının yerini bir pointer a aldıktan sonra *(pointer adı +i) şeklinde i yi sürekli arttırarak tüm diziye ulaşılabilir.

Ancak matrisler bellekte sıralı olarak yer kaplamıyor. Bir satırdan diğer satıra geçtimizde bellekte normalde birer birim ilerlerken satır atlayınca alt satıra geçer. Fakat linked list kullanımını biliyorsanız onlarla yapılabilir hocam.
Yavuzs

kişi bu mesajı beğendi.

http://www.pubtekno.com

Yavuzs Yavuzs WM Aracı Kullanıcı
  • Üyelik 30.10.2015
  • Yaş/Cinsiyet 30 / E
  • Meslek Üniversite Öğrencisi
  • Konum Trabzon
  • Ad Soyad Y** S**
  • Mesajlar 33
  • Beğeniler 12 / 0
  • Ticaret 0, (%0)

ennrh adlı üyeden alıntı

Benim bildiğim kadarıyla bu dizilere özgü bir özellik. Dizilerde şöyle bir durum var. Dizinin ilk elemanının yerini bir pointer a aldıktan sonra *(pointer adı +i) şeklinde i yi sürekli arttırarak tüm diziye ulaşılabilir.

Ancak matrisler bellekte sıralı olarak yer kaplamıyor. Bir satırdan diğer satıra geçtimizde bellekte normalde birer birim ilerlerken satır atlayınca alt satıra geçer. Fakat linked list kullanımını biliyorsanız onlarla yapılabilir hocam.




O zaman size direkt soruyu sorayım belki nasıl yapmam gerektiğini anlatabilirsiniz :)
Bu içeriği veren bir fonksyon yazmam gerek , fakat nasıl yazılabileceğini kestiremedim :)



SORU 2


\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
myInitialize() fonksiyonuna ait prototip aşağıdaki gibidir:
void myInitialize(int *param1, const const int rows, const int
columns);
myInitialize() fonksiyonu, “rows” adet satıra ve "columns" adet sütuna
sahip iki boyutlu "param1" dizisinin her bir elemanını, elamanın satır ve
sütun indislerinin çarpımıyla başlatır.
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_


:::::::::::::: ÖRNEK :::::::::::::::::::::
---------main2.c DOSYASININ İÇERİĞİ:-----------

#include
void myInitialize(int *param1, const const int rows, const int columns);
int main ()
{
int myArray[5][5];
int index1, index2;
myInitialize(&myArray[0][0], 5, 5);
printf("GUNCELLENMIS DIZI:\n");
for(index1 = 0; index1 < 5; index1++){
for(index2 = 0; index2 < 5; index2++){
printf("%d\t", myArray[index1][index2]);
}
printf("\n");
}
return 0;
}
---------DOĞRU ÇIKTI:-----
GUNCELLENMIS DIZI:
0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12
0 4 8 12 16
*************************************************
 

 

ennrh ennrh WM Aracı Kullanıcı
  • Üyelik 16.03.2016
  • Yaş/Cinsiyet 28 / E
  • Meslek öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad E** K**
  • Mesajlar 451
  • Beğeniler 38 / 78
  • Ticaret 7, (%100)
Hocam bende şimdi kararsızlığa düştüm. Soruda matrisin ilk elemanının yerini göndermiş. O bellekte matrisin bütün satırları ard arda geliyorda olabilir. Hatta soru öyle verdiğine göre öyledir. Siz şu dediğimi kodlayın bir olmazsa biraz daha düşünelim.

x=0;
for(i=0;i{
for(j=0;j {
*(param+x)=i*j;
x++;
}
}
Yavuzs

kişi bu mesajı beğendi.

http://www.pubtekno.com
wmaraci
wmaraci

Yavuzs Yavuzs WM Aracı Kullanıcı
  • Üyelik 30.10.2015
  • Yaş/Cinsiyet 30 / E
  • Meslek Üniversite Öğrencisi
  • Konum Trabzon
  • Ad Soyad Y** S**
  • Mesajlar 33
  • Beğeniler 12 / 0
  • Ticaret 0, (%0)
Fonksyonu çözdüm hocam , çok sağolasın :)
void myInitialize(int *param1, const int rows, const int columns) {
int i,j ;
for(i=0 ; i for(j=0 ; j
*param1 = i*j ;
param1++ ;

}
}
}



Sizde aynısını yapmışsınız zaten :)
 

 

ennrh ennrh WM Aracı Kullanıcı
  • Üyelik 16.03.2016
  • Yaş/Cinsiyet 28 / E
  • Meslek öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad E** K**
  • Mesajlar 451
  • Beğeniler 38 / 78
  • Ticaret 7, (%100)
Önemli değil hocam:)
 

 

http://www.pubtekno.com
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al