Bölüm 1: Akış Diyagramları

Bölüm 1: Akış Diyagramları · Çalışma Soruları
Akış diyagramıSembollerÇizim kurallarıSıralı akışKoşullu akışİç içe kararTekrarlı akışSınır hatalarıDiyagramdan Java'ya
Sercan KÜLCÜ

Çoktan Seçmeli · Akış Diyagramı

Soru 1: Akış Diyagramının Sınırı

Aşağıdakilerden hangisi akış diyagramlarının bir sınırlılığıdır?

A: Ayrıntı arttıkça sembol sayısı artar ve diyagram hantallaşır; bu durumda sözde kod daha pratiktir. Akış diyagramı dilden bağımsızdır (B), karar ve geri oklarla dallanmayı ve döngüyü gösterir (C), hataları kodlamadan önce görmeyi kolaylaştırır (D).

Çoktan Seçmeli · Semboller ve Kurallar

Soru 2: Hangi Sembol?

“Kullanıcıdan yaşını oku” adımı akış diyagramında hangi sembolle çizilir?

B: Klavyeden veri okumak giriş işlemidir: paralelkenar. Dikdörtgen hesaplama ve atama, eşkenar dörtgen Evet/Hayır sorusu, altıgen belirli sayıda tekrar içindir. Okumayı dikdörtgenle çizmek sık yapılan bir hatadır.

Çoktan Seçmeli · Semboller ve Kurallar

Soru 3: Çizim Kuralları

Aşağıdakilerden hangisi akış diyagramı çizim kurallarına aykırıdır?

C: Karar sembolünün iki çıkışı olmalı ve ikisi de E/H diye etiketlenmelidir; yoksa “hayır” durumunda ne olacağı belirsiz kalır. Tek Başla ve en az bir Bitir kuralı iki Bitir'e izin verir (D).

Kod Yazma · Semboller ve Kurallar

Soru 4: Diyagramdan Java'ya

Diyagramı Java programına çevirin. Kullanıcı 2 girerse çıktı ne olur?

BaşlaOku ralan = 3.14 × r × rYaz alanBitir
Cevabı göster
Scanner giris = new Scanner(System.in);
double r = giris.nextDouble();
double alan = 3.14 * r * r;
System.out.println(alan);

Paralelkenar → nextDouble(), dikdörtgen → atama, yazdır → println.

Başla/Bitir main metodunun gövdesidir. r = 2 → 3.14 · 2 · 2 = 12.56. Akış sıralıdır: karar ve tekrar yok, her kutu bir kez çalışır.

Çoktan Seçmeli · Kontrol Yapıları

Soru 5: Üç Yapı

Böhm ve Jacopini'nin yapısal programlama teoremine göre her algoritma hangi üç yapı iç içe kullanılarak yazılabilir?

A: Sıra (art arda deyimler), seçim (if/else) ve tekrar (while/for) yeterlidir. B bir programın veri akışını, D nesne yönelimli programlamanın kavramlarını anlatır; kontrol yapısı değildir.

Hata Bulma · Sıralı Akış

Soru 6: Sırası Bozuk Diyagram

Diyagram iki sayının toplamını yazdırmak için çizildi. Hata nedir? Aynı sırayla Java'ya çevrilirse (int a, b; tanımlanıp) ne olur?

Başlatoplam = a + bOku a, bYaz toplamBitir
Cevabı göster

Toplama, sayılar okunmadan önce yapılıyor: bir adım öncekinin sonucunu kullanıyorsa yeri değiştirilemez. İşlem kutusu “Oku a, b”nin altına alınmalıdır.

int a, b;
int toplam = a + b;
a = giris.nextInt();
b = giris.nextInt();

Derlenmez: error: variable a might not have been initialized (b için de aynı hata). Java değer almamış değişkenin kullanılmasına izin vermez.

Adım Adım Çalıştırma · Koşullu Akış

Soru 7: İç İçe Karar: Harf Notu

Diyagram ve Java karşılığı önce 72, sonra 45 girdisiyle çalıştırılıyor. Ne yazılır, hangi kararlar sınanır?

EHEHEHBaşlaOku notnot ≥ 85?not ≥ 70?not ≥ 50?Yaz AYaz BYaz CYaz FBitir

Başla; kullanıcı 72 girer.

EHEHEHBaşlaOku notnot ≥ 85?not ≥ 70?not ≥ 50?Yaz AYaz BYaz CYaz FBitir

1. karar: 72 ≥ 85 yanlış → H çıkışı, sonraki karara.

EHEHEHBaşlaOku notnot ≥ 85?not ≥ 70?not ≥ 50?Yaz AYaz BYaz CYaz FBitir

2. karar: 72 ≥ 70 doğru → E çıkışı.

EHEHEHBaşlaOku notnot ≥ 85?not ≥ 70?not ≥ 50?Yaz AYaz BYaz CYaz FBitir

“B” yazılır, akış Bitir'de birleşir. Üçüncü karar hiç sınanmadı.

EHEHEHBaşlaOku notnot ≥ 85?not ≥ 70?not ≥ 50?Yaz AYaz BYaz CYaz FBitir

İkinci çalıştırma: kullanıcı 45 girer.

EHEHEHBaşlaOku notnot ≥ 85?not ≥ 70?not ≥ 50?Yaz AYaz BYaz CYaz FBitir

45 ≥ 85, 45 ≥ 70, 45 ≥ 50: üçü de yanlış, hep H çıkışı.

EHEHEHBaşlaOku notnot ≥ 85?not ≥ 70?not ≥ 50?Yaz AYaz BYaz CYaz FBitir

“F” yazılır. 72 için 2, 45 için 3 karar sınandı; her çalıştırmada tek bir Yaz kutusu çalışır.

int not = giris.nextInt();
if (not >= 85) {
    System.out.println("A");
} else if (not >= 70) {
    System.out.println("B");
} else if (not >= 50) {
    System.out.println("C");
} else {
    System.out.println("F");
}

Çıktı Sorusu · Koşullu Akış

Soru 8: Negatif Tek Sayı

Tek/çift diyagramında karar kutusu “sayı mod 2 = 1?” diye kurulmuş ve Java'ya şöyle çevrilmiş. Girdi sırasıyla −3, 7 ve 0 iken çıktı nedir?

if (sayi % 2 == 1) {
    System.out.println(sayi + " tek");
} else {
    System.out.println(sayi + " çift");
}
Cevabı göster
-3 çift
7 tek
0 çift

Java'da kalan bölünenin işaretini alır: −3 % 2 = −1; −1 == 1 yanlış olduğu için −3 “çift” sanılır. 7 % 2 = 1, 0 % 2 = 0.

Düzeltme: koşulu sayi % 2 == 0 (çift) diye kurmak; −1 de 1 de “tek” koluna düşer.

Çoktan Seçmeli · Koşullu Akış

Soru 9: Diyagramın Java Karşılığı

Diyagramın Java karşılığı hangisidir?

EHBaşlaOku xx > 0?Yaz xBitir

D: Karar kutusunun yalnızca Evet kolunda iş var, Hayır kolu doğrudan birleşme noktasına gidiyor: tek yönlü karar, yani else'siz if. Geri ok olmadığı için döngü değildir (A, C); Hayır kolunda “x = 0” kutusu yoktur (B).

Adım Adım Çalıştırma · Tekrarlı Akış

Soru 10: Tekrarlı Akış: Üçle Çarpma

Diyagram ve Java karşılığı ne yazdırır? Döngü gövdesi kaç kez çalışır?

EHBaşlasayı = 1sayı < 100?sayı = sayı × 3Yaz sayıBitir

Döngü değişkenine başlangıç değeri: sayı = 1.

EHBaşlasayı = 1sayı < 100?sayı = sayı × 3Yaz sayıBitir

1 < 100 doğru → E: sayı = 1 × 3 = 3; geri okla karara dönülür.

EHBaşlasayı = 1sayı < 100?sayı = sayı × 3Yaz sayıBitir

3 < 100 doğru → E: sayı = 3 × 3 = 9; geri okla karara dönülür.

EHBaşlasayı = 1sayı < 100?sayı = sayı × 3Yaz sayıBitir

9 < 100 doğru → E: sayı = 9 × 3 = 27; geri okla karara dönülür.

EHBaşlasayı = 1sayı < 100?sayı = sayı × 3Yaz sayıBitir

27 < 100 doğru → E: sayı = 27 × 3 = 81; geri okla karara dönülür.

EHBaşlasayı = 1sayı < 100?sayı = sayı × 3Yaz sayıBitir

81 < 100 doğru → E: sayı = 81 × 3 = 243; geri okla karara dönülür.

EHBaşlasayı = 1sayı < 100?sayı = sayı × 3Yaz sayıBitir

243 < 100 yanlış → H: 243 yazılır. Gövde 5 kez, karar 6 kez çalıştı; son değer sınırı aşan ilk değerdir.

int sayi = 1;
while (sayi < 100) {
    sayi = sayi * 3;
}
System.out.println(sayi);

Çıktı Sorusu · Tekrarlı Akış

Soru 11: Sınır Koşulları

Üç döngü ne yazdırır? Her biri kaç kez döner?

for (int i = 0; i < 10; i += 2)
    System.out.print(i + " ");
System.out.println();
for (int i = 0; i <= 10; i += 2)
    System.out.print(i + " ");
System.out.println();
for (int i = 10; i > 0; i -= 3)
    System.out.print(i + " ");
Cevabı göster
0 2 4 6 8 
0 2 4 6 8 10 
10 7 4 1 

1. döngü 5 kez: i = 10 olunca 10 < 10 yanlış. 2. döngü <= yüzünden 10'u da yazar: 6 kez.

3. döngü 4 kez: 1 − 3 = −2 > 0 yanlış. Koşulu son değerle denemek bir eksik / bir fazla hatasını yakalar.

Çoktan Seçmeli · Tekrarlı Akış

Soru 12: Döngü Başlığında Noktalı Virgül

Kod çalıştırıldığında ne olur?

int sayac = 1;
while (sayac <= 10);
{
    System.out.print(sayac + " ");
    sayac++;
}

B: while (sayac <= 10); gövdesi boş bir döngüdür; sayaç hiç artmadığı için koşul hep doğru kalır ve program takılır. Kod derlenir (C yanlış); süslü parantezli blok döngünün parçası değildir, hiç çalışmaz.

Çoktan Seçmeli · Tekrarlı Akış

Soru 13: Geri Ok Yanlış Yerde

1'den 10'a kadar yazan diyagramda geri ok karar kutusuna değil, “sayaç = 1” kutusunun üstüne bağlanmış. Ne olur?

C: Her turda başlangıç kutusu yeniden çalışır ve sayaç 1'e sıfırlanır; 1 ≤ 10 hep doğru kalır: sonsuz döngü. Geri ok, başlangıç değerinden sonraya, karar kutusuna dönmelidir.

Kod Yazma · Tekrarlı Akış

Soru 14: Döngü Sembolünden for'a

Altıgen döngü sembolünün üç parçası başlangıç, koşul ve güncellemedir. Diyagramı Java'ya çevirin; çıktı nedir?

bittiBaşlai = 5; i ≥ 1; i--Yaz i × iBitir
Cevabı göster
for (int i = 5; i >= 1; i--) {
    System.out.print(i * i + " ");
}

Çıktı: 25 16 9 4 1. Başlangıç bir kez, koşul her turdan önce (6 kez), güncelleme her turdan sonra (5 kez) çalışır. Aynı döngü while ile: int i = 5; while (i >= 1) { … i--; }

Adım Adım Çalıştırma · Uygulama

Soru 15: 0 Girilene Kadar Topla

Kullanıcı sırasıyla 5, 8, −3 ve 0 giriyor. Program ne yazdırır?

girdi:58-30

Döngüden önce ilk sayı okunur: 5.

girdi:58-30

5 ≠ 0 → toplam = 5, adet = 1; sıradaki sayı okunur: 8.

girdi:58-30

8 ≠ 0 → toplam = 13, adet = 2; sıradaki sayı okunur: -3.

girdi:58-30

-3 ≠ 0 → toplam = 10, adet = 3; sıradaki sayı okunur: 0.

girdi:58-30

0 ≠ 0 yanlış: döngü biter. 0 toplama katılmaz; tekrar sayısı girdiye bağlı olduğu için while seçildi.

int toplam = 0, adet = 0;
int sayi = giris.nextInt();
while (sayi != 0) {
    toplam += sayi;
    adet++;
    sayi = giris.nextInt();
}
System.out.println(toplam + " / " + adet);

Kod Yazma · Uygulama

Soru 16: Üçe Bölünenler

1'den n'e kadar 3'e tam bölünen sayıların toplamını ve adedini yazan programı (önce algoritmasını) yazın. n = 20 için çıktı nedir?

Cevabı göster

toplam = 0, adet = 0 → i = 1'den n'e: i mod 3 = 0 ise toplam += i, adet += 1 → yaz. Döngü içinde bir karar vardır.

int toplam = 0, adet = 0;
for (int i = 1; i <= n; i++) {
    if (i % 3 == 0) {
        toplam += i;
        adet++;
    }
}
System.out.println(toplam + " " + adet);

n = 20: 3 + 6 + 9 + 12 + 15 + 18 = 63 6. Daha kısası: i = 3'ten başlayıp i += 3.

Çoktan Seçmeli · Uygulama

Soru 17: Biriktiricinin Başlangıcı

1'den n'e kadar toplam diyagramında “toplam = 0” kutusu yanlışlıkla “toplam = 1” yazılmış. n = 4 için çıktı ne olur?

D: Döngü yine 1 + 2 + 3 + 4 = 10 ekler, ama başlangıç 1 olduğu için sonuç 11 olur. Toplama için biriktirici 0, çarpma için 1 ile başlatılır; derleyici bu mantık hatasını yakalamaz.

Son

Bölüm 1: Akış Diyagramları: Çalışma Soruları
Konu anlatımı: Akış diyagramları sunumu · Terim sözlüğü
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.