programlama dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma...

30
Programlama Dilleri 1 Ders 4: Diziler

Upload: others

Post on 24-May-2020

18 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

Programlama Dilleri 1

Ders 4: Diziler

Page 2: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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

Page 3: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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

Page 4: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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];

Page 5: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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

Page 6: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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

Page 7: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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];

Page 8: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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

Page 9: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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]);

}

Page 10: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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++];

Page 11: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

Diziler ile ilgili Örnek 1

Programlama Dilleri 1 11

Page 12: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

Diziler ile ilgili Örnek 2

Programlama Dilleri 1 12

Page 13: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

Diziler ile ilgili Örnek 3

Programlama Dilleri 1 13

Page 14: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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

Page 15: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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

Page 16: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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

Page 17: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

Diziler ile ilgili Örnek 7

Programlama Dilleri 1 17

Page 18: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

Diziler ile ilgili Örnek 8

Programlama Dilleri 1 18

Page 19: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

Ç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.

Page 20: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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.

Page 21: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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.

Page 22: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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.

Page 23: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

char türden diziler

Programlama Dilleri 1 23

gets işlevi ile klavyeden alınan karakterler diziye

yerleştikten sonra dizinin sonuna '\0' konulur.

Page 24: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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.

Page 25: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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

}

Page 26: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

Ç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.

Page 27: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

Ç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.

Page 28: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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 ?

Page 29: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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.

Page 30: Programlama Dilleri 1w3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/...Çalışma Soruları 1 Programlama Dilleri 1 19 30-70 arasında rastgele tamsayılardan oluşan 20

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. */