nöbetçi kontrollü döngü

26
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. ‘Veri girişi sonunu.’ 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

Upload: pier

Post on 19-Mar-2016

65 views

Category:

Documents


5 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 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ı bilinmemekteProgram nasıl sonlandırılacak?

• Nöbetçi değer kullan.Ayrıca sinyal ve ya işaretçi değer de denir. ‘Veri girişi sonunu.’ gösterirKullanı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)

Page 2: Nöbetçi Kontrollü Döngü

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ıra eş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

Sınıf Ortalaması Problemini Nöbetçi Kontrollü Döngülerle Çözen Sahte Kod

Page 3: Nöbetçi Kontrollü Döngü

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

Page 4: Nöbetçi Kontrollü Döngü

• 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.

Yuvalı Kontrol Yapıları

Page 5: Nöbetçi Kontrollü Döngü

#include <stdio.h>#include <conio.h>int main(){ int passes = 0, failures = 0, student = 1, result; while ( student <= 10 ) { printf( "Sonuc Gir( 1=gecti,2=kaldi ): " ); scanf( "%d", &result ); if ( result == 1 ) //if/else,while içine yuvalanmış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; }

Page 6: Nöbetçi Kontrollü Döngü

Atama Operatörleri

Atama Operatörü

Örnek Deyim Açıklama Atar

Varsaylım ki: int c = 3, d = 5, e = 4, f = 6, g = 12; += c += 7 C = c + 7 10 to c -= d -= 4 D = d - 4 1 to d *= e *= 5 E = e * 5 20 to e /= f /= 3 F = f / 3 2 to f %= g %= 9 G = g % 9 3 to g

Page 7: Nöbetçi Kontrollü Döngü

Artırma ve Azaltma Operatörleri

Operatör Örnek Deyim Açıklama

++ ++a a‘yı bir arttır ve a‘nın yeni değerini a‘nın içinde bulunduğu deyimde kullan

++ a++ a‘nın değerini a‘nın içinde bulunduğu deyimde kullan ve daha sonra a‘yı bir arttır.

-- --b b‘yi bir azalt ve b‘nin yeni değerini b‘nin içinde bulunduğu deyimde kullan

-- b-- b‘nin değerini b‘nin içinde bulunduğu deyimde kullan ve daha sonra b’yi bir azalt

Page 8: Nöbetçi Kontrollü Döngü

#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; }

Page 9: Nöbetçi Kontrollü Döngü

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

Operatör İşleyiş Tip

() Soldan sağa parantez

+ - (tip)

++ -- Sağdan sola tekli

* / % Soldan sağa çarpım

+ - Soldan sağa toplam

< <= > >=

Soldan sağa karşılaştırma

== != Soldan sağa eşitlik

?: Sağdan sola koşul

= += -= *= /= %= Sağdan sola atama

Page 10: Nöbetçi Kontrollü Döngü

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;int counter;for(counter = 1; counter <= 10; counter++ ) printf( "%d\n", counter );

Tam sayıları 1’den 10 ‘ a kadar yazdırma.

Page 11: Nöbetçi Kontrollü Döngü

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ırmaSıklıkla, virgüllerle ayrılmış listelerdir.Örneğin;

int i , j;for (i = 0, j = 0; j + i <= 10; j++, i++) printf( "%d\n", j + i );

Page 12: Nöbetçi Kontrollü Döngü

Tipik Bir for Yapısı

Page 13: Nöbetçi Kontrollü Döngü

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

Page 14: Nöbetçi Kontrollü Döngü

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ğer x = 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.

Page 15: Nöbetçi Kontrollü Döngü

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)

Page 16: Nöbetçi Kontrollü Döngü

#include <conio.h>#include <stdio.h>int main(){//for ile toplama int sum = 0, number;

for ( number = 2; number <= 100; number += 2 ) sum += number; printf( "Toplam: %d\n", sum ); getch(); return 0;}

Page 17: Nöbetçi Kontrollü Döngü

#include <stdio.h>#include <math.h>#include <conio.h>int main(){ int year; double amount, principal = 1000.0, rate = .05;

printf( "%4s%21s\n", "Yil", "Depozito Miktari" );

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

pow fonksiyonu 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ı

Page 18: Nöbetçi Kontrollü Döngü

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.

Formatcase ve tercihe bağlı default kısımlarında oluşur.

switch ( ifade ){case '1':

actionscase '2':

actionsdefault:

actions}

break; yapıdan çıkmak için

Page 19: Nöbetçi Kontrollü Döngü

switch Çoklu Seçim Yapısı

Page 20: Nöbetçi Kontrollü Döngü

#include <stdio.h>#include <conio.h>int main(){ char islem; int s1, s2, s3; printf("Önce islemi sonra sayilari girin "); 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 ("Hatali islem"); } printf("\nSonuc = %d",s3); getch(); return 0;}

Page 21: Nöbetçi Kontrollü Döngü

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 );

Page 22: Nöbetçi Kontrollü Döngü

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.

Page 23: Nöbetçi Kontrollü Döngü

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

getch(); return 0;}

Page 24: Nöbetçi Kontrollü Döngü

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.

Page 25: Nöbetçi Kontrollü Döngü

#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 oldugunda cikildi\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 degerinin atlanmasi icin kullanildi\n" ); getch(); return 0;}

Page 26: Nöbetçi Kontrollü Döngü

Mantık Operatörleri• && ( mantıksal VE)

İki koşulda true ise true döndürür.• || ( mantıksal VEYA)

İki koşuldan biri true ise true döndürür.• ! ( mantıksal DEĞIL)

Koşul yanlış olduğunda izlenecek yollu belirler.• Döngülerde ki koşul durumları;

İfade Sonuçtrue && false falsetrue || false true!false true