← Kodun diligörev 4 / 10
4 / 10 tamamlandı
görev 4 · ~35 dk

Karar vermek — if ve else

"=" koyar, "==" sorar — bir kere karıştır, bir daha karıştırma

hedef

Klavyeden bir not gireceksin, kod harf notunu söyleyecek. Yolda, yeni başlayanların bir numaralı hatasını kendi elinle yapacaksın.

Önce şunu bil: kapıdaki görevli

Bir konser girişi düşün. Görevli tek bir şey soruyor: bilet var mı? Varsa içeri. Yoksa geri.

kod · .ino
if (bilet_var) {
  // iceri al
} else {
  // geri cevir
}

if şartı soruyor. Şart doğruysa ilk süslü parantezin içi çalışıyor, yanlışsa else'inki. İkisi birden asla çalışmaz.

Şartı yazmak için karşılaştırma işaretleri var:

İşaret Sorduğu soru
== eşit mi?
!= farklı mı?
> büyük mü?
< küçük mü?
>= büyük ya da eşit mi?
<= küçük ya da eşit mi?

Görev 2'de if (Serial.available() > 0) yazdın. Şimdi ne dediğini biliyorsun: "gelen karakter sayısı sıfırdan büyük mü?"

= koyar, == sorar.

puan = 5 → puan kutusuna 5 koy. puan == 5 → puan 5 mi diye sor. Tek karakter fark, tamamen farklı iş. Birazdan bu farkı unutacak ve ne olduğunu göreceksin.

Kod

kod · .ino
void setup() {
  Serial.begin(9600);
  Serial.println("Notunu yaz (0-100):");
}

void loop() {
  if (Serial.available() > 0) {
    int notu = Serial.parseInt();
    while (Serial.available()) Serial.read();

    if (notu >= 50) {
      Serial.println("Gectin.");
    } else {
      Serial.println("Kaldin.");
    }
  }
}

Yükle. 70 yaz: Gectin. 30 yaz: Kaldin. 50 yaz — sınırda ne oluyor? >= olduğu için geçiyor. > yazsaydın kalırdı. Sınırı hangi tarafa koyduğun senin kararın ve kitlerde bu karar sulama pompasını açıp kapatacak.

Şimdi hata yap — kursun en önemli hatası

if (notu >= 50) satırını şöyle değiştir:

kod · .ino
if (notu = 50) {

Tek =. Yükle. Hata yok — derlendi. Şimdi 30 yaz.

kod
Gectin.

Otuz geçti. 10 yaz: geçti. 0 yaz: geçti. Ne yazarsan yaz geçiyor.

Çünkü kod "notu 50 mi?" diye sormadı. "notu kutusuna 50 koy" dedi. Görev 2'deki cümle: = içine koyar. Koydu, sonra if içine baktı — kutuda 50 var, sıfır değil, "doğru" saydı. Her seferinde.

Derleyici bunu yakalayamıyor çünkü yazdığın şey dilbilgisine uygun. Cümlen kurallı ama anlamı yanlış — Görev 0'da bahsettiğimiz "yakalanamayan hata" tam olarak bu.

Bu hata yeni başlayan herkesin başına gelir. Bir kere yaşarsan bir daha yapmazsın. Şimdi yaşadın. == yaz ve geri koy.

Zincir: else if

Tek soru yetmiyor. Görevli önce VIP mi diye bakıyor, değilse normal bilet mi, o da değilse öğrenci mi. Sırayla.

kod · .ino
if (notu >= 85) {
  Serial.println("A");
} else if (notu >= 70) {
  Serial.println("B");
} else if (notu >= 50) {
  Serial.println("C");
} else {
  Serial.println("F");
}

Yukarıdan aşağı sorulur. İlk uyan çalışır, gerisi atlanır. 90 yazarsan A — ve 90 aynı zamanda 70'ten de büyük ama B yazmıyor, çünkü orayı hiç sormadı. Sıra önemli: >= 50'yi en üste koysaydın 90 da C olurdu.

Şimdi sen yaz

Zincire bir kademe ekle: 60 ile 69 arası D olsun.

kod · .ino
void setup() {
  Serial.begin(9600);
  Serial.println("Notunu yaz (0-100):");
}

void loop() {
  if (Serial.available() > 0) {
    int notu = Serial.parseInt();
    while (Serial.available()) Serial.read();

    if (notu >= 85) {
      Serial.println("A");
    } else if (notu >= 70) {
      Serial.println("B");
    // ŞİMDİ SEN YAZ: buraya D kademesini ekle — ama dogru yere
    } else if (notu >= 50) {
      Serial.println("C");
    } else {
      Serial.println("F");
    }
  }
}
🔍 İpucu 1

Zincir yukarıdan aşağı okunuyor ve ilk uyan kazanıyor. D kademesi B'nin altına, C'nin üstüne gelmeli. Yoksa 65 yazdığında ne olur, düşün.

🔍 İpucu 2

} else if (notu >= 60) { ve altına Serial.println("D");

✅ Cevap
kod · .ino
} else if (notu >= 70) {
  Serial.println("B");
} else if (notu >= 60) {
  Serial.println("D");
} else if (notu >= 50) {
  Serial.println("C");

Yanlış yere koysaydın — mesela C'nin altına — 65 yazdığında C çıkardı. Çünkü 65, >= 50'ye önce uyar ve D sorusuna hiç sıra gelmez.

Kod hata vermezdi. Bu görevin ikinci sessiz hatası: zincirin sırası yanlışsa bazı kademeler hiç çalışmaz ve kimse sana söylemez. Bir zincir yazdığında en büyük sayıdan en küçüğe doğru sırala — ya da tersi — ama karıştırma.

📄 Görevin tam kodu
kod · .ino
void setup() {
  Serial.begin(9600);
  Serial.println("Notunu yaz (0-100):");
}

void loop() {
  if (Serial.available() > 0) {
    int notu = Serial.parseInt();
    while (Serial.available()) Serial.read();

    if (notu >= 85) {
      Serial.println("A");
    } else if (notu >= 70) {
      Serial.println("B");
    } else if (notu >= 60) {
      Serial.println("D");
    } else if (notu >= 50) {
      Serial.println("C");
    } else {
      Serial.println("F");
    }
  }
}

Olmadıysa

Ne görüyorsun Ne yap
Her sayı için aynı harf çıkıyor Bir if'te tek = kalmış. Hepsine bak: soruyorsan ==
expected ')' before '{' Şartın parantezi kapanmamış: if (notu >= 50 {
65 yazınca D yerine C çıkıyor D kademesini yanlış sıraya koymuşsun; C'nin üstüne al
else satırında expected '}' before 'else' else'ten önceki bloğun }'si eksik. Her { için bir }
Hiç harf çıkmıyor Serial.println satırlarını süslü parantezlerin içine yazdın mı?

Kendini test et

Soru: if (notu = 50) tek = ile derlendi ve her zaman "doğru" saydı. Peki if (notu = 0) yazsaydın ne olurdu?

Cevabı gör

Her zaman "yanlış" sayardı — hiç geçemezdin.

Kutuya 0 koyuyor, sonra bakıyor: 0. Kod dünyasında 0 "yanlış", sıfır olmayan her şey "doğru" demek. = 50 her zaman doğruydu çünkü 50 sıfır değil; = 0 her zaman yanlış olur çünkü sıfır sıfır.

Buradan çıkan asıl şey şu: if aslında sayıya bakıyor. Karşılaştırma işaretleri bir sayı üretiyor — doğruysa 1, yanlışsa 0 — ve if o sayıya bakıyor. Yani if (5) bile geçerli ve her zaman doğru. Görev 5'te bu sayıları birleştirmeyi öğreneceksin.

Sera kitinde "toprak susuz mu?" sorusu tam olarak bu: if (toprak > ESIK). Eşiği hangi tarafa koyduğun, bitkinin sulanıp sulanmayacağını belirliyor.


Takıldın, hata tablosu da yetmedi mi?

WhatsApp'tan sor — hangi görevdesin, ekranda ne yazıyor, devrenin fotoğrafı.