Programlama Dilleri 1 - Bilecik Şeyh Edebali...
Transcript of Programlama Dilleri 1 - Bilecik Şeyh Edebali...
![Page 1: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/1.jpg)
Programlama Dilleri 1
Ders 8: Gösterici Dizileri
![Page 2: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/2.jpg)
Gösterici dizileri
Programlama Dilleri 1 2
Elemanları göstericilerden oluşan dizilere
“gösterici dizileri” (pointer arrays) denir.
<tipi> * dizi ismi [dizi_uzunluğu];
char *ad[10];
int *eleman[50];
float *fiyat[10];
![Page 3: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/3.jpg)
Örnek 1 #include <stdio.h>
#include <conio.h>
#define boyut 3
void main(){
int dizi[] = {10, 100, 200}; //normal dizi
int *ptr[boyut], i; //gösterici dizisi
for (i=0; i<boyut; i++)
printf("dizi[%d]=%d\n",i,dizi[i]);
for (i=0; i<boyut; i++)
ptr[i] = &dizi[i]; //adres atama
for (i=0; i<boyut; i++)
printf("dizi[%d]=%d\n",i,*ptr[i]);
}
Programlama Dilleri 1 3
![Page 4: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/4.jpg)
Programlama Dilleri 1 4
char isimler[5][20]={"veli", "ayşe", "ela", "murat", "selma"};
for (int i=0; i<5; i++)
printf("isimler[%d]=%s\n",i,isimler[i]);
![Page 5: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/5.jpg)
Programlama Dilleri 1 5
char *isimler[] = {"veli", "ayşe", "ela", "murat", "selma"};
for (int i=0; i<5; i++)
printf("isimler[%d]=%s\n",i,isimler[i]);
![Page 6: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/6.jpg)
Gösterici dizileri
Derleyici bir gösterici dizisi tanımlaması
ile karşılaşınca diğer dizilerde yaptığı
gibi, bellekte belirtilen sayıda göstericiyi
tutabilecek kadar ardışık yer tahsis eder.
char *s[5]; bildirimi ile derleyici, s
dizisinin 5 elemanlı ve her elemanın char
tipinde bir gösterici olduğunu anlar.
Programlama Dilleri 1 6
![Page 7: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/7.jpg)
Gösterici dizileri
Dinamik olarak tahsis edilen alanlar,
gerektiği zaman yine bir döngü
yardımıyla serbest bırakılabilir:
...
for (k = 0; k < 10; ++k)
free(s[k]);
...
Programlama Dilleri 1 7
![Page 8: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/8.jpg)
Gösterici dizileri
Bazı durumlarda, bir gösterici dizisinin son
elemanına özellikle NULL adresi atanır.
Böyle bir gösterici dizisi, boyutu
belirtilmeden işlenebilir.
Programlama Dilleri 1 8
![Page 9: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/9.jpg)
Örnek 2
#include<stdio.h>
#include<conio.h>
void main()
{
char *isimler[] = {"ali","veli","gul","ayse","murat"};
int k;
for (k = 0; isimler[k]!=NULL; ++k){
puts(isimler[k]); }
getch();
}
Programlama Dilleri 1 9
![Page 10: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/10.jpg)
Gösterici dizilerine ilk değer verilmesi
Normal dizilere ilk değer nasıl veriliyorsa
gösterici dizilerine de ilk değer aynı
biçimde verilir. Ancak dikkatli başlangıç
değeri vermek gerekir !!!
int *p[]={ (int*) 0x12FF50,
(int*) 0x12FF54,
(int*) 0x12FF58 };
Programlama Dilleri 1 10
![Page 11: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/11.jpg)
Örnek 3 #include <stdio.h>
#include <conio.h>
#define boyut 3
main(){
int dizi1[ ] = {10, 100, 200};
int dizi2[ ] = {1, 5, 9};
int dizi3[ ] = {0, -42, 536};
int *ptr[boyut], i; //gösterici dizisi
ptr[0] = dizi1; //adres atama
ptr[1] = dizi2;
ptr[2] = dizi3;
for (i=0; i<boyut; i++)
printf("%d\n",*ptr[i]);
//ekrana ne basar ???
}
Programlama Dilleri 1 11
10 1 0
![Page 12: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/12.jpg)
Örnek 4 #include <stdio.h>
#include <conio.h>
#define boyut 3
main(){
int dizi1[ ] = {10, 100, 200};
int dizi2[ ] = {1, 5, 9};
int dizi3[ ] = {0, -42, 536};
int *ptr[boyut], i; //gösterici dizisi
ptr[0] = dizi1; //adres atama
ptr[1] = dizi2;
ptr[2] = dizi3;
for (i=0; i<boyut; i++)
printf("%d\n",*ptr[i]+1);
//ekrana ne basar ???
}
Programlama Dilleri 1 12
11 2 1
![Page 13: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/13.jpg)
Örnek 5 #include <stdio.h>
#include <conio.h>
#define boyut 3
main(){
int dizi1[ ] = {10, 100, 200};
int dizi2[ ] = {1, 5, 9};
int dizi3[ ] = {0, -42, 536};
int *ptr[boyut], i; //gösterici dizisi
ptr[0] = dizi1; //adres atama
ptr[1] = dizi2;
ptr[2] = dizi3;
for (i=0; i<boyut; i++)
printf("%d\n",*(ptr[i]+1));
//ekrana ne basar ???
}
Programlama Dilleri 1 13
100 5 -42
![Page 14: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/14.jpg)
Örnek 6 #include <stdio.h>
#include <conio.h>
#define boyut 3
main(){
int dizi1[ ] = {10, 100, 200};
int dizi2[ ] = {1, 5, 9};
int dizi3[ ] = {0, -42, 536};
int *ptr[boyut], i; //gösterici dizisi
ptr[0] = dizi1; //adres atama
ptr[1] = dizi2;
ptr[2] = dizi3;
for (i=0; i<boyut; i++)
printf("%d\n",*(ptr[i]+1)+1);
//ekrana ne basar ???
}
Programlama Dilleri 1 14
101 6 -41
![Page 15: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/15.jpg)
Örnek 7 #include <stdio.h>
#include <conio.h>
#define boyut 3
main(){
int dizi1[ ] = {10, 100, 200};
int dizi2[ ] = {1, 5, 9};
int dizi3[ ] = {0, -42, 536};
int *ptr[boyut], i; //gösterici dizisi
ptr[0] = dizi1; //adres atama
ptr[1] = dizi2;
ptr[2] = dizi3;
for (i=0; i<boyut; i++)
printf("%d\n",*(*(ptr+i)+2));
//ekrana ne basar ???
}
Programlama Dilleri 1 15
200 9 536
![Page 16: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/16.jpg)
Örnek 8 #include <stdio.h>
#include <conio.h>
#define boyut 3
main(){
int dizi1[ ] = {10, 100, 200};
int dizi2[ ] = {1, 5, 9};
int dizi3[ ] = {0, -42, 536};
int *ptr[boyut], i; //gösterici dizisi
ptr[0] = dizi1; //adres atama
ptr[1] = dizi2;
ptr[2] = dizi3;
for (i=0; i<boyut; i++)
printf("%d\n",*(*(ptr+i)+2)-i);
//ekrana ne basar ???
}
Programlama Dilleri 1 16
200 8 534
![Page 17: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/17.jpg)
char tipinde gösterici dizileri
char türden bir gösterici dizisinin her bir
elemanı bir yazıyı göstermektedir.
char *yaz[]={"Haziran","Temmuz","Ağustos"};
Uygulamalarda en sık görülen gösterici
dizileri char türden olan gösterici dizilerdir.
Programlama Dilleri 1 17
![Page 18: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/18.jpg)
char *gunler[]={"Pazartesi","Salı", "Carşamba",
"Persembe","Cuma","Cumartesi","Pazar"};
Programlama Dilleri 1 18
![Page 19: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/19.jpg)
char tipinde gösterici dizileri
Bu tip dizilerin en çok kullanılma nedeni; program içinde sık kullanılacak yazıların her defasında yazılması yerine bir gösterici dizisinin elemanlarında saklamaktır.
char *hata[ ] =
{ "Bellek yetersiz",
"Hatalı şifre",
"Dosya bulunamadı",
"Sürücü hazır değil",
"Belirlenemeyen hata"};
Programlama Dilleri 1 19
![Page 20: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/20.jpg)
Gösterici dizileri
Gösterici dizileri tıpkı diğer diziler gibi, yerel veya
global olabilir. Dizinin global olması durumunda,
dizi tanımlandığında dizi elemanlarının tümünde 0
değerleri bulunur.
Yerel bir gösterici dizisinin içinde ise çöp değerler
(rastgele adres değerleri) bulunur.
Programlama Dilleri 1 20
![Page 21: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/21.jpg)
Örnek 9 char *pnames[] = {"Muhittin", "Mufit", "Serkan", "Kaan",
"Izzet", "Muzaffer", "Umit", "Sami", "Uygar", "Kayhan",
"Yakup", "Mert", "Cetin", "Ilknur", "Gokhan", "Salih",
"Irem", "Korhan", "Isin", "Berk", "Tacettin", "Duygu",
"Figen", "Funda", "Fuat", "Arda","Muhsin", "Guray",
"Necati", "Kadriye", "Gurbuz", "Hamide", "Volkan",
"Selami", "Esra", "Cumhur", "Can", "Aleyna", "Salih",
"Kamuran", "Ferhan", "Furuze", "Sukufe", "Sidre",
"Cahit", "Sercan", "Jale", "Bilge", "Tijen", "Tufan",
"Zeliha", "Cevdet", "Burak", "Ufuk", "Zarife",
"Bengisu", "Melda", "Zafer", "Yelda", "Didar", "Hande",
"Cumali", "Dilek", "Kemal", "Hasan", "Ismail", "Fatma",
"Burcu", "Siyami", "Busra", "Gizem", "Ramize", "Sezai",
"Polat", "Melike", "Umut", "Serencan", "Uzeyir",
"Kamile", "Deniz", "Veysel", "Emrehan", "Gulcan",
"Ender", "Furkan", "Veli", "Muhtesem", "Necmettin",
"Osman", "Perihan", "Didem", "Tunc", "Irmak","Petek",
"Sebahat", "Halime", "Mahir", "Leyla", "Eda", "Ali",
"Ibrahim", "Berivan"};
/*YUKARIDAKİ pnames isimli GÖSTERİCİ DİZİSİNİ KULLANARAK
SORULARI YANITLAYINIZ*/
Programlama Dilleri 1 21
![Page 22: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/22.jpg)
Örnek 9a /*Dizinin elemanlarının göstermekte
olduğu isimleri ekrana yazdıran
kod...*/
int i;
for(i=0;pnames[i]!='\0';i++)
printf("%s\n",*(pnames+i));
Programlama Dilleri 1 22
Muhittin Mufit
Serkan
…
![Page 23: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/23.jpg)
Örnek 9b /*2.Dizinin elemanlarının göstermekte
olduğu isimlerin ilk harfini ekrana
yazdıran kod...*/
int i;
for(i=0;pnames[i]!='\0';i++)
printf("%c\n",**(pnames+i));
//printf("%c ",*pnames[i]);
Programlama Dilleri 1 23
M M
S
…
![Page 24: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/24.jpg)
Örnek 9c /*3.Dizinin elemanlarının göstermekte
olduğu isimlerin son harfini ekrana
yazdıran kod...*/
int i,j;
for(i=0;pnames[i]!='\0';i++){
for(j=0;*(pnames[i]+j)!='\0';j++);
printf("%c\n",*(pnames[i]+j-1));
}
Programlama Dilleri 1 24
n t
n
…
![Page 25: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/25.jpg)
Örnek 9d /*4.Kullanıcının klavyeden girdiği bir harf
karakteri ile dizinin elemanlarının
göstermekte olduğu isimlerden, içinde bu harf
olanları ekrana yazdıran kod...(küçük/büyük
harf olabilir) */
int i,j;
char ch;
printf("\nbir harf giriniz: ");
scanf("%c",&ch);
for(i=0;pnames[i]!='\0';i++)
for(j=0;*(pnames[i]+j)!='\0';j++)
if(pnames[i][j] == ch || pnames[i][j] == ch-
'A'+'a' || pnames[i][j] == ch-'a'+'A‘) {
printf("%s,",pnames[i]);
break; }
Programlama Dilleri 1 25
![Page 26: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/26.jpg)
Örnek 9e /*5.Kullanıcı klavyeden bir yazı
karakteri girsin. Dizinin
elemanlarının göstermekte olduğu
isimlerden, içinde bu yazı olanları
ekrana yazdıran kod...(küçük/büyük
harf olabilir)*/
int i,j,k;
char *cp;
printf("\nbir yazi giriniz: ");
scanf("%s",cp);
/***/
Programlama Dilleri 1 26
![Page 27: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri.](https://reader033.fdocument.pub/reader033/viewer/2022060609/60609c73b533a94f1c2fcb9f/html5/thumbnails/27.jpg)
Örnek 9f /*6.Dizinin gösterdiği yazıların
uzunluklarının aritmetik ortalamasını
ekrana yazdıran kod...*/
int toplam=0;
float ortalama;
/***/
ortalama=(float)toplam/i;
printf("\nortalama=%2.3f'dir.",ortalama);
Programlama Dilleri 1 27