Upload
others
View
21
Download
0
Embed Size (px)
Citation preview
Programlama Dilleri 1
Ders 4: Diziler
Genel Bakış
Tanım
Dizilerin tanımlanması
Dizilere ilk değer verilmesi
Yerel ve Global diziler
Dizilerin birbirine atanması
Diziler ile ilgili örnekler
Çalışma soruları
char türden diziler
sizeof işleci nedir ?
2 Programlama Dilleri 1
Dizi Nedir?
Bellekte bitişik bir biçimde bulunan, aynı
türden nesnelerin oluşturduğu veri
yapısına Dizi (Array) denir.
Dizi yapısının en önemli özelliği, mantıksal
bir ilişki içindeki aynı tür verilerin bellekte
bitişik tutulmasıdır.
Programlama Dilleri 1 3
Dizilerin Tanımlanması
4 Programlama Dilleri 1
Diziler aşağıdaki şekilde tanımlanabilir:
<tür ismi> <dizi ismi> [<eleman sayısı>];
• tür ismi: dizinin tüm elemanlarının türünü belirtir.
• dizi ismi: isimlendirme kurallarına uygun dizi ismi
• eleman sayısı: dizinin kaç elemanlı olduğunu
belirtir.
Örnekler:
double merhaba[20];
int isme_bak[50];
char alan_adi[15];
Dizilerin Tanımlanması
int a=100;
int dizi15[a]; // Geçersizdir. Derleme sırasında
dizinin eleman sayısını derleyici elde
edebilmelidir.
unsigned int row[5.]; // Geçersizdir. Eleman sayısı
tamsayı olmalıdır.
char surname[4*5]; // Geçerlidir. surname [20]
#define ELEMAN_SAYISI 10
int a[ELEMAN_SAYISI ];
int a=100, x[25], y[50];
5 Programlama Dilleri 1
Dizilere ilk değer verilmesi
dizi ismi [eleman sayısı]={ilk eleman,…,son eleman};
double b[5]={2.5, 1.7, 5.9, 4.2, 3.3};
int bm[10]={1,18,-4,0,1,57,3,-89,17,100};
char name[4]={'d', 'a', 't', 'a'};
int xyz[100]={0};
float a[100]={55.275};
int selam[3]={x, x+1, x+2}; // Geçersizdir.
int y[5]={4, 14, 0, 4, -54 ,3}; // Geçersizdir.
long int uzun[ ]={5, 4, 3, 2, 1}; // eleman sayısı=5
6 Programlama Dilleri 1
Dizilere ilk değer verilmesi
Programlama Dilleri 1 7
for (i=0;i<SIZE;i++)
a[i]=1; // dizinin elemanları 1 olur.
int i=0;
while (i<SIZE)
a[i++]=1; // alternatif bir kod…
int bilecik[20], i=5, k=10;
bilecik[++k]=100; // bilecik[11]=100;
bilecik[i--]=0; // bilecik[5]=0; ve i=4 olur.
++bilecik[5];
Dizi Kullanımı
8 Programlama Dilleri 1
int b[ ]={11, 22, 33, 44};
i=1; printf("%d",b[i++]); // 22
i=1; printf("%d",b[++i]); // 33
i=1; printf("%d",b[--i]); // 11
i=1; printf("%d",b[i--]); // 22
printf("%d",++b[2]); // 34 b[2]=34
printf("%d",b[2]++); // 33 b[2]=34
Yerel ve Global diziler
Programlama Dilleri 1 9
#include<stdio.h>
#define ELEMAN_SAYISI 10
int global[ELEMAN_SAYISI]; //global tanımlı dizi
main( )
{
int local[ELEMAN_SAYISI], k; //yerel tanımlı dizi
for (k=0;k<ELEMAN_SAYISI;++k)
printf("global[%d]=%d\n",k,global[k]);
for (k=0;k<ELEMAN_SAYISI;++k)
printf("local[%d]=%d\n",k,local[k]);
}
Dizilerin birbirine atanması
Programlama Dilleri 1 10
int x[SIZE], y[SIZE];
/***/
x=y; // Geçersizdir.
// iki dizi ancak bir döngü deyimi ile kopyalanabilir.
for (k=0;k<SIZE;++k)
x[k]=y[k];
k=0; // alternatif bir kod daha…
while(k<SIZE)
x[k]=y[k++];
Diziler ile ilgili Örnek 1
Programlama Dilleri 1 11
Diziler ile ilgili Örnek 2
Programlama Dilleri 1 12
Diziler ile ilgili Örnek 3
Programlama Dilleri 1 13
Diziler ile ilgili Örnek 4
Programlama Dilleri 1 14
k i a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
54 22 98 1 36 72 10 40 82 62
0 0 22 54 98 1 36 72 10 40 82 62
0 8 22 54 1 36 72 10 40 82 62 98
1 0 22 54 1 36 72 10 40 82 62 98
1 7 22 1 36 54 10 40 72 62 82 98
2 0 1 22 36 54 10 40 72 62 82 98
2 6 1 22 36 10 40 54 62 72 82 98
3 0 1 22 36 10 40 54 62 72 82 98
3 5 1 22 10 36 40 54 62 72 82 98
4 0 1 22 10 36 40 54 62 72 82 98
4 4 1 10 22 36 40 54 62 72 82 98
5 0 1 10 22 36 40 54 62 72 82 98
5 3 1 10 22 36 40 54 62 72 82 98
6 0 1 10 22 36 40 54 62 72 82 98
6 2 1 10 22 36 40 54 62 72 82 98
7 0 1 10 22 36 40 54 62 72 82 98
7 1 1 10 22 36 40 54 62 72 82 98
8 0 1 10 22 36 40 54 62 72 82 98
Diziler ile ilgili Örnek 5
Programlama Dilleri 1 15
k i temp a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
1 22 54 22 98 1 36 72 10 40 82 62
1 1 22 22 54 98 1 36 72 10 40 82 62
2 98 22 54 98 1 36 72 10 40 82 62
2 2 98 22 54 98 1 36 72 10 40 82 62
2 1 98 22 54 98 1 36 72 10 40 82 62
3 1 22 54 98 1 36 72 10 40 82 62
3 3 1 22 54 1 98 36 72 10 40 82 62
3 2 1 22 1 54 98 36 72 10 40 82 62
3 1 1 1 22 54 98 36 72 10 40 82 62
4 1 36 1 22 36 54 98 72 10 40 82 62
5 1 72 1 22 36 54 72 98 10 40 82 62
6 1 10 1 10 22 36 54 72 98 40 82 62
7 1 40 1 10 22 36 40 54 72 98 82 62
8 1 82 1 10 22 36 40 54 72 82 98 62
9 1 62 1 10 22 36 40 54 62 72 82 98
Diziler ile ilgili Örnek 6
Programlama Dilleri 1 16
k i min index a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
0 54 0 54 22 98 1 36 72 10 40 82 62
0 9 1 3 54 22 98 1 36 72 10 40 82 62
1 22 1 1 22 98 54 36 72 10 40 82 62
1 9 10 6 1 22 98 54 36 72 10 40 82 62
2 98 2 1 10 98 54 36 72 22 40 82 62
2 9 22 6 1 10 98 54 36 72 22 40 82 62
3 54 3 1 10 22 54 36 72 98 40 82 62
3 9 36 4 1 10 22 54 36 72 98 40 82 62
4 54 4 1 10 22 36 54 72 98 40 82 62
4 9 40 7 1 10 22 36 54 72 98 40 82 62
5 72 5 1 10 22 36 40 72 98 54 82 62
5 9 54 7 1 10 22 36 40 72 98 54 82 62
6 98 6 1 10 22 36 40 54 98 72 82 62
6 9 62 9 1 10 22 36 40 54 98 72 82 62
7 72 7 1 10 22 36 40 54 62 72 82 98
7 9 72 7 1 10 22 36 40 54 62 72 82 98
8 82 8 1 10 22 36 40 54 62 72 82 98
8 9 82 8 1 10 22 36 40 54 62 72 82 98
Diziler ile ilgili Örnek 7
Programlama Dilleri 1 17
Diziler ile ilgili Örnek 8
Programlama Dilleri 1 18
Çalışma Soruları 1
Programlama Dilleri 1 19
30-70 arasında rastgele tamsayılardan oluşan 20
elemanlı bir dizinin en büyük ikinci elemanını
bulan C kodunu yazınız.
A[10] ve B[20] şeklinde sıralı tamsayılardan
oluşmuş iki diziyi bir sıralı C[30] dizisi şeklinde
birleştiren C kodunu yazınız.
dizi[50] 50-70 arasında rastgele üretilen
sayılardan oluşmuş bir dizi olduğuna göre 55
sayısının bu dizi içerisinde kaç kez
tekrarlandığını ekrana döken C kodunu yazınız.
char türden diziler
Programlama Dilleri 1 20
Karakter dizileri char türden dizilerdir.
char dizimiz[25];
dizimiz[0]='A';
dizimiz[1]='L';
dizimiz[2]='I'; // dizi 25 elemanlı bir dizi olmasına
rağmen daha kısa yazılarda bu dizi de tutulabilir…
for (k=0; k<25;++k)
putchar(dizimiz[k]); //bu döngü ile yalnızca “ALI”
ekrana yazılmaz. Dizinin diğer 22 çöp elemanı da
yazılır.
char türden diziler
Programlama Dilleri 1 21
C dilinde karakterler üzerinde işlemlerin hızlı ve etkin
yapılabilmesi için sonlandırıcı (Null) karakter
kullanılır. Sonlandırıcı karakter '\0' ASCII tablosunun
0 numaralı karakteridir. Görüntüsü yoktur.
main( ) {
printf("%d\n", '0'); // 48 (0’ın ASCII kodu) basar.
printf("%d\n", '\0'); // 0 basar.
}
char türden dizilerin uzunluğunu bilmeye gerek
yoktur. Çünkü yazının sonunda ' \0 ' bulunur. Bu
sebeple SIZE elemanlı bir dizide en fazla SIZE-1’lik
yazı saklanabilir.
char türden diziler
Programlama Dilleri 1 22
char name[8]={'B', 'i', 'l', 'e', 'c', 'i', 'k', '\0'};
char name[5]={'V', 'a', 'n'}; /* dizinin
kalan kısmına yandaki gibi sonlandırıcı
karakter eklenir.*/
char name[5]="Van"; /*sonlandırıcı
karakteri otomatik olarak ekler.*/
char name[3]="Van"; /* sonlandırıcı karakter eklenmez.*/
char name[6]= "Bilecik"; //Geçersizdir.
char name[25]; gets(name); //klavyeden enter basılana
kadar girilmiş karakterleri name dizisine sırasıyla atar.
char türden diziler
Programlama Dilleri 1 23
gets işlevi ile klavyeden alınan karakterler diziye
yerleştikten sonra dizinin sonuna '\0' konulur.
char türden diziler
Programlama Dilleri 1 24
#include<stdio.h>
#define SIZE 100
int main( )
{
char name[20],surname[30];
int no;
printf("isim soyisim ve numara girin: ");
scanf("%s%s%d",name,surname,&no);
puts(name);
puts(surname);
printf("%d",no);
}
Klavyeden alınan bir yazı
char türden bir diziye
scanf komutu ile
yerleştirilebilir.
Bu amaçla %s format
karakteri kullanılır.
Klavyeden alınan ilk
boşluk karakteri ile diziye
yerleştirme sona erer.
char türden diziler
Programlama Dilleri 1 25
printf("%s\n", name); // puts(name) kodu yerine yazılabilir.
printf ile yazılan kodun tek farkı, imleci alt tarafa taşımaz.
//puts(name) yerine aşağıdaki kod da yazılabilir…
for (i=0; name[i] != '\0'; ++i)
putchar(name[i]);
putchar('\n');
main( )
{
char sehir [ ] = "Bilecik";
sehir[7]= '!'; //sonlandırıcı karakter yerine bir karakter girilmis
puts(sehir); //ilk sonlandırıcı karaktere kadar ekrana basar
}
Çalışma Soruları 2
Programlama Dilleri 1 26
Klavyeden girilen bir verinin uzunluğunu bulan
C kodunu yazınız.
Klavyeden girilen isim ve soy isminizi tersten
ekrana basan C kodunu yazınız.
Klavyeden alınan yazıdaki küçük harfleri
büyük, büyük harfleri ise küçük harfe döndürüp
ekrana basan C kodunu yazınız.
Klavyeden girilen bir yazının içinde bulunan
tüm İngilizce harfleri sayarak kaç tane
olduklarını ekran basan C kodunu yazınız.
Çalışma Soruları 3
Programlama Dilleri 1 27
Klavyeden bir diziye alınan yazının içinden
rakamları silen C kodunu yazınız.
Klavyeden bir diziye alınan yazının içinde
ardışık olarak yer alan eş karakterleri bire
indiren C kodunu yazınız.
Klavyeden alınan 10 tane kelimeyi sözlük
sırasına göre ekrana basan C kodunu yazınız.
sizeof işleci nedir?
Programlama Dilleri 1 28
sizeof bir ifadenin türünün bellekte kaç byte yer
kapladığını bildiren bir işleçtir.
sizeof (int); sizeof(long); sizeof(double);
//terim olarak bir ifade kullanılabilir…
double x;
sizeof (x); sizeof (17.8); sizeof (fonk());
double a[10]; /* dizi elemanlarını toplam byte
uzunluğunu verir.*/
sizeof (a);
i=sizeof (a) / sizeof(a[0]); // neyi verir ?
sizeof işleci nedir?
Programlama Dilleri 1 29
// Bu kod ne iş yapar ?
//A dizisine birkaç eleman daha eklenir ise ne olur ?
//sizeof bir işlev değil, bir işleçtir.
sizeof işleci nedir?
Programlama Dilleri 1 30
/* sizeof (func()) satırında func()
işlevi çağrılmaz. Yalnızca int func()
tür olarak yer alır. */