Jump to content
Son zamanlarda artan kullanıcı hesap hırsızlıkları sebebiyle tüm kullanıcılara şifre sıfırlama maili gönderilmiştir. Lütfen güveli şifreler seçiniz. Mevcut e-mail adresinize erişemiyorsanız, en aşağıdaki destek linkinden bize ulaşınız. ×

C# Console Uygulamaları


Proctives
 Share

Recommended Posts

Merhabalar,

Aşağıda yazmış olduğum sorular ile çok uğraşmama rağmen sonuca ulaşamadım. Sorulardaki uygulamayı yapabilen cevabını yazabilir mi rica etsem?

Şimdiden teşekkür ediyorum.

Alıntı


1) Klavyeden girilen ve sadece rakamlardan oluşan metnin hangi rakam ve kaç farklı rakamdan oluştuğunu bulan C# programını Regex kullanarak bulunuz?
2) Kendisine parametre olarak gönderilen tam sayı dizisinde en küçük iki tam sayıyı bulan programı yazınız?

 

Link to comment
Share on other sites

Bunlar benim final sorularımdı hocam yoksa Gazi de mi okuyorsunuz ?

İlkini yazıyım. Mümkün olduğunca kısa tuttum.

static void Main(string[] args)
        {
            Rakamsayi(Console.ReadLine());
        }
        static void Rakamsayi(string sayi)
        {
            string ibo = "";
            for (int i = 0; i <= 9; i++)
                if (Regex.Match(sayi, i.ToString()).Success)
                    if(!Regex.Match(ibo, i.ToString()).Success) ibo += i;
            Console.WriteLine(ibo + " rakamlarından oluşuyor ve " + ibo.Length + " rakam var");
            Console.ReadKey();
        }

 

Aklıma daha güzel bi çözüm daha geldi :

 

static void Main(string[] args)
        {
            Rakamsayi(Console.ReadLine());
        }
        static void Rakamsayi(string sayi)
        {
            string ibo = "";
            foreach (char rakam in sayi)
                if (!Regex.Match(ibo, rakam.ToString()).Success) ibo += rakam;
            Console.WriteLine(ibo + " rakamlarından oluşuyor ve " + ibo.Length + " rakam var");
            Console.ReadKey();
        }/code]
Edited by Extended
  • Like 1
Link to comment
Share on other sites

Evet hocam heralde 1 bitti sizin de. İsim Volkan Yıldırım mı :) İkincisini ben de yapamamıştım netten buldum düzeltip attım şimdi sanırım büte kaldınız gerçi sisteme daha notları girmemişler

Bu da ikincisi : 

	static void Main(string[] args)
        {
            int[] ibo = new int[] { 3, 5, 9, 7, 1, 0 };
            Sirala(ibo);
	        }
        static void Sirala(int[] ibo)
        {
            int gecici;
            for (int i = 0; i < ibo.Length; i++)
            {
                for (int j = i+1; j < ibo.Length; j++)
                {
                    if (ibo[j] < ibo[i])
                    {
                        gecici = ibo[i];
                        ibo[i] = ibo[j];
                        ibo[j] = gecici;
                    }    
                }
            }
            Console.WriteLine(ibo[0]);
            Console.WriteLine(ibo[1]);
            Console.ReadKey();
        }
Edited by Extended
  • Like 2
Link to comment
Share on other sites

@Extended kullandığın algoritma doğru çalışacak fakat bu iş için gereksiz. Son küçük iki sayıyı bulmak için bubble sort (kabarcık sıralama) yapıyorsun ve onun karmaşıklığı n. Sanırım daha birinci sınıftasın ve algoritma karmaşıklıklarını öğrenmedin. Muhtemelen hocaların da algoritma karmaşıklıklığına bakmıyordur ama yine de ben sana hem daha iyi hem de karmaşıklığı n olan bi algoritma yazdım. Bu algoritmanın avantajı atıyorum 1 milyon sayıda en küçük 2 sayıyı bulmak istediğinde senin bulduğun algoritma muhtemelen 2 saat çalışacak ve ancak öyle bir sonuç bulacak, benimki ise muhtemelen 1 saniyede bulacak. O yüzden algoritma karmaşıklıkları önemli.

static void enKucukIki(int[] sayilar)
        {
            int enkucuk   = Int32.MaxValue;
            int sondaniki = Int32.MaxValue;
            foreach (var sayi in sayilar)
            {
                if (enkucuk > sayi)
                {
                    sondaniki = enkucuk;
                    enkucuk = sayi;
                }
                else if (sondaniki > sayi)
                {
                    sondaniki = sayi;
                }
            }
            Console.WriteLine("En küçük sayı = {0}", enkucuk);
            Console.WriteLine("Sondan İkinci = {0}", sondaniki);
            Console.ReadKey();
        }

Bu algoritmada iki tane değişken var sayılarımızı tutacağımız. Bunlar enkucuk ve sondaniki. Başlangıçta olabilecek en büyük değer int.max e eşitliyoruz onları çünkü en küçük iki sayıyı arıyoruz. Az sonra ne demek istediğimi daha iyi anlayacaksın. Foreach döngüsüyle tek tek sayıların üzerinde gezmeye başlıyoruz. Diyelim ki elimizde {45,87,10,27} integer arrayi olsun. İlk sayı 45. enkucuk sayıya bakıyoruz, o şu anda olabilecek en büyük integer değerinde dolayısıyla ilk if true oluyor ve if in içine giriyor. Bu aslında şu demek; elimizde en küçük sayıdan daha küçük bir sayı varsa o zaman demek ki en küçük sayıyı şu an elimizde olan sayıyla güncellememiz gerekli. Güncelledik ve elimizde enkucuk değişkeni 45 oldu sondan iki ise hala sonsuz değerinde (şimdilik maksimum değere sonsuz diyelim). Döngü devam etti, elimize 87 geldi. 87 ile 45'i karşılaştırıyoruz (45 enkucuk değişkenindeki değer). 87 büyük olduğu için false oluyor ve ikinci if e bakıyoruz. sondaniki değişkeni sonsuz değerde  dolayısıyla 87 ondan küçük. sondaniki değişkenini 87 olarak güncelliyoruz. Şu an elimizde enkucuk değer 45 sondan ikincisi ise 87. Devam ediyoruz, şimdi elimizde 10 var. 10 ile 45'i karşılaştırıyoruz, 10 daha küçük if true oluyor içine giriyoruz. sondanikinci sayıyı 45 yapıyoruz ve enkucuk değeri 10 yapıyoruz. Eğer en küçük değerden daha küçük bir değer bulduysak, o bizim yeni küçük değerimiz oluyor ve dolayısıyla sondan ikinci değerimiz bir önceki en küçük değer oluyor (Değişimi bu yüzden yaptık yani). En son eleman olarak 27 geliyor. 27 ile 10 u karşılaştırıyoruz. 10 küçük olduğu için devam ediyoruz. Daha sonra ikinci if'te 45 ile 27 yi karşılaştırıyoruz (hatırlarsan sondaniki'de 45 vardı). 27, 45'ten küçük dolayısıyla 27'yi yeni sondan iki olarak güncelliyoruz. En sonunda olarak algoritma 10 ile 27'yi sonuç olarak buluyor.

Şimdi böyle uzun uzun anlattığıma bakma. Aslında çok kolay bi algoritma fakat tam iyi anlayabilesin diye uzunca anlattım. Unutma herkes program yazabilir ama herkes iyi program yazamaz. Algoritmalar iyi program yazabilmek için önemlidir. Benim sana tavsiyem, önce yukardaki algoritmayı vs'yi açıp F10 ile debug etmen. Daha sonra da 1 milyon tane rastgele sayı oluşturup senin algoritman ile benimkini karşılaştırman. Umarım yardımcı olabilmişimdir, kolay gelsin.

  • Like 5
Link to comment
Share on other sites

  • 1 ay sonra...

Evet, benimkinden yavaş olurdu. Matematiksel olarak yapılabilecek en hızlı sorting algoritmasının karmaşıklığı nlogn dir. Benim kullandığım algoritmanın karmaşıklığı ise "n". Doğal olarak asimptotik olarak benimki daha az artacak. Amma sen o sorting algoritmasıyla benimkini karşılaştırırsan gözle bir fark göremezsin. Farkı hissedebilmen için ancak milyarlar seviyesinde elinde sayı olması lazım (Timer kullanarak yüzbinler seviyesinde de fark görebilirsin belki). Unutmadan söyliyim sıralama yapmak istediğinde, kendin sorting algoritması yazmak yerine, her zaman kullandığın programlama dilinin sorting fonksiyonunu kullanmak en doğrusudur.   

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...