C# – Algorithm Examples | 1

Bu yıl öğrendim ki algoritma = her şey. Bu mantığı iyice kavramak için pek çok algoritma örneği üzerinde çalışmak istiyorum. Bu yüzden böyle bir seriye başlamaya karar verdim. Umarım her şey planladığımdan da güzel olur ve geriye döndüğümde bu sayfaları, zihnimde ardından gelecekleri bilme hissiyle okurum.

Detaylar

  • Klavyeden girilen bir metnin karakterlerini sırasıyla büyüten program

Kodumuz

  • iç içe iki for kullanarak her bir aşamada o aşamanın sayısı olan harf büyük harfe çevrilecek. Örneğin Coldplay kelimesi için yapılan aşamalara bakalım.
  1. Öncelikle kullanıcıdan alınan kelimenin herhangi bir harfinin büyük olma olasılığı nedeniyle, her bir harfi .ToLower() ile küçük hale getirilir.
  2. Ardından ilk for içinde 0. indis için yani ilk satır için içindeki for döngüsüne girilir ve içerdeki döngünün 0. indisi yani ilk harfi, i==j olduğu için büyütülür.
  3. Söz konusu harf yani kelime[j] char olduğu için önce .ToString() ile string hale getirilir ardından .ToUpper() ile büyütülür.
  4. i si j ye eşit olmayan yani i != j kelimeler için direkt olarak stringe dönüştürme işlemi yapılarak yazdırılır.
  5. İçteki for döngüsünden çıktıktan sonra Console.WriteLine() yazmamızın sebebi yeni kelimeyi yazmak için bir alt satıra geçmesi.
  6. i=0 için dönen for döngüsü şimdi i=1 için dönecektir. ilk satırımıza 0 dersek ikinci satırımızın numarası 1 olacaktır ve 2. satırda da kelimenin 2. harfi büyütülmelidir. Burada if içinde i==j kontrolü yapmamızın sebebi daha açıklayıcı olmuştur.
  7. Dıştaki döngü kelimelerin sırasını, satırını temsil ederken içteki döngü kelimenin harflerinin sayısını temsil eder.

Kodun Çıktısı

Kodumuz *Bonus

  • Burada, bir önceki kodumuzda 30. satırda olan Console.WriteLine() silinmiştir. Üstteki kodumuzdan farklı olarak 18. ve 19. satırda kodlar eklenmiştir.
  • Bir önceki kodun çıktısı, her bir satırda sırayla bir harfin büyütülmesi şeklinde görünürken buradaki kod çalıştığında her defasında ekran temizlenerek metin tekrar ekrana yazdırılıyor. Metin harf harf ekrana yazdırılırken sırası gelen harf büyük harfe çevrilerek yazdırılıyor.
  • Her adımda kodun bekletilmesi gerekir. Aksi halde program derlenir derlenmez işlem bitirilir. Programın çalışıp çalışmadığını anlayamayız.
  • Programın çalışıp çalışmadığını görmek için burada programo 500ms bekletiyoruz. Bu işlemi Thread sınıfından Sleep() metoduyla yapıyoruz.
  • Thead sınıfını kullanabilmek için en üste (bkz. 2. satır) System.Threading kütüphanesi eklenmelidir.

Hatalar

  • İlk hatamız 21. ve 25. satırda Console sınıfından WriteLine() metodunu kullanmamız. Burada WriteLine her bir harfi tek bir satıra basıp alt satıra geçecektir. Kelimeyi bir bütün halindee görebilmemiz için Write() metodunu kullanmamız gereklidir.
  • İkinci hatamız if koşulu içerisinde kelime[j] yani bir char değerinin j yani bir int değerine eşit olup olmamasını kontrol etmeye çalışmamızdır. Burada her satırda o satırın index sayısına eşit olan harf büyütüleceği için i = j koşulunu yazmamız gerekir.
Hatalı ilk kodumuzun çıktısı.
  • Bir üstteki hatamızı düzeltip WriteLine() yerine Write() yazıyoruz fakat kodumuz hala istediğimiz çıktıyı vermeyecektir.
  • Her harfin yeni bir sayırda yazılmasını engellemiş olduk fakat bu seferde kelimenin harfi sayısınca, aynı kelime peş peşe tek bir satırda yazılacaktır.
  • Bunu düzeltmek için ilk for un içine, içteki for un dışına Console.WriteLine(); yazmamız gerekecektir. Bu sayede içteki for da bir kelime yazımı tamamlandığı zaman bir boşluk bırakarak yeni bir satıra geçilecektir. Döngünün ikinci aşamasına başlanacaktır.
  • Ayrıca üstteki if koşulu hatamız aynı şekilde devam ediyor. Her satırda o satırın index sayısına eşit olan harf büyütüleceği için if parantezleri içerisine i = j koşulunu yazmamız gerekir.
Hatalı ikinci kodumuzun çıktısı.

Kaynak Kodu (Source Code)

using System;

namespace DenemeBirKi
{
    class Program
    {
        static void Main(string[] args)
        {
            string kelime;

            Console.WriteLine("Bir sözcük giriniz.");

            kelime = Console.ReadLine().ToLower();

            for(int i = 0; i < kelime.Length; i++)
            {
                for(int j = 0; j < kelime.Length; j++)
                {
                    if(i==j)
                    {
                        Console.Write(kelime[j].ToString().ToUpper());
                    }
                    else
                    {
                        Console.Write(kelime[j].ToString());
                    }
                }

                Console.WriteLine();
            }

        }
    }
}

Kaynaklar

  • Örneklerle Algoritma ve C# Programlama – Erhan Arı