Denetim Yapılarıdicle.edu.tr/akademikpersonel/sozerdem/eemb317/Ders 2.pdfDiziler Aynı tipten bir...

37
20.10.2015 1 Nesne Tabanlı Programlama Ders Notu - 2 (Denetim Yapıları, Diziler) Dicle Üniversitesi Mühendislik Fakültesi Elektrik Elektronik Mühendisliği Bölümü 1 Denetim Yapıları

Transcript of Denetim Yapılarıdicle.edu.tr/akademikpersonel/sozerdem/eemb317/Ders 2.pdfDiziler Aynı tipten bir...

20.10.2015

1

Nesne Tabanlı Programlama

Ders Notu - 2

(Denetim Yapıları, Diziler)

Dicle Üniversitesi

Mühendislik Fakültesi

Elektrik Elektronik Mühendisliği Bölümü

1

Denetim Yapıları

20.10.2015

2

if – else

Seçme yapısı, mantıksal ifadelerin sonucuna göre alternatif komutların çalışmasını sağlar.

Mantıksal ifadeler doğru veya yanlış döndürür. İfade doğru değeri döndürdüğünde, if bölümü içindeki komutlar çalışırken, yanlışken else bölümü çalışır.

if – else

Basit if yapısına, tekli seçme yapısı adı verilir, çünkü, doğru değer geldiğinde seçilen komutu çalıştırır ya da göz önüne almaz.

if ve else'den oluşan yapıya, çiftli seçme yapısı adı verilir, çünkü, iki farklı duruma göre iki değişik komut grubunu çalıştırır.

İç içe geçmiş if/else yapısı, birden fazla durumu kontrol eder.

20.10.2015

3

Tekli Seçim Yapısı

Tekli seçme yapısının formu şöyledir:

if ( ifade ) {

komutlar;

}

veya

if ( ifade ) komut;

Örnek

20.10.2015

4

if – else if – else

if genellikle şöyle yazılır:

if – else yapısı da söyle yazılabilir:

if ( ifade )

deyim;

noktalı virgül

gelmeyecek!!!

!

if ( ifade )

deyim1;

else

deyim2;

noktalı virgül

gelmeyecek!!!

!

noktalı virgül

gelmeyecek!!!

!

if – else if – else

if yapısının genel formu şöyledir:

if ( mantıksal ifade doğruysa )

deyim ;

else if (mantıksal ifade doğruysa)

deyim ;

else

deyim ;

20.10.2015

5

Çoklu if – else if – else

Birden fazla else – if yapısı, tek satırlık komutlar olduğunda şöyle kurulabilir:

if ( bu mantıksal ifade doğruysa )

deyim ;

else if (bu mantıksal ifade doğruysa )

deyim ;

else if (bu mantıksal ifade doğruysa )

deyim ;

else

deyim ;

Bloklu if – else if – else

if ( bu mantıksal ifade doğruysa )

{

bu bloktaki komutları çalıştır;

}

else if (bu mantıksal ifade doğruysa )

{

bu bloktaki komutları çalıştır;

}

else

{

bu bloktaki komutları çalıştır;

}

20.10.2015

6

Örnek: Sayı Karşılaştırma

Sınıf Çalışması

Meteoroloji Müdürlüğü, hava durumu raporlarının daha anlaşılabilir olması için, nem oranı değerlerinin insanların anlayabileceği hale getirmek için bir program istemektedir.

Kullanıcın girdiği 0 ve 100 arasındaki tamsayı nem oranı değerleri için ekrana şunları yazacaktır. %20 veya aşağısı "Çok Kuru" %21 - %40: "Kuru" %41 - %60: "Biraz Kuru" %61 - %80: "Biraz Nemli" %81 veya fazla: "Nemli“

Kullanıcıya nem derecesi soran ve if/else yapısı içeren programı yazınız.

20.10.2015

7

Birleşik if deyimleri

C# derleyicisi else deyimini en yakın if deyimiyle eşler. Bu nedenle, program mantığını doğru kurmak ve {} parantezlerini kullanmak daha

doğru olur.

if (nem < 20)

if (sicaklik <= 0)

Console.WriteLine("Soğuk ve kuru bir gün.")

if (ruzgar < 10)

Console.WriteLine("Ne güzel, rüzgar yok");

else

Console.WriteLine("nem düşük ve 0 dereceden yüksek");

else if (nem < 60)

if (sicaklik <= 0)

Console.WriteLine("soguk ve orta nemli.");

else

Console.WriteLine("0'dan büyük, orta nem oranı.");

?

Birleşik if Deyimleri

if (nem < 20) {

if (sicaklik <= 0) {

Console.WriteLine("Soğuk ve kuru bir gün.")

if (ruzgar < 10) {

Console.WriteLine("Ne güzel ki rüzgar yok");

}

}

else {

Console.WriteLine("nem düşük ve 0 dan yüksek");

}

}

else if (nem < 60) {

if (sicaklik <= 0) {

Console.WriteLine("soguk ve orta nemli.");

}

else

Console.WriteLine("0'dan büyük, orta nem oranı.");

}

20.10.2015

8

switch – case yapısı

Çok durumlu seçme yapısı

switch - case

Bir algoritmada bir dizi işlem, bir değişkenin farklı değerlerine göre yapılacaksa, çoklu seçme yapısı kullanışlıdır.

Algoritmada, değişkenin alabileceği her farklı değer için farklı komut dizileri çalıştırılabilir.

C# dili, switch-case yapısı adı altında böyle bir yapı sunar.

20.10.2015

9

Yazım

switch (sınama değeri ){

case sabit_değer1 :işlemler ;

break;case sabit_değer2 :

işlemler ;break;

case sabit_değer3 : işlemler ;

break;default :

işlemler ;break;

}

switch - case

switch kelimesi, yapının başlangıcını belirler.

switch bölümünden sonra bir değişken yazılmalıdır.

Değişkenin tipi karakter veya numerik olabilir.

case bölümünde, sabit değerler olmalıdır. Burada ifade bulunmaz.

case bölümleri break ifadesi ile bitirilmelidir.

case'den sonra { } işaretlerine gerek yoktur.

20.10.2015

10

Sınıf Alıştırması

Ekrandan, öğrencinin aldığı harf notunu (tek harf) okuyan bir program yazınız. Eğer A: "Çok güzel"

B: "Güzel"

C: "Fena Değil"

D: "İyi değil"

F: "Çok kötü"

20.10.2015

11

Alıştırma

Meteoroloji Müdürlüğü, hava durumu raporlarının daha anlaşılabilir olması için, nem oranı değerlerinin insanların anlayabileceği hale getirmek için bir program istemektedir.

Kullanıcın girdiği 0 ve 100 arasındaki tamsayı nem oranı değerleri için ekrana şunları yazacaktır. %20 veya aşağısı "Çok Kuru" %21 - %40: "Kuru" %41 - %60: "Biraz Kuru" %61 - %80: "Biraz Nemli" %81 veya fazla: "Nemli“

Kullanıcıya nem derecesi soran ve switch / case yapısı içeren programı yazınız.

Switch – Case Hakkında Notlar

switch parantezleri içinde double,decimal tipinde değişken kullanılmaz.

case etiketinden sonra istenen sayıda deyim satırı bulunabilir.

Her zaman default: bölümünü kullanmanız program yazarken hataları bulabilmenizi sağlar.

En çok rastlanan hata break; deyiminin unutulmasıdır. Switch yapısı kurulduktan sonra break'lerin doğru yerlerde olup olmadığını kontrol ediniz.

20.10.2015

12

Döngüler

while, do-while, for

döngüleri

Tekrar Yapıları

Tekrar yapıları, kod bloklarının tekrar işletilmesini sağlar.

Tekrar yapısı içindeki kod bloğunun tekrar edilip edilmeyeceği mantıksal bir ifadenin sonucuna göre karar verilir. Eğer yanlışsa, kod bloğu tekrar edilmez.

Kodun belirli bir sayıda tekrar edilmesini sağlayan for döngüsü gibi, belirsiz sayıda tekrar edilmesini sağlayan while veya do-while döngüleri de bulunur.

20.10.2015

13

Tekrar Yapıları

for ve while döngüleri, mantıksal ifadenin en başta sınandığı yapılardır. Mantıksal ifade doğruysa, döngüye girilir yoksa döngüden çıkılır.

do-while döngüsü, tekrar bloğunun en sonunda sınamanın yapıldığı yapılardır. Kod bloğunu bir kez işletir ve bir kez daha tekrarlanabileceği konusunda mantıksal ifadenin sonucuna bakılır.

while döngüsü

Kullanımı iki türlüdür:

while ( mantıksal ifade doğru ) ifade ;

while (mantıksal ifade doğru)

{

ifade ;

ifade ;

}

20.10.2015

14

Örnek

do-while döngüsü

do statement;

while ( mantıksal ifade doğru );

do

{

ifade ;

ifade ;

}

while ( mantıksal ifade doğru) ;

20.10.2015

15

Örnek

for Döngüsü

başlatma deyimleri döngü başlamadan önce çalışan komutlardır. Birden fazla sayıda olabilir. Bu durumda, her deyim arasına "," (virgül) konulur.

düzeltmeler, döngünün sonunda çalıştırılan işlemlerdir. Birden fazla olabilir ve aralarına "," (virgül) konulur. İşletim sırası soldan sağadır.

Döngünün sonunda düzeltmeler yapıldıktan sonra, mantıksal deyim true değerini verirse, döngüye devam edilir. Yoksa döngüden çıkılır.

for( başlatma deyimleri;mantıksal deyim;düzeltmeler)

{

deyim;

}

20.10.2015

16

for Döngüsü

for (deyim1 ; deyim2 ; deyim3)

{

ifadeler ;

}

deyim1, for döngüsünün en başındaki ilk

durumu belirler. Matematiksel bir işlem

olabildiği gibi birbirinden virgüllerle

ayrılmış pek çok işlem de olabilir. Döngü

işletilmeden önce bir kez çalıştırılır.

for Döngüsü

for (deyim1 ; deyim2 ; deyim3)

{

ifadeler ;

}

deyim2, doğru yada yanlış değerini

döndüren mantıksal bir işlemdir. deyim1

içinde değişen değişkenlerden biri

olmasına gerek yoktur.

20.10.2015

17

for Döngüsü

for (deyim1 ; deyim2 ; deyim3)

{

ifadeler ;

}

deyim3, durumdaki değişikliği sağlayan

işlemdir. Birden fazla işlem birbirinden

virgülle ayrılabilir. deyim1 ve deyim2'de

kullanılan değişkenlerle ilgisi olmayabilir.

Örnekler

for (int sayac = 1 ; sayac <= 10; sayac++)

{

Console.WriteLine(sayac.ToString());

}

20.10.2015

18

Örnekler

int sayac = 1;

for ( ; sayac <= 10; )

{

Console.WriteLine(sayac.ToString());

sayac++;

}

int sayac = 1;

for ( ; ; )

{

Console.WriteLine(sayac.ToString());

sayac++;

if (sayac >10) break;

}

Notlar

for yapısı içindeki deyim1, deyim2, ve deyim3 boş bırakılabilir. Ama noktalı virgüllerin tutulması gereklidir.

deyim1'in ve deyim3'ün yazılmaması for döngüsünün whiledöngüsü olarak davranmasını sağlar.

deyim2'yi yazmadan, döngünün ne zaman biteceği bulunamaz. Bu durumda, break komutuyla döngünün dışına çıkılabilir.

Döngüde deyim1 ve deyim3 birden fazla ifade içerebilir. Bunlar kullanılarak program basitleştirilebilir.

20.10.2015

19

for while

deyim1 ;

while ( deyim2 )

{

ifadeler ;

deyim3 ;

}

for ( deyim1 ; deyim2; deyim3 )

{

ifadeler ;

}

Her iki örnek

de birbirinin

aynısı şekilde

çalışır.

Örnek

int sayac ;

sayac = 1 ;

while ( sayac <= 10 )

{

Console.WriteLine(“Sayaç değeri:”+sayac.ToString());

sayac++ ;

}

int sayac ;

for(sayac = 0 ; sayac <= 10 ; sayac++) {

Console.WriteLine(“Sayaç değeri:”+sayac.ToString());

}

20.10.2015

20

Örnek

static void main ( )

{

int k, n ;

for( k = 1, n = 12 ; k<9 && n>6 ; k++, n--)

{

Console.WriteLine ("k= “ + k + “ n= “ + n) ;

}

}

Birbirinden virgülle

ayrılmış ifadeler, her

bölümde yer alabilir.

Birbirinden virgülle

ayrılmış ifadeler, her

bölümde yer alabilir.

Alıştırma

0'dan 100'e kadar rassal sayı tutan ve bu sayıyı kullanıcının tahmin edeceği bir program yazınız.

Kullanıcı, bir sayı girdikten sonra, bu sayının, tutulan sayıdan küçük yada büyük olduğunu söyleyecektir.

Eğer girilen ve tutulan sayı eşitse, program tebrikler diyerek döngüden çıkacaktır.

20.10.2015

21

Algoritma

tutulan = 0 ve 100 arası rassal bir sayı tut

while(true)

{

yaz "Tahmininizi, yazınız"

oku tahmin

if (tahmin eşittir tutulan)

döngüden çık

else if(tahmin küçüktür tutulan)

yaz "küçük"

else

yaz "büyük"

}

Çözüm

20.10.2015

22

Döngüden Çıkış

break anahtar kelimesi döngü yapısından çıkış için kullanılabilir. break iç taraftaki döngüden çıkış için kullanılabilir.

continue, bulunulan yerden döngünün sonuna gitmek için kullanılır.

Her iki anahtar kelime, algoritmaların uygulanmasında çokça kullanılır.

break: döngüden çıkış

Aşağıdaki programda, x'in değeri 5 olduğunda döngüden çıkılmaktadır.

int x = 0;

for( ; ; ) { /* sonsuz döngü */

if(x == 5) break;

Console.WriteLine(x.ToString());

x++;

}

20.10.2015

23

continue: döngüye devam

Aşağıdaki program, 5 dışında 0'dan 9'a kadar olan bütün sayıları yazmaktadır.

int x;

for( x = 0; x < 10 ; x++) {

if(x == 5) continue;

Console.WriteLine(“X = “+ x);

}

continue

for( x = 0; x < 10 ; x++) {

if(x == 5) continue;

Console.WriteLine(x.ToString());

}

for( x = 0; x < 10 ; x++) {

if(x != 5) {

Console.WriteLine(x.ToString());

}

}

Her iki program da

aynı şekilde

çalışmaktadır.

20.10.2015

24

Örnek: İç İçe For Döngüleri

Diziler

20.10.2015

25

Diziler

Aynı tipten bir grup verinin aynı değişken isminde bulunmasıdır.

Grup içerisindeki verilerin hafızada sıralı olarak bulunduğu farz edilir.

C# dilinde dilinde bütün diziler System.Array tipindedir. Yani System.Array sınıfının bütün fonksiyonlarını kullanabilirler.

Diziler

Bir örnek olarak, haftanın günlerini bir boyutlu dizi olarak düşünebiliriz. İlk eleman, Pazartesi, son eleman da Pazar günü olacaktır.

Diğer bir örnek olarak, bir ayda bulunan günleri, iki boyutlu bir dizi olarak düşünebiliriz. Yatayda haftanın günleri bulunurken, düşeyde hafta sayısı vardır.

Bir yıldaki günleri de üç boyutlu bir dizi olarak düşünebiliriz. Haftanın günleri, ilk boyutu oluştururken, ikinci boyut haftaların numarasıdır. Üçüncü boyut da aylardır.

20.10.2015

26

Diziler

Tek boyutlu bir dizi, bir değişken ismi ve tip ve köşeli parantez içinde boyutu olarak tanımlanabilir.

Örneğin,int[] gun = new int[ 7 ];

gun isminde yedi elemanlı bir boyutlu dizi tanımlar.

Dizini tipi int olduğu için elemanları başlangıçta sıfır değerini alacaklardır.

Dizinin Kullanımı

Dizi tanımlanınca, dizideki elemanlara dizinin ismi ve köşeli parantez içinde eleman numarasıyla erişilir. Örn. dizi_adi[index]

C# dilinde, dizideki ilk eleman 0'ıncı (sıfırıncı) sıradaki elemandır. Örneğin, gun dizisinin en

az 0 ve en fazla 6'ıncı elemanlarına erişilebilir.

Köşeli parantez içindeki sayılara indeks numarası adı verilir.

20.10.2015

27

İndeks Numarası

gun[0] gun[1] gun[2] gun[3] gun[4] gun[5] gun[6]

2 6 6 4 12 54 -10

İnt[] gun = new int[7];

gun[5] = 1;

if( gun[5] == 4 ) break;

gun[5] = gun[6] - 1;

Örnekler:

Örnek

for döngüsü

içinde i

değişkeninin

değeri 0'dan 6'ya

kadar gider

20.10.2015

28

Dizilere İlk Değer Atama

Değişkenler tanımlanırken, ilk değerlerinin verildiğinden bahsetmiştik. Benzer şekilde, dizilere de tanımlandıkları anda değer atanabilir.

static void Main(string[] args)

{

int[] gun = { 0,2,4,6,8,10,11 };

..........

}

Dizilere İlk Değer Atama

static void Main(string[] args)

{

int[] gun = { 0,2,4,6,8,10,11 };

}

Derleyici, buradaki sayıları sayar ve [] içindeki

değerin 7 olması gerektiğini bulur ve programıint[] gun = new int[7]

olarak derler.

20.10.2015

29

Dizilere İlk Değer Atama

Eğer, tanımladığımız dizinin elemanlarına başlangıç değeri yüklemiyorsak, o zaman dizinin elemanları tiplerine göre başlangıç değerleri alırlar.

Örneğin sayısal ifadeler sıfır değerini alırken, string ve diğer sınıf tipleri “null” eğeri alırlar.

Uyarı : string tipindeki bir değişkeninin null değeri içermesinin boş satır anlamına gelmediğini unutmayınız. null ifadesi değişkenin için hafızada henüz herhangi bir yer ayrılmadığını ve bu sebeple bir işlem içerisinde değer olarak kullanılamayacağı anlamına gelir.

Örnek

10 tane double tipinde değer alabilen bir dizi tanımlayın ve içine 1.0 ile 10.0 arasında değerler koyun. Ve 9. ve 0. elemanların değerlerini birbiriyle değiştirin.

static void Main(string[] args)

{

double[] dizi = {1.0, 2.0, 3.0, 4.0,

5.0, 6.0, 7.0, 8.0,

9.0, 10.0};

double gecici;

gecici = dizi[9];

dizi[9] = dizi[0];

dizi[0] = gecici;

}

20.10.2015

30

Alıştırma

100 tane sayıyı rastsal olarak üreterek bir diziye koyan bir programı yazınız.

Programınız, bu dizi içindeki değerlerin en yüksek ve en düşük değerlerini bularak ekrana yazacaktır. Ayrıca, ortalama değerini de hesaplayarak ekranda gösterecektir.

Alıştırma - ÇözümProgram en küçük ve en büyük değerleri bulmaktadır. Ortalama bulmayı programa ekleyiniz.

20.10.2015

31

Array.Length()

Dizinin uzunluğunu bulmak için kullanılır.

Doğrudan dizini adından sonra nokta “.” işaretinden sonra çağrılır.

int[] myArray = new int[5];

int len = myArray.Length();

Console.WriteLine(len);

Output : 5

foreach

Dizi içerisindeki her bir eleman için tek tek ilerleyen döngüdür.

for döngüsüne benzemektedir.

20.10.2015

32

foreach

foreach ve for döngüleri birbirlerine dönüştürülebilir.

Çok Boyutlu Diziler

Birden fazla boyutu olan dizilere çok boyutlu diziler denir.

Örneğin iki boyutlu bir dizi satranç tahtasını modellemekte kullanılabilir.

İki tip çok boyutlu dizi vardır. Standart diziler

Çentikli diziler

20.10.2015

33

Standart Çok Boyutlu Diziler

Çok boyutlu dizilerin oluşturulması tek boyutlu dizilere benzer ve onlar kadar kolaydır. Fark köşeli parantezler arasında virgül bulunmasıdır.

int [,] sayılar;

string [,,] satırlar;

Örneğin ikiye üç boyutunda ve string tipinde bir dizi oluşturmak için string[,] dizi = new string[2,3];

yazmak yeterlidir.

Standart Çok Boyutlu Diziler

1 2 3

9 20 5

2 4 0

6 7 0

4 2 11

dizi

Standart dizilerde her bir boyut için satır ve sütun sayıları eşit olur. Bu sebeple standart diziler matrislere benzetilebilir.

20.10.2015

34

Standart Çok Boyutlu Diziler

İki boyutlu bir dizi oluşturup bir döngü içersinde dizinin elemanlarına değerler atayalım.

Dizi İşlemleri

Dizide arama, sıralama

20.10.2015

35

Dizi İşlemleri

Dizi işlemleri, programlarda çok sık kullanılan programlama öğelerindendir.

IndexOf()

LastIndexOf()

Sort()

Reverse()

Array sınıfı yardımıyla kullanılırlar.

IndexOf() - LastIndexOf()

IndexOf() : Aramayı baştan başlatarak aranan elemanın kaçıncı sırada olduğunu döndürür.

LastIndexOf() : Aramayı sondan başlatarak aranan elemanın kaçıncı sırada olduğunu döndürür.

Eğer aranan eleman bulunamazsa -1 döndürür.

20.10.2015

36

Array.IndexOf(), Array.LastIndexOf()

Sonuç : 1

Sonuç : 4

Array.Sort()

Dizinin elemanlarını küçükten büyüğe sıralar.

Sonuç : AliMehmetPınarZeynep

20.10.2015

37

Array.Reverse()

Dizinin eleman sırasını terse çevirir.

Sonuç : 453295321

Not : Array.Sort ve Array.Reverse birlikte kullanılmak zorunda değildir.