Bölüm 1: Hesaplama ve Hesaplamalı Düşünme
Çoktan Seçmeli · Programlama ve Hesaplama
Soru 1: Hesaplamanın Yapı Taşları
Hesaplama matematik ve mantık üzerine kuruludur. Aşağıdaki Java satırlarından hangisi bir karar (mantık) içerir?
C: if, koşulun doğru ya da yanlış olmasına göre farklı bir yol seçer; mantık yapı taşı budur. A ve D matematik (aritmetik) işlemidir, B yalnızca çıktı üretir.
Çoktan Seçmeli · Bilgisayar Bilimi
Soru 2: Metro Haritası
Metro haritası sokakları, binaları ve gerçek uzaklıkları göstermez; yalnızca durakları ve hatları gösterir. Bu, bilgisayar bilimindeki hangi kavramın örneğidir?
A: Soyutlama, bir sistemin gereksiz ayrıntılarını gizleyip işe yarayan özünü bırakmaktır. Problemi parçalama büyük bir işi küçük alt işlere bölmektir; hesaplanabilirlik bir problemin algoritmayla çözülüp çözülemeyeceğiyle ilgilidir.
Çoktan Seçmeli · Bilgisayarın Tarihi
Soru 3: Kim Ne Yaptı?
Aşağıdaki eşleştirmelerden hangisi doğrudur?
B: Lovelace 1843'te “Not G”de Bernoulli sayıları için adım adım bir yöntem verdi. Fortran'ı John Backus ve IBM geliştirdi (1957); ENIAC onlu sayı kullanıyor ve kablolarla programlanıyordu, depolanan program EDVAC tasarımıdır; ABC'yi Atanasoff ve Berry kurdu.
Çoktan Seçmeli · Bilgisayarın Tarihi
Soru 4: Depolanan Program
Hangisi depolanan programlı bilgisayarın özelliğidir?
D: EDVAC ve von Neumann mimarisinin fikri budur: program bellekteki sayılardır, yenisini yüklemek yeterlidir. A ENIAC'ın, B sabit programlı makinelerin (Pascaline, ABC), C mekanik dönemin özelliğidir.
Adım Adım Çalıştırma · Turing Makineleri
Soru 5: Bir Ekleyen Turing Makinesi
Kurallar (durum, okunan) → (yaz, git, yeni durum) biçimindedir. Başlık en sağdaki rakamdan başlıyor. Makine durduğunda bantta ne vardır?
Başlangıç: durum q0, başlık en sağdaki rakamda (4. hücre). Bantta 10111 = 23.
4. hücrede 1 okundu → kural 1: 0 yazıldı (elde sürüyor), başlık sola geçti.
3. hücrede 1 okundu → kural 1: 0 yazıldı (elde sürüyor), başlık sola geçti.
2. hücrede 1 okundu → kural 1: 0 yazıldı (elde sürüyor), başlık sola geçti.
1. hücrede 0 okundu → kural 2: 1 yazıldı, makine durdu. Bantta 11000 = 24: makine sayıya 1 ekledi (4 kural uygulandı).
(q0, 1) → yaz 0, sola git, q0 (q0, 0) → yaz 1, dur (q0, □) → yaz 1, dur
Kod Okuma · Turing Makineleri
Soru 6: Ne Hesaplıyor?
Başlık en soldaki hücreden başlıyor ve her kuralda bant değişmeden sağa gidiyor. 10110 bandı için makine hangi durumda durur, kaç adım çalışır? Makine ne hesaplıyor?
1 (q0, 0) → yaz 0, sağa git, q0 2 (q0, 1) → yaz 1, sağa git, q1 3 (q1, 0) → yaz 0, sağa git, q1 4 (q1, 1) → yaz 1, sağa git, q0 5 (q0, □) → dur, “çift” 6 (q1, □) → dur, “tek”
Cevabı göster
Durumlar: q0 →(1) q1 →(0) q1 →(1) q0 →(1) q1 →(0) q1 → □ okunur → kural 6: “tek” durur.
5 okuma adımı + durma = 6 adım. q0 “şimdiye kadar çift sayıda 1”, q1 “tek sayıda 1” demektir; makine banttaki 1'lerin sayısının tek mi çift mi olduğunu bulur (10110'da üç tane 1 var).
Çoktan Seçmeli · Turing Makineleri
Soru 7: Durma Problemi
Turing'in durma problemi (halting problem) için hangisi doğrudur?
A: Turing 1936'da böyle bir algoritmanın var olamayacağını kanıtladı; sorun hız ya da bellek değil, mantıksal bir sınırdır (B yanlış). Java Turing-tamdır ve derleyici sonsuz döngüleri genel olarak bulamaz (C yanlış); Turing makinesinin bandı zaten sonsuzdur (D yanlış).
Çıktı Sorusu · Bilgisayarların Sınırları
Soru 8: Sınırlar Java'da
Program ne yazdırır?
int buyuk = Integer.MAX_VALUE;
System.out.println(buyuk + 1);
System.out.println(7 / 2);
System.out.println(7 / 2.0);
System.out.println(-7 / 2);
System.out.println(0.1 * 3);
System.out.println(1e308 * 10);Cevabı göster
-2147483648 3 3.5 -3 0.30000000000000004 Infinity
int 32 bittir; en büyük değere 1 eklenince en küçüğe sarar. İki int'in bölümü int'tir ve sıfıra doğru kesilir: 7 / 2 = 3, −7 / 2 = −3. Bir işlenen double ise gerçek bölme yapılır.
0.1 ikili tabanda tam yazılamaz. double'ın en büyük değeri ≈ 1.8·10³⁰⁸'dir; aşınca sonuç Infinity olur, hata fırlatılmaz.
Çoktan Seçmeli · Bilgi Türleri
Soru 9: Buyurusal Bilgi
Aşağıdakilerden hangisi buyurusal (nasıl yapılır) bilgidir?
C: Adımları ve ne zaman duracağını söyleyen bir tarif verir: Öklid algoritması. A, B ve D bir şeyin ne olduğunu tanımlar (bildirimsel); bir adayı sınamaya yarar ama sonucu nasıl bulacağımızı söylemez.
Adım Adım Çalıştırma · Bilgi Türleri
Soru 10: Öklid: EBOB(270, 192)
Program ne yazdırır? Kaç kez kalan hesaplanır?
270 = 1 · 192 + 78 → ilk kalan r = 78.
r ≠ 0 → kaydır: a ← b, b ← r. Yeni kalan 192 % 78 = 36 (192 = 2 · 78 + 36).
r ≠ 0 → kaydır: a ← b, b ← r. Yeni kalan 78 % 36 = 6 (78 = 2 · 36 + 6).
r ≠ 0 → kaydır: a ← b, b ← r. Yeni kalan 36 % 6 = 0 (36 = 6 · 6 + 0).
r = 0, döngü biter. Son bölen b = 6. 4 bölme yapıldı; sayılar küçüldü ama EBOB hiç değişmedi.
int a = 270, b = 192; int r = a % b; while (r != 0) { a = b; b = r; r = a % b; } System.out.println("EBOB = " + b);
Çıktı Sorusu · Bilgi Türleri
Soru 11: Babil Yöntemi: √10
Program ne yazdırır? (Math.sqrt(10) = 3.1622776601683795)
double x = 10, y = 3; for (int n = 1; n <= 3; n++) { y = (y + x / y) / 2; System.out.println(n + ": " + y); }
Cevabı göster
1: 3.166666666666667 2: 3.162280701754386 3: 3.162277660169842
y₁ = (3 + 10/3) / 2 = 19/6; y₂ = (y₁ + 10/y₁) / 2; y₃ ≈ gerçek köke 12 basamak yakın. Her turda doğru basamak sayısı yaklaşık ikiye katlanır.
Sonuç yine de yaklaşık bir değerdir: üçüncü tahmin Math.sqrt ile son basamaklarda ayrışır.
Çoktan Seçmeli · Algoritma ve Problem
Soru 12: Hangisi Algoritma Değildir?
Aşağıdaki talimatlardan hangisi bir algoritma olamaz?
B: Hiçbir zaman bitmez; algoritmanın sonluluk özelliğine aykırıdır. Diğerleri açık, sıralı ve sonlu adımlardır (C liste bitince durur).
Kod Yazma · Algoritma ve Problem
Soru 13: Ağırlıklı Ortalama
Ders notu = vize × 0,4 + final × 0,6. Problemin girdisini ve çıktısını belirleyin, sözde kodunu ve Java programını yazın. Vize 50, final 80 için çıktı nedir?
Cevabı göster
Girdi: iki tam sayı (vize, final). Çıktı: bir ondalıklı sayı. Sözde kod: vizeyi oku → finali oku → ort ← vize · 0,4 + final · 0,6 → ort'u yaz.
Scanner giris = new Scanner(System.in); int vize = giris.nextInt(); int fin = giris.nextInt(); double ortalama = vize * 0.4 + fin * 0.6; System.out.println("Ortalama: " + ortalama);
50, 80 → 20 + 48 = Ortalama: 68.0. Örnek girdi–çıktı çifti (50, 80 → 68.0) programı sınamak için de kullanılır.
Çoktan Seçmeli · Algoritmik İşlemler
Soru 14: do-while ile while
Kod ne yazdırır?
int k = 5; do { System.out.print(k + " "); k++; } while (k < 5);
D: do-while önce gövdeyi çalıştırır, koşulu sonra sınar: 5 yazılır, k = 6 olur, 6 < 5 yanlış → döngü biter. Aynı koşulla while (k < 5) gövdeyi hiç çalıştırmazdı (A). Sözde koddaki repeat … until'in Java karşılığıdır.
Adım Adım Çalıştırma · Algoritmik İşlemler
Soru 15: Negatif Listede En Büyük
Program ne yazdırır? enBuyuk kaç kez güncellenir?
enBuyuk ilk öğeyle başlar: −4 (yeşil).
i = 1: -9 > -4 yanlış, değişiklik yok.
i = 2: -2 > -4 doğru → enBuyuk = -2.
i = 3: -7 > -2 yanlış, değişiklik yok.
i = 4 < 4 yanlış, döngü biter: −2. enBuyuk 0 ile başlasaydı hiçbir öğe 0'dan büyük olmadığı için yanlışlıkla 0 yazılırdı.
int[] liste = {-4, -9, -2, -7}; int enBuyuk = liste[0]; for (int i = 1; i < liste.length; i++) { if (liste[i] > enBuyuk) { enBuyuk = liste[i]; } } System.out.println("En büyük: " + enBuyuk);
Hata Bulma · Algoritmik İşlemler
Soru 16: İki Hata
Program 1'den 5'e kadar sayıların toplamını (15) yazdırmak için yazıldı. İki hatayı bulun; hangisini derleyici yakalar?
int toplam; int i = 1; while (i <= 5) { toplam = toplam + i; } System.out.println(toplam);
Cevabı göster
(1) toplam değer almadan kullanılıyor: derleme hatası variable toplam might not have been initialized (3. ve 5. satır). Düzeltme: int toplam = 0;
(2) Gövdede i hiç değişmiyor: i ≤ 5 hep doğru kalır, sonsuz döngü. Derleyici bunu yakalamaz; gövdeye i = i + 1; eklenmelidir. İkisi düzeltilince çıktı 15'tir.
Çıktı Sorusu · Algoritmik İşlemler
Soru 17: Bileşik Koşullar
Program ne yazdırır? y = 200 olsaydı?
int x = 120, y = 150; if (x > 100 && y == 200) { x = x - 100; } else if (x > 100 || y == 200) { x = x + 100; } else { x = 0; } System.out.println("x = " + x);
Cevabı göster
x = 220
120 > 100 doğru ama 150 == 200 yanlış → && yanlış. İkinci koşulda || için bir tarafın doğru olması yeter → x = 220. Üçüncü kol atlanır.
y = 200 olsaydı ilk koşul doğru olur, x = 20 yazılırdı; else if kolları hiç sınanmazdı.