İşlevler Çözümleri
- Bu program çok farklı şekillerde ve hiç bu kadar işlev kullanmadan da yazılabilir. Ben biraz da kendimi eğlendirmek için böyle yazdım... :o)
- Programı nasıl değiştirmek istediğiniz size kalmış, ama bir kaç fikir:
import std.stdio; void menüyüGöster(string[] seçenekler, int ilkNumara) { foreach (i, seçenek; seçenekler) { writeln(' ', i + ilkNumara, ' ', seçenek); } } void main() { string[] seçenekler = [ "Siyah", "Kırmızı", "Yeşil", "Mavi", "Beyaz" ]; menüyüGöster(seçenekler, 1); }
Mors kodu yalnızca ASCII karakterleri kullandığı için char türünü kullanmakta bir sakınca görmedim. Bu programın bir yetersizliği de yalnızca küçük harfleri tanıyor olmasıdır.
import std.stdio; import std.string; string boşluk() { return "."; } string işaret() { return "="; } string dıt() { return işaret() ~ boşluk(); } string dıııt() { return işaret() ~ işaret() ~ işaret() ~ boşluk(); } string harfArası() { return boşluk() ~ boşluk(); } string morsKarşılığı(char harf) { string[char] morsAlfabesi = [ ' ' : boşluk() ~ boşluk(), 'a' : dıt() ~ dıııt(), 'b' : dıııt() ~ dıt() ~ dıt() ~ dıt(), 'c' : dıııt() ~ dıt() ~ dıııt() ~ dıt(), 'd' : dıııt() ~ dıt() ~ dıt(), 'e' : dıt(), 'f' : dıt() ~ dıt() ~ dıııt() ~ dıt(), 'g' : dıııt() ~ dıııt() ~ dıt(), 'h' : dıt() ~ dıt() ~ dıt() ~ dıt(), 'i' : dıt() ~ dıt(), 'j' : dıt() ~ dıııt() ~ dıııt() ~ dıııt(), 'k' : dıııt() ~ dıt() ~ dıııt(), 'l' : dıt() ~ dıııt() ~ dıt() ~ dıt(), 'm' : dıııt() ~ dıııt(), 'n' : dıııt() ~ dıt(), 'o' : dıııt() ~ dıııt() ~ dıııt(), 'p' : dıt() ~ dıııt() ~ dıııt() ~ dıt(), 'q' : dıııt() ~ dıııt() ~ dıt() ~ dıııt(), 'r' : dıt() ~ dıııt() ~ dıt(), 's' : dıt() ~ dıt() ~ dıt(), 't' : dıııt(), 'u' : dıt() ~ dıt() ~ dıııt(), 'v' : dıt() ~ dıt() ~ dıt() ~ dıııt(), 'w' : dıt() ~ dıııt() ~ dıııt(), 'x' : dıııt() ~ dıt() ~ dıt() ~ dıııt(), 'y' : dıııt() ~ dıt() ~ dıııt() ~ dıııt(), 'z' : dıııt() ~ dıııt() ~ dıt() ~ dıt(), '1' : dıt() ~ dıııt() ~ dıııt() ~ dıııt() ~ dıııt(), '2' : dıt() ~ dıt() ~ dıııt() ~ dıııt() ~ dıııt(), '3' : dıt() ~ dıt() ~ dıt() ~ dıııt() ~ dıııt(), '4' : dıt() ~ dıt() ~ dıt() ~ dıt() ~ dıııt(), '5' : dıt() ~ dıt() ~ dıt() ~ dıt() ~ dıt(), '6' : dıııt() ~ dıt() ~ dıt() ~ dıt() ~ dıt(), '7' : dıııt() ~ dıııt() ~ dıt() ~ dıt() ~ dıt(), '8' : dıııt() ~ dıııt() ~ dıııt() ~ dıt() ~ dıt(), '9' : dıııt() ~ dıııt() ~ dıııt() ~ dıııt() ~ dıt(), '0' : dıııt() ~ dıııt() ~ dıııt() ~ dıııt() ~ dıııt(), ]; if (harf !in morsAlfabesi) { throw new Exception("Harf tanınmıyor: " ~ harf); } return morsAlfabesi[harf]; } string dizgiyiMorsaÇevir(const char[] dizgi) { string sonuç; foreach (harf; dizgi) { sonuç ~= morsKarşılığı(harf); sonuç ~= harfArası(); } return sonuç; } string dizgiOku(string mesaj) { write(mesaj, "? "); return chomp(readln()); } void main() { writeln( dizgiyiMorsaÇevir( dizgiOku("Mors koduna çevrilecek dizgi"))); }
yatayÇizgiÇizgibi bir işlev- çizim işlevlerine boyarken hangi karakteri kullanacaklarını da bir parametreyle belirtebiliriz:
void benekKoy(Kağıt kağıt, int satır, int sütun, dchar boya) { kağıt[satır][sütun] = boya; }
Böylece işlev değişik karakterle çağrılabilir ve kağıt üzerinde her şekil kendi karakteriyle çizilebilir.