Teorik Ders 3

Download Report

Transcript Teorik Ders 3

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

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

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

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 -= *= /= %= d -= 4 e *= 5 f /= g %= 3 9 D = d - 4 E = e * 5 F = f / G = g % 3 9 10 to c 1 to d 20 to e 2 to f 3 to g

Artırma ve Azaltma Operatörleri

Operatör

++ ++ -- --

Örnek Deyim

++a a++ --b b--

Açıklama a

‘yı bir arttır ve

a

‘nın yeni değerini

a

‘nın içinde bulunduğu deyimde kullan

a

‘nın değerini

a

‘nın içinde bulunduğu deyimde kullan ve daha sonra

a

‘yı bir arttır.

b

‘yi bir azalt ve

b

‘nin yeni değerini

b

‘nin içinde bulunduğu deyimde kullan

b

‘nin değerini

b

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

{ #include #include 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

Operatör İşleyiş Tip

() + - (tip) * / % ++ - Soldan sağa Sağdan sola Soldan sağa parantez tekli çarpım + == != = += -= *= /= %= Soldan sağa Soldan sağa Soldan sağa Sağdan sola Sağdan sola toplam karşılaştırma eşitlik koşul atama

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.

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

Tipik Bir for Yapısı

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

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.

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

#include #include #include Yeni Önişlemci { int main() int year; double amount, principal = 1000.0, rate = .05;

pow

fonksiyonu ilk argümanın, ikinci argümanına göre kuvvetini hesaplar.

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

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

switch Çoklu Seçim Yapısı

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

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 { #include int main() int sayac = 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 #include 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 #include 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;

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 true || false !false

false true true