Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

PROGRAMLAMA DİLLERİNE GİRİŞ Ders 3: Döngüler

Benzer bir sunumlar


... konulu sunumlar: "PROGRAMLAMA DİLLERİNE GİRİŞ Ders 3: Döngüler"— Sunum transkripti:

1 PROGRAMLAMA DİLLERİNE GİRİŞ Ders 3: Döngüler
Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği

2 Döngüler Belirli bir sayıda ya da belirli bir koşul sağlanana kadar arka arkaya yapılması gereken işlemler için döngüler kullanılır. Böylece bilgisayarın sürekli yapacağı işlemler için aynı komutları tekrar tekrar yazmak zorunda kalmayız. IF ve GOTO komutlarının birlikte kullanımı ile de döngü kurulabilir, fakat en doğru yol belirli bir sayıda işlem yapmak için FOR, belirli bir koşul sağlanana kadar işleme devam etmek için ise WHILE döngülerini kullanmaktır.

3 FOR Döngüsü for ( int i = A ; i <= B ; i = i + C ) { ... } Örn: 1 ile 100 arasındaki tam sayıları görüntüleme: for ( int i = 1 ; i <= 100 ; i = i + 1 ) { Console.WriteLine(i); Başlangıç Değeri Bitiş Değeri Artım Değeri Döngüde kontrol amaçlı kullanılan değişken i değişkeni döngü dışında geçerli olmayacaktır i++ yada i+=1 yazılabilir. 100’den 1’e görüntüleme: for (i = 100 ; i >= 1 ; i--)

4 1 ile 100 arasındaki sayıların toplamını bulan program
static void Main(string[] args) { int i, toplam = 0; for (i = 1; i <= 100; i += 1) toplam += i; } Console.WriteLine("Toplam = " + toplam); Döngüde tek komut yer aldığı için { ve } (blok başı ve sonu simgeleri) kullanılmayabilirdi. i değişkeni for döngüsü öncesinde tanımlandığı için for döngüsüne ait bloğun dışında da kullanılabilir.

5 Faktöriyel Hesabı Programı
static void Main(string[] args) { int sayi, f = 1, i; Console.Write("Faktöriyeli bulunacak sayı? "); sayi = Convert.ToInt32(Console.ReadLine()); for (i = 2; i <= sayi; i++) f = f * i; Console.WriteLine(sayi + "! = " + f); } Döngüde tek komut yer aldığı için { ve } (blok başı ve sonu simgeleri) kullanılmadı.

6 Faktöriyel Hesabının Akış Şeması
Başla Döngü sayısı belli ise akış şemalarında for döngüsü kullanımına benzer bir içerik yazıyoruz: f=1 sayı i,2,sayı,1 i, 2, sayı, 1 f=f*i i Döngü Değişkeni Başlangıç değeri Bitiş değeri Artım değeri f for (i = 2; i <= sayi; i++) Dur

7 Verilen koşul doğru olduğu sürece döngü devam eder.
WHILE Döngüsü while ( koşul ) { ... if ( koşul ) break; } Verilen koşul doğru olduğu sürece döngü devam eder. Döngüden çıkmak için döngü içinde break ifadesi kullanılabilir (hem FOR hem de WHILE için geçerli). Eğer break bir if koşulu içinde kullanılmadıysa döngü bloğu içinde o satırın altındaki tüm satırlar gereksiz olacaktır.

8 WHILE’da koşulu döngü sonunda vermek
Eğer döngüye koşul aranmadan girilmesi istenirse, döngünün sonunda da koşul kontrolü yapılabilir: do { } while ( koşul );

9 Kullanıcı hatalı giriş yaptığı sürece tekrar giriş istenmesi döngüsü
char i; Console.WriteLine("1) Toplama, 2) Çıkarma, 3) Çarpma, 4) Bölme, 5) Çıkış"); do { Console.Write("İşlemi seçin [1-5]: "); i = Console.ReadKey().KeyChar; Console.WriteLine(); if (i == '5') Environment.Exit(0); } while (i < '1' || i > '5'); ReadKey alt satıra almadığı için gerekli NOT: Geçen hafta 4 işlem programında GoTo kullanmak yerine bu kodu kullanabilirdik.

10 Girilen sayının asal olup olmadığını bulan akış şeması
Kullanıcının girdiği sayının 2’den büyük ve sayı-1’den küçük olan tüm sayılara tam bölünüp bölünmediği kontrol edilir. Başla sayı Döngü içinde verdiğimiz sayi%i=0 (sayi mod i = 0) koşulu sağlandı ise asal olmadığı kesinleştiğinden, diğer sayılar için kontrol yapılmadan döngüden çıkılır. i,2,sayı-1,1 sayi%i=0 Evet Eğer i değişkeni sayi-1'i geçip sayi değerine ulaştıysa döngü sonuna kadar gidilmiş ve hiç bölen bulunamamış, yani sayı asal anlamına gelir. Hayır i 1) sayi-1 yerine sayi/2’ye kadar kontrol edilebilir (2 kat daha hızlı) 2) Sayının kareköküne kadar kontrol edilmesi de yeterli olur (bir sayı karekökünden büyük bir sayıya tam bölünebilir, ama o bölümün sonucu karekökünden küçük olacağı için, kareköke kadar bölen olup olmadığını kontrol etmek yeterlidir) Bu döngünün daha az adımda çalışması sağlanabilir mi? sayi=i Evet Sayı asal Hayır Sayı asal değil Bir sayı yarısından büyük bir sayıya tam bölünemeyeceği için sayi-1 yerine sayi/2 ye kadar döngü daha mantıklı olacaktır. Dur

11 WHILE ile Asal Sayı Bulma
static void Main(string[] args) { int sayi, i = 2; Console.Write("Sayıyı giriniz : "); sayi = Convert.ToInt32(Console.ReadLine()); while (i <= sayi/2) { if (sayi % i == 0) break; // bölen bulundu i++; } if (i >= sayi/2) Console.Write("Sayı asal\n"); else Console.Write("Sayı asal değil\n"); Döngü sayısı belli olduğuna göre FOR döngüsü kullanmak daha mantıklı olur

12 FOR ile Asal Sayı Bulma static void Main(string[] args) { int sayi, i; Console.Write("Sayıyı giriniz : "); sayi = Convert.ToInt32(Console.ReadLine()); for (i = 2; i <= sayi/2; i++) { if (sayi % i == 0) break; // bölen bulundu } if (i >= sayi/2) Console.Write("Sayı asal\n"); else Console.Write("Sayı asal değil\n");

13 GOTO ile Asal Sayı Bulma
static void Main(string[] args) { int sayi, i = 2; Console.Write("Sayıyı giriniz : "); sayi = Convert.ToInt32(Console.ReadLine()); döngü: if (sayi % i == 0) goto son; // bölen bulundu if (i <= sayi/2) { i++; goto döngü; } son: if (i >= sayi/2) Console.Write("Sayı asal\n"); else Console.Write("Sayı asal değil\n"); } Görüldüğü gibi GOTO ile de döngü kurulabilir ama yapılmaması tavsiye edilir

14 Girilen 15 sayıdan pozitif olanların adedini bulup görüntüleyen akış şemaları
IF…GOTO FOR Döngüsü Başla Başla i=1, adet = 0 adet = 0 sayı i,1,15,1 sayı>=0 Evet sayı i=i+1 adet=adet+1 sayı>=0 Hayır Evet adet=adet+1 Evet i<15 Hayır i adet adet Dur Dur

15 Girilen 15 sayıdan pozitif olanların adedini bulup görüntüleyen program
static void Main(string[] args) { int sayi, adet = 0; for (int i = 1; i <= 15; i++) Console.Write(i + ". sayı : "); sayi = Int32.Parse(Console.ReadLine()); if (sayi >= 0) adet++; } Console.Write("Pozitif adedi = " + adet);

16 Girilen 15 sayıdan pozitif olanların adedini bulup görüntüleyen program
static void Main(string[] args) { int sayi, i = 1, adet = 0; döngü: Console.Write(i + ". sayı : "); sayi = Int32.Parse(Console.ReadLine()); if (sayi >= 0) adet++; if (i < 15) { i++; goto döngü; } Console.Write("Pozitif adedi = " + adet); } Sonraki derslerimizde tekrar etmesi gereken işlemleri bu şekilde IF…GOTO ile değil, FOR ve WHILE döngü ifadeleri ile yapacağız.

17 Girilen 10 sayıdan en büyüğünü bulan ve görüntüleyen akış şeması
Kontrol İfadesiyle Döngü İfadesiyle Başla Başla Programı ödev olarak verilmişti Programı sonraki slaytta i=1, eb=0 i,1,10,1 sayı sayı sayı>eb Evet sayı>eb Evet i=i+1 eb=sayı eb=sayı Hayır Hayır Evet i<10 i eb eb Dur Dur

18 Girilen 10 sayıdan en büyüğünü bulan ve görüntüleyen program
static void Main(string[] args) { int sayi, eb = 0; for (int i = 1; i <= 10; i++) Console.Write(i +". sayı : "); sayi = Int32.Parse(Console.ReadLine()); if (sayi > eb) eb = sayi; } Console.Write("En büyük sayı = " + eb); Kullanıcı tüm sayıları negatif girerse ne olur?

19 50 öğrencinin notlarının ortalamasını bulan akış şeması
Başla toplam = 0 i,1,50,1 not toplam=toplam+not i ortalama=toplam/50 ortalama Dur

20 50 öğrencinin notlarının ortalamasını hesaplayıp görüntüleyen program
static void Main(string[] args) { int notu, ortalama, toplam = 0; for (int i = 1; i <= 50; i++) Console.Write(i + ". not : "); notu = Convert.ToInt32(Console.ReadLine()); toplam += notu; } ortalama = toplam / 50; Console.Write("Notların ortalaması = " + ortalama); ortalama değişkeni olmasaydı: Console.Write("Notların ortalaması = " + toplam/50);

21 Ödevler Sayının yarısına kadar değil, daha da az sayıda döngü adımı ile asal sayı bulabilen bir yöntem bulun. 1 ile 1000 arasındaki asal ve mükemmel sayıları bulan ve ekranda görüntüleyen programı yazın. (Mükemmel sayı: bölenlerinin toplamı kendisine eşit olan sayı = ).

22 Ödevler Kullanıcıdan 2 sayı alıp bu sayıların en büyük ortak bölenini ve en küçük ortak katını bulan programı yazın. Fibonacci serisi 0 ve 1 ile başlayıp, bir elemanın değerinin kendisinden önceki iki elemanın toplanması ile oluşturulduğu bir seridir: Kullanıcının klavyeden girdiği sayıda Fibonacci serisi elemanını gösteren programı yazın.


"PROGRAMLAMA DİLLERİNE GİRİŞ Ders 3: Döngüler" indir ppt

Benzer bir sunumlar


Google Reklamları