Çözüldü C# oluşturulan rastgele 10 sayı tek ve çift olmasına göre nasıl sıralandırılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

dodo61

Kilopat
Katılım
28 Nisan 2016
Mesajlar
1.156
Makaleler
4
Çözümler
22
Yer
Türkiye
Merhaba arkadaşlar, yapamadığım sorum var ve bir türlü çözüm yapamadım. Soru C# konsol uygulaması üzerinden yapılacak.
Soru: bilgisayar tarafından 10 ile 50 arasında random sayı oluşturulacak. Oluşturulan sayılar 10 haneli bir dizide saklanacak. Bu dizinin baş tarafında tek sayılar son tarafında ise çift sayılar gelecek. Yani kısaca şöyle; Diyelim ki sayılarımız 15 29 17 11 40 48 27 18 10 42 olsun. Bu sayılar başta tek olanlar yani 11, 15, 17, 27, 29 daha sonra da çift olanlar yazsın 10, 18, 40, 42,48. Çıktı olarak da ekranda 11, 15, 17, 27, 29, 10, 18, 40, 42, 48 yazsın.
 
Çözüm
Aşağıdaki gibi yapabilirsiniz. Normalde array sort yöntemleri ile daha kısa ve kolay olur fakat biraz karışık bir yöntem daha basit olması için böyle yapmayı seçtim.

Edit: Tek sayılar başta olsun istemişsin aşağıdaki kodun foreach döngülerinin yerlerini değiştirdim.

C#:
        static void Main(string[] args)
        {
            Console.Title = "**";

            Random rnd = new Random();
            int[] Numbs = new int[10];

            Console.Write("Rastgele Sayılar: ");
            for (int i = 0; i < Numbs.Length; i++)
            {
                Numbs[i] = rnd.Next(10, 51);
                Console.Write(Numbs[i] + ", ");
            }
            Console.WriteLine("\n--");

            Console.Write("Sıralı hali: ");

            foreach (int Number in Numbs)
                if (Number % 2 != 0)
                    Console.Write(Number + ", ");

            Console.Write(" | ");

            foreach (int Number in Numbs)
                if (Number % 2 == 0)
                    Console.Write(Number + ", ");

            Console.ReadKey();
        }



Screenshot_1.png
Arkadaşlarla küçük bir kodlama çalışma ekibi kurduk kendimizi geliştirmek için birbirimize soru felan atıyorduk da bunda tıkandım kaldım. Yazdığım kod hep sapıtıyor. çift tarafına tek sayı tek tarafına çift sayı gelip duruyor.

İnternette baktım ama orda hep kullanıcının girdiği tek bir sayının tek mi çift mi olduğunu kontrol ediyor. Bizim istediğimiz random 10-50 arasında sayı oluşacak ilk 5'e tek sayılar yazacak son 5'e çift sayılar yazacak.
 
Arkadaşlarla küçük bir kodlama çalışma ekibi kurduk kendimizi geliştirmek için birbirimize soru felan atıyorduk da bunda tıkandım kaldım. Yazdığım kod hep sapıtıyor. çift tarafına tek sayı tek tarafına çift sayı gelip duruyor.

İnternette baktım ama orda hep kullanıcının girdiği tek bir sayının tek mi çift mi olduğunu kontrol ediyor. Bizim istediğimiz random 10-50 arasında sayı oluşacak ilk 5'e tek sayılar yazacak son 5'e çift sayılar yazacak.
Ben C++ biliyorum, C# hiç yazmadım

C++:
#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
    std::vector<int> dizi1 {15, 29, 17, 11, 40, 48, 27, 18, 10, 42};
    std::vector<int> dizi2 {};
    std::vector<int> dizi3 {};

    std::sort (dizi1.begin(), dizi1.end());

    for (auto i : dizi1)
    {
        if (i % 2 == 0)
            dizi2.push_back(i);
        else
            dizi3.push_back(i);
    }

    dizi1.clear();
    dizi1.insert(dizi1.end(), dizi3.begin(), dizi3.end());
    dizi1.insert(dizi1.end(), dizi2.begin(), dizi2.end());

    for (auto i : dizi1)
        std::cout << i << ", ";

}

C++ şu şekilde çalışıyor, yine de algoritmayı anlarsın
 
Son düzenleme:
Aşağıdaki gibi yapabilirsiniz. Normalde array sort yöntemleri ile daha kısa ve kolay olur fakat biraz karışık bir yöntem daha basit olması için böyle yapmayı seçtim.

Edit: Tek sayılar başta olsun istemişsin aşağıdaki kodun foreach döngülerinin yerlerini değiştirdim.

C#:
        static void Main(string[] args)
        {
            Console.Title = "**";

            Random rnd = new Random();
            int[] Numbs = new int[10];

            Console.Write("Rastgele Sayılar: ");
            for (int i = 0; i < Numbs.Length; i++)
            {
                Numbs[i] = rnd.Next(10, 51);
                Console.Write(Numbs[i] + ", ");
            }
            Console.WriteLine("\n--");

            Console.Write("Sıralı hali: ");

            foreach (int Number in Numbs)
                if (Number % 2 != 0)
                    Console.Write(Number + ", ");

            Console.Write(" | ");

            foreach (int Number in Numbs)
                if (Number % 2 == 0)
                    Console.Write(Number + ", ");

            Console.ReadKey();
        }



Screenshot_1.png
 
Çözüm
C#:
        static void Main(string[] args)
        {
            var randomGenerator = new Random();
            int[] numbers = new int[10];

            int index = 0;

            while (index < 10)
            {
                var number = randomGenerator.Next(10, 50);
                numbers[index] = number;

                index++;
            }

            Array.Sort(numbers, (x, y) =>
            {
                if (x % 2 == 0 && y % 2 != 0)
                    return -1;
                else if (x % 2 != 0 && y % 2 == 0)
                    return 1;
                else if (x < y)
                    return -1;
                else if (x > y)
                    return 1;
                else
                    return 0;
            });

            foreach (int number in numbers)
            {
                Console.WriteLine(number);
            }
        }
 
LINQ Öğrenirken aklıma bu proje geldi. Problem çözüldü ama yine de hortlatıp daha kolay bir çözümü paylaşmak istedim.

C#:
        static void Main(string[] args)
        {
            Console.Title = "*";

            Random rnd = new Random();

            int[] numbs = (from s in Enumerable.Range(0, 10) select rnd.Next(10, 51)).ToArray();

            string tekSayılar = string.Join(", ", numbs.Where(x => x % 2 != 0));
            string çiftSayılar = string.Join(", ", numbs.Where(x => x % 2 == 0));
            string strNumbs = string.Join(", ", numbs);

            Console.WriteLine($"Rastgele sayılar: {strNumbs}");
            Console.WriteLine($"Tekli Sayılar: {tekSayılar}");
            Console.WriteLine($"Çift Sayılar: {çiftSayılar}");

            Console.ReadKey();
        }


Screenshot_1.png
 

Yeni konular

Geri
Yukarı