Bugün yapacağımız örnekte kullanıcı tarafından girilen sayıları ekrana önce tektek, altına da yıldızlarla yazılmasını sağlayacağız. Kodların üzerindeki açıklamaların yeterli olduğunu düşünüyorum. Her seferinde bu basit antreman uygulamalarına açıklama yazmak zor gelmeye başladı diyebilirim.
Genel olarak uygulamayı özetlersek;
- Uygulamada bir öncekinden farklı bir çıkış metodu kullandım.
- Kullanıcının giriş yaptığı metni bir değişkene atama gereği duymadım.
- standart bir separator (yatay ayırıcı çizgi) tanımladım ve her ihtiyaçta onu kullandım.
- Sadece sayılar 3×5 yıldız ölçüsünde tanımladım, harfleri tanımlamak çok zor geldi. Belki daha kısa bir yöntemi varsa (ki ben bilmiyorum) yapılabilirdi.
- Gelen metni string olarak alıp char’lara parçaladığım için exception handler çalışmasına gerek kalmadı. Ama sadece integer değerler olsun diyorsak, parçalanmış char içinde sayı yoksa uyarı vermek gerekirdi. Exception olmadığı ve basit bir if/then ile dahi yapılabileceği için bana gelişim açısından katkı sağlamayacağını düşünerek yazmadım. Şimdi düşünüyorum da, bunu açıklayana kadar yazsaymışım daha iyiymiş…
- Sayıları tutan diziler iki boyutlu. Harf her ne ise switch aracılığı ile her satırın kendi değişkenlerine atıyoruz ve tüm karakterler bitince, ekrana yazdırıyoruz.
Kodun tamamı şöyle;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
* Hakan Müştak @ 2014
* hmustak@gmail.com - www.mustak.org
*/
namespace ConsoleApplication1
{
class Program
{
//Sayıları piksel-yıldızlarına böldüğümüz metod
public static void pikselHesapla(string gelenSayi)
{
//karakterleri adresleyen matris Diziler
String[,] diziBir = {
{ " ", "*", " " , " " },
{ "*", "*", " " , " " },
{ " ", "*", " " , " " },
{ " ", "*", " " , " " },
{ "*", "*", "*" , " " }
};
String[,] diziIki = {
{ "*", "*", "*" , " " },
{ " ", " ", "*" , " " },
{ "*", "*", "*" , " " },
{ "*", " ", " " , " " },
{ "*", "*", "*" , " " }
};
String[,] diziUc = {
{ "*", "*", "*" , " " },
{ " ", " ", "*" , " " },
{ " ", "*", "*" , " " },
{ " ", " ", "*" , " " },
{ "*", "*", "*" , " " }
};
String[,] diziDort = {
{ "*", " ", " " , " " },
{ "*", " ", " " , " " },
{ "*", " ", "*" , " " },
{ "*", "*", "*" , " " },
{ " ", " ", "*" , " " }
};
String[,] diziBes = {
{ "*", "*", "*" , " " },
{ "*", " ", " " , " " },
{ "*", "*", "*" , " " },
{ " ", " ", "*" , " " },
{ "*", "*", "*" , " " }
};
String[,] diziAlti = {
{ "*", " ", " " , " " },
{ "*", " ", " " , " " },
{ "*", "*", "*" , " " },
{ "*", " ", "*" , " " },
{ "*", "*", "*" , " " }
};
String[,] diziYedi = {
{ "*", "*", "*" , " " },
{ " ", " ", "*" , " " },
{ " ", " ", "*" , " " },
{ " ", " ", "*" , " " },
{ " ", " ", "*" , " " }
};
String[,] diziSekiz = {
{ "*", "*", "*" , " " },
{ "*", " ", "*" , " " },
{ "*", "*", "*" , " " },
{ "*", " ", "*" , " " },
{ "*", "*", "*" , " " }
};
String[,] diziDokuz = {
{ "*", "*", "*" , " " },
{ "*", " ", "*" , " " },
{ "*", "*", "*" , " " },
{ " ", " ", "*" , " " },
{ " ", " ", "*" , " " }
};
String[,] diziSıfır = {
{ "*", "*", "*" , " " },
{ "*", " ", "*" , " " },
{ "*", " ", "*" , " " },
{ "*", " ", "*" , " " },
{ "*", "*", "*" , " " }
};
//Ekrana basacağımız Piksel satırlarını oluşturuyoruz
String siraBir = null, siraIki = null, siraUc = null, siraDort = null, siraBes = null;
//Kullanacağımız Separatorü 1 kere hazırlayalım, heryerde aynı boyutta kullanalım
String seperator = "\n-----------------------------------------------------------------------------";
Console.WriteLine(seperator); //separator
//Girilen sayının karakterlere parçalanması
foreach (char harf in gelenSayi)
{
//Karakterlerin sayılara dağılımı
switch (harf)
{
case '1':
Console.Write("bir ");
for (int i = 0; i < 4; i++)
{
siraBir = siraBir + diziBir[0, i];
siraIki = siraIki + diziBir[1, i];
siraUc = siraUc + diziBir[2, i];
siraDort = siraDort + diziBir[3, i];
siraBes = siraBes + diziBir[4, i];
}
break;
case '2':
Console.Write("iki ");
for (int i = 0; i < 4; i++)
{
siraBir = siraBir + diziIki[0, i];
siraIki = siraIki + diziIki[1, i];
siraUc = siraUc + diziIki[2, i];
siraDort = siraDort + diziIki[3, i];
siraBes = siraBes + diziIki[4, i];
}
break;
case '3':
Console.Write("üç ");
for (int i = 0; i < 4; i++)
{
siraBir = siraBir + diziUc[0, i];
siraIki = siraIki + diziUc[1, i];
siraUc = siraUc + diziUc[2, i];
siraDort = siraDort + diziUc[3, i];
siraBes = siraBes + diziUc[4, i];
}
break;
case '4':
Console.Write("dört ");
for (int i = 0; i < 4; i++)
{
siraBir = siraBir + diziDort[0, i];
siraIki = siraIki + diziDort[1, i];
siraUc = siraUc + diziDort[2, i];
siraDort = siraDort + diziDort[3, i];
siraBes = siraBes + diziDort[4, i];
}
break;
case '5':
Console.Write("beş ");
for (int i = 0; i < 4; i++)
{
siraBir = siraBir + diziBes[0, i];
siraIki = siraIki + diziBes[1, i];
siraUc = siraUc + diziBes[2, i];
siraDort = siraDort + diziBes[3, i];
siraBes = siraBes + diziBes[4, i];
}
break;
case '6':
Console.Write("altı ");
for (int i = 0; i < 4; i++)
{
siraBir = siraBir + diziAlti[0, i];
siraIki = siraIki + diziAlti[1, i];
siraUc = siraUc + diziAlti[2, i];
siraDort = siraDort + diziAlti[3, i];
siraBes = siraBes + diziAlti[4, i];
}
break;
case '7':
Console.Write("yedi ");
for (int i = 0; i < 4; i++)
{
siraBir = siraBir + diziYedi[0, i];
siraIki = siraIki + diziYedi[1, i];
siraUc = siraUc + diziYedi[2, i];
siraDort = siraDort + diziYedi[3, i];
siraBes = siraBes + diziYedi[4, i];
}
break;
case '8':
Console.Write("sekiz ");
for (int i = 0; i < 4; i++)
{
siraBir = siraBir + diziSekiz[0, i];
siraIki = siraIki + diziSekiz[1, i];
siraUc = siraUc + diziSekiz[2, i];
siraDort = siraDort + diziSekiz[3, i];
siraBes = siraBes + diziSekiz[4, i];
}
break;
case '9':
Console.Write("dokuz ");
for (int i = 0; i < 4; i++)
{
siraBir = siraBir + diziDokuz[0, i];
siraIki = siraIki + diziDokuz[1, i];
siraUc = siraUc + diziDokuz[2, i];
siraDort = siraDort + diziDokuz[3, i];
siraBes = siraBes + diziDokuz[4, i];
}
break;
case '0':
Console.Write("sıfır ");
for (int i = 0; i < 4; i++)
{
siraBir = siraBir + diziSıfır[0, i];
siraIki = siraIki + diziSıfır[1, i];
siraUc = siraUc + diziSıfır[2, i];
siraDort = siraDort + diziSıfır[3, i];
siraBes = siraBes + diziSıfır[4, i];
}
break;
default:
break;
}//switch
}//foreach
//Sayıların Piksel şeklinde ekrana basılması
Console.WriteLine(seperator); //separator
Console.WriteLine(siraBir);
Console.WriteLine(siraIki);
Console.WriteLine(siraUc);
Console.WriteLine(siraDort);
Console.WriteLine(siraBes);
Console.WriteLine(seperator); //separator
}
static void Main(string[] args)
{
//Kullanıcının çıkma isteğini taşıyan değişken
String doYouWantQuit = null;
//Uygulamanın oturum düşmeden tekrarını sağlayan döngü
do
{
//ekranı temizle
Console.Clear();
//Yazılmak istenen sayının girilmesi
Console.Write("Yazılacak sayıyı girin :");
pikselHesapla(Console.ReadLine());
Console.WriteLine(); //separator
Console.Write("Çıkmak istiyorsanız {0}'ya basınız, tekrar denemek için {1}'a basınız...","Q","Enter");
doYouWantQuit = Console.ReadLine();
Console.WriteLine(); //separator
} while (!((doYouWantQuit=="q")||(doYouWantQuit=="Q")));
}//main
}//class Program
}//namespace
Bu uygulama fikrini bana veren dostum Kamil’e bir kere daha teşekkürler.
Hakan Müştak ☯ 2014/10

Bir yanıt yazın