1 / 26

Nöbetçi Kontrollü Döngü

Nöbetçi Kontrollü Döngü. Ortalama örneğini geliştirelim; Program çalıştırıldığında, kaç kişinin ortalamasının hesaplanacağını önceden bilmeden, sınıf ortalamasını bulacak bir program. Öğrenci sayısı bilinmemekte Program nasıl sonlandırılacak? Nöbetçi değer kullan.

pier
Download Presentation

Nöbetçi Kontrollü Döngü

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. Nöbetçi Kontrollü Döngü • Ortalama örneğini geliştirelim; • Program çalıştırıldığında, kaç kişinin ortalamasının hesaplanacağını önceden bilmeden, sınıf ortalamasını bulacak bir program. • Öğrenci sayısı bilinmemekte • Program nasıl sonlandırılacak? • Nöbetçi değer kullan. • Ayrıca sinyal ve ya işaretçi değer de denir. • ‘Verigirişisonunu.’ gösterir • Kullanıcı nöbetçi değeri girdiğinde döngü biter. • Nöbetçi değer, kabul edilebilir herhangi bir giriş değeriyle karıştırılmayacak biçimde seçilmelidir.( Bu örnek için -1)

  2. Sınıf Ortalaması Problemini Nöbetçi Kontrollü Döngülerle Çözen Sahte Kod Toplam değişkenini sıfır olarak belirle Sayıcı değişkenini sıfır olarak belirle İlk notu gir Kullanıcı nöbetçi değeri girmediği sürece (while) bu notu o andaki değere ekle Sayıcıyı bir arttır Sıradaki notu al(bu değer nöbetçi değer olabilir) Eğer ( if ) sayıcı sıfıraeşit değilse Ortalamayı, notların toplamını sayıcıya bölerek hesapla Ortalamayı yazdır Aksi takdirde ( else ) “Not girilmemiştir” yazdır

  3. #include <stdio.h> #include <conio.h> int main() { float average; int counter, grade, total; total = 0; counter = 0; printf( "Notu giriniz(Cikisicin -1): " ); scanf( "%d", &grade ); while ( grade != -1 ) { total = total + grade; counter = counter + 1; printf( "Notu giriniz(Cikisicin -1): " ); scanf( "%d", &grade ); } if ( counter != 0 ) { average = ( float ) total / counter; printf( "Sinifortalamsi is %.2f", average ); } else printf( "Hic not girilmemistir.\n" ); getch(); return 0; }

  4. Yuvalı Kontrol Yapıları • Bir kontrol yapısını diğerinin içine yuvalamak. • Problem • Bir kursun 10 öğrencinin test sonuçları(1=geçti, 2=kaldı) için bir listesi vardır. • Sonuçları analiz eden bir program yazınız • Eğer 8’den fazla öğrenci geçtiyse ‘yüksek başarı’ mesajını yazdırmanızı istemektedirler. • Göz önünde bulundurulmalıdır ki; • Program 10 test sonucu işleyecektir. Sayıcı kontrollü döngü kullanılacaktır. • İki Sayıcı kullanılacaktır. Bunlardan biri sınavı geçen öğrenci sayısını, diğeri kalan öğrenci sayısını saymak için. • Her test sonucu 1 ya da 2 gibi bir sayıdır. Eğer sayı 1 değilse, bunun 2 olduğunu varsaya biliriz.

  5. #include <stdio.h> #include <conio.h> int main() { int passes = 0, failures = 0, student = 1, result; while ( student <= 10 ) { printf( "SonucGir( 1=gecti,2=kaldi ): " ); scanf( "%d", &result ); if ( result == 1 ) //if/else,whileiçineyuvalanmıştır. passes = passes + 1; else failures = failures + 1; student = student + 1; } printf( "Gecenler: %d\n", passes ); printf( "Kalanlar: %d\n", failures ); if ( passes > 8 ) printf( "Yuksek Basari\n" ); getch(); return 0; }

  6. Atama Operatörleri

  7. Artırma ve Azaltma Operatörleri

  8. #include <stdio.h> #include <conio.h> int main() { int c = 5; printf( "%d\n", c ); printf( "%d\n", c++ ); printf( "%d\n\n", c ); c = 5; printf( "%d\n", c ); printf( "%d\n", ++c ); printf( "%d\n", c ); getch(); return 0; }

  9. Hatırlatma: Şu ana kadar anlatılan operatörlerin öncelikleri

  10. for Döngü Yapısı • Döngüler için kullanıldığında formatı For(ilk değer ataması, döngü koşulu, artırma deyimi) • Örneğin; intcounter; for(counter = 1; counter <= 10; counter++ ) printf( "%d\n", counter ); • Tam sayıları 1’den 10 ‘ a kadar yazdırma.

  11. for Döngü Yapısı • Çoğu durumda for yapısı while yapısı biçimine çevrilebilir. İlk değer ataması; while( döngü koşulu){ ifade; artırma; } • İlk değer ve artırma • Sıklıkla, virgüllerle ayrılmış listelerdir. • Örneğin; inti, j; for (i= 0, j = 0; j + i <= 10; j++, i++) printf( "%d\n", j + i );

  12. Tipik Bir for Yapısı

  13. Tipik Bir for Döngüsünün Akış Diyagramı

  14. for Döngü Yapısıyla İlgili Notlar ve Gözlemler • İlk değer verme , döngü devam koşulu ve artırma deyimleri aritmetik operatörler içerebilir. Örneğin; . Eğerx =2 ve y = 10 ise for ( j = x; j <= 4 * x * y; j += y / x ) eşdeğerdir for ( j = 2; j <= 80; j += 5 ) ile. • Artırma negatif olabilir. • Eğer döngü devam koşulu en baştan yanlışsa, for yapısının gövdesi en baştan atlanır. • Kontrol değişkeni, döngü gövdesinde sıklıkla yazdırılır ya da işleme sokulur ancak bu gerekli değildir.

  15. for Yapısı İle İlgili Örnekler • 1. Kontrol değişkenini 1‘den 100‘e kadar birer birer arttır. for ( i = 1; i <= 100; i++) • 2. Kontrol değişkenini 100‘den 1‘e kadar birer birer azalt. for ( i = 100; i >= 1; i--) • 3. Kontrol değişkenini 7‘den 77‘ye kadar yedişer yedişer arttır. for ( i = 7; i <= 77 ; i += 7) • 4. Kontrol değişkenini 20‘den 2‘ye kadar ikişer ikişer azalt. for ( i = 20; i >= 2 ;i -= 2) • 5. Kontrol değişkenini 2, 5, 8, 11, 14, 17, 20 değerlerini alacak biçimde değiştir. for ( j = 2; j <=20; j += 3) • 6. Kontrol değişkenini 99, 88, 77, 66, 55, 44, 33, 22, 11, 0 değerlerini alacak biçimde değiştir. for ( j = 99; j >= 0 ;j -= 11)

  16. #include <conio.h> #include <stdio.h> int main() {//for iletoplama int sum = 0, number; for ( number = 2; number <= 100; number += 2 ) sum += number; printf( "Toplam: %d\n", sum ); getch(); return 0; }

  17. #include <stdio.h> #include <math.h> #include <conio.h> intmain() { int year; double amount, principal = 1000.0, rate = .05; printf( "%4s%21s\n", "Yil", "DepozitoMiktari" ); for ( year = 1; year <= 10; year++ ) { amount = principal * pow( 1.0 + rate, year ); printf( "%4d%21.2lf\n", year, amount ); } getch(); return 0; } Yeni Önişlemci powfonksiyonu ilk argümanın, ikinci argümanına göre kuvvetini hesaplar. Bir kişi $1000’nı %5 faizle bankaya yatırmıştır. Bütün faizin hesaptaki paraya eklendiğini düşünerek 10 yıl boyunca, her yılsonunda hesapta birikecek parayı hesaplayıp yazdırınız. a = p (1 + r)^n a: n yıl sonra hesapta birikecek miktar p: ilk yatırılan miktar n: yıl sayısı r: faiz oranı

  18. switch Çoklu Seçim Yapısı • switch • Bir değişken ya da bir ifadenin ayrı ayır sabitlerle karşılaştırılması ve buna bağlı olarak farklı işlemlerin yapılması gibi bir dizi seçimin yer aldığı durumlarda kullanılır. Format • case ve tercihe bağlı default kısımlarında oluşur. switch ( ifade){ case '1': actions case '2': actions default: actions } • break; yapıdan çıkmak için

  19. switch Çoklu Seçim Yapısı

  20. #include <stdio.h> #include <conio.h> int main() { char islem; int s1, s2, s3; printf("Önceislemisonrasayilarigirin "); scanf("%c%d%d",&islem, &s1, &s2); switch (islem) { case '+' : s3 = s1 + s2; break; case '-' : s3 = s1 - s2; break; case '*' : s3 = s1 * s2; break; case '/' : s3 = s1 / s2; break; default : printf ("Hataliislem"); } printf("\nSonuc = %d",s3); getch(); return 0; }

  21. do/while Döngü Yapısı • do/while döngü yapısı • while yapısına oldukça benzer. • Döngü devam koşulu, döngünün gövdesi çalışdıktan sonra kontrol edilir. • Bu sebepten, döngü gövdesi en az bir kez çalışır. • Format: do { İfade; } while ( condition );

  22. do/while Döngü Yapısı ve Akış Diyagramı • Örnek (counter= 1): do { printf( "%d ", counter ); } while (++counter <= 10); • 1’den 10’a kadar tamsayıları yazar.

  23. #include <stdio.h> #include <conio.h> int main() { intsayac = 1; do { printf( "%d ", sayac ); } while ( ++sayac <= 10 ); getch(); return 0; }

  24. break ve continue ifadeleri • break • while,for,do/while ve switch ile kullanıldığında o yapıdan çıkış sağlar. • Program yapıdan sonraki ilk ifadeyi çağırarak devam eder. • En genel kullanımı bir döngüden istenen anda çıkmak ve döngünün belli bir kısmandan çıkmaktır. • continue • while,for ve do/while yapıları içinde çalıştığında döngü gövdesinin kalan kısmı atlanır. • while ve do/while yapılarında döngü koşulu hemen kontrol edilir. • for yapısında artırma deyimi çalıştırılır daha sonra ise döngü koşulu kontrol edilir.

  25. #include <stdio.h> #include <conio.h> int main() { int x; for ( x = 1; x <= 10; x++ ) { if ( x == 5 ) break; printf( "%d ", x ); } printf( "\nDonguden x= %d oldugundacikildi\n", x ); getch(); return 0; } #include <stdio.h> #include <conio.h> int main() { int x; for ( x = 1; x <= 10; x++ ) { if ( x == 5 ) continue; printf( "%d ", x ); } printf( "\ncontinue, 5 degerininatlanmasiicinkullanildi\n" ); getch(); return 0; }

  26. Mantık Operatörleri • && ( mantıksal VE) • İki koşulda trueisetrue döndürür. • || ( mantıksal VEYA) • İki koşuldan biritrueisetrue döndürür. • ! ( mantıksal DEĞIL) • Koşul yanlış olduğunda izlenecek yollu belirler. • Döngülerde ki koşul durumları; İfadeSonuç true && false falsetrue || false true !false true

More Related