Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Lekcja 21] Problem z powtarzaniem : /

Ostatnio zmodyfikowano 2012-11-02 12:48
Autor Wiadomość
przemo098
Temat założony przez niniejszego użytkownika
[Lekcja 21] Problem z powtarzaniem : /
» 2012-11-02 11:19:14
Witam wszystkich w lekcji 22 spróbowałem sił by napisać sam od 0 program losujacy nie powtarzające się liczby całkowite z tym że nie działa ale nawet nie rozumiem dlaczego siedzę już z 4h kombinuję ale 0 a tu macie program, problem jest  chyba gdzieś w pętli for ale nie wiem w czym dokładnie : /, i losuje aż 2 liczby...

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstdio>

void wylosujLiczbe( int a[], int b )
{
   
    int e = 0, c = 0, z = 0;
   
   
   
   
    while( z < 5 )
    {
       
        a[ e ] =(( rand() % 10 ) + 1 );
       
       
       
        for( c = 0; c < e; c++ )
        {
            if( a[ c - 1 ] = a[ e ] )
            {
                a[ e ] =(( rand() % 10 ) + 1 );
                c = 0;
            }
           
           
           
        }
        std::cout << a[ e ] << ", ";
        c = 0;
        z++;
        e++;
    }
   
}


int main()
{
    srand( time( NULL ) );
   
   
   
    int tablica[ 10 ];
   
   
   
    wylosujLiczbe( tablica, 10 );
   
   
   
    return 0;
}
Proszę o pomoc
P-68154
DejaVu
» 2012-11-02 11:41:57
Jeżeli szukasz rozwiązania, to:
Frazy, które należy wpisać w wyszukiwarkę google:
Jeżeli szukasz rady to:
1. napisz osobną funkcję wczytującą liczby do tablicy
2. napisz osobną funkcję losującą jedną wartość z tablicy
3. napisz osobną funkcję sprawdzającą czy w tablicy przekazanej poprzez argument istnieje podana wartość
4. złóż to do kupy
Jeżeli oczekujesz, że ktoś Ci wskaże błędy w Twoim programie to niestety będziesz musiał dłuuugo poczekać (oraz nie ma gwarancji, że w ogóle ktokolwiek zabierze głos).

PS. Problem dotyczy rozdziału 21, a nie 22 (» Kurs C++ » Poziom 2Losowanie bez powtórzeń lekcja).
P-68158
przemo098
Temat założony przez niniejszego użytkownika
» 2012-11-02 11:45:52
Tak to ja też umiem zrobić, ale nie mogę tego w 1 funkcji zawrzeć : /, a może nie da się zrobić tak jak ja chcę :P.
I faktycznie pomyliłem lekcje, przepraszam za pomyłkę ;(.
P-68159
DejaVu
» 2012-11-02 11:49:12
Da się zrobić w jednej funkcji.
P-68160
przemo098
Temat założony przez niniejszego użytkownika
» 2012-11-02 12:48:49
Dzięki za rady ;), jednak napisałem program wg. 1 pomysłu.
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstdio>

void wylosujLiczbe( int a[], int b )
{
   
    int e = 0, c = 0, z = 0;
   
    a[ e ] =(( rand() % 10 ) + 1 );
    std::cout << a[ e ] << ", \n";
   
   
   
    while( z < 4 )
    {
        e++;
       
        a[ e ] =(( rand() % 10 ) + 1 );
       
       
       
       
        for( c = 0; c < e; c++ )
        {
            if( a[ e ] == a[ c ] )
            {
                a[ e ] =(( rand() % 10 ) + 1 );
                c = 0;
            }
            if( a[ e ] == a[ 0 ] )
            {
                a[ e ] =(( rand() % 10 ) + 1 );
                c = 0;
            }
           
        }
       
        std::cout << a[ e ] << ", \n";
        z++;
    }
   
   
   
}




int main()
{
    srand( time( NULL ) );
   
   
   
    int tablica[ 10 ];
   
   
   
    wylosujLiczbe( tablica, 10 );
   
   
   
    return 0;
}


Ale natknąłem na problem liczba 1 powtarzała się ale bardzo bardzo rzadko co mnie dziwiło dlatego dopisałem sprawdzenie jeszcze dla pierwszej liczby
może teraz mi wytłumaczysz dlaczego tak się działo ?
Bo te początki są trudne i jeszcze nie ogarniam za bardzo ;)

tutaj kod:
C/C++
for( c = 0; c < e; c++ )
{
    if( a[ e ] == a[ c ] )
    {
        a[ e ] =(( rand() % 10 ) + 1 );
        c = 0;
    }
    if( a[ e ] == a[ 0 ] )
    {
        a[ e ] =(( rand() % 10 ) + 1 );
        c = 0;
    }
   
}
P-68176
« 1 »
  Strona 1 z 1