Bölüm 1: Hesaplama ve Hesaplamalı Düşünme

Bölüm 1: Hesaplama ve Hesaplamalı Düşünme · Çalışma Soruları
HesaplamaSoyutlamaBilgisayarın tarihiTuring makinesiSınırlarBildirimsel ve buyurusalÖklid ve BabilAlgoritmaKoşul ve döngü
Sercan KÜLCÜ

Ç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?

□10111□durum: q0

Başlangıç: durum q0, başlık en sağdaki rakamda (4. hücre). Bantta 10111 = 23.

□10110□durum: q0

4. hücrede 1 okundu → kural 1: 0 yazıldı (elde sürüyor), başlık sola geçti.

□10100□durum: q0

3. hücrede 1 okundu → kural 1: 0 yazıldı (elde sürüyor), başlık sola geçti.

□10000□durum: q0

2. hücrede 1 okundu → kural 1: 0 yazıldı (elde sürüyor), başlık sola geçti.

□11000□durum: dur

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?

a270b192r78

270 = 1 · 192 + 78 → ilk kalan r = 78.

a192b78r36

r ≠ 0 → kaydır: a ← b, b ← r. Yeni kalan 192 % 78 = 36 (192 = 2 · 78 + 36).

a78b36r6

r ≠ 0 → kaydır: a ← b, b ← r. Yeni kalan 78 % 36 = 6 (78 = 2 · 36 + 6).

a36b6r0

r ≠ 0 → kaydır: a ← b, b ← r. Yeni kalan 36 % 6 = 0 (36 = 6 · 6 + 0).

a36b6r0

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?

-40-91-22-73

enBuyuk ilk öğeyle başlar: −4 (yeşil).

-40-91-22-73

i = 1: -9 > -4 yanlış, değişiklik yok.

-40-91-22-73

i = 2: -2 > -4 doğru → enBuyuk = -2.

-40-91-22-73

i = 3: -7 > -2 yanlış, değişiklik yok.

-40-91-22-73

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ı.

Son

Bölüm 1: Hesaplama ve Hesaplamalı Düşünme: Çalışma Soruları
Konu anlatımı: Hesaplama ve hesaplamalı düşünme sunumu · Terim sözlüğü
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.