---
title: 'Program Nedir'
source: 'https://academia.sh/tr/kurslar/programlama-temelleri/program-nedir'
course: 'Programlama Temelleri'
language: tr
updated: '2026-08-17T18:08:28+00:00'
license: 'CC BY-SA 4.0'
---

# Program Nedir

Girdi–işlem–çıktı modeli, yürütme sırası, deyim ile ifade ayrımı ve hata türleri.

Önceki kurs, bir bilgisayarın komutları nasıl yürüttüğünü kurdu: işlemci bellekteki bit
örüntülerini getirir, çözer ve yürütür. Bu kurs aynı olaya öbür uçtan bakar — komutları
üreten metni yazan kişinin bakışından.

Bu dersin sorusu şudur: bir program neyi tanımlar ve hangi parçalardan oluşur?

## Girdi, İşlem, Çıktı

Bir program, üç bileşenli bir dönüşümü tanımlar:

- **Girdi:** İşlenecek veri. Klavyeden, dosyadan, ağdan veya doğrudan programın içinden
  gelebilir.
- **İşlem:** Girdiden çıktıya giden adımlar.
- **Çıktı:** Üretilen sonuç. Ekrana yazılabilir, dosyaya kaydedilebilir ya da başka bir
  programa aktarılabilir.

Bu kursta baştan sona aynı somut problem kullanılacaktır: **bir ölçüm dizisinin
ortalamasını ve en büyük değerini bulmak.** Problem sade olduğu için her yeni kavram,
tanıdık bir zemin üzerinde tanıtılabilir.

Problemin bileşenleri şunlardır: girdi bir sayı dizisidir, işlem toplama ve
karşılaştırmadır, çıktı iki sayıdır.

## Yürütme Sırası

Program metni yukarıdan aşağı okunur ve satırlar yazıldıkları sırayla yürütülür. Bu,
ilk bakışta belirtmeye değmeyecek kadar açık görünür; ancak iki sonucu vardır.

Birincisi, bir değer kullanılmadan önce üretilmiş olmalıdır. İkincisi, aynı program aynı
girdiyle her çalıştırıldığında aynı çıktıyı verir. Bu özellik **belirlilik**
olarak adlandırılır ve programların sınanabilir olmasının temelidir.

Belirliliğin bir koşulu vardır: programın davranışı yalnızca girdisine bağlı olmalıdır.
Zamanı okuyan, rastgele sayı üreten veya ağdan veri çeken bir program, aynı çağrıda
farklı sonuç verebilir. Bu tür kaynaklar programın sınanmasını zorlaştırdığı için
sınırlanır ve kodun geri kalanından ayrı tutulur; yazılım kalitesi müfredatı bu ayrımı
test edilebilirlik başlığı altında ele alır.

Sıra, yalnızca denetim akışı yapılarıyla değiştirilir — koşullar ve döngüler bir sonraki
konunun konusudur. Önceki kursta bunun donanımdaki karşılığı görülmüştü: program sayacı
her adımda bir sonraki komuta ilerler, dallanma komutları ise ona başka bir adres yazar.

## İlk Program

Aşağıdaki program, iki ölçümün ortalamasını hesaplar:

```python
# Girdi: iki ölçüm
olcum_1 = 12
olcum_2 = 18

# İşlem: toplam ve ortalama
toplam = olcum_1 + olcum_2
ortalama = toplam / 2

# Çıktı
print(ortalama)          # 15.0
```

Beş satırın her biri bir **deyimdir (statement)**: yürütüldüğünde bir iş yapar. İlk
dört deyim bir değer üretip saklar, sonuncusu ekrana yazar.

`#` ile başlayan satırlar **yorumdur**; yürütülmez. Yorumlar okuyucu içindir ve kodun
ne yaptığını değil, **neden** öyle yaptığını anlatmaya ayrılmalıdır. Kodun ne yaptığı,
zaten kodun kendisinde yazılıdır.

Bu kursta örnekler Python ile verilecektir. Ancak anlatılan kavramlar — değişken,
koşul, döngü, fonksiyon — belirli bir dile ait değildir; her genel amaçlı dilde
karşılıkları vardır. Sözdizim değişir, kavram kalır.

## Programı Çalıştırmak

Program metni bir dosyada durur. Dosyanın çalıştırılması, önceki kursta tanımlanan
zinciri başlatır: metin çevrilir, komutlar üretilir ve işlemci onları yürütür. Bu
zinciri başlatmanın iki yolu vardır.

**Dosya olarak çalıştırma**, kaynak dosyanın adını dilin çalıştırıcısına vermektir.
Program baştan sona yürür ve biter. Üretilen çıktı, bu kursta `print` ile ekrana
yazılacaktır.

**Etkileşimli çalıştırma**, deyimleri tek tek yazıp sonucunu hemen görmektir. Öğrenme
sırasında yararlıdır: bir ifadenin ne ürettiği, program yazmadan denenebilir. Bu kurstaki
örneklerin çoğu her iki yolla da çalıştırılabilir.

Girdinin dışarıdan alınması da bir deyimdir:

```python
metin = input("Ölçüm: ")     # kullanıcıdan bir satır okur
print("Girilen:", metin)
```

`input` çağrısı programı durdurur, bir satır bekler ve okunan satırı **dizgi olarak**
döndürür. Sayı girildiğinde bile sonuç dizgidir; sayısal işlem yapılacaksa dönüştürülmesi
gerekir. Bu ayrıntı, bu konunun son dersinde ele alınacaktır.

Bu kursun örnekleri, tekrarlanabilir olması için girdiyi çoğunlukla doğrudan kodun içinde
verir. Gerçek programlarda girdi kaynağı değişir; girdi–işlem–çıktı yapısı değişmez.

## Deyim ve İfade

İki kavramın ayrılması, sonraki derslerin tamamında işe yarar.

**İfade (expression)** bir değer üretir. `12 + 18` bir ifadedir; değeri $30$'dur.
`olcum_1` de bir ifadedir; değeri, o adın bağlı olduğu şeydir.

**Deyim (statement)** bir eylem gerçekleştirir. `toplam = olcum_1 + olcum_2` bir
deyimdir: sağdaki ifadeyi hesaplar ve sonucu bir ada bağlar.

Ayrımın pratik sonucu şudur: ifadeler birbirinin içine yerleştirilebilir, deyimler
yerleştirilemez.

```python
ortalama = (olcum_1 + olcum_2) / 2      # ifade içinde ifade: geçerli
```

Bir deyimin sonucu yoktur; bu yüzden `x = (y = 3)` yazımı birçok dilde geçersizdir.
Bazı diller atamayı da ifade sayar ve buna izin verir — bu, dil tasarımı kararıdır ve
tanınmış bir hata kaynağıdır: karşılaştırma yerine yanlışlıkla atama yazmak, geçerli
ama yanlış bir program üretir.

## Hata Türleri

Programların üç ayrı biçimde başarısız olması, üç ayrı aşamaya karşılık gelir. Önceki
kursun derleme aşamaları dersi bu ayrımın kaynağını vermişti.

**Sözdizim hatası:** Metin, dilin dilbilgisine uymuyor. Program hiç çalışmaz.

```python
ortalama = (olcum_1 + olcum_2 / 2      # kapanmayan parantez
```

**Çalışma zamanı hatası:** Metin geçerli, ancak yürütme sırasında yapılamayan bir işlem
isteniyor.

```python
bolen = 0
ortalama = toplam / bolen              # sıfıra bölme
```

Bu hatalar programı çalışırken durdurur. Nerede durduğu, hata iletisiyle birlikte
bildirilir.

**Mantık hatası:** Program çalışır, hata vermez, ama yanlış sonuç üretir.

```python
ortalama = olcum_1 + olcum_2 / 2       # 12 + 9 = 21,0  — beklenen 15,0
```

Bu üçüncüsü en pahalısıdır, çünkü kendini göstermez. Yukarıdaki satır, işlem önceliği
nedeniyle bölmeyi önce yapar; sonuç sayısal olarak makuldür ve hiçbir uyarı üretmez.
Yalnızca beklenen değeri bilen biri fark eder.

Mantık hatalarına karşı tek savunma, sonucun bağımsız olarak sınanmasıdır: elle
hesaplanmış bir örnekle karşılaştırma, kenar durumların denenmesi ve testler. Yazılım
kalitesi müfredatı bu savunmanın sistematik biçimini ele alır.

## Program ile Algoritma

Son bir ayrım: **algoritma**, problemi çözen adımların kendisidir; **program**, o
adımların belirli bir dilde yazılmış hâlidir. Aynı algoritma farklı dillerde farklı
programlar verir; aynı problem için farklı algoritmalar seçilebilir.

Bu ayrım pratikte şuna yarar: bir program çalışmıyorsa, sorunun çözümde mi yoksa
çözümün yazılışında mı olduğu ayrı ayrı sorulabilir. İki soru farklı yerlerde aranır.

Ortalama hesabı için algoritma tek cümledir: değerleri topla, sayılarına böl.
Programın hangi dilde yazıldığı bu cümleyi değiştirmez. Algoritmaların doğruluğu ve
maliyeti, bu müfredattaki ayrı bir kursun konusudur.

## Özet

- Bir program girdi, işlem ve çıktı bileşenlerinden oluşan bir dönüşüm tanımlar.
- Deyimler yazıldıkları sırayla yürütülür; aynı girdi aynı çıktıyı verir.
- İfade bir değer üretir, deyim bir eylem gerçekleştirir; ifadeler iç içe konabilir.
- Yorumlar yürütülmez ve kodun neden öyle yazıldığını anlatmaya ayrılır.
- Sözdizim hatası programı hiç çalıştırmaz, çalışma zamanı hatası yürütmeyi durdurur,
  mantık hatası ise sessizce yanlış sonuç üretir.
- Algoritma çözümün kendisidir; program onun bir dildeki ifadesidir.

## Sonraki Adım

Yukarıdaki programda `olcum_1` gibi adlar kullanıldı ama ne oldukları tanımlanmadı. Bir
ad bir değere nasıl bağlanır, bu bağ ne zaman değişir ve bellekte ne olur? Sonraki ders
değişken kavramını, önceki kursta kurulan bellek modeliyle birlikte ele alacak.
