Pseudocode, Flowchart ve Python Kodları ile Temel Algoritmalar
Bu bölümde temel algoritma problemlerini üç aşamalı yaklaşımla çözeceğiz:
Problem: Yarıçapı verilen dairenin alanını hesaplayın (π ≈ 3.14).
PI = 3.14
r = float(input("Yarıçap: "))
alan = PI * r ** 2
print(f"Alan: {alan:.2f}")
Problem: Kenar uzunluğu verilen karenin alanını hesaplayın.
kenar = float(input("Kenar: "))
alan = kenar ** 2
print(f"Alan: {alan}")
** operatörü üs almak içindir.
x**2 = x², x**3 = x³
Problem: Kısa ve uzun kenar verilen dikdörtgenin çevresini hesaplayın.
kisa = float(input("Kısa kenar: "))
uzun = float(input("Uzun kenar: "))
cevre = 2 * (kisa + uzun)
print(f"Çevre: {cevre}")
Problem: Üç sayının aritmetik ortalamasını bulun.
a = float(input("a: "))
b = float(input("b: "))
c = float(input("c: "))
ortalama = (a + b + c) / 3
print(f"Ortalama: {ortalama:.2f}")
Problem: Celsius değerini Fahrenheit'a çevirin. Formül: F = C × 9/5 + 32
C = float(input("Celsius: "))
F = C * 9 / 5 + 32
print(f"{C}°C = {F}°F")
Problem: Girilen iki sayıdan büyük olanı bulun.
x = float(input("x: "))
y = float(input("y: "))
if x > y:
print(f"Büyük olan: {x}")
elif y > x:
print(f"Büyük olan: {y}")
else:
print("İki sayı eşit")
Problem: Girilen sayının tek mi çift mi olduğunu bulun.
n = int(input("n: "))
if n % 2 == 0:
print("Çift")
else:
print("Tek")
Problem: Üç sayının en küçüğünü ve en büyüğünü bulun.
a = float(input("a: "))
b = float(input("b: "))
c = float(input("c: "))
# Minimum bul
min_val = a
if b < min_val:
min_val = b
if c < min_val:
min_val = c
# Maximum bul
max_val = a
if b > max_val:
max_val = b
if c > max_val:
max_val = c
print(f"Min: {min_val}, Max: {max_val}")
Problem: Taban ve üs verilen sayının sonucunu hesaplayın (örn: 2³ = 8).
taban = int(input("Taban: "))
us = int(input("Üs: "))
sonuc = 1
for i in range(us):
sonuc *= taban
print(f"{taban}^{us} = {sonuc}")
taban ** us ile de üs alınabilir,
ancak algoritma dersinde döngü ile yazmanız beklenir.
Problem: Girilen sayının asal olup olmadığını kontrol edin.
Asal sayı, sadece 1 ve kendisine tam bölünebilen, 1'den büyük doğal sayıdır.
Neden önemli? Kriptografi, şifreleme algoritmaları (RSA), hash fonksiyonları asal sayılara dayanır.
Eğer n = a × b ise ve a ≤ b ise, o zaman a ≤ √n olmalıdır.
Çünkü a > √n ve b > √n olsaydı, a × b > n olurdu (çelişki!).
Örnek: 36 için √36 = 6. 36 = 2×18 = 3×12 = 4×9 = 6×6. En küçük çarpan her zaman ≤6.
n = int(input("n: "))
if n < 2:
print("Asal değil")
else:
asal = True
i = 2
while i * i <= n:
if n % i == 0:
asal = False
break
i += 1
if asal:
print(f"{n} asaldır")
else:
print(f"{n} asal değildir")
Problem: Onluk tabandaki sayıyı ikilik tabana çevirin.
Günlük hayatta onluk sistem (decimal, base-10) kullanırız: 0-9 rakamları.
Bilgisayarlar ikilik sistem (binary, base-2) kullanır: sadece 0 ve 1.
Her sayı, tabanın kuvvetlerinin toplamı olarak yazılabilir:
$157_{10} = 1×10^2 + 5×10^1 + 7×10^0 = 100 + 50 + 7$
$1011_2 = 1×2^3 + 0×2^2 + 1×2^1 + 1×2^0 = 8 + 0 + 2 + 1 = 11_{10}$
Sayıyı sürekli 2'ye böl, kalanları tersten oku:
| 13 ÷ 2 = 6 | kalan: 1 |
| 6 ÷ 2 = 3 | kalan: 0 |
| 3 ÷ 2 = 1 | kalan: 1 |
| 1 ÷ 2 = 0 | kalan: 1 |
Sonuç: $13_{10} = 1101_2$ (alttan yukarı oku)
n = int(input("Onluk sayı: "))
if n == 0:
print("İkilik: 0")
else:
ikili = ""
sayi = n
while sayi > 0:
bit = sayi % 2
ikili = str(bit) + ikili
sayi = sayi // 2
print(f"{n} → {ikili}")
Problem: İki sayının en büyük ortak bölenini (EBOB) bulun.
EBOB(a,b) = EBOB(b, a % b) → b sıfır olunca a cevaptır.
a = int(input("a: "))
b = int(input("b: "))
orj_a, orj_b = a, b
while b != 0:
a, b = b, a % b
print(f"EBOB({orj_a}, {orj_b}) = {a}")
Problem: İki sayının en küçük ortak katını (EKOK) bulun.
# EBOB fonksiyonu
def ebob(a, b):
while b != 0:
a, b = b, a % b
return a
a = int(input("a: "))
b = int(input("b: "))
eb = ebob(a, b)
ekok = (a * b) // eb
print(f"EBOB: {eb}")
print(f"EKOK: {ekok}")
Problem: N'den M'ye kadar tüm sayıların toplamını bulun.
n = int(input("n: "))
m = int(input("m: "))
toplam = 0
for i in range(n, m + 1):
toplam += i
print(f"Döngü ile toplam: {toplam}")
n = int(input("n: "))
m = int(input("m: "))
terim = (m - n) + 1
toplam = terim * (n + m) // 2
print(f"Formül ile toplam: {toplam}")
Problem: Bir listede belirli bir elemanı arayın.
a = [1, 2, 5, 67, 98, 13]
aranan = 67
i = 0
while i < len(a):
if a[i] == aranan:
print(f"{aranan} bulundu! İndeks: {i}")
break
i += 1
else:
print(f"{aranan} bulunamadı")
if aranan in a kullanmak yerine
yukarıdaki döngü ile yazmanız beklenir!
Problem: Bir listedeki en küçük ve en büyük elemanı bulun.
a = [-128, 62, 9000, -987, -85600]
# En küçük ve en büyük
min_val = a[0]
max_val = a[0]
i = 1
while i < len(a):
if a[i] < min_val:
min_val = a[i]
if a[i] > max_val:
max_val = a[i]
i += 1
print(f"Min: {min_val}")
print(f"Max: {max_val}")
a = [7, 10, 4, 44]
i = 0
toplam = 0
while i < len(a):
toplam += a[i]
i += 1
ortalama = toplam / len(a)
print(f"Toplam: {toplam}")
print(f"Ortalama: {ortalama}")
Bu bölümde bazı algoritmaların "daha verimli" olduğundan bahsettik. Örneğin Gauss formülü, döngüden çok daha hızlı.
Algoritmaların verimliliğini ölçmek için Big O notasyonu kullanılır:
Bu konuyu Bölüm 1: Algoritma Analizi'nde detaylı öğreneceksiniz.