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

Liczniki i w losowej kolejnosci bez powtorzen

Ostatnio zmodyfikowano 2015-03-07 14:57
Autor Wiadomość
kynol
Temat założony przez niniejszego użytkownika
Liczniki i w losowej kolejnosci bez powtorzen
» 2015-03-07 02:04:30
Witam mam problem, chcialem napisac program wyswietlajacy od i=0 do np i=15
i=1
i=2
i=3
...
itd


Pozniej chcialem to zrobic tak by wyswietlalo mi te wszystkie i w randomowej kolejnosci bez powtorzen, ale mam problem, napisalem kod, cos jest zle albo o czyms nie wiem i nie dziala :/


C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;


int main()
{
    srand( time( NULL ) );
    int zmienna, pomoc = 3;
   
    for( int i = 0; i < pomoc; i++ )
    {
        cout << "i= " << i << endl;
        zmienna++;
    }
   
    int * p = new int[ zmienna ];
   
    for( int j = 0; j < pomoc; j++ )
    {
        p[ j ] = j;
    }
   
    cout << "PO WYMIESZANIU: " << endl;
   
    int wylosowana;
    bool test;
    int * tab = new int[ zmienna ];
   
    wylosowana =(( rand() % pomoc ) + 0 );
    tab[ 0 ] = p[ wylosowana ];
    cout << tab[ 0 ] << endl;
   
    //DO TEJ CZESCI JEST DOBRZE, WYSWIETLA WYLOSOWANA LICZBE
   
    // LOSOWANIE BEZ POWTORZEN
    for( int k = 1; k < pomoc; )
    {
        wylosowana =(( rand() % pomoc ) + 0 );
        for( int z = 0; z < pomoc; z++ )
        {
            if( tab[ z ] == p[ wylosowana ] )
                 test = false;
           
        }
       
        if( test == true )
        {
            tab[ k ] = p[ wylosowana ];
            k++;
        }
    }
   
    for( int y = 1; y < pomoc; y++ )
         cout << tab[ y ] << endl;
   
    delete[] p;
    delete[] tab;
   
    return 0;
}

Troche to zawile, ale licze na pomoc co jest zle ;d
P-127856
aksen
» 2015-03-07 02:16:27
Tu masz zastosowane losowanie 10 liczb bez powtórzeń.
Wystarczy usunąć z programu to co niepotrzebne.

http://cpp0x.pl/forum/temat/​?id=18972&p=2
P-127861
Lora
» 2015-03-07 02:17:06
Mógłbyś to trochę uprościć. Ta pętla ci się nie kończy, bo nigdy nie ustawiasz test na true. Zrób coś takiego:
C/C++
if( tab[ z ] == p[ wylosowana ] )
     test = false;
else
     test = true;

P-127862
kynol
Temat założony przez niniejszego użytkownika
» 2015-03-07 02:23:48
@aksnet
nie chce korzystac z gotowcow, chce wiedziec dlaczego moj program nie dziala.. ;/

@Lora
Jak to sie nie konczy warunek konczacy petle
z < pomoc

co to zmienia? petla sie konczy ale program nie dziala tak jak powinien, poza tym wczesniej napisalem program ze losuje liczby bez powtorzen i zrobilem to w podobny sposob bez tego else i dziala



C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;


int main()
{
    srand( time( NULL ) );
    int tab[ 15 ], zmienna;
    zmienna =(( rand() % 16 ) + 1 );
   
    bool spr;
    tab[ 0 ] = zmienna;
   
    for( int i = 1; i < 15; )
    {
        spr = true;
        zmienna =(( rand() % 15 ) + 1 );
       
        for( int j = 0; j < 15; j++ )
        {
            if( tab[ j ] == zmienna )
                 spr = false;
           
        }
       
        if( spr == true )
        {
            tab[ i ] = zmienna;
            i++;
        }
    }
   
    cout << "wylosowane liczby: " << endl;
   
    for( int q = 0; q < 15; q++ )
    {
        cout << tab[ q ] << endl;
    }
   
    return 0;
}
P-127863
Lora
» 2015-03-07 02:27:58
No przecież ta zewnętrzna pętla się nie kończyła, bo test był zawsze false i nie dochodziło do inkrementacji k.
I rzeczywiście wciąż nie działa.
P-127865
Lora
» 2015-03-07 02:30:10
Spróbuj tak:
C/C++
test = true;
for( int z = 0; z < pomoc; z++ )
{
    if( tab[ z ] == p[ wylosowana ] )
         test = false;
   
   
}
P-127866
kynol
Temat założony przez niniejszego użytkownika
» 2015-03-07 02:31:08
W tym drugim programie co wstawilem kod, petla tez sie nie konczyla? a to dziwne bo sie zakonczyla i wylosowalo bez powtorzen ;P

k inkrementuje wtedy kiedy liczba wylosowana jest inna od liczby w tablicy.. a powinna sie zakonczyc bo na poczatku tej petli jest zmienna ktorej wartosc jest generowana randomowo wiec w koncu bedzie true, tzn powinno byc i powinno dzialac ale nie dziala.. przeanalizuj ten drugi kod co podalem, jest podobnie z zewnetrzna funkcja i program sie buja az huczy :)


@Lora

To niczego nie zmieni.... wez przenalizuj ten program bo ta zmienna test typu bool nie ma tu nic do rzeczy
P-127867
Lora
» 2015-03-07 02:32:22
W tym drugim programie robisz to co właśnie napisałem. Widocznie zapomniałeś o tym teraz.
P-127868
« 1 » 2 3
  Strona 1 z 3 Następna strona