C# – Girilen sayı tek mi, çift mi?

C# konusunda aktif çalışmalara başladığımı daha önce söylemiştim. Geçmişte çalıştığım farklı dillerden ötürü aşinalık var elbet. Konuları hızlıca geçebiliyorum. Buda bana konuları üzerinde kaçıracağım detaylar olmaması için web’de araştırma süresi kazandırıyor.

Bu araştırmalar sırasında genelde okuduğum konuların yorumlarında ilginç sorular gözlemliyorum. Bu konu başlığı da onlardan biri. İncelediğim sitelerden birinde denk geldiğim bitirme ödevi talep sorularından birisiydi. Bilgisayar mühendisliği okuyup bu sorunun yanıtını web’de sormak bana enteresan gelmedi desem yalan olur. O tarafı çok beni ilgilendirmese de önce antreman olsun diye bu sorunun cevabını kendime göre çalıştım. Sonra da “neden paylaşmıyorum ki?” diyerek buraya taşımaya karar verdim.

Kodun tamamını en sonda vereceğim, öncesinde metodları açıklayayım;

Main() metodunda yapımız basit.

  • do-while döngüsü ile kullanıcımız uygulamayı en az bir kere çalıştırıp sonrasında tekrar denemek isteyip istemediğini sorguyor ve yönetiyoruz.
  • sayiIste() metodu ile kullanıcının sayı girişi yapmasını istiyoruz.
  • gelenSayi değişkenini main bloğu dığında yazmamızın nedeni class içinde farklı metodlar tarafından kullanılıyor olması
  • hesapla() metodu ile girilen sayının tek mi, çift mi olduğunu belirliyoruz
  • Sayı girişi ve hesaplamadan sonra sonucu Console.WriteLine ile ekrana basıyoruz.
static int gelenSayi;
static void Main(string[] args)
{
      do
      {
      //Kullanıcıdan tek'mi çiftmi istediği sayıyı öğrenelim
      sayiIste();

      Console.WriteLine("------------------------------------------");
      Console.WriteLine("Girilen sayı : {0} - Sonuç {1}'dir.", gelenSayi, hesapla(gelenSayi));
      Console.WriteLine("------------------------------------------");

      } while (tekrarDene());
}//main

 

sayiIste() metodumuz kullanıcının sayı girmesini beklediğimiz metoddur.

  • Console.Clear() ile çalışacağımız ekranı sade tutmak için konsolu temizliyoruz
  • gelenSayi değişkenine readline() ile değeri atıyoruz. Tabi bildiğiniz gibi readline bize string bir değer üretiyor. Bu değeri bizim integer’a çeviriyor olmamız gerek ki, tek-mi çift mi hesaplayabilelim.
  • gelenSayi değişkenine beklentimiz dışında integer değil, alfanumerik/string değer girilmesi de söz konusu olabilir. Bu durum bize hata üreteceği için try-catch bloğu içine yazdım. Hata durumunda gerekli uyarıyı yapıp metodu tekrar çağırmasını sağladım. Tabi ben bu kodu yazarken C# üzerinde henüz try-catch uygulamasını çalışmamıştım. Çalışırken gördüğüm C# a özgü try-catch-finally yapısının güzel ekstra özelliklerini ayrıca yazmak kararı verdim.
static void sayiIste()
{
      //Konsolu temizle
      Console.Clear();
      Console.Write("Lütfen sayı girin : ");
      //eğer hatalı giriş olursa... (örn sayı yerine string)
      try
      {
            gelenSayi = Convert.ToInt32(Console.ReadLine()); //Gelen değeri sayıya çevirmeliyiz
      }
      catch //hata yakalarsak
      {
            Console.WriteLine("Hatalı Giriş yaptınız, Lütfen sadece SAYI giriniz");
            //MEtodu yeniden çalıştıralım
            sayiIste();
      }//try-catch
 
}//sayiIste()

 

hesapla() metodu girilen sayının tek mi, çiftmi olduğunu bize dönen temel metodumuz;

static String hesapla(int sayi){
      //Mod2
      if ((sayi % 2) == 0)
      {
            return "Çift";
      }
      else
      {
            return "Tek";
      }//if
}//hesapla()

 

tekrardene() metodunda kullanıcının uygulamayı tekrar deneme isteğini main() metodundaki do-while döngüsüne, kullanıcıdan aldığımız bilgiye istinaden true-false olarak döndürüyoruz. Çok gereklimiydi diye sorarsanız; kodu sadeleştirmek, okunabilirliği arttırmak için fazla kompleksleştirmeden bu tip metodların fayda sağladığına inanıyorum.

static Boolean tekrarDene()
{
      //Kullanıcının seçimini alalım
      Console.Write("Tekrar denemek ister misiniz? (E/H)");
      String tekrarDeneSecimi = Console.ReadLine();
      //Kullanıcı seçimi durumuna göre geriye false yada true döndürelim
      if ((tekrarDeneSecimi == "E") || (tekrarDeneSecimi == "e") || (tekrarDeneSecimi == ""))
      {
            return true;
      }else{
            return false;
      }
}//tekrarDene()

 

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
    {

        static int gelenSayi;

        // Tekmi? Çift mi? Hesaplayan Metod
        static String hesapla(int sayi){
            //Mod2
            if ((sayi % 2) == 0)
            {
                return "Çift";
            }
            else
            {
                return "Tek";
            }//if

        }//hesapla()

        //Kullanıcıdan sayı girmesini beklediğimiz metod
        static void sayiIste()
        {
            //Konsolu temizle
            Console.Clear();
            Console.Write("Lütfen sayı girin : ");
            //eğer hatalı giriş olursa... (örn sayı yerine string)
            try
            {
                gelenSayi = Convert.ToInt32(Console.ReadLine()); //Gelen değeri sayıya çevirmeliyiz
            }
            catch //hata yakalarsak
            {
                Console.WriteLine("Hatalı Giriş yaptınız, Lütfen sadece SAYI giriniz");
                //MEtodu yeniden çalıştıralım
                sayiIste();
            }//try-catch

        }//sayiIste()

        //Kullanıcı tekrar giriş yapmak isteyebilir
        static Boolean tekrarDene()
        {
            //Kullanıcının seçimini alalım
            Console.Write("Tekrar denemek ister misiniz? (E/H)");
            String tekrarDeneSecimi = Console.ReadLine();
            //Kullanıcı seçimi durumuna göre geriye false yada true döndürelim
            if ((tekrarDeneSecimi == "E") || (tekrarDeneSecimi == "e") || (tekrarDeneSecimi == ""))
            {
                return true;
            }else{
                return false;
            }

        }//tekrarDene()


        static void Main(string[] args)
        {
            do
            {
                //Kullanıcıdan tek'mi çiftmi istediği sayıyı öğrenelim
                sayiIste();

                Console.WriteLine("------------------------------------------");
                Console.WriteLine("Girilen sayı : {0} - Sonuç {1}'dir.", gelenSayi, hesapla(gelenSayi));
                Console.WriteLine("------------------------------------------");

            } while (tekrarDene());

        }//main

    }//class

}//namespace

 

Ekranın çalışan görüntüsü şöyle;

tek-cift

Hakan Müştak ☯ 2014/10

 


Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

question razz sad evil exclaim smile redface biggrin surprised eek confused cool lol mad twisted rolleyes wink idea arrow neutral cry mrgreen

*

Captcha Kontrolü * Zaman aşımı, sayfayı tekrar yükleyin


Top