Bölüm 1.2: Hesaplama ve Hesaplamalı Düşünme
Giriş
Öğrenme Çıktıları
Programlama, hesaplama ve bilgisayar bilimini tanımlamak; hesaplamalı düşünmenin dört becerisini (ayrıştırma, örüntü tanıma, soyutlama, algoritma tasarımı) açıklamak.
Sabit ve depolanan programlı bilgisayarı ayırt etmek; Babbage, Lovelace, ABC, Colossus, ENIAC, EDVAC ve von Neumann mimarisini tanımak.
Bant, bant başlığı ve kuralları kullanarak basit bir Turing makinesini adım adım çalıştırmak.
Bildirimsel (ne?) ve buyurusal (nasıl?) bilgiyi karekök ve EBOB örnekleriyle ayırt etmek.
Algoritmanın özelliklerini saymak; bir problemin girdi ve çıktısını belirlemek, belirsiz bir isteği sorularla netleştirmek.
Sıralı, koşullu ve döngülü işlemleri tanımak; sözde koddaki repeat … until ile Java'daki do … while arasındaki ilişkiyi açıklamak.
Programlama ve Hesaplama
Programlama (Programming)
- Programlama, bilgisayara talimat vermenin bir yoludur.
- Programlanan bilgisayar karmaşık görevleri yerine getirebilir.
- Programlama dilleri (Java, Python, C…) bilgisayarla iletişim kurmamızı sağlayan araçlardır.
- Programlama öğrenmek problem çözme ve düşünme becerilerini geliştirir.
- Evden iş yerine, eğlenceden eğitime her alanda kullanılır.
- Akıllı telefon, tablet, dizüstü bilgisayar, ev aletleri, arabalar…
- İnternet sayesinde dünya “bir tık” uzaklıkta: alışveriş, haber, iletişim, eğitim dijital dünyada.
Programlama ve Hesaplama
Programlamanın Rolü
- Programlama, bilgisayarların istediğimiz görevleri yerine getirmesi için kullanılan bir araçtır.
- Programcılar, bilgisayarları hayatımızın her alanında daha kullanışlı ve verimli hâle getirir.
Elektrik-elektronik mühendisliğinde de gömülü sistemler, sinyal işleme ve kontrol yazılımları hep programlamayla yapılır.
Programlama ve Hesaplama
Hesaplama (Computation)
- Bilgisayarların temel işlevidir.
- Bir bilgisayarın ya da hesaplama cihazının bir görevi yerine getirmek için verileri işleme sürecidir.
- Matematiksel işlemleri, mantıksal kararları ve veri işlemeyi içerir.
- Programlama, hesaplamayı daha etkili ve verimli hâle getirir.
Programlama ve Hesaplama
Hesaplamanın Yapı Taşları
Hesaplama veriyi alır, işler ve bir sonuç üretir. Sonuç; problem çözmek, veri analiz etmek ya da görevleri otomatikleştirmek için kullanılır. Programlama, bilgisayara hesaplamayı nasıl yapacağını anlatır.
public class Hesaplama { public static void main(String[] args) { int a = 7, b = 3; int toplam = a + b; // matematik int carpim = a * b; // matematik boolean gunesli = true; // mantık System.out.println("Toplam: " + toplam); System.out.println("Çarpım: " + carpim); if (gunesli) { // karar System.out.println("Dışarı çık"); } } }
Toplam: 10 Çarpım: 21 Dışarı çık
Programlama ve Hesaplama · Adım adım kod izleme
Hesaplama Programı: Kod İzleme
main başlar. Hesaplamanın girdileri a = 7 ve b = 3 olarak saklanır.
Matematik: a + b = 7 + 3 = 10.
Matematik: a * b = 7 × 3 = 21.
Mantık: boolean tipindeki değişken yalnızca true ya da false olabilir.
Sonuç dizgiyle birleştirilip yazdırılır.
İkinci sonuç yazdırılır.
Karar: koşul gunesli = true → Evet kolu seçilir.
Koşul doğru olduğu için blok çalışır. Veri alındı, işlendi, sonuç üretildi.
public class Hesaplama { public static void main(String[] args) { int a = 7, b = 3; int toplam = a + b; // matematik int carpim = a * b; // matematik boolean gunesli = true; // mantık System.out.println("Toplam: " + toplam); System.out.println("Çarpım: " + carpim); if (gunesli) { // karar System.out.println("Dışarı çık"); } } }
Bilgisayar Bilimi
Bilgisayar Bilimi Sadece Teknoloji Öğrenmek Değildir
- Bilgisayar bilimi (computer science) yalnızca bilgisayarlarla ilgili teknik bilgi değil, aynı zamanda problem çözme becerileriyle ilgili bir disiplindir.
- Bilginin nasıl işlendiğini, depolandığını ve iletildiğini derinlemesine anlamayı gerektirir.
- Teknolojiyle sınırlı değildir: teknoloji yalnızca bir araçtır. Temel amaç sorunları çözmek ve bilgiyi daha iyi anlamaktır.
- Karmaşık problemleri tanımlama, analiz etme ve etkili çözümler üretme yeteneğini geliştirir.
Bilgisayar Bilimi
Bilgisayar Bilimi: Üç Dayanak
Bilgisayar bilimi mantık, problem çözme ve yaratıcılığa dayalı bir disiplindir.
Programlama yaptıkça bu üç beceri birlikte gelişir.
Bilgisayar Bilimi
Teknoloji ile Sosyal Sorumluluk
- Bilgisayar bilimi, teknolojinin insanlara nasıl yardımcı olabileceğini ve toplumsal sorunların çözümüne nasıl katkı sağlayabileceğini düşünmeyi teşvik eder.
- Dünyayı daha iyi anlamamıza ve geliştirmemize yardımcı olur; teknolojiyi insanlığın hizmetine sunma sorumluluğunu vurgular.
- Yalnızca teknolojiyle ilgilenenler için değil, problem çözme ve düşünme becerilerini geliştirmek isteyen herkes için ilginç bir alandır.
Uygulama alanlarından bazıları:
Bilgisayar Bilimi
Bilgisayar Biliminde Neler Var?
- Bilgisayar bilimi, gerçekliği anlama, modelleme ve analiz etme amacı güden bir bilim dalıdır.
- Problemleri çözmek için algoritmalar ve kod kullanılır.
Bilgisayar Bilimi
Hesaplamalı Düşünme (Computational Thinking)
Bir problemi, çözümünü bir insanın ya da bilgisayarın adım adım yürütebileceği biçimde ifade etme yoludur. Dört beceriye dayanır; örnek problem: bir sınıfın not ortalaması.
toplam ← 0; her not için toplam ← toplam + not; ort ← toplam / n.Babil yöntemi ve Öklid algoritması da aynı yolla bulunur: tekrar eden bir adım görülür, gereksiz ayrıntı atılır, adımlar sonlu bir tarife dönüştürülür.
Bilgisayarın Tarihi
Bilgisayar (Computer)
- Bir dizi hesaplama ve talimatı yürüten cihazdır; bu talimatlar bilgisayarın bir görevi yerine getirmesini sağlar.
- Verileri işlemek için matematiksel hesaplamalar ve mantıksal talimatlar kullanır.
- Günümüz bilgisayarları elektronik devrelerle çalışır ve sayıları dijital olarak temsil eder.
Bilgisayarın Tarihi
Elektronik ve Dijital
İki düzeyli sinyali gürültüye rağmen ayırt etmek kolaydır: 3,9 V da 4,8 V da “1” sayılır. Dijital sistemlerin güvenilirliği buradan gelir.
Bilgisayarın Tarihi
Sabit Programlı Bilgisayar (Fixed Program Computer)
- Belirli bir problemi çözmek için tasarlanır; önceden tanımlanmış tek bir programı çalıştırır. Program, makinenin yapısına gömülüdür.
- Kökleri çok eskilere dayanır:
- Abaküs, Antikythera Mekanizması (MÖ 2. yy)
- Pascaline (Pascal, 1642), Leibniz’in basamaklı hesap makinesi (1673)
- Babbage’ın Fark Makinesi (1822), Hollerith’in elektrikli çizelgeleme makinesi (1890)
- Atanasoff–Berry Bilgisayarı (ABC), Turing Bombası (Enigma çözümü)

Bilgisayarın Tarihi
Charles Babbage ve Analitik Makine
- Charles Babbage (1791–1871): İngiliz matematikçi ve mucit.
- 1837’de Analitik Makine’yi (Analytical Engine) tasarladı: ilk genel amaçlı, programlanabilir bilgisayar tasarımı.
- Matematiksel hesaplama yapabilen ve sonuçları saklayabilen bir makineydi; farklı hesaplamalar için programlanabilirdi.
- Bugünkü bilgisayarın parçaları bu tasarımda vardı: store (bellek), mill (işlemci), delikli kartlarla giriş ve yazıcıyla çıkış.
- Delikli kart fikri, desenleri kartlarla belirlenen Jacquard dokuma tezgâhından (1804) alındı.
- Makine Babbage’ın yaşamında tamamlanamadı, ama modern bilgisayarların öncüsü kabul edilir.

Bilgisayarın Tarihi
Ada Lovelace: İlk Program
- Ada Lovelace (1815–1852): İngiliz matematikçi ve yazar.
- 1843’te Analitik Makine üzerine bir makaleyi çevirip kendi notlarını ekledi.
- “Not G”de makinenin Bernoulli sayılarını hesaplaması için adım adım bir yöntem verdi: bu, ilk bilgisayar programı kabul edilir.
- Matematiksel düşünceyi ve programlamayı bilimsel bir yaklaşımla birleştirdi; bilgisayar tarihinin ilk programcısıdır.
Bilgisayarın Tarihi
Bilgisayarın Kısa Tarihi
- 1945 · Depolanan program: program ve veri aynı bellekte durur; program da bir veri olduğundan girdi, başka bir programın tanımı olabilir.
- Von Neumann mimarisi: işlemci komutları bellekten sırayla okur; işlemci, bellek ve G/Ç birimleri adres, veri ve kontrol yollarıyla haberleşir.
Çizelgedeki aralıklar eşit çizilmiştir; yıllar arasındaki gerçek uzaklığı göstermez.
Bilgisayarın Tarihi
İlk Elektronik Bilgisayarlar: ABC ve Colossus
- John Atanasoff ve Clifford Berry, Iowa State Üniversitesi, 1937–1942.
- İlk elektronik dijital bilgisayar kabul edilir; mantık devrelerini vakum tüpleriyle kurdu.
- Sayıları ikili (0/1) sistemde işledi.
- Bellek: dönen tamburlar üzerindeki kondansatörler.
- Programlanamazdı: yalnızca doğrusal denklem sistemlerini çözüyordu (sabit programlı).
- Tommy Flowers ve ekibi, Bletchley Park (İngiltere), 1944.
- İlk programlanabilir elektronik dijital bilgisayar; anahtar ve fişlerle programlanıyordu.
- II. Dünya Savaşı’nda düşmanın şifreli mesajlarını çözdü.
- Yaklaşık 1600 vakum tüpü kullandı: mekanik cihazlardan çok daha hızlı ve esnekti.
- Bilgisayar teknolojisinin ilerlemesine büyük katkı sağladı.
Bilgisayarın Tarihi
Elektronik Valf: Vakum Tüpü
- Havası boşaltılmış cam tüp: ısıtılan katot elektron yayar, anot bu elektronları toplar.
- Aradaki ızgaraya uygulanan küçük gerilim akımı açar ya da keser: tüp bir elektronik anahtar gibi çalışır (açık = 1, kapalı = 0).
- Hareketli parça olmadığından mekanik rölelerden binlerce kat hızlı anahtarlama yapar.
- Sakıncaları: çok ısınır, çok enerji harcar ve sık arızalanır.
Bilgisayarın Tarihi
ENIAC ve EDVAC
- John Mauchly ve J. Presper Eckert, Pennsylvania Üniversitesi (ABD).
- Genel amaçlı ilk büyük ölçekli elektronik bilgisayar.
- Mekanik parçalar yerine yaklaşık 17 500 vakum tüpü: daha hızlı ve güvenilir.
- Saniyede yaklaşık 5000 toplama; topçu atış tabloları gibi büyük hesaplar.
- Sayıları onlu sistemde tutuyordu; programlamak için kablolar elle yeniden takılıyordu.
- Tasarımı, John von Neumann’ın 1945 raporunda tanımlandı; 1951’de tam olarak çalıştı.
- ENIAC’tan farklı olarak ikili sayı sistemini kullandı.
- Programı ve veriyi aynı bellekte saklıyordu (depolanan program).
- Komutlar sırayla çalışıyor, koşula bağlı atlama yapılabiliyordu.
- Bu tasarım, bugünkü bilgisayarların temeli olan von Neumann mimarisidir.
Bilgisayarın Tarihi
Genel Amaçlı Bilgisayar (General Purpose Computer)
- Kullanıcının ihtiyacına göre programlanabilir; geniş bir uygulama yelpazesi için tasarlanmıştır.
- İş, eğitim, eğlence gibi birçok alanda kullanılır. Program değiştirilerek farklı görevlere uyarlanır: aynı dizüstü bilgisayar bir dakika önce müzik çalar, sonra Java derler.
- İşlemci, bellek ve giriş/çıkış birimlerinden oluşur. İşlemci verileri talimatlara göre işler ve sonuç üretir.
Bilgisayarın Tarihi
İlk Programlar
- İlk programlar çoğunlukla matematiksel hesaplamalar içindi; ilk kullanımlar bilimsel ve askerî uygulamalara odaklanıyordu.
- Programlar ve veriler delikli kartlarla girilirdi: her sütundaki delik bir karakteri kodlar.
- İlk yaygın yüksek düzeyli programlama dili Fortran (Formula Translation), John Backus önderliğinde IBM’de geliştirildi ve 1957’de kullanıma sunuldu.
- Fortran bilimsel hesaplamalarda yaygın olarak kullanıldı ve hâlâ kullanılmaktadır.

K = I + J gibi matematiğe yakın ifadeler yazmasını sağlar; derleyici bunu makine komutlarına çevirir. Java da (1995) yüksek düzeyli bir dildir.Turing Makineleri
Evrensel Turing Makinesi (Universal Turing Machine)
- Alan Turing’in 1936’da tanımladığı soyut ve genel amaçlı bir bilgisayar modelidir; bilgisayar biliminin en temel modellerinden biridir.
- Girdi olarak başka bir Turing makinesinin tanımını alır ve o makineyi taklit eder (simüle eder).
- Yani hesaplanabilir her problemi çözebilir. Modern bilgisayarların evrensel olarak programlanabilmesinin kuramsal temelidir.
Depolanan programlı bilgisayar ve evrensel Turing makinesi, bilgisayar teknolojisinin iki önemli dönüm noktasıdır.
Turing Makineleri
Turing Makinesinin Parçaları
Kural biçimi: (durum, okunan) → (yazılacak, yön, yeni durum). Örnek: (q0, 0) → (1, sağ, q0).
Turing Makineleri
Örnek: Bitleri Ters Çeviren Turing Makinesi
| # | Durum, okunan | Yaz, git, durum |
|---|---|---|
| 1 | q0, 0 | 1, sağ, q0 |
| 2 | q0, 1 | 0, sağ, q0 |
| 3 | q0, □ | dur |
Yalnızca üç kural: her 0’ı 1, her 1’i 0 yapar; boş hücreye gelince durur.
Başlangıç: durum q0, başlık 0. hücrede. Bantta 0110 yazılı.
0. hücrede 0 okundu → kural 1: 1 yazıldı, başlık sağa geçti.
1. hücrede 1 okundu → kural 2: 0 yazıldı, başlık sağa geçti.
2. hücrede 1 okundu → kural 2: 0 yazıldı, başlık sağa geçti.
3. hücrede 0 okundu → kural 1: 1 yazıldı, başlık sağa geçti.
□ okundu → kural 3: makine durur. Sonuç bantta: 1001.
Bu kural tablosu, makinenin “programı”dır. Evrensel makine böyle bir tabloyu bantta okuyup çalıştırabilir.
Turing Makineleri
Hesaplamanın Sınırlarını Tanımlamak
- Turing makinesi, hesaplamanın ne olduğunu ve sınırlarını kesin olarak tanımlar.
- Church–Turing tezi: Adım adım bir yöntemle hesaplanabilen her şey bir Turing makinesiyle de hesaplanabilir.
- Ama her problem hesaplanabilir değildir. Turing, “Verilen bir program bir gün durur mu?” sorusunu (durma problemi, halting problem) her program için doğru yanıtlayan bir algoritmanın olamayacağını kanıtladı.
- Bu sonuçlar 20. yüzyılın en önemli bilimsel sonuçlarından biri kabul edilir.
Bilgisayarların Sınırları
Bilgisayarların Sınırları
Bilgisayarlar karmaşık hesaplamaları çok hızlı yapar; bu güç teknolojik gelişmelere dayanır. Yine de her kaynak sınırlıdır.
Bilgisayarların Sınırları
Sınırlar Java’da da Görünür
public class Sinirlar { public static void main(String[] args) { int enBuyuk = Integer.MAX_VALUE; System.out.println(enBuyuk); System.out.println(enBuyuk + 1); // taşma System.out.println(0.1 + 0.2); // duyarlık System.out.println(5 / 2); // tamsayı bölmesi } }
2147483647 -2147483648 0.30000000000000004 2
int32 bitlik bellek kullanır: en büyük değeri 231 − 1 = 2 147 483 647’dir. Bir eklenince taşma (overflow) olur, en küçük değere döner.doublesayıları ikili tabanda yaklaşık 15–16 basamak duyarlıkla saklar; 0,1 ikili tabanda tam yazılamaz.- İki
int’in bölümü yineint’tir: 5 / 2 = 2 (kesir atılır).
Bilgisayarların Sınırları
Makineler ve Teknoloji
- Teknoloji insanların yaşamını etkileyen bir güçtür; makineler bu gelişmenin önemli bir parçasıdır.
- Makineler işleri hızlı ve verimli yapar; bu güç sanayi devriminden bugüne sürekli arttı. Yine de inşa edebileceğimiz makinelerin sınırları vardır.
Bilgi Türleri
Bilgi: Bildirimsel ve Buyurusal
Bilgi, insanların ya da makinelerin dünyayı anlamasına ve sorunları çözmesine yardım eden bilinçli kavrayıştır. İki biçimde ifade edilebilir:
| Bildirimsel bilgi (declarative) | Buyurusal bilgi (imperative) | |
|---|---|---|
| Soru | Bir şey nedir? | Bir şey nasıl yapılır? |
| Biçim | Tanım, aksiyom, gerçek | Sıralı talimatlar, tarif |
| Sınanması | Doğru ya da yanlış olarak doğrulanır | Adımlar izlenir, sonuç elde edilir |
| Karekök | y·y = x ise y, x’in kareköküdür | Babil yöntemi: tahmin et, iyileştir, tekrarla |
| Günlük örnek | “Kek, un, şeker ve yumurtadan yapılan bir tatlıdır.” | Kek tarifi: “Yumurtaları çırp, unu ekle, 180 °C’de 35 dk pişir.” |
Bilgi Türleri
Bildirimsel Bilgi (Declarative Knowledge)
- Açıkça ifade edilen bilgi türüdür; doğru veya yanlış olarak doğrulanabilir.
- Aksiyomlar ya da tanımlar yoluyla ifade edilir: bir şeyin ne olduğunu, nasıl tanımlandığını belirtir.
- Gerçeklerin ifadesini de içerebilir: gerçekler, dünya hakkında doğru ve doğrulanabilir ifadelerdir (“Su 100 °C’de kaynar”, deniz düzeyinde).
y, x’in kareköküdür ⇔ y · y = x ve y ≥ 0.
Bu tanımla bir tahmini sınayabiliriz: 4 · 4 = 16 olduğundan 4, 16’nın kareköküdür. Ama tanım, karekökün nasıl hesaplanacağını söylemez: √2’yi bu tanımdan doğrudan bulamayız.
Bilgi Türleri
Buyurusal Bilgi: Babil Yöntemi ile Karekök
Buyurusal bilgi, bir şeyin nasıl yapılacağına dair talimatlar içerir. Babil yöntemi bir sayının karekökünü adım adım bulur:
- x değerini al.
- Bir başlangıç tahmini y0 seç (ör. y0 = 1).
- yn² ≈ x ise dur; cevap yn.
- Değilse yeni tahmini hesapla: yn+1 = (yn + x / yn) / 2.
- Adım 3’e dön.
Neden çalışır? y çok büyükse x / y küçüktür (ya da tersi); ikisinin ortalaması gerçek köke daha yakındır. Her tekrarda tahmin köke yaklaşır.
| n | yn (x = 16) | yn² |
|---|---|---|
| 0 | 1,000000 | 1,000000 |
| 1 | 8,500000 | 72,250000 |
| 2 | 5,191176 | 26,948313 |
| 3 | 4,136665 | 17,111995 |
| 4 | 4,002258 | 16,018065 |
| 5 | 4,000001 | 16,000005 |
Beş tekrarda 4’e çok yakın bir değer bulundu.
Bilgi Türleri · Adım adım kod izleme
Babil Yöntemi: Java ile Adım Adım
x = 16 için karekök aranıyor (Java double 16’yı 16.0 olarak gösterir).
Başlangıç tahmini y0 = 1.
Koşul: |y·y − x| = 15 > 0,001 → doğru, döngüye girilir.
Yeni tahmin hesaplanır ve yazdırılır: y = 8,5.
Koşul: |y·y − x| = 56,25 > 0,001 → doğru, döngüye girilir.
Yeni tahmin hesaplanır ve yazdırılır: y = 5,1911764705882355.
Koşul: |y·y − x| = 10,9483 > 0,001 → doğru, döngüye girilir.
Yeni tahmin hesaplanır ve yazdırılır: y = 4,136664722546242.
Koşul: |y·y − x| = 1,112 > 0,001 → doğru, döngüye girilir.
Yeni tahmin hesaplanır ve yazdırılır: y = 4,002257524798522.
Koşul: |y·y − x| = 0,0180653 > 0,001 → doğru, döngüye girilir.
Yeni tahmin hesaplanır ve yazdırılır: y = 4,000000636692939.
Koşul: |y·y − x| ≈ 5,1·10⁻⁶ ≤ 0,001 → yanlış, döngü biter.
Sonuç yazdırılır. Tam 4 değil, 4’e çok yakın bir yaklaşık değer.
double x = 16; // karekökü aranan sayı double y = 1; // başlangıç tahmini y0 while (Math.abs(y * y - x) > 0.001) { y = (y + x / y) / 2; // yeni tahmin System.out.println(y); } System.out.println("Karekök ≈ " + y);
Bilgi Türleri
En Büyük Ortak Bölen (EBOB): İki Tanım
İki sayının EBOB’u (greatest common divisor, GCD), ikisini de tam bölen en büyük pozitif tam sayıdır. Örnek: 12’nin bölenleri 1, 2, 3, 4, 6, 12; 18’in bölenleri 1, 2, 3, 6, 9, 18 → EBOB(12, 18) = 6.
Bilgi Türleri
Öklid Algoritması (Euclidean Algorithm)
Algoritmanın adımları
- İki pozitif tam sayı a ve b’yi al (a ≥ b).
- a’yı b’ye böl, kalana r de: r = a mod b.
- r = 0 ise dur: EBOB = b.
- Değilse a’ya b’yi, b’ye r’yi ata.
- Adım 2’ye dön.
| a | b | r = a mod b |
|---|---|---|
| 48 | 18 | 12 |
| 18 | 12 | 6 |
| 12 | 6 | 0 |
48 = 2·18 + 12, 18 = 1·12 + 6, 12 = 2·6 + 0 → EBOB(48, 18) = 6.
Bilgi Türleri · Adım adım kod izleme
Öklid Algoritması: Java ile Adım Adım
a = 48, b = 18 (a ≥ b).
Kalan: 48 % 18 = 12 (48 = 2·18 + 12).
r = 12 ≠ 0 → döngüye girilir.
a ← b: a = 18.
b ← r: b = 12.
Yeni kalan: 18 % 12 = 6.
r = 6 ≠ 0 → döngüye girilir.
a ← b: a = 12.
b ← r: b = 6.
Yeni kalan: 12 % 6 = 0.
r = 0 → koşul yanlış, döngü biter.
Son bölen b = 6 sonuçtur: EBOB(48, 18) = 6.
int a = 48, b = 18; // a >= b int r = a % b; // kalan while (r != 0) { a = b; b = r; r = a % b; } System.out.println("EBOB = " + b);
Algoritma ve Problem
Algoritma (Algorithm)
- Bir problemi adım adım çözme yöntemidir; izlenmesi gereken adımları belirleyen bir tariftir.
- Bir görevi nasıl yapacağımızı belirler; karmaşık problemleri basitleştirmeye yarar.
- Bilgisayar programlarının temelidir: programlama, algoritmaları bir programlama diliyle ifade etme sürecidir.
- Bilgisayar bilimi büyük ölçüde algoritmaların tasarımı ve analizidir.
- İyi programcı, problem için uygun algoritmayı seçip uygulayabilir.
- adımları açıkça belirler,
- adımları mantıklı bir sıraya koyar,
- sonlu sayıda adımda biter,
- problemi çözme amacı güder.
İyi tasarlanmış algoritma doğru ve verimli olmalıdır. Ad, 9. yüzyıl matematikçisi el-Hârizmî’den gelir.
Algoritma ve Problem
Girdi, İşlem, Çıktı
- Programın ya da algoritmanın ne yapması gerektiği açıkça tanımlanır; gerekli adımlar ve çıktı belirlenir.
- Problem belirlemenin iki bileşeni vardır:
- Girdi (input): problemin çözülmesi için gereken bilgi ya da veri.
- Çıktı (output): problemin sonucu ya da istenen bilgi.
Problemi tanımlarken Ne? Kim? Nerede? Ne zaman? Nasıl? Neden? soruları sorulur. “Not ortalaması hesapla” belirsizdir: kaç not olduğu, ağırlıkların eşit olup olmadığı ve sonucun tam sayı mı ondalıklı mı olacağı yanıtlanmadan yazılan program yanlış problemi çözebilir.
Geri bildirim: çıktıya bakarak girdiyi ya da işlemi düzeltmek (ör. termostat sıcaklığı ölçer, ısıtıcıyı açar ya da kapatır).
Algoritmik İşlemler
Algoritmik İşlem Türleri
Her algoritma üç tür işlemden kurulur. Bu türler her programlama dilinde bulunur, algoritmaların temel yapısını oluşturur ve karmaşıklığı denetlemeye yarar.
Algoritmik İşlemler
Döngülü İşlemler: Tekrar Eden Eylemler
- Devam koşulu yanlış olana kadar belirli eylemleri tekrar eder; listeleri gezmek, verileri işlemek için kullanışlıdır.
while: önce koşul, sonra gövde
i > 0 olduğu sürece s’yi 1 artır, i’yi 1 azalt.
while i > 0 do
set s to s + 1
set i to i - 1int s = 0, i = 3; while (i > 0) { s = s + 1; i = i - 1; }
repeat … until: önce gövde
k, n’den büyük olana kadar k’yi yazdır ve artır.
repeat
print k
set k to k + 1
until k > nint k = 1, n = 3; do { System.out.println(k); k = k + 1; } while (k <= n);
Java’da repeat … until yoktur; karşılığı do … while’dır ve koşul tersine çevrilir: “k > n olana kadar” = “k ≤ n olduğu sürece”. k = 1, n = 3 için çıktı: 1, 2, 3. Gövde koşulu sonunda yanlış yapmazsa döngü sonsuza dek sürer; takılan program IDE’deki durdur düğmesiyle ya da konsolda Ctrl+C ile durdurulur.
Özet
Özet
| Kavram | Akılda kalacak nokta |
|---|---|
| Programlama / hesaplama | Bilgisayara talimat vermek / veriyi matematik ve mantıkla işleyip sonuç üretmek. |
| Bilgisayar bilimi | Mantık, problem çözme ve yaratıcılık; teknoloji yalnızca araçtır. |
| Sabit / depolanan program | İşlev donanıma gömülü / program bellekte, değiştirilebilir (EDVAC, von Neumann). |
| Turing makinesi | Bant + başlık + kurallar; hesaplanabilir her şeyi hesaplar, ama her problem hesaplanabilir değildir. |
| Bildirimsel / buyurusal | “Nedir?” (tanım, sınama) / “Nasıl yapılır?” (adımlar: Babil, Öklid). |
| Algoritma, sözde kod | Sonlu, sıralı, açık adımlar; önce girdi ve çıktıyı belirle, sonra adımları yaz. |
| İşlem türleri | Sıralı (sırayla), koşullu (if/else), döngülü (while, do-while, for). |
| Döngü | Devam koşulu + gövde; gövde koşulu sonunda yanlış yapmalı, yoksa sonsuz döngü. |
Özet
Sık Yapılan Hatalar
int a = 5 → error: ';' expected. Sözde kodda serbestiz, Java’da her deyim ; ile biter.= ile ==’yi karıştırmakif (x = 5) → error: incompatible types: int cannot be converted to boolean. Karşılaştırma ==’dir.int toplam; System.out.println(toplam); → error: variable toplam might not have been initialized.5 / 2 = 2, 9 / 5 = 1. Ondalıklı sonuç için 5 / 2.0 ya da 5.0 / 2 yazılır.nextDouble() “1,75” bekler; “1.75” yazılırsa InputMismatchException fırlatılır.Özet
Örnek Problemler
- Hangisi bildirimsel, hangisi buyurusal? (a) “Bir sayı 2’ye kalansız bölünüyorsa çifttir.” (b) “Sayıyı 2’ye böl; kalan 0 ise ‘çift’ yaz.”
- Öklid algoritmasıyla EBOB(84, 36)’yı bulun. Kaç bölme yapılır?
- Babil yöntemiyle √10’u y0 = 3 alarak iki adım hesaplayın.
- Üç notun ortalamasını bulan programın girdi, çıktı ve sözde kodunu yazın. Notlar 40, 75, 90 ise çıktı?
whileörneğinde s = 0, i = 5 ile başlanırsa kaç tur döner, sonunda s ve i kaçtır?- Bitleri ters çeviren Turing makinesi 1010 bandında kaç adım çalışır, bantta ne kalır?
Cevapları göster
- (a) bildirimsel: çiftliğin ne olduğunu tanımlar. (b) buyurusal: nasıl karar verileceğini anlatır.
- 84 mod 36 = 12, 36 mod 12 = 0 → EBOB = 12; 2 bölme.
- y1 = (3 + 10/3) / 2 ≈ 3,166667; y2 = (y1 + 10/y1) / 2 ≈ 3,162281 (√10 ≈ 3,162278).
- Girdi: n1, n2, n3; çıktı: ortalama. Üç notu al → toplamı 3.0’a böl → yazdır:
68.33333333333333(3’e bölünse 68). - 5 tur; sonunda s = 5, i = 0.
- 4 yazma adımı + □ okununca durma = 5 adım; bantta 0101 kalır.
Özet
Alıştırmalar
- Santigratı Fahrenhayta çeviren (F = C · 9/5 + 32) programı yazın.
int f = 9 / 5 * c + 32;c = 25 için ne verir? - Üç sayıdan en büyüğünü yazdıran sözde kodu yazın.
- 1’den n’e kadar sayıların toplamını
whileile hesaplayın. n = 10 için sonuç? - EBOB(1071, 462)’yi Öklid algoritmasıyla tablo hâlinde izleyin.
- Bantta tekli (unary) bir sayı (111 = 3) varken sonuna bir 1 ekleyen Turing makinesinin kurallarını yazın.
- Bir listedeki en küçük öğeyi bulan sözde kodu yazın. Başlangıç değeri neden 0 değil, listenin ilk öğesi olmalıdır?
Cevaplar / ipuçları
9 / 5= 1 (tam sayı bölmesi): sonuç 57, doğrusu 77. Çözüm:c * 9.0 / 5 + 32→ 77.0.- en ← a; b > en ise en ← b; c > en ise en ← c; en’i yazdır.
while (k <= n) { toplam += k; k++; }(toplam = 0, k = 1) → 55.- (1071, 462, 147) → (462, 147, 21) → (147, 21, 0) → EBOB = 21.
- (q0, 1) → (1, sağ, q0); (q0, □) → (1, sağ, dur). Sonuç: 1111.
- enKucuk ← ilk öğe; her öğe enKucuk’tan küçükse enKucuk ← öğe. 0 ile başlanırsa {4, 2, 7} gibi pozitif bir listede sonuç yanlışlıkla 0 çıkar.
Özet
Kaynaklar
- J. V. Guttag, Introduction to Computation and Programming Using Python, 3. baskı, MIT Press, 2021 (Bölüm 1: bildirimsel ve buyurusal bilgi).
- A. B. Downey ve C. Mayfield, Think Java, 2. baskı, O’Reilly, 2019 (Bölüm 1: programlama ve problem çözme).
- R. Sedgewick ve K. Wayne, Computer Science: An Interdisciplinary Approach, Addison-Wesley, 2016 (Turing makineleri, hesaplanabilirlik).
- C. Petzold, Code: The Hidden Language of Computer Hardware and Software, 2. baskı, 2022.
- A. M. Turing, “On Computable Numbers, with an Application to the Entscheidungsproblem”, Proc. London Math. Society, 1936.
- H. M. Deitel ve P. J. Deitel, Java: How to Program, 11. baskı, Pearson, 2017.
- Oracle, The Java Tutorials: “Language Basics”, docs.oracle.com/javase/tutorial.