• Sonuç bulunamadı

Diziler. Örneğin; int A[20] Tamsayı veri tipinde A isimli 20 elemanlı bir dizi.

N/A
N/A
Protected

Academic year: 2022

Share "Diziler. Örneğin; int A[20] Tamsayı veri tipinde A isimli 20 elemanlı bir dizi."

Copied!
7
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

Diziler

Dizi (array), bellek adreslerinin ardışık (peşpeşe) kullanıldığı sıralı (sequential) erişim yapısına sahip bellek yapısıdır. Bu tip bellek yapısı verilerin birbirleriyle ilişkili olduğu ve ilk oluşan veriden itibaren sırayla diğerlerine erişilebilen bir durumda kullanılabilir. Dizi kapasitesi (eleman sayısı) program yazarken ilan edilir ve program çalıştığı sürece değiştirilemez. Bu sebeple bu tip bellek yapısına statik bellek denir. Dizi bellek modelinin yapısı ardışık bellek olduğu için araya eleman ekleme ve silme gibi işlemlerin yapılması çok zordur.

Eleman sayısının dinamik bir şekilde değiştirilebildiği ve rastgele bellek adresleri kullanabilen ilişkili veriler için liste/bağlı liste gibi bellek modelleri kullanılır. Bu derste sadece dizi yapısı kullanılarak problem çözümü yapılacaktır. Liste veri modeli, veri yapıları dersinde işlenmektedir.

Dizi tanımlarken;

{int, float. char, double..} Dizi_adı [eleman_sayısı]

Önce dizi elemanları hangi veri tipinde ise yazılır. Sonra diziye bir ad verilir, en son olarak da köşeli parantez içerisinde eleman sayısı yazılır. Tabii ki biz algoritma yazarken değişken tanımı

yapmadığımızdan, dizi kullanırken sadece dizi_adı [] şeklinde kullanıyoruz.

Örneğin; int A[20] → Tamsayı veri tipinde A isimli 20 elemanlı bir dizi.

Dizi elemanları bellek adreslerine sıra numaraları kullanılarak yerleştirilir ya da okunur. Sıra numaralarına indis (index) ismi verilir.

(2)

Şekilden de anlaşılacağı gibi dizi yeri yapısında bellek adresleri arasında sıralı ve ilişkisel bir bağ vardır.

Dizi elemanları belleğe yerleşirken veya bellekten okunurken ilk elemanın bulunduğu bellek adresi baz alınır. İlk elemanın bellek indis numarası 0 (sıfır) dır. Şimdilik dizi veri yapısı ile ilgili bu bilgiler yeterlidir.

Problem: Dizi kullanarak girilen 10 adet sayıyı toplayan algoritmayı yazınız.

Şimdi önce bellek şekli çizelim ve çözümü senaryo edelim.

2.indis → A[2]

3.indis → A[3]

. .

1.indis → A[1]

0.indis → A[0] Dizinin ilk adresi

Dizinin son adresi

(3)

Algoritmasını yazalım.

1- Başla

2- Toplam = 0, say = 0 3- Sayı Gir (A[say])

4- Toplam = Toplam + A[say]

5- say++

6- if (say<10) Then goto 3 7- Print (Toplam)

8- Dur.

Çözümü incelersek; 10 adet sayı giriyoruz ve bu sayılar sırayla dizi olarak sunulan bellek adreslerine yerleşiyor. Aynı anda her bir dizi elemanı olan sayı da toplama işlemi yapan bellek adresine ekleniyor.

Biz bu çözümde sayıları girerken toplama işlemi yaptık. Tek döngü kurgusu ile problemi çözdük. Bazı problem çözümlerinde önce sayıların girildiği bir döngü oluşturulur, sonra başka bir döngü ile var olan sayılara ulaşılır ve işlem yapılır.

A [10]

A[0]

6

9 1

8 7

. . .

.

Sayaç Toplam 2

3 6

20

4

5 3 2

63

40 5

27 36 700

10 902

1.eleman 2.eleman 3.eleman

10.eleman

(4)

Çözüm: Bir önceki problemin çözümünde tek bir döngü yeterli olmuştu. Bu problemde de tek döngü yeterli olacaktır. Ancak sayıları girerken veya sayıları girdikten sonra gerekli işlemler yapılabilir.

Önce sayıları girme anında toplayalım.

1-Başla

2-Toplam=0, say=0 3-Sayı Gir (A[say])

4-if (say==2) Then Toplam = Toplam + A[say]

5-if (say==4) Then Toplam = Toplam + A[say]

6-if (say==7) Then Toplam = Toplam + A[say]

7-say++

8-if (say<10) Then goto 3 9-Print (Toplam)

10-Dur.

3.sayı say==2 ise → sayaç 0 (sıfır) 'dan saymaya başlar.

5.sayı say==4 ise 8.sayı say==7 ise

Şimdi sayıları girdikten sonra toplayalım.

1- Başla

2- Toplam=0, say=0 3- Sayı Gir (A[say]) 4- say++

5- if (say<10) Then goto 3 6- Toplam=A[2]+A[4]+A[7]

7- Print (Toplam) 8- Dur.

(5)

Problem: Dizi kullanarak girilen 10 adet sayının en büyük olanını bulan algoritmayı yazınız.

Çözüm: Dizi kullanarak girilmiş sayıların tümü bellek adreslerinde ardışık olarak var olurlar. Dizi kullanmadan daha önce çözülmüş bir problemdi bu ve o zaman tüm sayılar tek bir bellek adresine giriliyordu ve en son girilen sayı bellekte kalıyordu. Şimdi ise tüm sayılar ayrı bir bellek adresinde oluşuyor. Bu problemin çözümünde de hem sayıların girilme anında yani döngü içerisinde en büyük sayı bulunabilir; hem de iki döngülü bir çözümde ilk döngüde sayılar girilir ikinci döngüde en büyük sayı bulunur.

Önce tek döngülü çözümü bulalım. Bu çözümde sayı girişi anında en büyük sayı bulunacaktır.

6

40 A [10]

A[0]

6

9 1

8 7

1.eleman 2.eleman 3.eleman

. . .

.

10.eleman

Sayaç Toplam 2

3

20

4

5 3 2

63

5

27 36

10 700

8.

5.

3. s

746

(6)

2- Say Gir (A[0]) 3- EB = A[0]

4- say = 1

5- Sayı Gir (A[say])

6- if (A[say]> EB) Then EB = A[say]

7- say + +

8- if (say<10) Then Goto 5 9- Print (EB)

10- Dur.

Şimdi ilk döngüde sayıları girelim, ikinci döngüde en büyük sayıyı bulalım.

1- Başla 2- say = 0

3- Sayı Gir (A[say]) 4- say + +

5- İf (say<10) Then Goto 3 6- say = 0

7- EB = A[say]

8- say + +

9- if (A[say]> EB) Then EB = A[say]

10- if (say <9) Then Goto 8 11- Print (EB)

12- Dur.

10 adet sayının en büyüğü bulunurken kural aynıdır. İlk sayıyı en büyük sayı kabul et ve devamında sırası gelen sayıyı o anki en büyük sayı ile karşılaştır. Bu çözümde dizi elemanlarının ilki yani A[0]' daki sayının kopyası EB bellek adresine atanıyor. Devamında ise "say" değeri her döngüde 1 artarak bir sonraki dizi elemanına erişiyor ve oradaki sayı o anki en büyük sayının kopyasını tutan EB bellek adresindeki sayı ile kıyaslanıyor.

(7)

700 A [10]

A[0]

6

9 1

8 7

1.eleman 2.eleman 3.eleman

. . .

.

10.eleman 2

3

6

20

4

5 3 2

63

40

5

27 36 700

10

2 3 6 20

EB

EB say

Referanslar

Benzer Belgeler

Bir terimi kendinden önceki bir veya birkaç terim cinsinden tanımlannan dizilere indirgemeli dizi denir.. DİZİLERİN EŞİTLİĞİ DİZİLERİN

2. SORULARI AŞAĞIDAKİ BİLGİLERE GÖRE CEVAPLAYINIZ. A işletmesi, acil nakit ihtiyacını karşılamak amacıyla B işletmesinin ciro ettiği hatır çekini almıştır. Buna göre,

GÖRE CEVAPLAYINIZ. Bir işletme, nakit fazlasını değerlendirmek amacıyla bir anonim şirketin nominal değeri 8 YTL/adet olan hisse senetlerinden 60.000 adet satın almış ve

6. Tahsili şüpheli hale gelen 10 000 YTL tutarındaki ala- cağın 4 000 YTL’lik kısmı teminatlıdır. İlgili dönemde karşılık ayrılan bu alacak için izlenen yasal süreç

Roma döneminden bu yana kesintisiz yaşamın sürdüğü ve Osmanlı Devleti'nin ilk başkenti olma ayrıcalığını taşıyan bir kentin buna yak ışır şekilde gelişmesi;

Yılda ortalama 6-7 bin dağcının tırmandığı Ağrı Dağı, çevre bilinci oluşmamış dağcılar yüzünden çöplüğe döndü.. Deniz seviyesinden 5 bin 165 metre yüksekteki da

ıuıları oldıığunu vuıgulayı, rık şuntan !öylcdi: &#34;ömcğin nizga, güç ranlrAlıar|nln ıiçeri duzcydc tullanımda olduğu vc çcvıcyi İ irlctmcnin ıoP,

Değer kümesi; reel sayılar kümesi olan dizi reel sayı dizisi, karmaşık sayılar olan dizi karmaşık sayı dizisi adını