Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

While döngüleri.

Benzer bir sunumlar


... konulu sunumlar: "While döngüleri."— Sunum transkripti:

1 while döngüleri

2 Aynı kodun tekrar yürütülmesine izin veren yapılardır.
Tekrarlama yapıları Aynı kodun tekrar yürütülmesine izin veren yapılardır. Bu belli deyimleri belli bir biçimde birden fazla kez yürütebilirsiniz anlamındadır. Deyimler bazı şartlar doğru olarak kaldığı sürece yürütülür. “döngüler” olarak da bilinirler Bazen “tekrarlayıcılar” olarak ta söz edilirler.

3 while tekrar yapısı { do this (again and again...) }
Bazı şartlar doğru olduğu sürece işler gerçekleştirilecektir. Örneğin: (programımsı şekilde) while (something is true) { do this (again and again...) } while (birşeyler doğruysa) { bunu tekrarla (tekrar ve tekrar...) Test edilen şartlar pek çok farklı durum alabilir.

4 While Döngüsünün Bölümleri
Her while döngüsü her zaman üç temel öge içerir: Ateşleme: değişkenlerinizi başlangıç durumuna getirme Test Etme: bazı bilinen durumlara karşı test etme Güncelleme: test edilen değişkenin güncellenmesi

5 Basit While Döngüsü OUTPUT: ÇIKTI: Index: 1 Index: 2 Index: 3 Index: 4 Index: 5 Index: 6 Index: 7 Index: 8 Index: 9 Index: 10 #include <stdio.h> #define MAX 10 main () { int index =1; while (index <= MAX) { printf ("Index: %d\n", index); index = index + 1; } Ateşleme 1. Priming 2. Test Condition Durum testi 3. Update Güncelleme

6 While Döngüsü Akış Diyagramı
Ateşleme Index=1’e ayarla 1. Priming Set index=1 2. Test index <= 10 Doğru TRUE 3a. print index 3b. Update index = index + 1; İndexi yaz index=index+1 olarak güncelle FALSE Yanlış

7 Sonsuz Döngü Sonsuz Döngü: Hiçbir zaman sonlanmayan bir döngü.
Genel olarak, bundan sakınmak istersiniz! Buna rağmen belli bir amaçla sonsuz döngü oluşturmak isteyeceğiniz özel durumlar vardır. Yaygın sınav soruları: Bir kod parçası verilir, kod içindeki hatayı belirlemeniz istenir. Sonsuz döngüleri belirlemeye ihtiyaç duyabilirsiniz.

8 Sonsuz Döngü Örnek #1 #include <stdio.h> #define MAX 10 main () { int index =1; while (index <= MAX) printf ("Index: %d\n", index); } Index: 1 … [forever] ... [sonsuza dek] Here, I have deleted part 3: the index = index + 1 statement. Burada, 3. Bölümü sildim; index=index+1 deyimini

9 test şartını değiştirdim
Sonsuz Döngü, Örnek #2 #include <stdio.h> /*no MAX here*/ main () { int index = 1; while (index > 0) printf ("Index: %d\n", index); index = index + 1; } Index: 1 Index: 2 Index: 3 Index: 4 Index: 5 … [forever] ... [sonsuza dek] Burada, 2. Bölümü: test şartını değiştirdim

10 Sayıcı-kontrollü tekrarlar
Basitçe bir deyimi veya bir deyim grubunu tekrar etmeyi ne zaman durduracağınızı söylemesi için bir sayıcı kullanmayı ifade eder. Daha önceki örnekler sayıcı kontrollü tekrarlardı.

11 Sayıcı (tekrarlayıcı olarakta bilinir)
Programınızın bir deyimler bloğunu kaç kere tekrarlayacağını sayan bir değişkendir. Kullanılmadan önce başlangıç durumuna getirilmelidir Bir sayıcıyı tekrarlama kodunu girmeden hemen önce başlangıç durumuna getirin (“Yakınlık Prensibi”) Tekrarlama tipine bağlı olarak genellikle bir 1 veya 0’dır Eğer başlangıç durumuna getirilmezse, bir “çöp” değeri elde ederiz genellikle mantıksal hatalarla sonuçlanır

12 Tekrarlama Bir tekrarlama yapısı kullanır
Yürütülecek kodun tekrarlanması işlemidir. “Bir tekrarlama” aynı zamanda tekrarlanacak kod boyunca bir atlama veya bir uçuş anlamına da gelir.

13 Daha ince bir örnek #define ITEMS_TO_BUY 10 int iItemsBought = 0 ;
/* yeterince alana kadar zaman satın almaya devam */ while ( iItemsBought < ITEMS_TO_BUY ) { /* bir parça alırken işlenecek kod */ /* sayıcımızı artırmayı unutmayın! Aksi taktirde sonsuza dek dörer */ iItemsBought = iItemsBought + 1; } /* end while itemsbought... */ /* while itemsbought sonu... */ /* while’dan çıktıktan sonra yürütülecek bir sonraki komut */

14 Çıkış Bir tekrarlama yapısında çıkış için kullanılan genel terim
Bir tekrarlama yapısından çıkmak için kullanılan bir deyim DEĞİLDİR Başka durumlardaki kodlardan çıkmak için de kullanılabilir Bir programdan çıkış Bir fonksiyondan çıkış Bu son iki durumda bir çıkışa zorlamak genellikle kod yürütmesini durdurmak için kötü bir yoldur.

15 bir başka örnek #define STUDENTS_ENROLLED_COUNT 50
int iStudentsPresentInClassCount = 0, iCurrentStudentIsHere = 0, iStudentIndex; iStudentIndex = 1; /* init here to make sure */ /* emin olmak için burda başlat */ while ( iStudentIndex <= STUDENTS_ENROLLED_COUNT ) { /* code to count attendance */ /* mevcut sayısını sayma için kod */ iCurrentStudentIsHere = 0 ; /* init to not here */ /* burada başlatmayın */ printf( “Enter 1 if student is here\n” ); scanf( “%d”, &iCurrentStudentIsHere); if ( iCurrentStudentIsHere== 1 ) iStudentsPresentInClassCount = iStudentsPresentInClassCount + 1; /* don't forget to increment our counter! */ /* sayıcımızı artırmayı unutmayın! */ iStudentIndex = iStudentIndex + 1; } /* end while */ /* while sonu */

16 bir başka örnek, devam if ( iStudentsPresentInClassCount <
/*while’dan çıktıktan sonra yürütülecek kod */ if ( iStudentsPresentInClassCount < STUDENTS_ENROLLED_COUNT ) { /* mevcut sayısını almaya başla */ /* sürpriz quizler vermeye başla */ }

17 Nöbetçi-kontrollü tekrarlar
Bir önceki örnekte eğer kullanıcının programın ne zaman sonlanacağına karar vermesini istiyorsak ne olacak? Bir nöbetçi kullan

18 Veri girişini sonlandıran sinyallerdir
Nöbetçiler Veri girişini sonlandıran sinyallerdir Sinyal değeri, taklit değer, veya bayrak değeri olarakta bilinir Belirsiz tekrar olarakta bilinir çünkü kodun gerçekleştireceği döngü sayısı döngüden önce bilinmemektedir

19 Nöbetçiler kullanmak Nasıl kullanılırlar?
Programcı asla normal veriye karşılık gelemeyecek bir değer alır Kullanıcı normal veriyi girer ve sonra bittiğinde, olağan olmayan değeri alır Döngü olağan olmayan değeri görünce döngüyü durduracaktır

20 Nöbetçiler kullanmada geri sayım
Örneğin, insanlar için yaş değeri giriyorsak, nöbetçi olarak -1 alabiliriz Hiç kimsenin -1 yaşında olması beklenmez Kullanıcıya döngünün her tekrarında nöbetçi değerini hatırlatmak iyi bir pratiktir Örneğin, printf(“Hali hazırdaki kişinin yaşını veya sonlandırmak için -1 girin\n”); sonraki değer girişi (nöbetçi olabilir)

21 İyi Programlama tavsiyeleri
Öyle bir nöbetçi değeri alın ki KESİNLİKLE normal veri ile karıştırılmasın Her tekrarda kullanıcıya nöbetçi değerini hatırlatın Y2K benzeri problem Programcılar genellikle döngüleri sonlandırmada nöbetçi olarak 9999 kullanırdı 9 Eylül 1999’da (bazen 9999 olarak kısaltılır), programların beklenenden daha önce yürütmeyi hatalı olarak durdurabileceğinden kaygılandılar. Döngülerde, döngü içinde ihtiyaç duyulmayan komutları DIŞARIDA tutun.

22 Yukardan-aşağı, adım-yoluyla arıtma
Kod geliştirme tekniği Çok genel şekilde algoritmayı temsil eden sözde program ile başlar Algoritmayı her yeniden açıklanış adımında daha detaylı/özel alır (herbir arıtma) Problem bir kez sözde programda yeterli derecede detaylandırıldığında programlamaya başlanabilir. Her bir adım aynı algoritmanın yalnızca biraz daha detaylandırılmış tanımıdır

23 Yukardan-aşağı, adım-yolu örnek
En üstteki analiz Ders quizindeki ortalamayı belirle İlk arıtma (en üsttekini kısımlara ayırma) Değişkenleri başlangıç durumuna getir Girdi, toplam ve not sayısının sayımı Sınıf ortalamasını hesapla ve yaz

24 Yukarıdan-aşağıya örnek, geri sayım
İkinci arıtma gereken özel değişkenleri listeler total (toplam) başlangıç değerini 0 olarak belirle counter (sayıcı) başlangıç değerini 0 olarak belirle İlk arıtmanın ara adımını daha detaylı olarak kısımlara ayırma, ör: ilk notu gir kullanıcı nöbetçiyi girmediği sürece notu toplama ekle not sayıcısına bir ekle sonraki notu gir (nöbetçi olabilir)

25 Yukarıdan-aşağıya örnek, geri sayım
İkinci arıtma geri sayımı İlk arıtmanın son adımı aşağıdaki gibi kısımlara ayrılabilir: Sayıcı 0’a eşit değilse ortalamayı toplam bölü sayıcı olarak ata ortalamayı yaz eşitse “hiç not değeri girilmedi” yaz Bir kez yeterli detay oldu mu, planı ve böylece kodu görmek kolaydır

26 do/while tekrar yapısı
while yapısıyla benzerdir Fakat şartı en yukarda test etmek yerine döngünün sonunda test eder Bir döngünün EN AZ BİR KEZ yürütülmesinin istiyorsanız kullanılır

27 do/while sözde programı
{ something } while (condition) ; Sağ kırlangıç parantezden hemen sonra bir açıklama yerleştirmeye istisnadır, buna rağmen noktalı virgülden sonra hala açıklama yapmamız gerekir.

28 printf( “%d “, iCounter ); iCounter = iCounter + 1;
do/while örneği int iCounter = 1; do { printf( “%d “, iCounter ); iCounter = iCounter + 1; } while ( iCounter <= 10 ) ; Sondaki noktalı virgüle dikkat edin

29 do while döngüsü akış diyagramı
1. Ateşleme Index=1 atayın 1. Priming Set index=1 2a. İndexi yaz 2b. İndex=index+1 olarak güncelleyin 2a. print index 2b. Update index = index + 1; TRUE 3. Test index <= 10 3. İndexi test et <=10 mu? FALSE

30 Notlar Her zamanki while döngüsü ile karışmaması için her zaman parantezler kullanın

31 C bazı genel çalışmalar için kısaltmaları destekler Atama operatörleri
Kısayollar C bazı genel çalışmalar için kısaltmaları destekler Atama operatörleri Arttırma/azaltma çalışmaları

32 Temel ikili operatörler için kısaltmalar sağlanır
Atama Operatörleri Temel ikili operatörler için kısaltmalar sağlanır Ekleme Çıkarma Çarpma Bölme Modül alma (%)

33 Ekleme Atama Operatörü
Yazma yerine iCount = iCount + 1; Yazabilirsiniz iCount += 1 ; Sağ taraftaki ifadenin değerini sol taraftakine ekler ve yeni toplamı sol taraftakinde depolar

34 Çıkarma Atama Operatörü
Yazmak yerine iCount = iCount - 1; Yazabilirsiniz iCount -= 1 ; Sağ taraftaki ifadenin değerini sol taraftakinden çıkarır ve yeni toplamı soldaki değişkende depolar

35 Çarpma Atama Operatörü
Yazmak yerine iCount = iCount * 2; Yazabilirsiniz iCount *= 2; Sol taraftaki değişkenin değerini sağ taraftaki değişkenin değeriyle çarpar ve yeni toplamı sol taraftaki değişkende depolar

36 Bölme Atama Operatörü Yazmak yerine iCount = iCount / 2; Yzabilirsiniz
Soldaki değişkeni sağdaki ifadenin değerine böler ve yeni toplamı soldaki değişkende depolar.

37 Modül Alma Atama Operatörü
Yazmak yerine iSeconds = iSeconds % 60; Yazabilirsiniz iSeconds %= 60; Soldaki değişkenin sağdaki ifadenin değerine bölümünden kalanı alır ve yeni toplamı soldaki değişkende depolar.

38 Örnekler Assigns Meaning Sample Initial Value Operator 3 to c
Farzadelim ki int c = 10 3 to c c = c % 7; c %= 7; 10 %= 2 to c c = c / 5; c /= 5; /= 60 to c c = c * 6; c *= 6; *= 7 to c c = c – 3; c -= 3; -= 17 to c c = c + 7; c += 7; += Assigns Meaning Sample Initial Value Operator

39 Arttırma ve Azaltma Operatörleri
C birli atama operatörleri ++ ve azaltma operatörü -- ‘yi sağlar. Arttırma operatörleri 1 ekler Azaltma operatörleri 1 azaltır Bazı deyimler için kısa yoldan bile daha fazlası Diğer ilişkilendirme operatörleri için değil (*, /, %)

40 iCount++ ; or ++iCount ;
Arttırma Operatörü ++ Yazmak yerine iCount = iCount + 1; or iCount += 1; Yazabilirsiniz iCount++ ; or ++iCount ; İki yeni tercih olarak bilinen ileri-atama ve ön-atama arasında ayırt etmesi güç fark

41 printf( “%d\n”, iCount++ );
İleri-atama ++ operatörü değişkenden sonradır Değişkenin, bulunduğu deyimde başlangıç değerinin kullanılmasına sebep olur VE DAHA SONRA değişkene 1 ekler Örneğin, int iCount = 5; printf( “%d\n”, iCount++ ); 5 yazacaktır... Fakat icount deyimden sonra 6 değerini alır

42 printf( “%d\n”, ++iCount);
ön-atama ++ operatörü değişkenden öncedir Bulunduğu deyimde kullanılmadan ÖNCE değişkenin başlangıç değerine 1 ekler Örneğin, int iCount = 5; printf( “%d\n”, ++iCount); 6 yazacaktır.. Ve icount deyimden sonra 6 değerini alır

43 Daha fazla örnek ++ ileri-attırma ön-attırma
int iTotal = 0; int iCount = 5; iTotal = iCount++ * 2; printf( “%d\n”, iTotal); printf( “%d\n”, iCount); iTotal için 10 yazacaktır ve sonra iCount için 6 iTotal = ++iCount * 2; iTotal için 12 yazacaktır ve sonra iCount için 6

44 iCount-- ; or --iCount ;
Azaltma Operatörü -- Yazım/çalışma olarak arttırma ile benzerdir Yazmak yerine iCount = iCount - 1; or iCount -= 1; Yazabilirsiniz iCount-- ; or --iCount ; İki yeni tercih olarak bilinen ileri-azaltma ve ön-azaltma arasında ayırt etmesi güç fark

45 printf( “%d\n”, iCount-- );
İleri-azaltma -- operatörü değişkenden sonradır Değişkenin, kullanıldığı deyimde başlangıç değerinin kullanılmasına sebep olur VE DAHA SONRA değişkenden 1 çıkarır Örneğin, int iCount = 5; printf( “%d\n”, iCount-- ); 5 yazacaktır... Fakat iCount deyimden sonra 4 olacaktır

46 printf( “%d\n”, --iCount);
Ön-azaltma -- operatörü değişkenden öncedir Bulunduğu deyimde kullanılmadan ÖNCE değişkenin başlangıç değerini 1 azaltır Örneğin, int iCount = 5; printf( “%d\n”, --iCount); 4 yazacaktır.. Ve iCount deyimden sonra 4 olacaktır

47 Daha fazla örnek ++ ileri-azaltma ön-azaltma
int iTotal = 0; int iCount = 5; iTotal = iCount-- * 2; printf( “%d\n”, iTotal); printf( “%d\n”, iCount); iTotal için 10 yazacaktır ve daha sonra iCount için 4 iTotal = --iCount * 2; iTotal için 8 yazar ve iCount için 4

48 Explanation Sample Operator
Özet Tablosu Subtract 1 from c THEN use new value of c in expression c’den 1 çıkart ve SONRA yeni değeri bir deyimde kullan --c -- Use value of c in expression THEN subtract 1 from c c değerini bir deyimde kullan ve SONRA c’den 1 çıkart. c-- Add 1 to c THEN use the new value of c in expression c’ye 1 ekle ve SONRA c’nin yeni değerini bir deyimde kullan ++c ++ Use value of c in expression THEN add 1 to c c değerini bir deyimde kullan ve SONRA c’ye 1 ekle c++ Explanation Sample Operator

49 Notlar Bu farkı görmeniz önemlidir. Benzettiğiniz her iki kod şeklinde de örnekler göreceksiniz. İşleri kolaylaştırmak için, yalnızca bu ders için, yalnızca ileri arttırma/azaltmalara ihtiyaç duyduğunuzdan emin olmaya çalışacağım.

50 Uyarılar iTotal = iCount++ + ++iCount; [Of !] iTotal = (x + y)++ ;
Önceliğin ANSI standartlarına dayalı olduğu yerlerde bazen karışıktır bu yüzden arttırma ve azaltma operatörlerini bir deyim içinde aynı değişken üzerinde bir kereden fazla kullanmayın iTotal = iCount iCount; [Of !] Daha büyük deyimlerde işleyemezi ör: iTotal = (x + y)++ ; Aynı zamanda şartları test ederken veya kontrol döngülerinde kullanmak iyi bir fikir değildir if (x++ == 188 && x++ == 189) [ugh!] { }

51 İyi Programlama Pratikleri
Birli operatörleri arada boşluk bırakmaksızın doğrudan işlenenlerinin yanına yerleştirin


"While döngüleri." indir ppt

Benzer bir sunumlar


Google Reklamları