260 likes | 492 Views
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.
E N D
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)
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
#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; }
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.
#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; }
#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; }
Hatırlatma: Şu ana kadar anlatılan operatörlerin öncelikleri
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.
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 );
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.
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)
#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; }
#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ı
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
#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; }
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 );
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.
#include <stdio.h> #include <conio.h> int main() { intsayac = 1; do { printf( "%d ", sayac ); } while ( ++sayac <= 10 ); getch(); return 0; }
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.
#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; }
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