# 7. Hafta — Karar Yapıları

## Bu hafta ne yapacağız?

Yazılı ve proje puanlarından ağırlıklı ortalama hesaplayıp sonucu başarı aralığına yerleştireceğiz. Böylece `if`, `else if` ve `else` dallarının hangi sırayla çalıştığını göreceğiz. Ardından sıcaklık, yağış ve rüzgâr bilgilerine göre kıyafet öneren özgün bir uygulama geliştireceğiz.

## Kazanımlar

- Bir problemi birbirini dışlayan karar dallarına ayırma
- En özel/sıkı koşuldan daha genel koşula doğru sıralama
- Birden fazla girdiyi aynı kararda kullanma
- Koşula göre metin, renk ve simge değiştirme
- Geçersiz girdiyi sonuç üretmeden önce engelleme

## Uygulama 07 — Not Durumu

### 1. Puanları doğrulama

Her puan 0–100 arasında olmalıdır. Koşullardan biri bile bozuksa hesaplama yapılmaz:

```dart
if (yazili == null ||
    proje == null ||
    yazili < 0 || yazili > 100 ||
    proje < 0 || proje > 100) {
  hata = true;
  ortalama = null;
  return;
}
```

### 2. Ağırlıklı ortalamayı bulma

```dart
ortalama = yazili * .6 + proje * .4;
```

`78` yazılı ve `92` proje puanı için sonuç `83.6` olur.

### 3. Karar dallarını sıralama

```dart
if (ortalama! >= 85) {
  harf = 'A';
  mesaj = 'Çok iyi, böyle devam et!';
} else if (ortalama! >= 70) {
  harf = 'B';
  mesaj = 'Başarılı bir çalışma.';
} else if (ortalama! >= 50) {
  harf = 'C';
  mesaj = 'Geçtin, eksiklerini gözden geçir.';
} else {
  harf = 'D';
  mesaj = 'Yeni bir çalışma planı hazırlamalısın.';
}
```

Kontrol 85’ten başlar. 70 önce yazılsaydı 90 puan da 70 koşulunda durur ve yanlışlıkla B olurdu. Testte `83.6`, `B` ve doğru açıklama birlikte doğrulandı.

![83,6 ortalama için B sonucunu gösteren Not Durumu](../../screenshots/week-07-adapted.png)

## Özgün proje — Kıyafet Önerisi

Uygulama sıcaklığı bir `Slider`, yağış ve rüzgârı iki `SwitchListTile` ile alır. Önce ana kıyafet sıcaklığa göre seçilir:

```dart
if (sicaklik < 8) {
  baslik = 'Kalın mont giy';
} else if (sicaklik < 18) {
  baslik = 'İnce mont yeterli';
} else if (sicaklik < 27) {
  baslik = 'Hafif kıyafet seç';
} else {
  baslik = 'Serin tutan kıyafet seç';
}
```

Ardından bağımsız hava koşulları öneriye eklenir:

```dart
if (yagis) detay = '$detay Şemsiyeni unutma.';
if (ruzgar) detay = '$detay Rüzgâra karşı ince bir dış katman al.';
```

Burada ikinci ve üçüncü kontroller `else if` değildir; yağış ve rüzgâr aynı anda doğru olabilir. Testte 12 °C ve yağış seçiliyken “İnce mont yeterli” ile şemsiye hatırlatmasının birlikte gösterildiği doğrulandı.

![12 derece ve yağış için üretilen Kıyafet Önerisi](../../screenshots/week-07-original.png)

## Sıra sende

1. Kolay: Not aralıklarına farklı renkler ekle.
2. Orta: Kıyafet önerisine “karlı” seçeneği ve bot önerisi ekle.
3. İleri: Not uygulamasına üç sınav ekleyip en düşük puanı yüzde 20, diğerlerini yüzde 40 ağırlıkla hesapla.

Çözümünü gönderdikten ve geri bildirim aldıktan sonra Kıyafet Önerisi’nin gerçek Dart çözümü ile çalışan proje paketi açılacaktır. İpucu karar sırasını kurmana yardım edecek; çözüm düğmesi eksiksiz `lib/main.dart` kodunu gösterecektir.

## Kontrol listesi

- Kararlar çakışmayacak ve erişilebilir olacak sırada yazıldı.
- Aynı anda gerçekleşebilen yağış/rüzgâr kontrolleri ayrı `if` bloklarında tutuldu.
- Geçersiz puanlarda sonuç üretilmedi.
- Koşula göre yalnız metin değil, sonuç simgesi ve görünümü de değişiyor.
- İki proje Flutter widget testinden geçti ve gerçek ekran çıktıları görsel olarak doğrulandı.
