folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder İlk C# Uygulamam ( Sayı Kapmaca - Konsol Uygulaması )



İlk C# Uygulamam ( Sayı Kapmaca - Konsol Uygulaması )

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    noname
    noname's avatar
    Kayıt Tarihi: 23/Ağustos/2005
    Erkek

    Selamlar :)

    Sıfırdan başladım desem yeridir. Geçenki konu üzerinde @Reskam arkadaşımızın teamviewer/telefon ile verdiği ödev desteği haricinde pek bişey bilmiyordum.

    Farklı bir bölüme ödev vermiş hoca, gözüme çarptı, hoşuma gitti bi deneyeyim dedim.

    3-5 Saat uğraştım bişeyler yaptım karman çorman oldu bir iki sıkıntıyı çözemedim. Sıfırdan proje açtım. Kağıt kalemi aldım, algoritmayı çıkardım :D Sonra biraz google biraz if else biraz for while bişeyler karaladım.

    Oyun şöyle,

    Tabi oynamak için kodları alıp debug a geçmeniz lazım. Compile kısmına hiç girmedim bilemiyorum nasıl olur :)

    - Bi sayı giriyorsunuz

    Girdiğiniz sayıdan rastgele 1 veya 2 düşüyor pc. Sıra size geçiyor. Siz düşüyorsunuz. Falan filan en son sıfıra ilk inen kazanıyor.

    Sayı X'e inene kadar ( bu Xi rastgele belirliyor ) rastgele düşürüyor pc. O Xten sonra algoritma değişiyor, bu sefer kazanmak için oynamaya başlıyor. 

    Tam o algoritma değiştiği noktada bir iki sıkıntı var, tam çıkamadım işin içinden, fazla vakit de yok daha fazla uğraşamayacağım. Çözen düzelten olursa paylaşırsa ben de öğrenmiş olurum :)

    Bazen üst üste 2 kere tahmin falan yapıyor bize sormadan. Bazen de sayı 33 mesela 32ye düşüyorsun ben kazandım demeye başlıyor. O kısımda kafası iyice karışık yani :D

    Düzeltebilen çıkarsa internet yokken oynanır fena oyun olmadı :p

    Kodlar şöyle, 

     

    edit

    Yanlış kopyalamışım düzelttim ( 16:02 )

     

    using System;
    
    namespace sayibulma
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                int S = 0, Y = 0;
    
                Random rast = new Random();
    
              
    
    
                Console.WriteLine("Sayı kapmacaya hoşgeldin :-) Başlangıç değerini ver bakalım.");
    
                gir:
    
                S = Convert.ToInt32(Console.ReadLine());
    
                System.Threading.Thread.Sleep(500);
    
                Console.WriteLine("\n Girdiğin Sayı: " + S);
    
    
                if (S <= 49)
                {
                    System.Threading.Thread.Sleep(500);
    
                    Console.WriteLine("\n Şş, sayının 50 veya daha büyük olması lazım! \n");
    
                System.Threading.Thread.Sleep(250);
    
                    goto gir;
                }
    
                int eshik = rast.Next(13, (S - 10));
    
                System.Threading.Thread.Sleep(500);
    
                Console.WriteLine("\n Algoritma değişme eşiği: " + eshik);
    
                azalt:
    
                while (S >= eshik)
    
                {
                    int R = rast.Next(1, 3);
    
                    S = S - R;
    
                    System.Threading.Thread.Sleep(500);
    
                    Console.WriteLine("\n Yeni Tahminim : " + S + "\n");
    
                    yenisayi:
    
                    System.Threading.Thread.Sleep(500);
    
                    Console.WriteLine("\n Yeni tahminini alalım : ");
    
                    Y = Convert.ToInt32(Console.ReadLine());
    
                    if (Y <= (S - 3))
                    {
                        System.Threading.Thread.Sleep(500);
                        Console.WriteLine("\n Yalnızca 1 veya 2 birim düşebilirsin.!");
                        goto yenisayi;
                    }
    
                    else if (Y >= S) 
    
                    {
                        System.Threading.Thread.Sleep(500);
    
                        Console.WriteLine("\nSayıyı düşürmen lazım!");
                        goto yenisayi;
                    }
    
                    
                    S = Y;
                    goto azalt;
    
                }
    
                                                        
    
    
                   while( S <= eshik ) // eshik )
    
                {
    
    
                   sonadogru:
    
                    int R = rast.Next(1, 3);
    
                    S = S - R;
    
                    System.Threading.Thread.Sleep(500);
    
                    Console.WriteLine("\n Yeni Tahminim : " + S);
    
                    System.Threading.Thread.Sleep(500);
    
                    if (S == 0) ;
    
                    {
                        for (int i = 0; i < 10; i++)
                        {
                            Console.WriteLine("\n Ben Kazandım! :-) ");
                            System.Threading.Thread.Sleep(125);
                        }
                        Environment.Exit(0);
    
                    }
    
                    yenisayi:
    
                    System.Threading.Thread.Sleep(500);
                    Console.WriteLine("Yeni tahminini gir: ");
    
                    Y = Convert.ToInt32(Console.ReadLine());
    
                    if (Y <= (S - 3))
                    {
                        System.Threading.Thread.Sleep(500);
                        Console.WriteLine("\n Yalnızca 1 veya 2 birim düşebilirsin.!");
                        goto yenisayi;
                    }
    
                    else if (Y >= S)
    
                    {
                        System.Threading.Thread.Sleep(500);
    
                        Console.WriteLine("\n Sayıyı düşürmen lazım!");
                        goto yenisayi;
                    }
    
                    S = (S - Y);
    
                    if ( S == 0 )
                    {
    
                        for (int i = 0; i < 10; i++)
                        {
                            Console.WriteLine("\n Tebrikler! Kazandın! :-)");
                            System.Threading.Thread.Sleep(500);
                        }
    
                        Environment.Exit(0);
    
    
                    }
    
                    if (S % 3 == 1)
    
                    {
    
                        S = S - 1;
                        System.Threading.Thread.Sleep(500);
    
                        Console.WriteLine("\n Yeni Sayı Tahminim: " + S);
    
                        if (S == 0) ;
    
                        {
                            for (int i = 0; i < 10; i++)
                            {
                                Console.WriteLine("\n Ben Kazandım! :-) ");
                                System.Threading.Thread.Sleep(500);
                            }
                            Environment.Exit(0);
    
                        }
    
                        goto yenisayi;
    
                    }
    
                    else if (S % 3 == 2)
                    {
                        S = S - 2;
                        System.Threading.Thread.Sleep(500);
    
                        Console.WriteLine("\n Yeni Sayı Tahminim: " + S);
    
                        if (S == 0) ;
    
                        {
                            for (int i = 0; i < 10; i++)
                            {
                                Console.WriteLine("\n Ben Kazandım! :-) ");
                                System.Threading.Thread.Sleep(500);
                            }
                            Environment.Exit(0);
    
                        }
    
                        goto yenisayi;
                    }
    
                    else if (S % 3 == 0)
    
                    {
    
                        int Rx = rast.Next(1, 3);
    
                        S = S - Rx;
    
                        System.Threading.Thread.Sleep(500);
    
                        Console.WriteLine("\n Yeni Tahminim : " + S);
    
                        System.Threading.Thread.Sleep(500);
    
    
                        goto yenisayi;
                        
                    }
    
                }
    
    
    
                System.Threading.Thread.Sleep(3000);
    
    
    
    
    
    
    
    
            }
        }
    }
    

     

    noname tarafından 25/Mar/18 16:02 tarihinde düzenlenmiştir

    ...said addicted.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    zeybekustasi
    zeybekustasi's avatar
    Kayıt Tarihi: 24/Mayıs/2012
    Erkek

    Öncelikle başarılı buldum bir çok validasyon yapılmış gibi 100 filan girince sayı düşür diyor ama 9999999999999999 girince sapıtıyor. Ona da bi kısıt koy bence.


    https://www.youtube.com/watch?v=WC3-71NKwPw
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    noname
    noname's avatar
    Kayıt Tarihi: 23/Ağustos/2005
    Erkek

    Düzelttim be.

     

    bazı if () lerin sonuna ; koyuyorsun hata da vermiyor kafasına esen yerden devam ediyor :D

    bir de klavyeden girilen sayıyı öncekine yazacağıma aradaki farkı aldırmışım. Neysem...

    ilk proje için gayet eğlenceliydi, umarım devamı da böyle olur. Örnek şeyleriniz var mı? Şunu dene, bunu dene falan, basit şeyler yazmaya çalışayım. Sanırım ders takip etmekten daha kolay böyle öğrenmek :))

     

    Yeni kodlar : 

     

    using System;
    
    namespace sayibulma
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                int S = 0, Y = 0;
    
                Random rast = new Random();
    
              
    
    
                Console.WriteLine("Sayı kapmacaya hoşgeldin :-) Başlangıç değerini ver bakalım.");
    
                gir:
    
                S = Convert.ToInt32(Console.ReadLine());
    
                System.Threading.Thread.Sleep(500);
    
                Console.WriteLine("\n Girdiğin Sayı: " + S);
    
    
                if (S <= 49)
                {
                    System.Threading.Thread.Sleep(500);
    
                    Console.WriteLine("\n Şş, sayının 50 veya daha büyük olması lazım! \n");
    
                System.Threading.Thread.Sleep(250);
    
                    goto gir;
                }
    
                int eshik = rast.Next(13, (S - 10));
    
                System.Threading.Thread.Sleep(500);
    
                Console.WriteLine("\n Algoritma değişme eşiği: " + eshik);
    
                azalt:
    
                while (S >= eshik)
    
                {
                    int R = rast.Next(1, 3);
    
                    S = S - R;
    
                    System.Threading.Thread.Sleep(500);
    
                    Console.WriteLine("\n Yeni Tahminim : " + S + "\n");
    
                    yenisayi:
    
                    System.Threading.Thread.Sleep(500);
    
                    Console.WriteLine("\n Yeni tahminini alalım : ");
    
                    Y = Convert.ToInt32(Console.ReadLine());
    
                    if (Y <= (S - 3))
                    {
                        System.Threading.Thread.Sleep(500);
                        Console.WriteLine("\n Yalnızca 1 veya 2 birim düşebilirsin.!");
                        goto yenisayi;
                    }
    
                    else if (Y >= S) 
    
                    {
                        System.Threading.Thread.Sleep(500);
    
                        Console.WriteLine("\nSayıyı düşürmen lazım!");
                        goto yenisayi;
                    }
    
                    
                    S = Y;
                    goto azalt;
    
                }
    
                                                        
    
    
                   while( S <= eshik ) // eshik )
    
                {
    
    
    
                    int R = rast.Next(1, 3);
    
                    S = S - R;
    
                    System.Threading.Thread.Sleep(500);
    
                    Console.WriteLine("\n Yeni Tahminim : " + (S+R) +" - " + R + " = " + S );
    
                    System.Threading.Thread.Sleep(500);
    
                    if (S == 0) 
    
                    {
                        for (int i = 0; i < 10; i++)
                        {
                            Console.WriteLine("\n Ben Kazandım! :-) ");
                            System.Threading.Thread.Sleep(125);
                        }
                        Environment.Exit(0);
    
                    }
    
                    yenisayi:
    
                    System.Threading.Thread.Sleep(500);
                    Console.WriteLine("\n Yeni tahminini gir: ");
    
                    Y = Convert.ToInt32(Console.ReadLine());
    
                    if (Y <= (S - 3))
                    {
                        System.Threading.Thread.Sleep(500);
                        Console.WriteLine("\n Yalnızca 1 veya 2 birim düşebilirsin.!");
                        goto yenisayi;
                    }
    
                    else if (Y >= S)
    
                    {
                        System.Threading.Thread.Sleep(500);
    
                        Console.WriteLine("\n Sayıyı düşürmen lazım!");
                        goto yenisayi;
                    }
    
                    S = Y;
    
                    if ( S == 0 )
                    {
    
                        for (int i = 0; i < 10; i++)
                        {
                            Console.WriteLine("\n Tebrikler! Kazandın! :-)");
                            System.Threading.Thread.Sleep(500);
                        }
    
                        Environment.Exit(0);
    
    
                    }
    
                    if (S % 3 == 1)
    
                    {
    
                        S = S - 1;
                        System.Threading.Thread.Sleep(500);
    
                        Console.WriteLine("\n Yeni Tahminim : " + (S + 1) + " -  1 = " + S);
    
                        if (S == 0) 
    
                        {
                            for (int i = 0; i < 10; i++)
                            {
                                Console.WriteLine("\n Ben Kazandım! :-) ");
                                System.Threading.Thread.Sleep(500);
                            }
                            Environment.Exit(0);
    
                        }
                        else
    
                        goto yenisayi;
    
                    }
    
                    else if (S % 3 == 2)
                    {
                        S = S - 2;
                        System.Threading.Thread.Sleep(500);
    
                        Console.WriteLine("\n Yeni Tahminim : " + (S + 2) + " - 2  = " + S);
    
                        if (S == 0) 
    
                        {
                            for (int i = 0; i < 10; i++)
                            {
                                Console.WriteLine("\n Ben Kazandım! :-) ");
                                System.Threading.Thread.Sleep(500);
                            }
                            Environment.Exit(0);
    
                        }
    
                        else
    
                        goto yenisayi;
                    }
    
                    else if (S % 3 == 0)
    
                    {
    
                        int Rx = rast.Next(1, 3);
    
                        S = S - Rx;
    
                        System.Threading.Thread.Sleep(500);
    
                        Console.WriteLine("\n Yeni Tahminim : " + (S + Rx) + " - " + Rx + " = " + S);
    
                        System.Threading.Thread.Sleep(500);
    
    
                        goto yenisayi;
                        
                    }
    
                }
    
    
    
                System.Threading.Thread.Sleep(3000);
    
    
    
    
    
    
    
    
            }
        }
    }
    

     


    ...said addicted.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    noname
    noname's avatar
    Kayıt Tarihi: 23/Ağustos/2005
    Erkek
    zeybekustasi bunu yazdı

    Öncelikle başarılı buldum bir çok validasyon yapılmış gibi 100 filan girince sayı düşür diyor ama 9999999999999999 girince sapıtıyor. Ona da bi kısıt koy bence.

    Denedim şimdi. Sanırsam int32 ( değişkeni öyle tanımladıydım ) nin alabileceği max değer

     2,147,483,647

    şöyle de bir anekdot geçelim,

     

    http://www.bbc.com/news/world-asia-30288542

     

    başarılı bulduğun için teşekkürler ^^

    valla başlarken ne for ne while hiç birini bilmiyordum. Bir kaç defa if görmüştüm sadece :)

     

    edit,

    tahmin ettiğim gibi, o değeri kontrol eden bir if döngüsü eklesem dahi hata veriyor, çünkü o değeri int e yazamadığı için hata veriyor. Yazabilse, if ile kontrol edip hatayı önleyecek ama yazamadığı için kilit :D


    if (S >= 2147483647)
    {
    System.Threading.Thread.Sleep(500);

    Console.WriteLine("\n Değer çok büyük! \n");

    System.Threading.Thread.Sleep(250);

    goto gir;
    }

    nasıl yaparız?

     

    noname tarafından 25/Mar/18 16:21 tarihinde düzenlenmiştir

    ...said addicted.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    2021 Talihlisi
    TheAvenqer
    TheAvenqer's avatar
    Kayıt Tarihi: 09/Şubat/2014
    Erkek
    noname bunu yazdı
    zeybekustasi bunu yazdı

    Öncelikle başarılı buldum bir çok validasyon yapılmış gibi 100 filan girince sayı düşür diyor ama 9999999999999999 girince sapıtıyor. Ona da bi kısıt koy bence.

    Denedim şimdi. Sanırsam int32 ( değişkeni öyle tanımladıydım ) nin alabileceği max değer

     2,147,483,647

    şöyle de bir anekdot geçelim,

     

    http://www.bbc.com/news/world-asia-30288542

     

    başarılı bulduğun için teşekkürler ^^

    valla başlarken ne for ne while hiç birini bilmiyordum. Bir kaç defa if görmüştüm sadece :)

     

    edit,

    tahmin ettiğim gibi, o değeri kontrol eden bir if döngüsü eklesem dahi hata veriyor, çünkü o değeri int e yazamadığı için hata veriyor. Yazabilse, if ile kontrol edip hatayı önleyecek ama yazamadığı için kilit :D


    if (S >= 2147483647)
    {
    System.Threading.Thread.Sleep(500);

    Console.WriteLine("\n Değer çok büyük! \n");

    System.Threading.Thread.Sleep(250);

    goto gir;
    }

    nasıl yaparız?

     

    girilen değer str olarak eline gelmiyor mu hocam başta çevirmeyi kapat str olarak gelen değeri max int değeriyle karşılaştır eğer büyükse değer çok büyük yazsın değilse int e çevirsin


    Bot ve lisans ihtiyaçlarınız için pm atınız.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Elindeki goto'ları yavaşya yere bırak. Sorun istemiyoruz.

    Şaka bir yana, her ne yapıyorsan ve içinde goto geçiyorsa sıkıntı vardır/oluşturabilir. C değil C# kullanıyorsun.


    Olaylara karışmayın!
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    whopper
    whopper's avatar
    Kayıt Tarihi: 26/Haziran/2008
    Erkek

    Hacı kontakt bilgilerm var mı bilmiyorum hala ama yardıma ihtiyacın olduğunda arayabilirsin programlama konusunda.

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    noname
    noname's avatar
    Kayıt Tarihi: 23/Ağustos/2005
    Erkek
    YeniHarman bunu yazdı

    Elindeki goto'ları yavaşya yere bırak. Sorun istemiyoruz.

    Şaka bir yana, her ne yapıyorsan ve içinde goto geçiyorsa sıkıntı vardır/oluşturabilir. C değil C# kullanıyorsun.

    Niçün? Alternatif ne önerirsin? İşlemden sonra loop var ve kaç defa tekrarlanacağı belirsiz... For veya while mı kullanalım, nasıl oturtabilirim? Bi örnek gösterebilir misin benim gotolar yerine?

    Bir de, komut var ki kullanıyoruz :D nasıl sıkıntı çıkarabilir


    ...said addicted.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    zeybekustasi
    zeybekustasi's avatar
    Kayıt Tarihi: 24/Mayıs/2012
    Erkek
    YeniHarman bunu yazdı

    Elindeki goto'ları yavaşya yere bırak. Sorun istemiyoruz.

    Şaka bir yana, her ne yapıyorsan ve içinde goto geçiyorsa sıkıntı vardır/oluşturabilir. C değil C# kullanıyorsun.

    Ben koda bakmamıştım sadece test ettim harbi goto var kodda. Noname acilen goto yu unutman lazım.


    https://www.youtube.com/watch?v=WC3-71NKwPw
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek
    noname bunu yazdı
    YeniHarman bunu yazdı

    Elindeki goto'ları yavaşya yere bırak. Sorun istemiyoruz.

    Şaka bir yana, her ne yapıyorsan ve içinde goto geçiyorsa sıkıntı vardır/oluşturabilir. C değil C# kullanıyorsun.

    Niçün? Alternatif ne önerirsin? İşlemden sonra loop var ve kaç defa tekrarlanacağı belirsiz... For veya while mı kullanalım, nasıl oturtabilirim? Bi örnek gösterebilir misin benim gotolar yerine?

    Bir de, komut var ki kullanıyoruz :D nasıl sıkıntı çıkarabilir

    Sanıyorum case atlamaları için bırakmışlardı goto'yu.

    İç içe loopların içinden çıkmak için mantıklı olabilir (ve belki de bu tek geçerli kullanımdır). Yalnız ve yalnız talep ettiğin sistem kaynaklarının hepsini atladığın etikette geri vereceksen. Senin kodda gördüğüm kadarıyla dinamik kaynak kullanımı yok. Ya olsaydı?

    https://stackoverflow.com/questions/3517726/what-is-wrong-with-using-goto

    http://www.drdobbs.com/jvm/programming-with-reason-why-is-goto-bad/228200966?pgno=1

    Java'da goto yoktur. Çünkü yazılımcıları yapısal programlamadan önceki spagetti kod alışkanlığına yönelteceği düşünülmüştür.

     

    Sendeki goto'nun zararını anlamak için bu koda 1 ay sonra bak. Bakalım çözebilecek misin? Ben senin kodu hiç çözemedim mesela. Aynı durum 80'li yılların sonunda basic ile yazılmış bir mühendislik yazılımının kaynak kodlarını incelerken de başıma gelmişti.


    Olaylara karışmayın!
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    masteryoda
    masteryoda's avatar
    Kayıt Tarihi: 15/Mayıs/2012
    Erkek

    iç içe döngülerden çıkmanın en güzel yolu goto goto kullanmadan bayrak değişken kullanım bu değişkenin durumunu her döngüde kontrol edip döngü veya döngülerden çıkılabilir ama gereksiz yere kullanmak kodun bakımını zorlaştırır goto denmiş ora gitmiş bura gitmiş karman çorman olabilir. çok gerekliyse ki öyle durumlar olabiliyor rahatlıkla kullanılabilir.

Toplam Hit: 3311 Toplam Mesaj: 19
csharp hello world sayı bulmaca ilk uygulama