Bir cümlelik özet
Bu modülü bitirirken, sabah çantanın o günkü derslere göre eksiksiz olup olmadığını kontrol eden bir algoritma tasarlıyoruz; sıralama, koşul, döngü, değişken ve girdi/çıktıyı tek bir projede birleştiriyoruz.
Neden önemli?
Bir modülü gerçekten öğrenip öğrenmediğimizi en iyi küçük bir proje gösterir. Ayrı ayrı öğrendiğimiz parçalar (adımları sıralamak, koşul yazmak, döngü kurmak) tek başına kolay görünür. Onları birlikte kullanmak biraz daha zordur ve asıl beceri budur.
Bu proje bir öğretici şablondur; gerçek bir cihaz ürettiğimizi iddia etmiyoruz. Amacımız, günlük bir problemi net adımlara çevirmeyi ve çözümü test etmeyi denemek. Aynı düşünce biçimi ileride Scratch'te, Python'da ve robotik projelerinde işe yarayacak.
Adım 1: Problemi ve gereksinimleri tanımla
Kod yazmadan önce ne çözdüğümüzü açıkça yazmak gerekir. Belirsiz bir problem, belirsiz bir çözüm üretir.
Problem tanımı
Sabah okula çıkmadan önce, çantanın o günkü ders programına göre eksiksiz olduğunu kontrol etmek istiyoruz. Eksik varsa hangi eşyanın eksik olduğunu söylemeli; her şey tamamsa "hazır" demeli.
Gereksinimler
- Program o günün ders listesini girdi olarak almalı.
- Her ders için gerekli kitabın çantada olup olmadığını kontrol etmeli.
- Kalem kutusu ve su şişesi gibi her gün gereken temel eşyaları da kontrol etmeli.
- Eksik eşyaları biriktirip listelemeli (çıktı).
- Hiç eksik yoksa "Çanta hazır" yazmalı.
Dikkat ed: burada modülün beş parçasının hepsi var. Adımların sırası sıralama, "eğer eksikse" kararı koşul, her dersi tek tek gezmek döngü, eksikleri tutan liste bir değişken, ders listesi ve ekran mesajları ise girdi/çıktı.
Adım 2: Değişkenleri ve mantığı planla
Değişkenler listesi
| Değişken | Ne tutar? | Örnek değer |
|---|---|---|
ders_listesi | Bugünkü dersler | ["Matematik", "Fen", "Beden"] |
cantadakiler | Çantada olan eşyalar | ["Matematik kitabı", "Kalem kutusu"] |
gerekli_esya | Her ders için gereken kitap | "Fen kitabı" |
eksikler | Bulunamayan eşyalar | ["Fen kitabı"] |
hazir | Çanta tamam mı? | Doğru / Yanlış |
Sözde kod
Başla
ders_listesini al
cantadakiler listesini al
eksikler listesini boş yap
Her ders için ders_listesinde tekrarla
gerekli_esya = dersin kitabı
Eğer gerekli_esya cantadakiler içinde değilse
gerekli_esya'yı eksikler listesine ekle
Eğer kalem kutusu cantadakiler içinde değilse
"Kalem kutusu" ekle eksikler listesine
Eğer su şişesi cantadakiler içinde değilse
"Su şişesi" ekle eksikler listesine
Eğer eksikler listesi boşsa
"Çanta hazır" yaz
Değilse
eksikleri ekrana yaz
Bitir
Metin tabanlı akış şeması
[Başla]
|
[Ders listesini al]
|
[eksikler = boş liste]
|
<Kontrol edilecek ders var mı?>
Evet | \ Hayır
v \
<Kitap çantada mı?> \
Hayır | \ Evet \
v \ v
[eksikler'e (sonraki <eksikler boş mu?>
ekle] derse) Evet | \ Hayır
\ / v v
(döngü başına) [Çanta hazır] [Eksikleri yaz]
\ /
[Bitir]
Adım 3: Python ile yaz ve test et
Sözde kodu gerçek bir dile çevirdiğimizde mantığın çalışıp çalışmadığını görebiliriz.
def canta_kontrol(ders_kitaplari, cantadakiler):
eksikler = []
for ders in ders_kitaplari:
kitap = ders_kitaplari[ders]
if kitap not in cantadakiler:
eksikler.append(kitap)
for esya in ["Kalem kutusu", "Su şişesi"]:
if esya not in cantadakiler:
eksikler.append(esya)
if len(eksikler) == 0:
return "Çanta hazır"
return "Eksik: " + ", ".join(eksikler)
Üç test senaryosu
| # | Girdi | Beklenen çıktı |
|---|---|---|
| 1 | Kitaplar tam, kalem kutusu ve su şişesi var | Çanta hazır |
| 2 | Fen kitabı yok, gerisi tam | Eksik: Fen kitabı |
| 3 | Matematik kitabı ve su şişesi yok | Eksik: Matematik kitabı, Su şişesi |
Senaryoları elde çalıştırıp beklenen çıktıyla karşılaştırmak, algoritmanın gerçekten çalıştığını gösteren en dürüst yoldur.
Mini uygulama
Kendi çantanı bir tabloya dök. Yukarıdaki canta_kontrol fonksiyonunu bir kâğıtta ya da bilgisayarda çalıştır. Sonra dördüncü bir test senaryosu ekle: örneğin çantada yanlışlıkla dünkü kitap varsa program ne yapıyor? Program bunu "fazla eşya" olarak fark ediyor mu, yoksa görmezden mi geliyor? Cevabını bir cümleyle yaz.
Projeyi güçlendirme planı
Algoritma Mini Projesi: Akıllı Çanta Kontrolü için yalnız çalışan bir gösterim hazırlamak yeterli değildir. İyi bir proje; hedefi, kullanıcıyı, sınırları, test koşullarını ve başarısız denemeleri de görünür kılar. Bu genişletme çalışmasında spor antrenmanındaki tekrarları sayan bir karar akışı bağlamını kullanarak açık bir algoritma, sözde kod ve test tablosu oluştur. Dersin hedefi “Modülün tümünü kullanarak akıllı çanta kontrolü algoritmasını tasarla, sözde kodla, test et ve hata ayıkla” olsa da proje sayfasında ölçülmemiş bir sonucu kesin başarı gibi yazma.
1. Proje özeti ve kapsam
Önce üç cümle yaz: Çözmek istediğin sorun nedir, bu sorun kimin için önemlidir ve ilk sürüm özellikle neyi yapmayacaktır? Kapsam dışını belirtmek projeyi küçültmez; tamamlanabilir hâle getirir. Adım 1: Problemi ve gereksinimleri tanımla ile Gereksinimler arasındaki ilişkiyi projenin temel varsayımı olarak yaz ve bu varsayımı hangi testin doğrulayacağını belirt.
2. Kabul ölçütleri
- Adımlar açık ve tek anlamlı mı?
- Başlangıç ve bitiş koşulu belli mi?
- Normal, sınır ve hatalı durumlar denendi mi?
- Gereksiz tekrar veya adım var mı?
- Başka biri algoritmayı aynı sonuçla uygulayabiliyor mu?
“Algoritma Mini Projesi: Akıllı Çanta Kontrolü” için kabul ölçütlerini “çalışıyor” gibi belirsiz sözcüklerle bırakma. Süre, mesafe, doğru deneme sayısı, ekran genişliği veya kullanıcı adımı gibi gözlenebilir bir ölçü seç. Ölçüm mümkün değilse en azından üç ardışık denemede aynı davranışın görülüp görülmediğini kaydet.
3. Test matrisi
| Test | Koşul | Beklenen | Gerçek sonuç | Sonraki karar |
|---|---|---|---|---|
| Normal | Standart giriş ve tam bağlantı | Temel görev tamamlanır | Test sırasında doldur | Koru veya küçük iyileştirme yap |
| Sınır | En düşük ya da en yüksek kabul edilen değer | Sistem kararlı kalır | Test sırasında doldur | Eşiği veya kuralı gözden geçir |
| Hata | Eksik, yanlış ya da beklenmeyen giriş | Güvenli ve anlaşılır tepki | Test sırasında doldur | Hata yönetimi ekle |
| Tekrar | Aynı koşulda en az üç deneme | Benzer sonuçlar | Test sırasında doldur | Tutarsızlığın kaynağını araştır |
4. Sürüm günlüğü
“Algoritma Mini Projesi: Akıllı Çanta Kontrolü” projesinin her sürümü için tarih, değiştirdiğin tek ana karar, değişikliğin nedeni ve test sonucu yaz. İlk sürümün çalışmaması başarısızlık değildir; Adım 1: Problemi ve gereksinimleri tanımla veya Gereksinimler ile ilgili hangi varsayımın yeniden düşünülmesi gerektiğini gösteren veridir. Görsel kullanırken kişisel bilgi ve özel arka plan ayrıntılarını paylaşma.
5. Sunum ve öz değerlendirme
“Algoritma Mini Projesi: Akıllı Çanta Kontrolü” projesini iki dakikada anlatacak şekilde hazırlan: sorun, çözüm yaklaşımı, spor antrenmanındaki tekrarları sayan bir karar akışı için en önemli test sonucu ve bir sonraki adım. “Tamamlandı” demek yerine hangi kısmın doğrulandığını ve hangi kısmın hâlâ geliştirilmesi gerektiğini açıkla.
Sık yapılan hatalar
Hatayı bulmak
Bir öğrenci fonksiyonu yazdı ama 1. senaryoda bile hep "Eksik" çıktı. Kontrol ettiğinde şu satırı gördü:
if kitap in cantadakiler: # yanlış
eksikler.append(kitap)
Koşulu ters kurmuş: kitap çantada olduğunda onu eksik saymış. Düzeltmesi not in eklemek:
if kitap not in cantadakiler: # doğru
eksikler.append(kitap)
Diğer sık hatalar
- Eksik listesini döngüden önce boşaltmayı unutmak, bir önceki günün eksiklerini taşır.
- Büyük/küçük harf farkı: "fen kitabı" ile "Fen kitabı" bilgisayara farklı görünür.
- Her ders için ayrı ayrı kod yazmak; oysa döngü bu tekrarı bizim yerimize yapar.
Güvenlik notu
Bu ders tamamen kâğıt ve ekran üstünde çalışan bir düşünme projesidir. İleride bunu gerçek bir prototipe (örneğin ışıklı bir uyarı ya da sensörlü bir kutu) dönüştürmek istersen, pil, motor, kesici alet veya sıcak yüzey içeren her adım bir yetişkin gözetiminde yapılmalıdır. Şebeke elektriğiyle çalışılmaz.
Test matrisi ve sınır durumları
Akıllı çanta kontrolü yalnız bütün eşyalar yerindeyken denenirse algoritmanın en kolay yolu test edilmiş olur. Daha güçlü bir değerlendirme için ders programının boş olduğu gün, aynı adla iki ders bulunduğu durum, kitabın çantada fakat yanlış bölmede olması, mataranın dolu görünmesine rağmen kapağının açık kalması ve kontrol sırasında yeni bir eşyanın eklenmesi gibi sınır durumları hazırlanmalıdır. Her satırda başlangıç durumu, beklenen uyarı, gerçekleşen sonuç ve yapılacak tek düzeltme kaydedilir.
Algoritmanın güvenilirliği, her eksikte aynı genel mesajı vermek yerine hangi eşyanın neden gerekli olduğunu gösterebilmesiyle artar. Buna rağmen sistem kararın sahibi değildir: sağlık, güvenlik veya okul kuralı gerektiren bir durumda öğrenci bir yetişkine ya da öğretmenine danışmalıdır. Proje, unutmayı tamamen ortadan kaldırdığını iddia etmez; planlı kontrol alışkanlığını görünür ve test edilebilir hâle getirir.
Bir başka test de kontrolün yarıda kesilmesidir. Kullanıcı bir kitabı ekledikten sonra uygulamayı kapatıp yeniden açtığında önceki durumun korunup korunmayacağı açıkça belirlenmelidir. Veri saklanmıyorsa sistem bunu söyler; saklanıyorsa eski ders programının yeni güne yanlışlıkla taşınması engellenir. Son raporda yalnız başarılı tur değil, hangi sınır durumunun hâlâ çözülemediği de yazılır. Böylece proje, kusursuz görünmeye çalışan bir gösteri yerine kararları ve kalan riskleri açıklayan dürüst bir mühendislik çalışmasına dönüşür.
Ders özeti
- Modül bitirme projesi, öğrendiğimiz parçaları tek bir problemde birleştirmemizi sağlar.
- Çanta kontrolü; sıralama, koşul, döngü, değişken ve girdi/çıktının hepsini kullanır.
- İyi bir çözüm önce net problem tanımı ve gereksinimlerle başlar.
- Sözde kod ve akış şeması, kod yazmadan mantığı görmemizi sağlar.
- Test senaryolarını beklenen çıktıyla karşılaştırmak hataları erken yakalar.
Kontrol soruları
- Bu projede döngü hangi işi yapıyor?
eksiklerdeğişkeni ne işe yarar ve döngüden önce neden boşaltılır?- Koşulda
inyerinenot inkullanmak neden gereklidir? - 3. test senaryosunun beklenen çıktısı nedir?
- Bu projeyi gerçek bir cihaza dönüştürürsen hangi güvenlik kuralına dikkat edersin?
Cevaplar
- Ders listesindeki her dersi tek tek gezip, o dersin kitabının çantada olup olmadığını kontrol eder; böylece aynı kontrolü elle tekrar tekrar yazmayız.
- Bulunamayan eşyaları biriktirir. Döngüden önce boşaltılır ki bir önceki kontrolün eksikleri yeni sonuca karışmasın.
- Amacımız çantada olmayan eşyayı eksik saymak.
not in, "listede yoksa" anlamına gelir;inkullanırsak mantık tersine döner. Eksik: Matematik kitabı, Su şişesi- Pil, motor, kesici alet veya sıcak yüzey içeren adımların yetişkin gözetiminde yapılması ve şebeke elektriğinden uzak durulması.
Ek doğrulama görevi
“Algoritma Mini Projesi: Akıllı Çanta Kontrolü” için ikinci bir örnek oluştur: spor antrenmanındaki tekrarları sayan bir karar akışı. İlk çözümü aynen kopyalamak yerine Adım 1: Problemi ve gereksinimleri tanımla kavramının hangi bölümde, Gereksinimler kavramının hangi kararda kullanıldığını işaretle. Sonucu değerlendirmek için şu iki soruya yazılı cevap ver: “Beklediğim davranış neydi?” ve “Gerçekte hangi kanıtı gördüm?”
Ardından kontrol listesinden özellikle “Adımlar açık ve tek anlamlı mı?” ve “Başka biri algoritmayı aynı sonuçla uygulayabiliyor mu?” maddelerini kullan. İlk denemede fark bulamazsan bir sınır koşulu ekle; örneğin en küçük değer, en büyük değer, boş giriş, bağlantı kaybı veya yeniden başlatma durumu. Son notunda yaptığın tek değişikliği ve bu değişikliğin sonucu nasıl etkilediğini açıkla.
Kaynak ve doğrulama notu
“Algoritma Mini Projesi: Akıllı Çanta Kontrolü” dersi için doğrulama odağı Adım 1: Problemi ve gereksinimleri tanımla ile Gereksinimler arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Bu dersteki algoritmalar, örnek girdiler elle izlenerek ve beklenen çıktılarla karşılaştırılarak doğrulanmıştır. Sözde kod, belirli bir programlama diline bağlı kalmadan düşünme sırasını görünür kılmak için kullanılır.
Sonraki ders
Scratch ile Programlama modülü ve Robotik & Kodlama Başlangıç Quiz'i: Algoritma düşüncesini bloklarla çalışan gerçek bir programa taşıyoruz ve öğrendiklerimizi kısa bir quizle test ediyoruz.