Strona 1 z 1

losowanie

Napisane: piątek, 4 stycznia 2013, 20:56
przez jawa
Witam potrzebuje porady w zwiazku z programem losujacym liczby duzego lotka wiec 6 liczb z 49.Program ten ma losowac niepowtarzajace sie 6 liczb za kazdym razem. kod ktory napisalem losuje niepowtarzajace sie liczby o ile powtorne losowanie odbedzie sie minimum 1sekunde pozniej...jesli nastepne losowanie jest w tej samej sek to liczby sa takie same....jak sobie z tym poradzic?

Code: Zaznacz cały

#include <iostream>
#include <conio.h>
using namespace std;
////////////////////////////////////////////////////////////////////////////////////////////
string czyPowtorzyc;
void losowanie();
/////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    cout<<" ...:: Witam w generatorze duzego lotka ::...\n"<<endl;
    losowanie();
    
        
    getch();
}
/////////////////////////////////////////////////////////////////////////////////////////////
void losowanie()
    {
        do
            {
                int tab[6], i;
                srand(time(NULL));
                for(i=0; i<6; i++)
                {
                         tab[i]=rand()%49+1;
                         
                }
                for(i=0; i<6; i++)
                {
                         cout << tab[i] << ' ';
                }
                cout<<"\n\nCzy chcesz powtorzyc losowanie liczb?? (T/N) "<<endl;
                cin>>czyPowtorzyc;
             }
         while(czyPowtorzyc!="n");
    }


Re: losowanie

Napisane: sobota, 5 stycznia 2013, 13:45
przez Morfidon
Masz to zrobione w lekcji 25:
Lekcja 25 - Losowanie liczb pseudolosowych - 15 min i 58 s

oraz masz tam wyjaśnione, dlaczego to nie działa.

Re: losowanie

Napisane: poniedziałek, 7 stycznia 2013, 01:54
przez jawa
Dzieki sliczne za namiary......ale nie rozumie ;((( ogladam setny raz i nie moge pojac opcji niepowtarzania sie numerow...jak to sie dzieje!!
Juz rozpisalem sobie to do banalnej formy wraz z moim tokiem rozumowania:

Code: Zaznacz cały

#include<iostream>

//////////////////////////////////////

using namespace std;

//////////////////////////////////////

void losowanie ( int, int );

//////////////////////////////////////

int main()
{
  losowanie( 49, 6 );  
  system("pause");
  return 0;
}

//////////////////////////////////////

void losowanie ( int zIlu , int ile )              //czyli  ( 49,6)
{
    srand(time(NULL));
    int *tab = new int [ile];                         //czyli tab[6] -tablica 6 elementowa
    for ( int i=0; i<6; i++ )                          
        {                                                            /* dajmy na to ze pod pierwszym elementem zostala wylosowana i wpisana
         tab[i] = rand()%49+1;                                wartosc 20... wiec tab[0] =20 no i dalej nie  rozumiem....
         for ( int j=0; j<i+1; j++)                       wiadomo ze  
             {                                                        tab od i=0 ma wartosc 20 i w pierwszy zadzialaniu  drugiej petli FOR , j=0
              if (tab[i]==tab[j] && i!=j)                  ...ale w jaki sposob kompilator wie ze istnieje cos takiego jak tab[j]  i  ...
                {                                                        jak trafiaja tam losowane liczby zeby porownac je z tab[i]
                   i--;                                                         co do pierwszej tablicy tab[i] kompilator wie bo zostala mu przypisana 
                        break;                                                     f-cja rand....a co z tab[j]???? */
                      }                                                                
                    else if ( j==i)
              
                   cout << " liczba [ " << i+1 << " ]= " << tab[i] << endl;        
             }     
              
        }
} 

Prosze o naprawde "dokladne wytlumaczenie" no nie moge tego zalapac!! Dzieki sliczne za pomoc

Re: losowanie

Napisane: poniedziałek, 7 stycznia 2013, 13:34
przez Morfidon
Kompilator nie jest od wiedzenia, od wiedzenia czy coś gdzieś jest jesteś Ty ;) Kompilator tylko sprawdzi, czy nie ma błędów semantycznych i zamieni kod w czytelny dla komputera. Od podawania, gdzie co się znajduje jest programista.

Rozpisz sobie to na kartce jeśli nie rozumiesz pętli.

Idea jest taka, że losujesz kolejno liczby, a następnie porównujesz liczby, które już wylosowałeś z liczbą dopiero co wylosowaną.

Np. załóżmy, że mamy dane:

tab[0] = 1;
tab[1] = 5;
tab[2] = 46;

gdy wylosujesz nową liczbę np. tab[3] = 40 to porównujesz je z poprzednikami czyli tab[3] porównujesz z tab[0], tab[1], tab[2]. Zauważ, że zmienna "i" w wewnętrznej pętli się nie zmienia. tab jest więc stałe dopóki nie skończy się wykonywanie wewnętrznej pętli i wynosi w tym wypadku tab[3], czyli 40, natomiast zmienna "j" się zmienia więc tab[j] to tab[0], tab[1], tab[2].

Re: losowanie

Napisane: czwartek, 10 stycznia 2013, 23:13
przez jawa
A czy jest mozliwosc aby ten program uwzglednial poprzednie losowania tj poprzednie losowania byly w pliku txt. i zeby program wybral te najczesciej powtarzajace sie i jakby dodal losowo wylosowane z nich do glownego losowania..??

Re: losowanie

Napisane: czwartek, 10 stycznia 2013, 23:32
przez jawa
jak mialoby to wygladac?

Re: losowanie

Napisane: piątek, 11 stycznia 2013, 08:40
przez Morfidon
No to zapisuj dane wylosowane do pliku po losowaniu. A przy następnych losowaniach wybierz przed losowaniem wszystkie losowania z pliku i sprawdź to co się powtarza najczęściej i dodaj to co Co odpowiada. Nic Cię nie ogranicza.

Re: losowanie

Napisane: piątek, 11 stycznia 2013, 14:03
przez jawa
kurcze nie mam pojecia jak sie za to zabrac ;-(