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ü foreach dö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
Neden Döngüler? Programda bazı kodların tekrarlanmasını isteriz, bazen de koşul sağlandıkça bazı kodların tekrarlanmasını isteyebiliriz. Aşağıdaki örnekleri düşünelim: Klavyeden girilen bir sürü sayının toplamı an ifadesini hesaplama 1 den N’ye kadar sayıların toplamı 1 den N’ye kadar sayıların karelerini alma
Bir dizi sayının toplamını nasıl hesaplarız? Klavyeden girilecek bir dizi sayının toplamını hesaplayacak bir algoritma yazalım. Input Bir sürü sayı (kaç tane olduğunu bilmiyoruz) 0 sayı girişini bitirecek Output Girilen sayıların toplamı
Bir dizi sayının toplamını hesaplama: Algoritma Başla Toplamı 0 a eşitle Kullanıcıdan sayı girmesini veya 0 ile durmasını iste. Klavyeden girilen sayıyı oku Eğer sayı 0 değil ise 5.1. toplam = toplam + sayi 5.2. 3. adıma git Toplamı yazdır. Bitir
Bir dizi sayının toplamını hesaplama: Akış Diyagramı Başla toplam = 0 Sayı gir veya 0 ile dur Klavyeden Girilen Sayıyı oku sayı != 0? E toplam +=sayı H Toplamı ekrana yazdır Bitir
Bir dizi sayının toplamını hesaplama: Nasıl yapmalıyız? Açıkçası biz kullanıcı 0 girene kadar 3, 4 ve 5. basamakların sürekli çalışmasını istiyoruz. Bunun anlamı; 3, 4 ve 5. adımları bir döngü içinde çalıştırmamız gerekiyor.
an yi nasıl hesaplarız? “a” gerçek sayı, “n” tam sayı ve n>=0 olsun. Örnek, 35 i hesapla. 35 = 3*3*3*3*3 sonuc değişkeni alalım ve ilk değeri 1 olsun. sonuc = 1 (a0=1) a sayısını kendisiyle çarp ve her çarpma işleminde bir say. Sayacın ilk değeri = 0 Sayaç “n” olunca “a” sayısını “n” defa kendisiyle çarpmışız demektir.
an Hesaplama Algoritması Başla Kullanıcıdan “a” ve “n” girmelerini iste Sayacı 0 a eşitle Sonucu 1 e eşitle /* sonuc = a0 = 1 */ (sayac < n) olduğu sürece tekrarla 5.1. sonuc = sonuc * a; /* şimdi sonuc = asayac */ 5.2. sayac++; Sonucu yazdır Bitir
an Hesaplama Akış Diyagramı sayac = 0 Başla sonuc = 1 sayac < n? “a” ve “n” değerlerini giriniz sonucu yazdır H Bitir E sonuc *= a; sayac++;
an Hesaplama – Nasıl Yapmalıyız? “sayac” “n” değerine ulaşana kadar 5.1 ve 5.2 adımlarının tekrarlamalarını istiyoruz. 5.1 ve 5.2 basamaklarını koşul sağlandıkça bir döngü içinde çalışmalarını istiyoruz.
C#’ta döngü yapıları C# ta döngü tanımlama while döngüleri do-while döngüleri for döngüleri foreach (listelerde ve koleksiyonlarda kullanılır) Aşağıdaki yardımcı ifadeler döngülerin içerisinden çıkarmak için kullanılabilir. break continue goto
while Döngüsü While döngüsü koşul sağlandıkça çalışır; ta ki test edilen koşul false olursa döngü biter. Döngünün kaç defa çalışacağı bilinmediği durumlarda kullanılır. Kullanımı: koşul E H ifade1 ifade2 ... while(koşul) { ifade1; ifade2; ... }
Bir sürü sayının toplamını hesaplama: Akış diyagramı – kod int sayı, toplam = 0; Console.Write("Bir sayı girin(durmak için 0):"); int.TryParse(Console.ReadLine(), out sayı); while (sayı != 0) { toplam += sayı; Console.Write("Sayı girin(durmak için 0):"); } Console.Write("Toplam =" + toplam); Başla Bir sayi girin (n) n != 0 ? Y Toplam+=n N Bir sayi girin (n) Toplamı yazdır Bitir
an Hesaplamak için Kod int n, a, sayac = 0; int sonuc = 1; // sonuc = a^0 Console.Write("a değerini gir:"); int.TryParse(Console.ReadLine(),out a); Console.Write("n değerini gir:"); int.TryParse(Console.ReadLine(), out n); while (sayac < n) { sonuc *= a; sayac++; } Console.Write("{0}^{1} = {2} " , a, n, sonuc); sayac = 0 Başla sonuc = 1 sayac < n? “a” ve “n” değer lerini giriniz sonuc yazdır H Bitir E sonuc *= a; sayac++;
a = 3 ve n = 5 için kod izlemesi int n, sayac = 0; int a, sonuc = 1; string str; Console.Write("a değerini gir:"); str = Console.ReadLine(); int.TryParse(str, out a); Console.Write("n değerini gir:"); int.TryParse(str, out n); while (sayac < n) { sonuc *= a; sayac++; } Console.Write("{0}^{1} = {2} " , a, n, sonuc); a n sayac sonuc 3 5 1 0 < 5? True 1 3 1 < 5? True 2 9 2 < 5? True 3 27 3 < 5? True 4 81 4 < 5? True 5 243 5 < 5? False
an Hesaplama: Alternatif Kod int n, sayac = 0; double a, sonuc = 1; // sonuc = a^0 Console.Write("a değerini gir:"); double.TryParse(Console.ReadLine(), out a); Console.Write("n değerini gir:"); int.TryParse(Console.ReadLine(), out n); while (sayac < n) { sonuc *= a; sayac++; } Console.Write("{0}^{1} = {2} " , a, n, sonuc); while (sayac++ < n) sonuc *= a;
1+2+3+..+N işlemini hesaplama Algoritma Kullanıcıdan “n” sayısını iste i = 1 /* İterasyon değişkeni*/ toplam = 0 /* geçerli toplam*/ (i <= n) olduğu sürece tekrarla 4.1. toplam += i; 4.2. i++; Toplamı yazdır
1+2+3+..+N Hesaplama: Akış Diyagramı ve Kod Başla toplam = 0 i <= n? “n” değerini gir Toplamı yazdır H Bitir E toplam += i; i++; int n, i,toplam; Console.Write("n değerini gir:"); int.TryParse(Console.ReadLine(),out n); i = 1; toplam = 0; while (i <= n) { toplam += i; i++; } Console.Write("Toplam = " + toplam);
n=5 için Kod izleme n i top int n, i,toplam; string str; Console.Write("n değerini gir:"); str = Console.ReadLine(); int.TryParse(str, out n); i = 1; toplam = 0; while (i <= n) { toplam += i; i++; } Console.Write("Toplam = " + toplam); 5 1 1 <= 5? True 2 1 2 <= 5? True 3 3 3 <= 5? True 4 6 4 <= 5? True 5 10 5 <= 5? True 6 15 6 <= 5? False
1+2+3+..+N: Alternatif Kod int n, i,toplam; Console.Write("n değerini gir:"); int.TryParse(Console.ReadLine(), out n); i = 1; toplam = 0; while (i <= n) { toplam += i; i++; } Console.Write("Toplam = " + toplam); while (i <= n) toplam += i++;
1 den N sayısına kadar Sayıların Kareleri Tablosunu Oluşturma Girilen n sayısına kadar 1, 2, 3, 4, .., n sayıların karesini veren bir tablo oluşturalım. n = 6 için görünüm aşağıdaki gibi olacak +-----+-----+ | i | i*i | | 1| 1| | 2| 4| | 3| 9| | 4| 16| | 5| 25| | 6| 36|
Kareler Tablosu için Kod int i, n; Console.Write("n değerini gir:"); int.TryParse(Console.ReadLine(), out n); // tablo başlığı Console.WriteLine("+-----+-----+"); Console.WriteLine("| i | i*i |"); i = 1; while (i <= n) { // beş hanede sağa hizalayarak yazar Console.WriteLine("|{0,5}|{1,5}|" , i, i * i); i++; } // tablonun alt çizgisi i = 1 Başla i <= n? n değerini gir Tablonun alt çizgisini yazdır H Bitir E (i, i*i) yazdır i++; Başlığı yazdır
n=4 için kod izleme Console.WriteLine("+-----+-----+"); Console.WriteLine("| i | i*i |"); i = 1; while (i <= n) { Console.WriteLine("|{0,5}|{1,5}|",i,i*i); i++; } // tablonun alt çizgisi n i 4 1 1 <= 4? True 2 2 <= 4? True 3 3 <= 4? True 4 +-----+-----+ | i | i*i | | 1| 1| | 2| 4| | 3| 9| | 4| 16| 4 <= 4? True 5 5 <= 4? False
while Örnek-1 int i = 0; Console.WriteLine("C# programlamayı nasıl buldun"); while (i < 10) { Console.WriteLine("C# Programlama çok zevkli!"); i++; } 10 defa tekrarlar (0 dan 9’a kadar) Aynı mesajı 10 defa yazar
while Örnek-2 int i = 20; Console.WriteLine("C# programlamayı nasıl buldun"); while (i < 10) { Console.WriteLine("C# Programlama çok zevkli!"); i++; } 0 defa tekrarlar (i = 20, 10’dan küçük değil) Hiç mesaj yazmayacak
Dinlediğiniz için teşekkürler… Öğr. Gör. Bayram AKGÜL