Hafta 9 C Dilinde Kontrol ve Döngü Yapıları

Benzer belgeler
Hafta 4 Döngü Yapıları

Hafta 7 C Programlama Diline Giriş ve C Derleyicisi

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

Hafta 11 Çok Boyutlu Diziler

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

Hafta 12 Karakter Tutan Diziler

Hafta 5 Algoritma Örnekleri ve Analizi

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-11 Karakter Diziler. Yrd. Doç. Dr. Ümit ATİLA

Yrd. Doç. Dr. Caner ÖZCAN

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-4 Döngü Yapıları. Yrd. Doç. Dr. Ümit ATİLA

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

Yrd. Doç. Dr. Caner ÖZCAN

Hafta 13 Fonksiyonlar

Yrd. Doç. Dr. Caner ÖZCAN

BÖLÜM 6: KARŞILAŞTIRMALI KONTROL YAPILARI

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

BMT 101 Algoritma ve Programlama I 7. Hafta. Yük. Müh. Köksal Gündoğdu 1

ALGORİTMA VE PROGRAMLAMA I

Akış Kontrol Mekanizmaları

Döngüler - Loops 4/13/2011. ENF-102 Jeoloji Sayaç kontrollü bir döngüdeki temel öğeler. Sayaç (counter) Kontrollü Döngüler.

Döngüler - Loops 4/9/2010. ENF-102 Jeoloji Giriş. Sayaç kontrollü bir döngüdeki temel öğeler. Sayaç (counter) Kontrollü Döngüler.

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Yrd. Doç. Dr. Caner ÖZCAN

Nesne Yönelimli Programlama

Program Akış Kontrol Yapıları

BİLGİSAYAR PROGRAMLAMA DERSİ

Temel Bilgisayar Bilimleri Ders Notu #4-1. kısım

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu

Döngü ve Koşul Deyimleri

PROGRAMLAMA DİLLERİ I

Algoritma ve Programlama: Karar Yapıları ve Döngüler

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-7 C Programlama Diline Giriş

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

MATLAB de. Programlama. Kontrol Yapıları. Döngü Yapıları. Doç. Dr. İrfan KAYMAZ Matlab Ders Notları

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-2 Değişken Kavramı ve Temel Operatörler

Yrd. Doç. Dr. Caner ÖZCAN

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL. Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

KONTROL YAPILARI JAVADA UC TURLU KONTROL YAPISI VARDIR BUNLAR İF ELSE İF ELSE İF SWİTCH YAPILARIDIR. IF ELSE YAPISI if (deger) { }else {

BÖLÜM 7: DÖNGÜ KONTROL YAPILARI

JAVA DÖNGÜ DEYİMLERİ. For Döngüsü

Program AkıĢ Kontrol Yapıları

BİL-142 Bilgisayar Programlama II

BBS515 Nesneye Yönelik Programlama. Ders 3 Zümra Kavafoğlu

C Dersleri Bölüm 3 : Program akışı

SQL PROGRAMLAMA. Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı GO deyimidir.

Week 5 Examples and Analysis of Algorithms

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

Bölüm 4 C de Program Kontrolü

Internet Programming II

Hafta 8 C Dilinde Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

5. Atlama, Karar ve Çevrim Kontrol Deyimleri

BÖLÜM 2 C PROGRAMLAMADA AKIŞ KONTROLÜ. GOTO: C programında programın herhangi bir yerinden bir yerine şartsız olarak atlanmasını sağlayan komuttur.

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 5. Bölüm Karar ve Çevrim Kontrol Yapıları

MTK467 Nesneye Yönelik Programlama. Hafta 4 - Döngüler Zümra Kavafoğlu

Bil Hafta Çalışma Soruları (Yanıtlar)

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

BPR152-Algoritma ve Programlama II Uygulama -8

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

BMT 101 Algoritma ve Programlama I 8. Hafta. Yük. Müh. Köksal GÜNDOĞDU 1

Karşılaştırma İşlemleri ve Koşullu İfadeler

Döngüler. 1.1 while döngüsü

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Bölüm 3 Yapısal Programlama

Döngü komutları komutların bir çok kez yeniden yürülmesini. sağlayan, programlamada kullandığımız önemli yapılardan biridir.

8. Bölüm DİZİLER. tip dizi_ismi[eleman_sayısı]; Bütün diziler 0 ile baţlar.

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

Temel Bilgisayar Programlama

Döngü blokunda tek bir deyim varsa {} yazılmayabilir.

BLM 111 ALGORİTMA VE PROGRAMLAMA I

ARA SINAV 07.Nisan 2015

Arasınav Soruları Güz, Süre: 90 Dakika

BİLGİSAYAR PROGRAMLAMA DERSİ

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

BLM 111 Algoritma ve Programlama I Güz 2018


BİLGİSAYAR PROGRAMLAMA DERSİ

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

Döngü yapıları, (for, do while, while),

Lab Notları 4. for ( ilklenme yeri bir kez çalışır ; Kontrol yeri her döngüde bakılır ; Güncelleme yeri her döngüde )

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Bu amaçla, if ve switch gibi karar verme deyimleri, for, while, do..while gibi döngü deyimleri kullanılır.

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA

for döngüsü for (başlangıç değeri; şart; artım) ifade; for (başlangıç değeri; şart; artım) { ifadeler; }

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

BİLGİSAYAR PROGRAMLAMA

Transkript:

BLM111 Programlama Dilleri I Hafta 9 C Dilinde Kontrol ve Döngü Yapıları Yrd. Doç. Dr. Caner ÖZCAN

Karar (Karşılaştırma) Komutları if-else Koşulların kontrolünde kullanılan komutlardır. Koşulların doğru olup olmamasına (sağlanıp sağlanamamasına) göre işlem akışını yönlendirirler. if (koşul) ifade1; [else ifade2;] koşul Hayır Evet ifade2 ifade1 Eğer koşul doğru ise true (1) durum1 çalışacak değilse durum2 çalışacak. 2

if-else Örnekler int finalnotu; printf( Final notunu girin: ); scanf( %d, &finalnotu); if (finalnotu >= 45) printf( Geçti \n"); int finalnotu; printf( Final notunu girin: ); scanf( %d, &finalnotu); if (finalnotu >= 45) printf( Geçti \n"); else printf( Kaldı!\n"); 3

Eğer birden fazla durum işleteceksek ne yapmalıyız? blok (birleşmiş durumlar) int finalnotu; if(finalnotu >= 45) { printf( Geçti!\n"); printf( Tebrikler!\n"); } else { printf( Kaldı!\n"); printf( Daha iyi çalış.\n"); } /* end-else */ 4

Süslü Parantezlerin Yeri Süslü parantezlerin yeri bir stil sorunudur Compiler için bir sorun değildir. int finalnotu; if(finalnotu >= 45){ printf( Geçti!\n"); printf( Tebrikler!\n"); } else { printf( Kaldı!\n"); printf( Daha iyi çalış.\n"); } /* end-else */ 5

Lojik Operatörlerini Kullanmak if deyimlerinin içine lojik operatörler kullanılabilir. /* If a eşittir 4 VEYA a eşittir 10 */ if (a == 4 a == 10){... } else {... } /* end-else */ /* x 2 VE 20 arasında mı*/ if (x >= 2 && x <= 20){... } /* end-if */ /* y 20 den büyük VE x 30 a eşit değil mi */ if (y > 20 && x!= 30){... } /* end-if */ 6

Lojik Kademeli if Deyimleri Bazen birden fazla koşulu test etmek isteriz, ta ki biri sağlanana kadar. Örneğin n in 0 a eşit, 0 dan büyük ve 0 dan küçük olmasını test etmek istiyoruz. if (n < 0) printf( n < 0\n ); else { if (n == 0) printf( n == 0\n ); else printf( n > 0\n ); } /* end-else */ İkinci if deyimini else içinde kullanmaktansa onun yerine aşağıdaki gibi kullanabiliriz. Kademeli if olarak adlandırılıyor. if (n < 0) printf( n < 0\n ); else if (n == 0) printf( n == 0\n ); else printf( n > 0\n ); 7

Kademeli if Syntax if (durum1) ifade1; [else if (durum2) ifade2; else if (durum3) ifade3; else ifaden;] 8

Kademeli if Örneği int finalnotu; if (finalnotu >= 90) printf( Geçti: Notun A \n ); else if (finalnotu >= 85) printf( Geçti: Notun A- \n ); else if (finalnotu >= 80) printf( Geçti: Notun B+ \n ); else if (finalnotu >= 75) printf( Geçti: Notun B \n ); else if (finalnotu >= 70) printf( Geçti: Notun B- \n ); else if (finalnotu >= 55) printf( Geçti: Notun C \n ); else printf( Kaldı \n ); 9

Koşul Operatörü? Koşulun durumuna göre ilgili değeri veya işlem sonucunu belirtilen değişkene aktarır. if (ifade) durum1; else durum2; Bu ifadeyi daha kısa yazabilecek bir operatör var koşul? ifade1 : ifade2 Örnekler: min = (a < b)? a : b; a = (b >= 0)? b : -b; min a ve b den minimum olanını alır. a b nin mutlak değerini alır. 10

switch Deyimi Seçimli form yapısıdır. Bu durumda kademeli if leri aşağıdaki gibi kullanabiliriz. if (not == 5) printf( Mükemmel\n ); else if (not == 4) printf( iyi\n ); else if (not == 3) printf( geçer\n ); else if (not == 2) printf( zayıf\n ); else if (not == 1) printf( kalır\n ); else printf( geçersiz not\n ); Bir alternatif olarak kademeli if deyimlerinin yerine C switch yapısını destekliyor. 11

switch Deyimi Örnek Önceki kodun kademeli if yerine switch ile yeniden yazımı switch(not){ case 5: printf( Mükemmel\n ); break; case 4: printf( İyi); break; case 3: printf( Geçer\n ); break; case 2: printf( Zayıf\n ); break; case 1: printf( Kalır\n ); break; default: printf( Geçersiz not\n ); break; } /* end-switch */ 12

switch Deyimi Sözdizimi İfadedeki koşula göre seçeneklerden bir tanesini çalıştırır. switch(koşul) { case değer1: durum1; [break;] case değer2: durum2; [break;] default: durumn; [break;] } /* end-switch */ 13

switch Deyimi Örnek char operator; int sonuc; int deger; switch(operator) { case + : sonuc += deger; break; case - : sonuc -= deger; break; case * : sonuc *= deger; break; case / : if(deger == 0) { } else sonuc /= deger; break; default: printf( bilinmeyen işlem\n ); break; } /* end-switch */ printf( Error: sıfıra bölme hatası \n ); printf( işlem iptal edildi \n ); 14

switch İçindeki break break bizi switch bloğunun dışına atar. Eğer break unutulur veya yazılmazsa kontrol bir sonraki case den devam eder. switch(not){ case 5: printf( Mükemmel\n ); case 4: printf( İyi\n ); case 3: printf( Geçer\n ); case 2: printf( Zayıf\n ); case 1: printf( Kalır\n ); default: printf( Geçersiz not\n ); } /* end-switch */ If not == 3, aşağıdaki yazılacak Geçer Zayıf Kalır Geçersiz not 15

Döngü Komutları Ardışık veya tekrarlı işlemlerin yapılmasını sağlayan komutlardır. C programlama dilinde üç döngü yapısı bulunmaktadır. while döngüleri do-while döngüleri for döngüleri Aşağıdaki yardımcı ifadeler döngülerin içerisinden çıkmak için kullanılabilir. break continue 16

Bir Dizi Sayının Toplamını Hesaplama-Akış Diyagramı Başla toplam = 0 Kullanıcıdan sayı girmesini veya -1 ile durmasını iste. Sayıyı oku sayi!= -1? H Print toplam E toplam +=sayi Bitir 17

while İfadesi C dilindeki ön koşullu döngüdür. Verilen koşul sağlandığı (doğru olduğu) sürece döngü içindeki işlemler gerçekleştirilir. Döngünün kaç defa çalışacağı bilinmediği durumlarda kullanılır. while(koşul) { ifade1; ifade2;... } koşul H E ifade1 ifade2... 18

Klavyeden Girilen Sayıların Toplamını Hesaplama int toplam = 0; int n; Start printf( Bir sayi girin(durmak icin -1): "); scanf("%d", &n); Bir sayi girin (n) while (n!= -1){ toplam += n; printf( sonraki sayi(durmak icin -1):"); scanf("%d", &n"); } printf( Toplam =%d\n", toplam); n!= -1? H Toplamı yazdır E Top+=n Bir sayi girin (n) End 19

while Örnek int i = 0; printf( C programlamayı nasıl buldun?\n ); while(i < 10) { printf( C Programlama çok zevkli!\n ); i++; } 10 defa tekrarlar (0 dan 9 a kadar) Aynı mesajı 10 defa yazar 20

while Örnek int i = 20; printf( C programlamayı nasıl buldun?\n ); while(i < 10) { printf( Programlama çok zevkli!\n ); i++; } /* end-while */ 0 defa tekrarlar (i = 20, 10 dan küçük değil) Hiç mesaj yazmayacak 21

while Örnek Problem: a n işlemini hesapla int i; int sayi; int us; int sonuc=1; printf( sayi girin: ); scanf( %d, &sayi); printf( üs girin: ); scanf( %d, &us); i = 1; while (i<= us){ sonuc *= sayi; i++; } /*end-while*/ printf( sayi^us = %d\n,sonuc); int i; int sayi; int us; int sonuc=1; printf( sayi girin: ); scanf( %d, &sayi); printf( üs girin: ); scanf( %d, &us); i = 1; while (i++<= us) sonuc *= us; printf( sayi^us = %d\n,sonuc); 22

while Örnek Problem: 1+2+3+4+ +N işlemini hesapla int i; int n; int top = 0; printf( n girin: ); scanf( %d, &n); i = 1; while (i<= n){ top += i; i++; } /* end-while */ printf( Toplam: %d\n, top); int i; int n; int top = 0; printf( n girin: ); scanf( %d, &n); i = 1; while (i<= n) top += i++; printf( Toplam: %d\n, top); 23

do while İfadesi Son koşullu döngüdür. "while" ile belirtilen koşul sağlandığı (doğru olduğu) sürece döngüdeki işlemler yapılır. Bazı durumlarda döngü bir kere çalıştıktan sonra devam edip etmemeye karar vermek isteriz. Bu durumlarda "do while" döngüsü kullanılır. Döngünün gövdesi en az bir kere çalışmaktadır. do { ifade1; ifade2;... } while(koşul); ifade1 ifade2... koşul N Y 24

do while Örnek int i = 0; printf( C Programlamayı nasıl buldun?\n ); do { printf( Programlama çok zevkli!\n ); i++; } while(i < 10); 10 defa tekrarlar (0 dan 9 a kadar) Aynı mesajı 10 defa tekrarlar 25

do while Örnek int i = 20; printf( C Programlamayı nasıl buldun?\n ); do { printf( Programlama çok zevkli!\n ); i++; } while(i < 10); 1 kere tekrarlar (i = 20 için) Aynı mesajı bir kere yazar 26

while ile do while Arasındaki Fark Nedir? while Döngüye koymak için kontrol eder Döngü çalışabilir veya çalışmaz do while Döngüden çıkarmak için kontrol eder. Döngü en az bir kere çalışır 27

for Döngüsü Sayıcılı döngü komutudur. Örneğin döngünün N defa çalışmasını istiyoruzdur. Daha sık kullanılır. Koşul sağlandığı (doğru olduğu) sürece döngü bloğu işlemleri yapılır. for(başlangıç değerleri;koşul;adım) {... işlemler... } 28

for Akış Diyagramı ve while Eşiti for(ilk değer; koşul; adım) { ifade1; ifade2;... } ilk değer koşul H E ifade1 ilk değer; while(koşul) { ifade1; ifade2;... adım; } ifade2... adım 29

for Örnek Problem: 1 den 10 a kadar sayıları yazdır int say; for(say = 1; say <= 10; say++) { printf("%d ",say); } printf("\n"); Başla say = 1 say <= 10 E output: 1 2 3 4 5 6 7 8 9 10 H Sayıyı yazdır say++ Bitir 30

for İfadesinin Kullanımı for ifadesi genellikle bir değişkeni artırmak veya azaltmak için en iyi tercihtir. for (i=0; i<n; i++) 0 dan N-1 e kadar sayar for (i=1; i<=n; i++) 1 den N e kadar sayar for (i=n-1; i>=0; i--) N-1 den 0 a kadar sayar for (i=n; i>=1; i--) N den 1 e kadar sayar 31

for Örnek Problem: 1+2+3+4+ +N işlemini hesapla top = 0; for(i=1; i<=n; i++){ top += i; } İlk değer (i=1), kontrol(i<=n) ve değiştir(i++) ifadelerin her biri opsiyoneldir ve yazılmayabilir. top=0; i=1; for(; i<=n; i++){ top += i; } top=0; for(i=1; i<=n;){ top += i++; } top=0; for(; i<=n;){ top += i++; } 32

İç içe Döngüler Döngüleri bir biri içinde kullanabiliriz Çoğu programlarda bu durum gerekiyor. Örnek: çarpım tablosunu yazdıralım int i, j; for (i=1; i <= 10; i++){ printf( i: %d:,i); for (j=1; j <= 10; j++){ printf( %5d, i*j); } /* end-for-içerdeki */ printf( \n ); } /* end-for-dışardaki */ 33

Döngü İçinde break & continue 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. int toplam = 0; int n; while (1){ /* sonsuz döngü*/ printf( bir sayı gir (durmak için -1): "); scanf("%d", &n"); if (n == -1) break; /* döngünün dışına çık */ toplam += n; } /* end-while */ printf( toplam=%d\n", toplam); 34

break Bazı durumlarda döngünün ortasında döngüden çıkmak için kullanılır. while (1){ printf( bir sayı girin veya bitirmek için 0: ); scanf( %d, &n); if (n == 0) break; printf( n=%d, n*n*n*=%d\n, n, n*n*n); } /* end-while */ 35

continue Kontrolü döngünün sonuna alır. Unutmayın, hala döngünün içindeyiz. continue basitçe, döngünün gövdesinde kullanılan yerden sonraki kısmı atlar ve kontrolü döngünün sonuna alır. int i; int n = 0; int toplam = 0; while (n<10){ scanf( %d, &i); if (i == 0) continue; /*(B) ye geçer */ n++; toplam += i; /*(B)*/ } /* end-while */ 36

Sonsuz Döngüler Sınırsız sayıda tekrar eden döngüler. while (1){ } do{ } while (1); for (;;){ } Peki bu tür döngülerden nasıl çıkabiliriz? Basitçe döngünün bir yerlerine break koyarak. while (1){ printf( Bir sayı gir (durmak için 0): ); scanf( %d, &n); if (n == 0) break; printf( n=%d, n*n*n*=%d\n, n, n*n*n); } /* end-while */ 37

Virgül Operatörü Zaman zaman birkaç ifadeyi birleştirip bir tek ifade olarak yazmak isteriz. Böyle durumlarda virgül operatörünü kullanırız. ifade1, ifade2,, ifaden; i=1, j=2, k=i+j; eşittir ((i=1), (j=2), (k=i+j)); Değerlendirme soldan sağa yapılır İfadenin sonucu = k=i+j; yani 3 38

Kaynaklar Doç. Dr. Fahri Vatansever, Algoritma Geliştirme ve Programlamaya Giriş, Seçkin Yayıncılık, 12. Baskı, 2015. J. G. Brookshear, Computer Science: An Overview 10th Ed., Addison Wisley, 2009. Kaan Aslan, A dan Z ye C Klavuzu 8. Basım, Pusula Yayıncılık, 2002. Paul J. Deitel, C How to Program, Harvey Deitel. Bayram AKGÜL, C Programlama Ders notları 39