Bölüm 4.2: Akış Diyagramları
Giriş
Öğrenme Çıktıları
Temel akış diyagramı simgelerini tanımak.
Oklarla işlem sırasını kurmak.
Karar ve döngü yapılarını göstermek.
Diyagramı sözde kod ve programa çevirmek.
Temeller
Akış Diyagramı Nedir?
- Bir algoritmanın işlem sırasını grafiksel olarak gösterir.
- Karmaşık mantığı koddan bağımsız biçimde tartışmayı sağlar.
- Simgeler adımın türünü; oklar yürütme yönünü gösterir.
Simgeler
Temel Simgeler
Simgenin biçimi adımın türünü söyler; içine yalnızca o adımın kısa ifadesi yazılır.
Simgeler
Simge ve Görev
| Simge | Görev | Örnek |
|---|---|---|
| Oval | Başlangıç veya bitiş | Başla |
| Dikdörtgen | İşlem (hesaplama, atama) | toplam = a + b |
| Eşkenar dörtgen | Karar (koşul) | a > b ? |
| Paralelkenar | Giriş / çıkış | a değerini oku |
| Ok | Yürütme yönü | sonraki adıma geç |
Simgeler
Ek Simgeler
| Simge | Görev | Örnek |
|---|---|---|
| Sayfa dışı bağlayıcı | Diyagram başka sayfada sürer; içine sayfa ve nokta yazılır. | 2-A |
| Önceden tanımlı işlem | Ayrıca çizilmiş bir alt süreci çağırır. | Ortalama hesapla |
| Hazırlık | Döngü sayacının başlangıcını ve sınırını tek simgede verir. | i = 1 → n |
| Belge | Yazdırılan çıktı ya da rapor. | Not çizelgesi |
| Veri deposu | Diskte ya da veri tabanında saklanan veri. | Öğrenci kayıtları |
| Açıklama | Kesikli çizgiyle bir simgeye not ekler; akışa katılmaz. | not 0–100 arası |
Bu simgeler ISO 5807 ve yaygın çizim araçlarında bulunur. Küçük bir algoritma için beş temel simge yeter; ek simgeler diyagram büyüyüp sayfalara bölündüğünde ya da dosya ve rapor gibi dış ortamlar gösterilmek istendiğinde kullanılır.
Tasarım · Adım adım
Diyagram Oluşturma: İki Sayının Büyüğü
Problem: iki sayının büyüğünü yazmak. Girdi a ve b (paralelkenar: oku), çıktı büyük olan sayı (paralelkenar: yaz).
Başla ve Bitir eklenir; adımlar yukarıdan aşağıya sıralanır: önce oku, en son yaz.
Hangi sayının yazılacağı bir soruya bağlı: a > b ? karar kutusu eklenir; çıktı iki kutuya ayrılır.
Oklar yürütme yönünü verir. Karar çıkışları Evet/Hayır diye etiketlenir, yollar bir bağlayıcıda birleşir.
Örnekle izle: a = 4, b = 9 → 4 > 9 yanlış → Hayır yolu → "b yaz" → çıktı 9. Turuncu yol izlenen yoldur.
Tasarım
Okunabilirlik Kuralları
✗ Kesişen oklar, etiketsiz karar, bir kutuda üç işlem
✓ Yukarıdan aşağı, Evet/Hayır etiketli, tek işlem
- Akış mümkün olduğunca yukarıdan aşağıya ve soldan sağa ilerlemelidir.
- Karar çıkışları Evet/Hayır gibi anlamlı etiketler taşımalıdır; kesişen oklar azaltılmalıdır.
- Bir simgeye bir temel işlem yazılmalı; büyük diyagramlar alt süreçlere bölünmelidir.
Tasarım
Akış Diyagramı mı, Sözde Kod mu?
| Akış diyagramı | Sözde kod | |
|---|---|---|
| Biçim | Simgeler ve oklar | Girintili kısa cümleler |
| Güçlü yanı | Dallanma ve döngü bir bakışta görülür | Hızlı yazılır, koda çok yakındır |
| Zayıf yanı | Büyüyünce sayfaya sığmaz, değiştirmek zahmetli | Akışın yapısı girintiye bağlıdır |
| Uygun olduğu yer | Öğrenme, sunum, iş süreçleri | Uzun algoritmalar, kodlamadan hemen önce |
İkisi aynı algoritmayı anlatır; biri diğerine satır satır çevrilebilir. Sözde kodun bir standardı yoktur, yeter ki her adım açık olsun.
oku x eğer x < 0 ise x = −x yaz x
Tasarım
Yapısal Programlamanın Üç Yapısı
- Böhm ve Jacopini (1966): her algoritma yalnızca sıra, seçim ve tekrar yapılarıyla yazılabilir.
- Her yapının tek girişi ve tek çıkışı vardır; bu yüzden bir yapı, başka bir yapının içindeki kutunun yerine konabilir (iç içe yapılar).
- Okları diyagramın rastgele bir noktasına atlatan çizimler (spagetti akış) okunması ve test edilmesi zor diyagramlar üretir. Java'da
gotoayrılmış bir sözcüktür ama kullanılamaz.
Tasarım
Akış Diyagramı Çizim Araçları
İlk taslak için en hızlısı; silip yeniden çizmek kolaydır. Sınavda da diyagram elle çizilir.
Ekle → Şekiller menüsündeki Akış Çizelgesi grubu; bağlayıcı oklar kutu taşınınca birlikte kayar.
Ücretsiz, tarayıcıda çalışır; hazır akış diyagramı şekilleri ve dışa aktarma (PNG, SVG, PDF) sunar.
Kurumsal süreç ve iş akışı diyagramları için ticari araç.
Diyagramı çalıştırır, değişkenleri adım adım gösterir ve Java dahil birçok dile koda çevirir.
Diyagram metinle tanımlanır, araç çizer; belgeler ve kod depoları içinde sık kullanılır.
Araç ne olursa olsun simgelerin anlamı ve okunabilirlik kuralları aynıdır.
Akış Türleri
Sıralı Akış
Başla a değerini oku b değerini oku toplam = a + b toplamı yaz Bitir
- Her adım bir önceki tamamlandıktan sonra çalışır.
- Dallanma veya tekrar bulunmaz: tek giriş, tek çıkış.
- Oklar hep aşağı doğrudur.
- Sıra önemlidir:
toplam, a ve b okunmadan hesaplanamaz.
Akış Türleri · Diyagramı yürüt
Sıralı Akış Adım Adım (a = 4, b = 7)
Yürütme Başla kutusundan başlar. Henüz hiçbir değişken yok.
Giriş kutusu: kullanıcı 4 girer → a = 4.
Okun gösterdiği sonraki kutu: b = 7 okunur.
İşlem kutusu: toplam = 4 + 7 = 11.
Çıkış kutusu: ekrana 11 yazılır.
Bitir kutusuna ulaşıldı. Her kutu tam bir kez çalıştı: sıralı akışın özelliği.
Başla a değerini oku b değerini oku toplam = a + b toplamı yaz Bitir
Akış Türleri
Koşullu Akış
Başla not değerini oku not >= 60 ? Evet → "Geçti" yaz Hayır → "Kaldı" yaz Bitir
- Karar simgesinden iki yol çıkar; her çalıştırmada yalnızca biri izlenir.
- Yollar alttaki bağlayıcıda (●) yeniden birleşir.
- Sınır değeri ayrıca denenir: not = 60 iken
>=“Geçti”,>ise “Kaldı” verir.
Akış Türleri · Diyagramı yürüt
Koşullu Akış Adım Adım (not = 72, sonra 45)
1. çalıştırma (not = 72): yürütme Başla kutusundan başlar.
Kullanıcı 72 girer → not = 72.
Karar: 72 >= 60 → doğru. Akış Evet okundan devam eder.
"Geçti" yazılır. Hayır dalındaki kutu bu çalıştırmada hiç çalışmaz.
İki yol bağlayıcıda birleşir ve Bitir'e ulaşılır. Şimdi diğer dalı görmek için not = 45 ile yeniden çalıştıralım.
2. çalıştırma (not = 45): yürütme Başla kutusundan başlar.
Kullanıcı 45 girer → not = 45.
Karar: 45 >= 60 → yanlış. Akış Hayır okundan devam eder.
"Kaldı" yazılır. Evet dalındaki kutu bu çalıştırmada hiç çalışmaz.
İki yol bağlayıcıda birleşir ve Bitir'e ulaşılır. İki farklı girdiyle iki dalın da çalıştığını gördük.
Başla not değerini oku not >= 60 ? Evet → "Geçti" yaz Hayır → "Kaldı" yaz Bitir
Akış Türleri · Diyagramı yürüt
Üç Sayının En Büyüğü Adım Adım
1. çalıştırma (4, 9, 7): Başla.
Üç sayı okunur: a = 4, b = 9, c = 7.
İlk aday en büyük: enb = a = 4.
Karar: 9 > 4 → doğru → Evet.
enb = b = 9. Yol aşağıda birleşir.
Karar: 7 > 9 → yanlış → Hayır.
9 yazılır.
Bitir. Şimdi en büyüğün c olduğu bir girdiyle deneyelim.
2. çalıştırma (3, 2, 8): Başla.
Üç sayı okunur: a = 3, b = 2, c = 8.
İlk aday en büyük: enb = a = 3.
Karar: 2 > 3 → yanlış → Hayır, enb değişmez.
Karar: 8 > 3 → doğru → Evet.
enb = c = 8.
8 yazılır.
Bitir. Her karar yalnızca bir kez sorulur; sayı sayısı artsa da yöntem aynı kalır.
Başla a, b, c değerlerini oku enb = a b > enb ? Evet → enb = b c > enb ? Evet → enb = c enb değerini yaz Bitir
Akış Türleri
Çok Yollu Karar: Karar Zinciri
- Seçenek sayısı ikiden fazlaysa kararlar zincir biçiminde dizilir: her karar bir öncekinin Hayır dalındadır.
- İlk doğru koşulun dalı çalışır, sonraki kararlar hiç sorulmaz. s = 18 için üç karar sorulur: 18 < 0 ve 18 < 15 yanlış, 18 < 25 doğru → Ilık.
- Her karar yalnızca üst sınırı denetler; alt sınır zaten bilinir (s < 15 sorulurken s ≥ 0 olduğu kesindir).
- Sıra önemlidir: s < 25 en başta sorulsaydı s = −5 için de “Ilık” yazılırdı.
- n seçenek için n − 1 karar gerekir. Java karşılığı
if … else if … elsezinciridir.
Akış Türleri
Bileşik Koşul: VE / VEYA
- Bileşik koşul tek bir karar kutusuna da yazılabilir: yaş >= 18 VE ehliyet var ?. Diyagramda ayrıntı gerekirse iki karara açılır.
- VE: ilk karar Hayır ise ikinci karar hiç sorulmaz, sonuç zaten Hayır’dır. VEYA: ilk karar Evet ise ikinciye gerek kalmaz. Java’daki
&&ve||da böyle çalışır: kısa devre değerlendirme. - Test için her kararın iki çıkışı da denenir: VE örneğinde (20, var), (20, yok) ve (16, —) üç farklı yolu çalıştırır.
Akış Türleri · Diyagramı yürüt
Artık Yıl Adım Adım (2024, 1900, 2000)
Artık yıl kuralı: 4’e bölünen yıllar artıktır; ama 100’e bölünenler değildir, 400’e bölünenler yine artıktır. Üç kararlı bir zincir. 1. çalıştırma: 2024.
yıl = 2024 okunur.
2024 % 400 = 24 → yanlış → Hayır.
2024 % 100 = 24 → yanlış → Hayır.
2024 % 4 = 0 → doğru → Evet.
“Artık” yazılır. 2024 artık yıldır (Şubat 29 gün).
Bitir. 2. çalıştırma: 1900.
yıl = 1900 okunur.
1900 % 400 = 300 → yanlış → Hayır.
1900 % 100 = 0 → doğru → Evet. Üçüncü karar hiç sorulmaz.
“Değil” yazılır. 1900 4’e bölünse de artık yıl değildir; yalnız % 4’e bakan bir diyagram burada yanılırdı.
Bitir. 3. çalıştırma: 2000.
yıl = 2000 okunur.
2000 % 400 = 0 → doğru → Evet. Kalan iki karar sorulmaz.
“Artık” yazılır. 2000, 100’e bölündüğü hâlde 400’e de bölündüğü için artık yıldır.
Bitir. Üç girdi dört çıkıştan üçünü çalıştırdı; 2023 gibi bir yıl son Hayır dalını dener. Kararların sırası kuralın istisnalarını doğru yakalar.
Başla yıl değerini oku yıl % 400 == 0 ? Evet → "Artık" yaz yıl % 100 == 0 ? Evet → "Değil" yaz yıl % 4 == 0 ? Evet → "Artık" yaz Hayır → "Değil" yaz Bitir
Akış Türleri
Tekrarlı Akış
Başla i = 1 i <= 5 ? Evet → i değerini yaz i = i + 1 karara dön Hayır → Bitir
- Geri dönen ok (tekrar) döngüyü oluşturur; koşul gövdeden önce sorulur (ön koşullu döngü) ve yanlış olunca döngü sona erer.
- Tekrar yolunda koşulu değiştiren bir işlem (i = i + 1) bulunmalıdır.
Akış Türleri · Diyagramı yürüt
Tekrarlı Akış Adım Adım
Başla.
Sayaç ilk değerini alır: i = 1.
Karar: 1 <= 5 → doğru → Evet, döngü gövdesine gir.
1 yazılır.
i = 1 + 1 = 2. Geri dönen ok yeniden karara götürür.
Karar: 2 <= 5 → doğru → Evet, döngü gövdesine gir.
2 yazılır.
i = 2 + 1 = 3. Geri dönen ok yeniden karara götürür.
Karar: 3 <= 5 → doğru → Evet, döngü gövdesine gir.
3 yazılır.
i = 3 + 1 = 4. Geri dönen ok yeniden karara götürür.
Karar: 4 <= 5 → doğru → Evet, döngü gövdesine gir.
4 yazılır.
i = 4 + 1 = 5. Geri dönen ok yeniden karara götürür.
Karar: 5 <= 5 → doğru → Evet, döngü gövdesine gir.
5 yazılır.
i = 5 + 1 = 6. Geri dönen ok yeniden karara götürür.
Karar: 6 <= 5 → yanlış → Hayır, döngüden çık.
Bitir. Gövde 5 kez çalıştı; koşul 6 kez denendi (son deneme yanlış, i = 6).
Başla i = 1 i <= 5 ? Evet → i değerini yaz i = i + 1 karara dön Hayır → Bitir
Döngüler
Sayaç ve Biriktirici
- Sayaç kaç tekrar yapıldığını izler: her turda 1 artar.
- Biriktirici kısmi sonucu tutar: her turda yeni değer eklenir.
- Başlangıç değeri işleme uygun seçilir: toplam için 0, çarpım için 1.
Girdiler 4, 7, 2 için tur tur değerler:
| An | x | sayac | toplam |
|---|---|---|---|
| başlangıç | — | 0 | 0 |
| 1. tur | 4 | 1 | 4 |
| 2. tur | 7 | 2 | 11 |
| 3. tur | 2 | 3 | 13 |
Döngüler · Diyagramı yürüt
Sayaç ve Biriktirici Adım Adım (4, 7, 2)
Başla. Üç sayı okunup toplanacak; girdiler sırasıyla 4, 7, 2.
Sayaç ve biriktirici 0 ile başlar.
Karar: 0 < 3 → doğru → Evet.
x = 4 okunur.
Biriktirici: toplam = 0 + 4 = 4.
Sayaç: sayac = 0 + 1 = 1. Geri dön.
Karar: 1 < 3 → doğru → Evet.
x = 7 okunur.
Biriktirici: toplam = 4 + 7 = 11.
Sayaç: sayac = 1 + 1 = 2. Geri dön.
Karar: 2 < 3 → doğru → Evet.
x = 2 okunur.
Biriktirici: toplam = 11 + 2 = 13.
Sayaç: sayac = 2 + 1 = 3. Geri dön.
Karar: 3 < 3 → yanlış → Hayır, döngü biter.
Toplam yazılır: 13.
Bitir. Sayaç döngünün kaç kez döndüğünü, biriktirici sonucu tuttu.
Başla sayac = 0, toplam = 0 sayac < 3 ? Evet → x değerini oku toplam = toplam + x sayac = sayac + 1 karara dön Hayır → toplamı yaz Bitir
Döngüler
Örnek: 1’den n’e Toplam
Başla n değerini oku toplam = 0, i = 1 i <= n ? Evet → toplam = toplam + i i = i + 1 karara dön Hayır → toplamı yaz Bitir
- i sayaç, toplam biriktiricidir.
- n = 0 girilirse koşul ilk denemede yanlış olur, 0 yazılır.
Döngüler · Diyagramı yürüt
1’den n’e Toplam Adım Adım (n = 4)
Başla. Girdi: n = 4. Beklenen sonuç 1 + 2 + 3 + 4 = 10.
n = 4 okunur.
Biriktirici toplam = 0, sayaç i = 1.
Karar: 1 <= 4 → doğru → Evet.
toplam = 0 + 1 = 1.
i = 2; karara dön.
Karar: 2 <= 4 → doğru → Evet.
toplam = 1 + 2 = 3.
i = 3; karara dön.
Karar: 3 <= 4 → doğru → Evet.
toplam = 3 + 3 = 6.
i = 4; karara dön.
Karar: 4 <= 4 → doğru → Evet.
toplam = 6 + 4 = 10.
i = 5; karara dön.
Karar: 5 <= 4 → yanlış → Hayır, döngüden çık.
10 yazılır.
Bitir. Gövde n = 4 kez çalıştı; sonuç formülle de doğrulanır: n(n+1)/2 = 10.
Başla n değerini oku toplam = 0, i = 1 i <= n ? Evet → toplam = toplam + i i = i + 1 karara dön Hayır → toplamı yaz Bitir
Döngüler
Sayaçlı ve Bekçi Değerli Döngü
| Sayaçla denetlenen | Bekçi değerle denetlenen | |
|---|---|---|
| Tekrar sayısı | Önceden bilinir (n kez) | Bilinmez; özel bir değer gelince durur |
| Karar | i <= n ? | x == −1 ? (bekçi geldi mi?) |
| Örnek | Sınıftaki 30 öğrencinin notunu oku | Kasada okutulan ürünler; “bitti” tuşuna kadar |
| Java’da çoğunlukla | for | while |
- Bekçi değer, gerçek veride görülemeyecek bir değer seçilir: notlar 0–100 arasındaysa −1 uygundur, 0 uygun değildir.
- Bekçi değer veriye katılmamalıdır: karar, toplama ve sayma işlemlerinden önce sorulur; geri dönen ok yeniden oku kutusuna gider.
- İlk girdi bekçi değerse döngü gövdesi hiç çalışmaz ve sayaç 0 kalır; ortalama alınacaksa bölmeden önce sayac > 0 ? diye sorulmalıdır.
Döngüler · Diyagramı yürüt
Bekçi Değerli Döngü Adım Adım (80, 64, 90, −1)
Başla. Kullanıcı notları girecek, bitince −1 yazacak. Girdiler: 80, 64, 90, −1.
Biriktirici ve sayaç 0 ile başlar.
x = 80 okunur.
80 == −1 → yanlış → Hayır: bu gerçek bir not.
toplam = 0 + 80 = 80.
sayac = 1.
x = 64 okunur. Geri dönen ok yeniden oku kutusuna geldi.
64 == −1 → yanlış → Hayır: bu gerçek bir not.
toplam = 80 + 64 = 144.
sayac = 2.
x = 90 okunur. Geri dönen ok yeniden oku kutusuna geldi.
90 == −1 → yanlış → Hayır: bu gerçek bir not.
toplam = 144 + 90 = 234.
sayac = 3.
x = −1 okunur.
−1 == −1 → doğru → Evet: bekçi geldi, döngü biter. −1 toplama da sayaca da katılmadı.
ort = 234 / 3 = 78.
Ortalama yazılır.
Bitir. Gövde 3 kez, karar 4 kez çalıştı. Kaç not girileceği önceden bilinmiyordu; döngüyü veri durdurdu.
Başla toplam = 0, sayac = 0 x değerini oku x == -1 ? Evet → 7. satıra git toplam = toplam + x sayac = sayac + 1; 3. satıra dön ort = toplam / sayac ort değerini yaz Bitir
Döngüler
İç İçe Yapılar
- Bir kararın dalında başka karar bulunabilir.
- Bir döngünün içinde ikinci döngü yer alabilir: dış döngünün her turunda iç döngü baştan sona çalışır.
- Her yapının giriş ve çıkış noktaları görsel olarak ayırt edilmelidir.
3 × 3 = 9 hücre: iç döngü gövdesi 9 kez çalışır. Turuncu satır: i = 2 iken j'nin üç turu.
Döngüler · Diyagramı yürüt
İç İçe Döngü Adım Adım (i = 1)
Başla. Dış döngü i = 1, 2; iç döngü j = 1, 2. Her satıra i × j yazılacak.
i = 1: dış sayaç başlar.
Dış karar: 1 <= 2 → doğru → iç döngüye gir.
j = 1: iç sayaç her dış turda yeniden 1 olur.
İç karar: 1 <= 2 → doğru
1 × 1 = 1 yazılır.
j = 2; iç karara dön.
İç karar: 2 <= 2 → doğru
1 × 2 = 2 yazılır.
j = 3; iç karara dön.
İç karar: 3 <= 2 → yanlış → Hayır, iç döngü biter.
Satır tamamlandı: println() satır sonunu yazar (imleç alt satıra geçer). Sonra i = 2; dış karara dön.
Başla i = 1 i <= 2 ? (Hayır → Bitir) j = 1 j <= 2 ? (Hayır → i = i + 1) i × j yaz j = j + 1, iç karara dön satır sonu (println), i = i + 1, dış karara dön Bitir
Döngüler · Diyagramı yürüt
İç İçe Döngü Adım Adım (devam: i = 2)
Dış karar: 2 <= 2 → doğru → iç döngüye gir.
j = 1: iç sayaç her dış turda yeniden 1 olur.
İç karar: 1 <= 2 → doğru
2 × 1 = 2 yazılır.
j = 2; iç karara dön.
İç karar: 2 <= 2 → doğru
2 × 2 = 4 yazılır.
j = 3; iç karara dön.
İç karar: 3 <= 2 → yanlış → Hayır, iç döngü biter.
Satır tamamlandı: println() satır sonunu yazar. Sonra i = 3; dış karara dön.
Dış karar: 3 <= 2 → yanlış → Hayır, Bitir'e git.
Bitir. İç gövde 2 × 2 = 4 kez çalıştı; çıktı küçük bir çarpım tablosu.
Başla i = 1 i <= 2 ? (Hayır → Bitir) j = 1 j <= 2 ? (Hayır → i = i + 1) i × j yaz j = j + 1, iç karara dön satır sonu (println), i = i + 1, dış karara dön Bitir
Döngüler · Diyagramı yürüt
Sayı Tahmin Oyunu Adım Adım (gizli = 37)
Başla. Gizli sayı (normalde rastgele seçilir) 37; oyuncunun tahminleri 50, 25, 37.
Gizli sayı belirlenir, deneme sayacı 0.
Oyuncu 50 girer.
deneme = 1.
Karar: 50 == 37 → yanlış → Hayır, ipucu verilecek.
Karar: 50 < 37 → yanlış.
"Daha küçük" yazılır; ok yeniden oku kutusuna döner.
Oyuncu 25 girer.
deneme = 2.
Karar: 25 == 37 → yanlış → Hayır, ipucu verilecek.
Karar: 25 < 37 → doğru.
"Daha büyük" yazılır; ok yeniden oku kutusuna döner.
Oyuncu 37 girer.
deneme = 3.
Karar: 37 == 37 → doğru → Evet.
Doğru tahmin! Deneme sayısı 3 ile birlikte yazılır.
Bitir. Döngü, koşul (tahmin == gizli) doğru olunca sona erdi; kaç tur döneceği önceden bilinmez.
Başla gizli = 37, deneme = 0 tahmin değerini oku deneme = deneme + 1 tahmin == gizli ? Evet → "Bildin (" deneme ". deneme)" yaz, Bitir tahmin < gizli ? Evet → "Daha büyük" yaz Hayır → "Daha küçük" yaz 3. satıra (oku) dön Bitir
Döngüler · Diyagramı yürüt
do-while Akış Diyagramı Adım Adım (girdiler: 7, 0, 3)
Başla. Girdi listesi sırayla verilecek: 7, 0, 3. Önce gövde çalışır (oku), koşul sonda sorulur: son koşullu döngü.
Önce gövde: sayı = 7 okunur. Koşul henüz hiç sorulmadı.
Karar: 1 ≤ 7 ≤ 5 ? 7 > 5 olduğundan yanlış → Hayır.
"Geçersiz" yazılır.
Ok oku kutusuna döner: sayı = 0 okunur.
Karar: 1 ≤ 0 ≤ 5 ? 0 < 1 olduğundan yanlış → Hayır.
"Geçersiz" yeniden yazılır.
Yeniden oku: sayı = 3.
Karar: 1 ≤ 3 ≤ 5 → doğru → Evet.
Geçerli sayı yazılır: 3.
Bitir. Gövde 3 kez çalıştı. Koşul gövdeden sonra sorulduğu için gövde en az 1 kez çalışır. Java karşılığı: do { … } while (sayı < 1 || sayı > 5);
Başla sayı değerini oku 1 <= sayı <= 5 ? Hayır → "Geçersiz" yaz, oku'ya dön Evet → sayıyı yaz Bitir
Döngüler
for Döngüsünün Akış Diyagramı
for (i = 1; i <= n; i++) {
toplam = toplam + i;
}- Başlangıç (i = 1): döngüye girerken bir kez çalışır.
- Koşul (i <= n): her turdan önce sorulur; for ön koşullu bir döngüdür.
- Gövde: koşul doğruysa çalışır.
- Güncelleme (i++): gövdeden sonra çalışır, ok koşula döner.
Diyagram aynı while diyagramıdır; for yalnızca 1, 2 ve 4’ü tek satırda toplar. Bazı kaynaklar 1, 2 ve 4’ü tek bir hazırlık simgesinde (altıgen, “i = 1 → n”) gösterir.
Döngüler
Döngüden Erken Çıkış ve Bayrak
İlk negatif sayıyı arama: a = [4, 7, −2, 5, −8]
- Aranan bulununca kalan turlar gereksizdir. Gövdenin içinden döngü dışına giden ikinci ok erken çıkıştır; Java’da
break(çık). - Örnekte i = 3’te −2 bulunur ve yazılır; 5 ve −8’e hiç bakılmaz. Hiç negatif yoksa döngü koşuldan çıkar ve “Yok” yazılır.
- Döngünün iki çıkışı olur. Tek çıkış isteniyorsa bayrak kullanılır: bulundu = yanlış ile başlanır, bulununca doğru yapılır ve koşul i <= n VE bulundu değil ? olur. Döngüden sonra bayrağa bakılarak sonuç yazılır.
- Atla (
continue) ise döngüden çıkmaz: o turun kalanını atlayıp güncellemeye ve koşula döner.
Koda Çeviri
Diyagramdan Java Koduna
public static void main(String[] args) { int n = 3; int toplam = 0, i = 1; while (i <= n) { toplam = toplam + i; i = i + 1; } System.out.println(toplam); }
- Başla / Bitir → metodun başı ve sonu.
- Girdi → değişken (burada sabit değer).
- İşlem → atama deyimi.
- Karar + geri dönen ok →
whilekoşulu ve gövdesi. - Çıktı →
println.
Koda Çeviri · Simge ↔ kod satırı
Diyagramdan Java Koduna Adım Adım (n = 3)
Başla simgesi metodun başlangıcıdır: main açılır.
Girdi simgesi → int n = 3; (girdi sabit alındı).
İşlem simgesi → iki değişkenin başlangıç değeri.
Karar simgesi → while (i <= n): 1 <= 3 doğru.
Evet yolu = döngü gövdesi: toplam = 0 + 1 = 1.
i = i + 1 → i = 2. Sonraki ok karara geri döner.
Geri dönen ok = döngü bloğunun sonundan koşula dönüş: 2 <= 3 doğru.
toplam = 1 + 2 = 3.
i = 3.
3 <= 3 doğru.
toplam = 3 + 3 = 6.
i = 4.
4 <= 3 yanlış → Hayır yolu, döngü bloğunun dışına çıkılır.
Çıktı simgesi → println(toplam): 6 yazılır.
Bitir → metodun kapanışı. Her simgenin bir kod karşılığı var.
public static void main(String[] args) { int n = 3; int toplam = 0, i = 1; while (i <= n) { toplam = toplam + i; i = i + 1; } System.out.println(toplam); }
Koda Çeviri
Alt Süreçle Modüler Diyagram
- Önceden tanımlı işlem simgesi ayrı çizilmiş bir diyagramı çağırır; alt süreç bitince akış ana diyagramda aynı noktadan sürer.
- Alt diyagram Başla yerine adı ve parametreleriyle, Bitir yerine Döndür ile biter. a = 70, b = 85, c = 91 için t = 246, dönen değer 82.
- Aynı alt süreç birçok yerden çağrılabilir, bir kez çizilir. Java’da her alt süreç bir metot olur:
static int ortalama(int x, int y, int z) { return (x + y + z) / 3; }
Doğrulama
Diyagramı Test Etme
Normal girdi not = 72: Evet yolu çalışır.
Diğer dal için not = 45: Hayır yolu çalışır. Artık her kutu en az bir kez denendi.
Sınır değeri not = 60: 60 >= 60 doğru → "Geçti". > yazılsaydı hata burada yakalanırdı.
- Normal bir girdide oklar adım adım izlenir.
- Kararın her çıkışını çalıştıracak test değeri seçilir.
- Sınır değerleri (60 gibi) ayrıca denenir.
- Döngünün sıfır, bir ve çok tekrar yaptığı durumlar denenir.
- Başlangıca dönmeyen veya bitişe ulaşmayan yollar aranır.
Doğrulama
İzleme Tablosuyla Elle İzleme: Öklid (48, 18)
| An | a | b | k | b != 0 ? |
|---|---|---|---|---|
| başlangıç | 48 | 18 | — | 18 != 0 doğru |
| 1. tur | 18 | 12 | 12 | 12 != 0 doğru |
| 2. tur | 12 | 6 | 6 | 6 != 0 doğru |
| 3. tur | 6 | 0 | 0 | 0 != 0 yanlış |
- Her değişken bir sütun, her tur bir satırdır; karar sonucu da yazılır. Sonuç: 6 yazılır, EBOB(48, 18) = 6.
- Tablo, diyagramdaki sıranın önemini gösterir: a = b ve b = k yer değiştirseydi a, b’nin yeni değerini alırdı ve sonuç bozulurdu.
- Döngü 3 tur döndü, karar 4 kez soruldu: her zamanki gibi karar, gövdeden bir fazla çalışır.
Doğrulama
Sık Hatalar
| Hata | Sonuç | Düzeltme |
|---|---|---|
| Etiketsiz karar yolu | Hangi koşulun seçildiği belirsiz | Evet/Hayır yaz |
| Güncellenmeyen sayaç | Sonsuz döngü | Sayaç adımı ekle |
| Bağlantısız simge | Akış kopar | Okla bağla |
| Bir simgede çok işlem | Okunabilirlik azalır | Adımlara böl |
✗ i hep 1: 1 1 1 1 … Bitir'e hiç ulaşılmaz
✓ i = i + 1 eklendi: 1 2 3, sonra Bitir
Doğrulama
Sık Hatalar (devam)
| Hata | Belirti | Düzeltme |
|---|---|---|
| Biriktirici döngünün içinde sıfırlanıyor | 4, 7, 2 için 13 yerine 2 yazılır: yalnız son değer kalır | toplam = 0 kutusunu döngüden önceye al |
| Geri dönen ok oku kutusunu atlıyor | Aynı x tekrar tekrar işlenir; bekçi değer hiç gelmez | Ok, oku kutusunun önüne döner |
| Karar kutusunda atama: x = 0 ? | Soru mu, atama mı belirsiz | Karşılaştırma yaz: x == 0 ? |
| Bekçi değer işlemden sonra sorgulanıyor | −1 toplama katılır, sayaç bir fazla olur | Kararı toplama ve saymadan önce sor |
| Karar zincirinde geniş koşul önce | Alttaki dallar hiç çalışmaz | Dar koşuldan genişe sırala |
| Karardan tek ok çıkıyor | Diğer durumda akış kopar | İki çıkışı da çiz, Evet/Hayır yaz |
| Bölmeden önce sıfır denetimi yok | Hiç veri girilmezse 0’a bölme | sayac > 0 ? kararı ekle |
Özet
Bölüm Özeti
- Akış diyagramı algoritmanın yürütme sırasını standart simgelerle gösterir.
- Sıralı akış doğrusal, koşullu akış dallanan, tekrarlı akış geri dönen yol içerir.
- Karar yolları etiketlenmeli ve her yol bir sonraki adıma ulaşmalıdır.
- Diyagram, farklı test girdileriyle elle izlenerek doğrulanmalıdır.
Özet
Kontrol Soruları
- İşlem ve karar simgeleri neyi temsil eder?
- Karar çıkışları neden etiketlenmelidir?
- Bir döngü diyagramında sonsuz tekrar nasıl oluşur?
- Sayaç ve biriktirici arasındaki fark nedir?
- Bir akış diyagramını test etmek için hangi girdiler seçilir?
Özet
Alıştırmalar
- Girilen sayının tek mi çift mi olduğunu yazan akış diyagramını çizin (ipucu: sayi % 2 == 0 ?).
- Bir sınavın 0–100 arası notunu AA / BA / … / FF harfine çeviren akış diyagramını iç içe kararlarla çizin; 85, 60, 42 için izleyin.
- 1'den n'e kadar sayıların çarpımını bulan diyagramı çizin; biriktiricinin başlangıç değeri ne olmalı?
- Kullanıcı 0 girene kadar sayı okuyup toplamı ve kaç sayı girildiğini yazan diyagramı çizin (sayaç + biriktirici).
- Sayı tahmin oyununa "en fazla 5 deneme" kuralını ekleyin: 5 denemede bilinemezse "Kaybettin" yazılsın.
- Aşağıdaki hatayı bulun: i = 1, i <= 10 ? Evet → i yaz, karara dön. Nasıl düzeltilir?
İpuçları
- Tek karar, iki çıkış.
- Kararları büyükten küçüğe sıralayın: not >= 90 ?, not >= 85 ? …
- Çarpım için 1.
- Karar: sayi == 0 ?
- İkinci koşul: deneme < 5 ?
- i artırılmıyor → sonsuz döngü; i = i + 1 ekleyin.
Özet
Kaynaklar
- ISO 5807:1985, Information processing: Documentation symbols and conventions for data, program and system flowcharts.
- Deitel ve Deitel, Java: How to Program, Early Objects, 11. baskı, Pearson, 2018.
- Sedgewick ve Wayne, Computer Science: An Interdisciplinary Approach, Addison-Wesley, 2016: 1.3 Conditionals and Loops.
- Oracle, The Java Tutorials: Control Flow Statements.
- Downey ve Mayfield, Think Java, 2. baskı, O'Reilly, 2019 (ücretsiz çevrim içi sürüm).