Koddan bloğa

CPAL tek yönlü değildir. Bloklardan C üretildiği gibi, yazılmış bir C programı da bloklara geri çevrilebilir.

Neden önemli

Çocuk kodu değiştirdiğinde ne olduğunu bloklarda görebilmeli. Tek yönlü bir üreteçte kod bir kez düzenlendiğinde bloklarla bağı kopar ve iki temsil birbirine yabancılaşır.

Desteklenen yapılar

  • cpal_* çağrıları ve iç içe ifadeleri
  • if / else
  • Sayaçlı for döngüleri (“%1 kez tekrarla”)
  • while (1) (“sürekli tekrarla”)
  • Değişkenler: static int bildirimleri ve atamalar
  • Aritmetik ve karşılaştırma: + - * / %, == != < <= > >=, && || !
  • Geçici bağlar: int t0 = …; kullanıldığı yere yerleştirilir
Kapsam öğretim alt kümesidir

C’nin tamamı değil, öğretimde kullandığımız alt kümesi tanınır. İşaretçiler, diziler, kendi fonksiyonların ve switch bugün bloğa çevrilmez. Tanınmayan bir yapı sessizce atlanmaz, açık bir hata verir.

Örnek

Bu kod:

CC kodu
void cpal_loop(void)
{
    if (cpal_obstacle(150)) {
        cpal_stop();
        cpal_play(CPAL_SOUND_ALARM);
    } else {
        cpal_forward(60);
    }
}

Şu bloklara çevrilir:

CPALBlok görünümü
sürekli tekrarla
  eğer  150 mm'den yakın engel var mı  ise
      dur
      ses çal alarm
  değilse
      ileri git hız 60

Nasıl doğruluyoruz

Üretecin kendi çıktısı geri okunur ve aynı ara temsili vermesi beklenir: blok → C → blok turu programı değiştirmemelidir. Bu tur testlerle sabitlenmiştir.