[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Hania_87
Użytkownik
Użytkownik
Posty: 860
Rejestracja: 18 cze 2007, o 20:57
Płeć: Kobieta
Lokalizacja: Rybnik
Podziękował: 86 razy
Pomógł: 57 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Hania_87 »

soku11 pisze:Zreszta wystarczy go uruchomic, by zobaczyc rezultaty

Pozdrawiam.
i tak zrobiłam, nie losuje w ogóle
Awatar użytkownika
Dedemonn
Użytkownik
Użytkownik
Posty: 689
Rejestracja: 21 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: Z kompa
Podziękował: 26 razy
Pomógł: 137 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Dedemonn »

Nie, nie w tym poście opowiedział jak program działa. xD

-> post489894.htm#p489894
Hania_87
Użytkownik
Użytkownik
Posty: 860
Rejestracja: 18 cze 2007, o 20:57
Płeć: Kobieta
Lokalizacja: Rybnik
Podziękował: 86 razy
Pomógł: 57 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Hania_87 »

z jakiego Visual Studio korzystasz?

ja z 2008

są małe różnice między tym, a starszymi i nie zawsze działa
Awatar użytkownika
Dedemonn
Użytkownik
Użytkownik
Posty: 689
Rejestracja: 21 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: Z kompa
Podziękował: 26 razy
Pomógł: 137 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Dedemonn »

Z żadnego niestety. Program testowałem w środowisku Javy (zamieniając tylko np. Length na length, Next na nextInt).

Dlaczego pytasz? Program się nie kompiluje, czy wyświetla złe wyniki? (wylosowane liczby oczywiście w tablicy wynik)
Hania_87
Użytkownik
Użytkownik
Posty: 860
Rejestracja: 18 cze 2007, o 20:57
Płeć: Kobieta
Lokalizacja: Rybnik
Podziękował: 86 razy
Pomógł: 57 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Hania_87 »

kompiluje się, lecz nie wyświetla żadnego wyniku (czarna plansza)
Awatar użytkownika
Dedemonn
Użytkownik
Użytkownik
Posty: 689
Rejestracja: 21 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: Z kompa
Podziękował: 26 razy
Pomógł: 137 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Dedemonn »

A kto powiedział, że jest linijka za to odpowiedzialna?

Dodaj pod koniec np.:

Kod: Zaznacz cały

foreach(int liczba in wynik)
     Console.Write( "{0} ", liczba );
Hania_87
Użytkownik
Użytkownik
Posty: 860
Rejestracja: 18 cze 2007, o 20:57
Płeć: Kobieta
Lokalizacja: Rybnik
Podziękował: 86 razy
Pomógł: 57 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Hania_87 »

hmm
teraz wynik wyszedł taki:

Kod: Zaznacz cały

46
41
16
27
9
18
36
37
17
13
32
31
30
48
49
34
10
39
12
5
19
21
35
:/
Awatar użytkownika
Dedemonn
Użytkownik
Użytkownik
Posty: 689
Rejestracja: 21 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: Z kompa
Podziękował: 26 razy
Pomógł: 137 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Dedemonn »

Polecam zacząć od jakiegoś prostego tutoriala, bo widzę że rzuciłaś się na głęboką wodę od razu.

Program testowałem dla większej tablicy, aby się upewnić, że nie ma powtórzeń. Wystarczy zmienić rozmiar tablicy wynik na Tobie odpowiadającą. (6)
Hania_87
Użytkownik
Użytkownik
Posty: 860
Rejestracja: 18 cze 2007, o 20:57
Płeć: Kobieta
Lokalizacja: Rybnik
Podziękował: 86 razy
Pomógł: 57 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Hania_87 »

Dedemonn pisze:od jakiegoś prostego tutoriala
co to jest?

-- 17 czerwca 2009, 12:43 --

Kod: Zaznacz cały

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace matematyka.pl
{
    class Program
    {
        static void Main(string[] args)
        {      int[] data = new int[49];
      int[] wynik = new int[6];
      int wylosowano = 0;
      Random generator = new Random();

      for (int i = 0; i < data.Length; i++)
         data[i] = i + 1;

      for(int i=0; i < wynik.Length; i++)
      {
         int miejsce = generator.Next(0, data.Length-1-wylosowano);
         wynik[i] = data[miejsce];  // wpisujemy do wyniku

         data[miejsce] = data[data.Length - 1 - wylosowano];
         data[data.Length - 1 - wylosowano] = wynik[i];
         ++wylosowano;
      }
      foreach (int liczba in wynik)
          Console.WriteLine("{0} ", liczba);

      Console.ReadKey();
        }
    }
}
dziękuję

-- 17 czerwca 2009, 12:46 --



podaj proszę jakiś konkretny prosty
Ostatnio zmieniony 17 cze 2009, o 12:48 przez Hania_87, łącznie zmieniany 1 raz.
Awatar użytkownika
Dedemonn
Użytkownik
Użytkownik
Posty: 689
Rejestracja: 21 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: Z kompa
Podziękował: 26 razy
Pomógł: 137 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Dedemonn »

Np. to -> ... urs_C.aspx

Pozdrawiam.
VarranC
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 18 mar 2011, o 20:21
Płeć: Mężczyzna
Lokalizacja: Białystok

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: VarranC »

Piszac swój pierwszy "dłuższy" program trafiłem na to forum szukając zasad losowania liczby ze zbioru bez powtórzeń, no i bylem pod wrazeniem algorytmu jaki przedstawil Dedemonn.

Wykorzystalem go w swoim programie, którego celem było wylosowanie okreslonej liczby zakładów TotoLotka (od 1 do 8) ale tak aby raz wylosowana liczba w któryms zakładzie nie powtórzyla sie w pozostałych.

A ponieważ żonie nie udziela się moja euforia z racji ukonczenia pierwszego jak dla mnie, bardziej zlozonego programu, chcialbym sie pochwalić nim tutaj

Kod: Zaznacz cały

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Generator_liczb_losowych
{
    class DuzyLotek
    {        
        //definicja pól klasy
        public int iloscObstawianychZakladow;
        private int[] ZakresLiczb = new int[49];
        public int[,] WylosowaneZaklady = new int[8, 6];

        public void PobieranieDanychOdUzytkownika()
        {
            Console.SetCursorPosition(20, 10);
            Console.WriteLine("Podaj ilość zakładów które chcesz wylosować,");
            Console.SetCursorPosition(20, 11);
            Console.WriteLine("dopuszczalny zakres od 1 do 8");
            Console.WriteLine("");
            Console.WriteLine("");
            Console.SetCursorPosition(40, 20);
            iloscObstawianychZakladow = Convert.ToInt32(Console.ReadLine());
            Console.Clear();
        }
        public void LosowanieZakladowBezPowtorzen()
        {    
            int nrLosowania = 0;
            Random generator = new Random();

            for (int i = 0; i < 49; i++)
            {
                ZakresLiczb[i] = i + 1;
            }

            int j = 0;

            for (int i = 0; i < iloscObstawianychZakladow * 6; i++)
            {
                int indexWylosowanejLiczby = generator.Next(0, ZakresLiczb.Length - 1 - nrLosowania);
                WylosowaneZaklady[j, i % 6] = ZakresLiczb[indexWylosowanejLiczby];

                ZakresLiczb[indexWylosowanejLiczby] = ZakresLiczb[ZakresLiczb.Length - 1 - nrLosowania];
                ZakresLiczb[ZakresLiczb.Length - 1 - nrLosowania] = WylosowaneZaklady[j, i % 6];
                nrLosowania++;

                if ((i + 1) % 6 == 0)
                {
                    for (int m = 0; m < 5; m++)
                    {
                        for (int k = 0; k < 6 - 1; k++)
                        {
                            int bufor;
                            int pierwszaWSzeregu = WylosowaneZaklady[j, k];
                            int drugaWSzeregu = WylosowaneZaklady[j, k + 1];
                            if (pierwszaWSzeregu > drugaWSzeregu)
                            {
                                bufor = pierwszaWSzeregu;
                                WylosowaneZaklady[j, k] = drugaWSzeregu;
                                WylosowaneZaklady[j, k + 1] = bufor;
                            }
                        }
                    }
                    j++;
                }
            }   
        }       
        public void PrezentacjaWyników()
        {
          
            int L = 25;
            int G = 6;
            for (int z = 0; z < iloscObstawianychZakladow ; z++)
            {
                for (int x = 0; x < 6; x++)
                {
                    Console.SetCursorPosition(L, G);
                    Console.WriteLine("{0}", WylosowaneZaklady[z, x]);
                    L = L + 5;
                    if ((x+1) % 6 == 0 )
                    {
                        G++;
                        L = 25;
                    }
                }
            }

            //Console.ReadLine();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            DuzyLotek MojeLotto = new DuzyLotek();

            MojeLotto.PobieranieDanychOdUzytkownika();

            bool losuj = true;
            do
            {
                MojeLotto.LosowanieZakladowBezPowtorzen();
                MojeLotto.PrezentacjaWyników();
                Console.SetCursorPosition(12, 15);
                Console.WriteLine("Zeby losowac jeszcze raz wybierz N i zatwierdz enterem.");
                Console.SetCursorPosition(40, 18);
                string wyborUzytkownika = Convert.ToString(Console.ReadLine()).ToUpper();
                    if (wyborUzytkownika != "N")
                        {
                            losuj = false;
                        }
                Console.Clear();

            } while (losuj == true);
        }
            
        
    }
}

Liczę na konstruktywną krytykę co jest nie tak, co można było zrobić inaczej i prościej, za wszelkie uwagi i sugestie będę wdzięczny.

PS. Wow!!! Ponad 100 linii kodu - to mój wielki dzien!!!!
Awatar użytkownika
Quaerens
Użytkownik
Użytkownik
Posty: 2489
Rejestracja: 5 wrz 2007, o 13:36
Płeć: Mężczyzna
Podziękował: 439 razy
Pomógł: 181 razy

[C#] program losujący 6 różnych cyfr z 49 bez zwracania

Post autor: Quaerens »

VarranC, doskonale rozumiem Twoje uczucie, podobnie się czułem, gdy napisałem swój pierwszy program w C#, ale z tego co pamiętam zawierał on tylko chyba pętle for Także działaj dalej i życzę powodzenia
ODPOWIEDZ