Upload
others
View
22
Download
0
Embed Size (px)
Citation preview
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
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