11 Nisan 2012 Çarşamba

C# 'da Console Uygulamada Baklavalar

Merhaba arkadaşlar. 
Kullanıcı isteğine bağlı olarak kaç adet deltoid çizmek istiyorsak çizebilir, ayrıca istediğimiz şekilde deltoidimizin yarı çapıyla oynayabiliriz. Burada can alıcı nokta bir fonsiyon yazarak öteleme yapılıyormuş gibi göstermekte. Fakat algoritma öteleme ile çalışmıyor. Çünkü şekiller yukarda aşağı doğru çiziliyor. Bu yüzden şekil sayısını (k), x-y düzlemi ("i" ve "j") arasında döndürmeliyiz. Böylece j düzlemim tamamlanmadan program akışı i düzlemine geçmeyecektir. Yani alt satıra geçmesi için tüm satırı tamamlayarak şekillerin üst kısmını çizecektir. Programın algoritması bu mantıkla çalışmaktadır. ,

Arkadaşlar bu tip alıştırmalar alt alta kolay yapılır. Şekil sayısını tüm döngülerin dışına alarak yapabilriz. Fakat yan yana çizdirmek istediğimizde bu yolu takip etmeliyiz.

Console uygulamalarında şöyle bir handikap vardır. Console ekranının enine boyutu değiştirilemez arkadaşlar. Bu yüzden enine büyüyen şekilleriniz varsa, ekranın bittiği yer baştan itibaren tekrar çizilmeye başlanır. Hal böyle olunca şekilleriniz üst üste binecektir. Bu durum da istenmeyen bozuk şekillerin oluşmasına sebebiyet verir. Çoğu arkadaşımız da bu durumu ile ilk karşılaştığında, hata sanmış ve algoritmada yanlışlık yaptığını sanıp algoritmasını değiştirmiştir.Aklınızın bir köşesinde bulunsun. Bu durumu da dikkate alıp uygulama geliştirmenizi tavsiye ederim. 

        

        static void Main(string[] args)
        {
            int r = 6;  //yarı çap
            int k = 5;  //baklava sayısı

            for (int i = 0; i <= 2 * r; i++)
            {
                for (int n = 0; n < k; n++)
                {
                    for (int j = (2 * n * r); j <= 2 * r + (2 * n * r); j++)
                    {
                        if ((i + j == r + (2 * n * r) && i <= r && i >= 0) ||
                            (j - i == r + (2 * n * r) && i <= r && i >= 0) ||
                            (i + j == 3 * r + (2 * n * r) && i <= 2 * r && i >= r) ||
                            (j - i == -r + (2 * n * r) && i <= 2 * r && i >= r))
                            Console.Write("*");
                        else
                            Console.Write(" ");
                    }
                } Console.WriteLine();
            } Console.ReadKey();
        }


Hiç yorum yok:

Yorum Gönder