(Microsoft PowerPoint - ELN1001 \226 B\335LG\335SAYAR

advertisement
ELN1001 – BİLGİSAYAR
PROGRAMLAMA I
Tekrarlamalar - Döngüler
Dallanmalar
Tekrarlama - Döngü
Pekçok program tekrarlama veya döngü
mantığını içermektedir.
Döngü, döngü devam koşulu sağlandığı
sürece programın tekrar tekrar bir veya daha
fazla program satırını işletmesidir.
Şu ana kadar iki tipte tekrarlama mantığı
üzerinde durulmuştur:
Sayaç kontrollü tekrarlama
Sonlandırıcı kontrollü tekrarlama
1
Sayaç kontrollü tekrarlama
Zaman zaman kesin tekrarlama olarak da adlandırılır.
Bunun sebebi, döngünün tekrarlama sayısının
önceden biliniyor olmasıdır.
Tekrarların sayısını tutmak için kullanılan değişkene
kontrol değişkeni adı verilir.
Kontrol değişkeni (genellikle) ilgili satırlar grubu
işletildikten sonra bir arttırılır.
Kontrol değişkeni, baştan belirlenmiş değere geldiği
zaman, döngüden çıkılır ve döngüden sonraki
satırdan program çalışmaya devam eder.
Sonlandırıcı kontrollü tekrarlama
Kaç tekrar yapacağı önceden bilinmediği
durum için
Döngü, her tekrar için çalıştıracağı satır veya
satırları içerir.
Sonlandırıcı, tekrarları sona erdirmek için
kullanılır.
Sonlandırıcı, gereken tüm bilgiler girildikten
sonra girilmelidir.
Sonlandırıcı, giriş bilgileri kümesinde yer alan
bilgilerden kesinlikle farklı olmalıdır.
2
Sayaç kontrollü döngü
Sayaç kontrollü döngü şu elemanlara ihtiyaç
duyar:
Kontrol değişkeninin (veya döngü sayacının)
adı
Kontrol değişkeninin ilk değeri
Her tekrarda kontrol değişkenin arttırılması
(veya azaltılması)
Kontrol ifadesinin koşulu yanlış yapacak nihai
değeri
Sayaç Kontrollü Tekrarlama - Örnek
#include “stdio.h”
/* main fonksiyonuyla program çalışmaya başlar */
int main(void)
{
int sayac = 1; /* sayacı tanımla ve ilk değer ata */
while (sayac <= 10) { /* Tekrarlama koşulu */
printf(“%d\n”,sayac); /* Sayac değerini ekrana yazdır */
++sayac; /* sayacı arttır */
} /* while döngüsü sonu */
return 0; /* Programın başarıyla tamamlandığını raporla */
1
2
3
4
5
6
7
8
9
10
}
3
Sayaç Kontrollü Tekrarlama
Kontrol değişkeni veri tipini tamsayı olarak seçmek, birçok
hatayı engelleyecektir.
Her kontrol ifadesi bloğunda gereken satırbaşı
boşluklarının bırakılması programların anlaşılabilirliğini
arttıracaktır.
Kontrol ifadelerinden önce ve sonra birer satır boşluk
bırakılması, kontrol bloklarının ayırt edilmesini
kolaylaştıracaktır.
Yazım esnasında bırakılmış satır arası ve satırbaşı
boşlukları, programa iki boyutlu bir görüntü sağlayabilecek
ve anlaşılabilirliğini ciddi şekilde kolaylaştıracaktır.
İçiçe oluşturulmuş çok sayıda döngü, anlaşılabilirliği
zorlaştıracaktır, Genel kural olarak, iç içe üç döngüden
fazla döngü kullanılmamasına dikkat edilmelidir.
for tekrarlama ifadesi
for ifadesi, tek başına tüm sayaç kontrollü tekrarlama
detaylarını tutmaktadır.
for ifadesi çalışmaya başladığında:
kontrol değişkenine bir ilk değer atar.
döngü devam koşulu test edilir.
kontrol değişkeninde ihtiyaç duyulan değişiklik
gerçekleştirilir.
test koşulu doğru olduğu sürece, ifade içindeki kod
bloğu çalıştırılır.
test koşulu bozulur bozulmaz for döngüsünde çıkılarak
bir sonraki kod satırından devam edilir.
4
for tekrarlama ifadesi
while döngüsü
for döngüsü
#include “stdio.h”
#include “stdio.h”
int main(void)
{
int sayac = 1;
int main(void)
{
int sayac;
while (sayac <= 10) {
printf(“%d\n”,sayac);
sayac++;
}
for (sayac=1; sayac <= 10; sayac++) {
printf(“%d\n”,sayac);
}
return 0;
return 0;
}
}
Kontrol
değişkeni
gereken ‘;’
gereken ‘;’
for (sayac=1; sayac <= 10; sayac++)
for anahtar
kelimesi
Kontrol
değişkeni ilk
değer atama
Döngü devam
koşulu
Kontrol
değişkeni değer
değişimi
for tekrarlama ifadesi
Kontrol değişkenine ilk değer atama, döngü devam koşulu ve
kontrol değişkeni değişimi, sayılar yerine aritmetik ifadeler de
içerebilir.
for (j = x; j <= 4*x*y; j += y / x)
x yerine 2, y yerine 10 koyarak ifade
for (j = 2; j <= 80; j += 5)
Değişiklik negatif de olabilir, bu durumda aşağıya doğru sayma
gerçekleştirilir.
Eğer, döngü devam koşulu başlangıçta yanlışsa, döngünün blok
kısmındaki satırlar hiç işletilmez. Yürütme, döngüden sonraki
satırla devam eder.
Kontrol değişkeni, sıklıkla blok satırlarında kullanılır, fakat
kullanılmak zorunda değildir.
for akış diyagramı, while akış diyagramı ile benzerdir.
5
for tekrarlama ifadesi - Örnek
Problem: 2’den 100’e kadar olan çift sayıların
toplamı
#include<stdio.h>
Toplamı tanımla ve ilk değerini sıfırla
sayı adında kontrol değişkenini tanımla
int main(void)
{
int toplam = 0;
int sayi;
sayı ilk değerini 2 yap, sayı değerini her tekrarda 2
arttır, sayı değeri 100’e eşit ve küçük olduğu
sürece kod bloğunu işlet
sayıyı toplama ekle
for (sayi = 2; sayi <= 100; sayi += 2)
{
toplam += sayi;
}
toplamı ekrana yazdır
printf(“Toplam = %d”,toplam);
fonksiyondan çık
return 0;
}
do…while tekrarlama ifadesi
while tekrarlama ifadesine çok benzerdir.
while tekrarlama ifadesinde döngü devam koşulu,
döngü bloğundaki kod satırları işletilmeden test edilir.
Koşul sağlanmıyorsa bloktaki kodlar çalıştırılmadan
döngüden çıkılır.
do…while tekrarlama ifadesinde döngü devam
koşulu, döngü bloğundaki kod satırları
gerçekleştirildikten sonra test edilir. Böylece, kod
bloğunun en az bir kere çalıştırılması garanti edilir.
Tekrarlama ifadelerinin tümünde, sonsuz döngü
oluşmaması için, koşulun nihai olarak bozulması
garanti edilmelidir.
6
do…while tekrarlama ifadesi - Örnek
while döngüsü
do…while döngüsü
#include “stdio.h”
#include “stdio.h”
int main(void)
{
int sayac = 1;
int main(void)
{
int sayac = 0;
do {
printf(“%d\n”,sayac);
++sayac;
} while (sayac <= 10)
while (sayac <= 10) {
printf(“%d\n”,sayac);
++sayac;
}
return 0;
return 0;
}
}
do…while tekrarlama ifadesi –
Akış Diyagramları
do…while
while
Kod bloğu
Koşul
Doğru
Kod bloğu
Doğru
Koşul
Yanlış
Yanlış
7
switch…case çoklu seçim ifadesi
Bir algoritma, bir değişkenin ve ifadenin alabileceği
farlı değerlere göre, farklı kod satırlarının işletilmesini
gerektiren bir kararlar dizisini içerebilir.
Buna çoklu seçim adı verilmektedir.
C programlama dili bu çoklu seçim meselesinde
kullanılmak üzere switch…case ifadesini sağlamıştır.
Switch…case ifadesi, bir dizi case ile etiketlenmiş
değerler dizisini ve seçime bağlı olarak default
durumunu içerir.
switch…case ifadesi - Örnek
Problem: Mevcudu bilinmeyen bir sınıfın
başarı durumu çıkarılmak istenmektedir.
Buna göre kullanıcı klavyeden harf notlarını
girecek ve işlem sonunda, hangi harf notunu
kaç öğrencinin aldığı raporlanacaktır. Geçerli
harf notları A,a,B,b,C,c,D,d,F,f’dir. Geçerli bir
harf notu girilmediği takdirde, kullanıcı
uyarılacak ve notu yeniden girmesi
istenecektir.
8
switch…case ifadesi – Örnek problem
Sahte kod
Girilen notları tutacak değişkeni tanımla
A, B, C, D, F notlarının sayısını tutmak için ayrı ayrı değişkenler tanımla
Ekrana kullanıcının harf notlarını girmeye başlaması için uyarı bastırın
Ekrana, kullanıcının girişi sonlandırmak için gereken sonlandırıcıyı bastırın
Girilen not sonlandırıcı olmadığı sürece aşağıdaki kod bloğunu işlet
notun değerine göre gerekeni yap
‘A’ durumu:
‘a’ durumu:
A notlarının sayısını arttır
(switch) döngüden çık
‘B’ durumu:
‘b’ durumu:
B notlarının sayısını arttır
(switch) döngüden çık
switch…case ifadesi – Örnek problem
Sahte kod
‘C’ durumu:
‘c’ durumu:
C notlarının sayısını arttır
(switch) döngüden çık
‘D’ durumu:
‘d’ durumu:
D notlarının sayısını arttır
(switch) döngüden çık
‘F’ durumu:
‘f’ durumu:
F notlarının sayısını arttır
(switch) döngüden çık
default: (hiçbiri değilse)
girilen notun geçerli not olmadığını söyleyip, geçerli not girmesini iste
(switch) döngüden çık
Sonuçları ekrana bastırın
9
switch…case ifadesi – Örnek problem
Akış diyagramı
Başla
Girilen not değişkenini tanımla
Not sayısı tutucu değişkenlerini tanımla
Kullanıcıdan not girişi yapmasını iste
Ekrana uyarıyla sonlandırıcı tanımlamasını yazdır
Evet
A notlarının sayısını ekrana bastır
B notlarının sayısını ekrana bastır
C notlarının sayısını ekrana bastır
D notlarının sayısını ekrana bastır
F notlarının sayısını ekrana bastır
Girilen not
sonlandırıcı mı?
Hayır
Girilen not
A veya a?
Evet
A not tutucusunu 1 arttır
Hayır
Girilen not
B veya b?
Evet
B not tutucusunu 1 arttır
Hayır
switch…case ifadesi – Örnek problem
Akış diyagramı
Girilen not
C veya c?
Evet
C not tutucusunu 1 arttır
Hayır
Girilen not
D veya d?
Evet
D not tutucusunu 1 arttır
Hayır
Girilen not
F veya f?
Evet
F not tutucusunu 1 arttır
Hayır
Geçerli not girmesi için
kullanıcıyı uyar
Bitir
10
switch…case ifadesi – Örnek problem
Program Kodları
#include <stdio.h>
int main(void)
{
int not;
int aSayisi, bSayisi, cSayisi, dSayisi, fSayisi;
aSayisi = bSayisi = cSayisi = dSayisi = fSayisi = 0;
printf(“Notları giriniz.\nSonlandırmak için EOF karakterini giriniz.\n”);
while ( (not = getchar() ) != EOF) {
switch (not) {
case ‘A’:
case ‘a’:
aSayisi++;
break;
case ‘B’:
case ‘b’:
bSayisi = bSayisi++;
break;
case ‘C’:
case ‘c’:
cSayisi = cSayisi++;
break;
switch…case ifadesi – Örnek problem
Program Kodları
case ‘D’:
case ‘d’:
aSayisi++;
break;
case ‘F’:
case ‘f’:
bSayisi = bSayisi++;
break;
default:
printf(“Geçersiz not girdiniz.\nYeniden giriş yapınız.\n”);
break;
}
}
printf(“Not toplamları:\n”);
printf(“A: %d”, aSayisi);
printf(“B: %d”, bSayisi);
printf(“C: %d”, cSayisi);
printf(“D: %d”, dSayisi);
printf(“F: %d”, fSayisi);
return 0;
}
11
break ifadesi
break ve continue ifadeleri akışın kontrolünü
değiştirmek için kullanılır.
break ifadesi, kullanıldığı while, do…while, for
veya switch ifadesinden ani çıkış yapmak için
kullanılır. Yürütme, ifadeden hemen sonra
gelen satırla devam eder.
break ifadesinin genel kullanımı bir döngüden
erken çıkış veya switch ifadesinin kalan
kısımlarını atlama amaçlıdır.
continue ifadesi
continue ifadesi, kullanıldığı while, do…while,
for veya switch ifadesinde içinde kendinden
sonraki satırları atlayarak, döngünün koşul
satırına ilerler.
12
break - Örnek
continue
break
#include <stdio.h>
#include <stdio.h>
int main(void)
{
int x;
int main(void)
{
int x;
for (x = 1; x <= 10;x++) {
for (x = 1; x <= 10;x++) {
if (x == 5) {
break;
}
if (x == 5) {
continue;
}
printf(“%-3d”,x);
}
printf(“%d. adımda döngünün dışına çıkıldı”,x);
printf(“%-3d”,x);
}
return 0;
return 0;
}
}
1 2 3 4
5. Adımda döngünün dışına çıkıldı
1 2 3 4 6 7 8 9 10
Problem1: Kusursuz Sayılar
1 dahil kendisi hariç olmak üzere tüm çarpanlarının
toplamı kendisine eşit olan sayılara kusursuz sayı adı
verilmektedir. Örneğin 6 sayısı, çarpanları 1 + 2 + 3 =
6’dır ve mükemmel sayıdır. Üst fonksiyon tarafından
gönderilen değişkenin değerinin kusursuz sayı olup
olmadığını belirleyen bir kusursuz_sayi fonksiyonu
yazınız. Bu fonksiyonu 1’den 1000’e kadar olan
sayılar içindeki kusursuz sayıları bulan bir ana
fonksiyonun içinden çağırınız. Bulunan sayıları
ekrana bastırınız.
13
Problem 1: Sahte kod
ANA FONKSİYON
sayacı tanıt ve ilk değerini sıfırla
sayac 1000’den küçük veya eşit olduğu sürece aşağıdaki kodu tekrarla
kusursuz_sayi fonksiyonunu çağır fonksiyondan dönen değeri al
eğer fonksiyondan dönen değer 1 ise (yani sayı kusursuz sayı ise)
sayıyı ekrana bastır
sayacı bir arttır
programdan çık
KUSURSUZ_SAYI FONKSİYONU
sayi değişkenini tanıt ve üst fonksiyondan gelen değeri bu değişkene yükle
bölen değişkenini tanıt ve ilk değerini 1’ eşitle
bölenler_toplamı değişkenini tanıt ve ilk değerini sıfırla
bölen değişkeni sayi değişkeninin değerinden küçük olduğu sürece aşağıdaki kodu tekrarla
sayiyi bölene bölerek kalanı belirle
eğer kalan 0 ise bölenler_toplamı değişkenine böleni ekle
böleni 1 arttır
eğer bölenler_toplamı sayıya eşitse
üst fonksiyona 1 döndür ve fonksiyondan çık
değilse
üst fonksiyona 0 döndür ve fonksiyondan çık
Problem 2: Asal Sayılar
Bir sayı yalnızca kendisine ve 1’e
bölünüyorsa o sayıya asal sayı adı
verilmektedir. Örneğin 2,3,5 ve 7 asal sayıdır
ancak 4,6,8,9 değildir. Üst fonksiyon
tarafından gönderilen değişkenin değerinin
asal sayı olup olmadığını belirleyen bir
asal_sayi fonksiyonu yazınız. 1’den 1000’e
kadar olan sayılar içindeki asal sayıları bulan
bir ana fonksiyon yazınız. Bulunan asal
sayıları ekrana bastırınız.
14
Problem 2: Sahte kod
ANA FONKSİYON
sayacı tanıt ve ilk değerini sıfırla
sayac 1000’den küçük veya eşit olduğu sürece aşağıdaki kodu tekrarla
asal_sayi fonksiyonunu çağır fonksiyondan dönen değeri al
eğer fonksiyondan dönen değer 1 ise (yani sayı asal sayı ise)
sayıyı ekrana bastır
sayacı bir arttır
programdan çık
ASAL_SAYI FONKSİYONU
sayi değişkenini tanıt ve üst fonksiyondan gelen değeri bu değişkene yükle
bölen değişkenini tanıt ve ilk değerini 2’ye eşitle
bölen değişkeni sayi değişkeninin değerinden küçük olduğu sürece aşağıdaki kodu tekrarla
sayiyi bölene bölerek kalanı belirle
eğer kalan 0 ise
ust fonksiyona 0 döndür ve fonksiyondan çık
böleni 1 arttır
üst fonksiyona 1 döndür ve fonksiyondan çık
SORULAR?
15
Download