1 / 22

BPR152 ALGORİTMA VE PROGRAMLAMA - II

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ü

vita
Télécharger la présentation

BPR152 ALGORİTMA VE PROGRAMLAMA - II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL bayramakgul@bartin.edu.tr http://bmyo.bartin.edu.tr/akgul

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

  3. İç 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

  4. Ç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("+---+---+---+---+---+---+---+---+---+---+---+");

  5. 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;

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

  7. İç 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(); }

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

  9. 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);

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

  11. 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);

  12. 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); }

  13. 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 … } … … }

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

  15. 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); } }

  16. 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: …

  17. goto • goto ifadesi C# programlama dilinde iyileştirilmiştir. • goto ifadesi ile etiketlere, switch içinde ki case ve default durumlarına geçilebilir.

  18. 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; }

  19. 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:

  20. 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;) { … }

  21. 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); }

  22. Dinlediğiniz için teşekkürler… Öğr. Gör. Bayram AKGÜL

More Related