230 likes | 490 Views
BPR152 ALGORİTMA VE PROGRAMLAMA - II. Öğr . Gör. Bayram AKGÜL bayramakgul@bartin.edu.tr http://bmyo.bartin.edu.tr/akgul. Bugünkü Konular. Döngüler ve Akış Diyagramları C # ‘ta Döngü Tanımlama while döngüsü do-while döngüsü for döngüsü
E N D
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL bayramakgul@bartin.edu.tr http://bmyo.bartin.edu.tr/akgul
Bugünkü Konular • Döngüler ve Akış Diyagramları • C# ‘ta Döngü Tanımlama • while döngüsü • do-while döngüsü • for döngüsü • foreachdöngüsü (listelerde ve koleksiyonlarda kullanılır. Daha sonra işlenecektir.) • İç içe döngüler • Döngülerde kullanılan yardımcı ifadeler • break • continue • goto • Sonsuz döngüler
İç içe döngüler • Döngüleri bir biri içinde kullanabiliriz • Çoğu programlarda bu durum gerekiyor. • Örnek: çarpım tablosu Sütunlar +---+---+---+---+---+---+---+---+---+---+---+ | *| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| +---+---+---+---+---+---+---+---+---+---+---+ | 1| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| | 2| 2| 4| 6| 8| 10| 12| 14| 16| 18| 20| | 3| 3| 6| 9| 12| 15| 18| 21| 24| 27| 30| | 4| 4| 8| 12| 16| 20| 24| 28| 32| 36| 40| | 5| 5| 10| 15| 20| 25| 30| 35| 40| 45| 50| +---+---+---+---+---+---+---+---+---+---+---+ Satırlar
Çarpım Tablosunu Ekrana Yazdırma /* tablo başlığı yazdıralım*/ Console.WriteLine("+---+---+---+---+---+---+---+---+---+---+---+"); Console.Write("| * |"); for (int i =1; i <=10; i++) Console.Write("{0,3}|", i); Console.WriteLine("\n+---+---+---+---+---+---+---+---+---+---+---+"); /* Tabloda: i satırları, j sütunları ifade edecek */ for (int i =1; i <=10; i++) { Console.Write("|{0,3}|", i); /* i için tablonun bir satırını yazdır*/ for (int j =1; j <=10; j++) { Console.Write("{0,3}|", i * j); } Console.WriteLine(); // bir satır ekle } /* Tablonun alt çizgisini yazdır*/ Console.WriteLine("+---+---+---+---+---+---+---+---+---+---+---+");
Faktöriyel hesaplama • Klavyeden girilen n sayısına kadar olan sayıların faktöriyelini ekrana yazdıran bir program yazalım. • Örneğin n=6 için: 0!=1 => 1 1!=1 => 1 2!=2 => 1*2 3!=6 => 1*2*3 4!=24 => 1*2*3*4 5!=120 => 1*2*3*4*5 6!=720 => 1*2*3*4*5*6 … n! = 1*2*3* .. *n intfakt = 1; for(int i = 1; i <= n; i++) fakt*= i;
Faktöriyel hesaplama usingSystem; classProgram { staticvoid Main() { int n, fakt=1; Console.Write("n değeri:"); int.TryParse(Console.ReadLine(), out n); for (int i =0; i <= n; i++) { fakt=1; for (int j =1; j <= i; j++) { fakt*= j; } Console.WriteLine("{0}! = {1}", i, fakt); } Console.ReadLine(); } } n değeri:8 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320
İç içe döngüler devam • Aşağıdaki şekli yapacak kod 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 … int n; Console.Write("n değeri:"); int.TryParse(Console.ReadLine(), out n); for (int i =1; i <= n; i++) { for (int j =1; j <= i; j++) Console.Write(j +" "); Console.WriteLine(); }
Döngü içinde breakkullanımı • switch ifadesinde break kodunun bizi switch ifadesi dışına attığını görmüştük. • Benzer bir şekilde, break döngü içinde kullanıldığın da bizi geçerli döngünün dışına atar.
break kullanımı • Döngü deyimlerinin içerisindekiler çalıştırılırken, döngünün, koşuldan bağımsız kesin olarak bitirilmesi gerektiğinde break deyimi kullanılır. • Örneğin 1/x hesaplama: double x; do { Console.Write("x değeri:"); double.TryParse(Console.ReadLine(), out x); if (x ==0) break; // girilen değer 0 ise çık! Console.WriteLine(1/ x); } while (true);
Bir sürü sayının toplamını hesaplama • 0 girilene kadar girilen sayının toplama eklenmesi isteniyor. intsayı, toplam =0; while (true) /* sonsuz döngü*/ { Console.Write("bir sayı gir (durmak için 0): "); int.TryParse(Console.ReadLine(), outsayı); if(sayı ==0) break; /* döngünün dışına çık */ toplam +=sayı; } Console.Write("toplam="+ toplam); • Normalde sonsuz döngü, ancak kullanıcı 0 girince döngü break tarafından sonlandırılacaktır.
Girilen n sayısının asal olup olmadığını kontrol etme - Kendisi ve 1’den başka böleni olmayan sayılar asal sayılardır. int n, i; Console.Write("Bir sayı giriniz: "); int.TryParse(Console.ReadLine(), out n); for (i =2; i < n; i++) { if (n % i ==0) break; } if (i < n) Console.Write("{0} sayısı {1} sayısına bölünüyor", n, i); else Console.Write("{0} sayısı asaldır!",n);
break (devam) • Bazen döngüyü bitirme koşulu olarak ta kullanılır. • Girilen sayının küpünü hesaplama: int n; while (true) { Console.Write("bir sayı girin veya bitirmek için 0: "); int.TryParse(Console.ReadLine(), out n); if (n ==0) break; Console.WriteLine("n="+ n +", n*n*n*="+ n * n * n); }
break (devam) • Döngüler iç-içe kullanılmış ise break sadece içinde kullanılandöngünün kod bloğunun dışına çıkarır. for (…) { … while(…) { … … break; //whileden çıkar ama hala for döngüsünde … } … … }
continue • continuedöngünün gövdesinde kullanılan yerden sonraki kısmı atlar ve kontrolü döngünün koşul kısmına alır. intsayı, adet=0, toplam =0; while (adet <10) { Console.Write("Sayı Gir:"); int.TryParse(Console.ReadLine(), outsayı); if(sayı<=0) continue; // kalan kısmı atlar adet++; toplam +=sayı; } Console.WriteLine("Toplam = "+ toplam); Klavyeden girilen 10 tane pozitif tam sayının toplamını ekrana yazma: Girilen sayı sıfırdan küçük veya eşit ise adet bir arttırılmayacak ve sayı toplama eklenmeyecektir.
continue • x ve y bir birinden farklı olmak şartıyla |x|+|y|=4 eşitliğini sağlayan tamsayı çiftlerini ekrana yazdıran program: -4,0 -3,-1 -3,1 -2,2 -1,-3 -1,3 0,-4 0,4 1,-3 1,3 2,-2 3,-1 3,1 4,0 int x, y; for (x =-4; x <=4; x++) { for (y =-4; y <=4; y++) { if (x == y) continue; //x=y ise atla if (Math.Abs(x) +Math.Abs(y) ==4) Console.WriteLine(x + ","+ y); } }
goto • Kontrolü keyfi olarak kodun içinde işaretlenmiş (etiketlenmiş) bir yere aktarmak için kullanılır. • gotoifadesinin kullanımı katı bir şekilde istenmez. • Kodu anlaşılmaz ve bakımı zor hale getirir. while (…){ … switch(…){ … … gotodongu_tamam; /* break burada bizi sadece*/ … /* switch ten çıkarabilir */ } /* switch-sonu */ } /*while-sonu */ dongu_tamam: …
goto • goto ifadesi C# programlama dilinde iyileştirilmiştir. • goto ifadesi ile etiketlere, switch içinde ki case ve default durumlarına geçilebilir.
goto örnek: int a ; ... switch (a) { case4: Console.Write("case 4'e geldi."); string b =Console.ReadLine(); Console.Write(b); break; case5: Console.Write("case 5'ten case 4'e git"); gotocase4; default: Console.Write("default kısmı"); break; }
usingSystem; classProgram { staticvoid Main() { Random r =newRandom(); int s =r.Next(1, 11); int i =0, sayı; tekrarla: Console.Clear(); Console.Write("Kalan Tahmin sayısı: "+ (5- i)); Console.WriteLine("\n 1 ile 10 arasında bir sayı giriniz:"); int.TryParse(Console.ReadLine(), out sayı); i++; if (sayı == s) goto tebrikler; if (i ==5)gotobulamadınız; elsegototekrarla; tebrikler: Console.WriteLine("Tebrikler {0}. tahminde buldunuz.", i); goto son; bulamadınız: Console.WriteLine("Tahmin hakkınız bitti. Kaybettiniz!"); son: Console.WriteLine("Oyun Bitti!"); Console.ReadLine(); } } • goto ile oyun: • Bilgisayarın 1 ile 10 aralığında rastgele tuttuğu bir sayıyı 5 tahminde bulmak için yazılmış kod:
Sonsuz Döngüler • Sınırsız sayıda tekrar eden döngülerdir. • Koşul sürekli olarak sağlanırsa döngü sonsuz döngü olmuş olur. while(true) { … } do { … } while(true); for(;;) { … } while(1 < 2) { … } do { … }while(1 == 1); for(;true;) { … }
Sonsuz döngülerden nasıl çıkılır? • Peki bu tür döngülerden nasıl çıkabiliriz? • Basitçe döngünün bir yerlerine “break” koyarak. int n; while(true) { Console.Write("bir sayı girin veya bitirmek için 0: "); int.TryParse(Console.ReadLine(), out n); if (n ==0) break; Console.WriteLine("n="+ n +", n*n*n*="+ n * n * n); }
Dinlediğiniz için teşekkürler… Öğr. Gör. Bayram AKGÜL