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

Tablice jednowymiarowe - losowanie liczb z określonego przedziału

Ostatnio zmodyfikowano 2014-06-01 18:13
Autor Wiadomość
Moorfox
» 2014-05-31 21:27:08
A to, że int i = 0 jest w innym miejscu, to nie ma nic wspólnego z formatowaniem ?? A otrzymało się to dzięki pętli
P-111210
pekfos
» 2014-05-31 21:46:56
Nie ma.

8k postów, otwieram szampana..
P-111219
marmal
Temat założony przez niniejszego użytkownika
» 2014-06-01 17:34:16
W funkcji bool rzeczywiście, zgubiłem return.
Poprawione:

C/C++
bool czyWylosowana( int liczba, int wyb[], int wylos[], int ile )
{
    if( ile == 0 )
         return false;
   
    int i = 0;
    do
    {
        if( wylos[ ile ] == wyb[ liczba ] )
             return true;
       
        i++;
    }
    while( i < ile );
   
    return false;
}

C/C++
int i = 0;
do
{
    if( wylos[ ile ] == wyb[ liczba ] )
         return true;
   
    i++;
}
while( i < ile );

Czemu nie możesz zrozumieć? Mam tablicę wylosowanych(2 - elementowa), oraz wybranych (3 - elementowa). Program ma losować liczbę z przedziału 0 - 2(liczba), aby sprawdzić czy liczba z tablicy o indeksie wylosowanej liczby: wybrane[liczba] "siedzi" już w tablicy wylosowanych, jeżeli nie to ja dopisać.
Zmienna int i jest mi potrzebna, aby najpierw sprawdzić  wylos[0], później wylos[1].
Nie wiem, czy moje rozumowanie jest dobre, ale to jedyny sposób napisania tego programu, na jaki wpadłem.

C/C++
wybrane[ liczba ] = wylosowane[ ile ];
A tutaj nie wiem, jaki błąd mam.

Program nie działa prawidłowo, bo losuje liczby duże (ok. 200 000+), a nie z tych podanych.
P-111265
pekfos
» 2014-06-01 17:35:29
C/C++
if( wylos[ ile ] == wyb[ liczba ] )
Nie użyłeś tu i.
P-111266
marmal
Temat założony przez niniejszego użytkownika
» 2014-06-01 17:46:57
Rzeczywiście.
Próbowałem tak:
C/C++
int i = 0;
do
{
    if( wylos[ i ] == wyb[ liczba ] )
         return true;
   
    i++;
}
while( i < ile );


ale też nie działa. Kombinuję już na różne sposoby, z tym "i". Próbowałem również to "i" wyrzucić całkowicie, ale ciągle nic.

Co ciekawe program mi za każdym razem losuje te same liczby: 2293508 oraz 2293560
P-111267
pekfos
» 2014-06-01 17:49:14
Podaj cały aktualny kod.
P-111269
marmal
Temat założony przez niniejszego użytkownika
» 2014-06-01 17:54:52
C/C++
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <time.h>
#include <windows.h>

int losuj()
{
    return rand() % 3;
}

bool czyWylosowana( int liczba, int wyb[], int wylos[], int ile )
{
    if( ile == 0 )
         return false;
   
    int i = 0;
    do
    {
        if( wylos[ i ] == wyb[ liczba ] )
             return true;
       
        i++;
    }
    while( i < ile );
   
    return false;
}

using namespace std;

int main()
{
    srand( time( NULL ) );
    int wylosowane[ 2 ];
    int wybrane[ 3 ];
   
    for( int i = 0; i < 3; i++ )
    {
        cin >> wybrane[ i ];
    }
    int liczba = 0;
    int ile = 0;
   
    cout << "Wybrane:\n";
    for( int i = 0; i < 3; i++ )
    {
        cout << wybrane[ i ] << endl;
    }
   
    do
    {
        losuj();
        liczba = losuj();
        if( czyWylosowana( liczba, wybrane, wylosowane, ile ) == false )
        {
            wybrane[ liczba ] = wylosowane[ ile ];
            ile++;
        }
    }
    while( ile < 2 );
   
    cout << "Wylosowane: \n";
   
    for( int i = 0; i < 2; i++ )
    {
        cout << wylosowane[ i ] << endl;
    }
}
P-111271
pekfos
» 2014-06-01 17:58:49
Niczego nie przypisujesz do wylosowane.
P-111272
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona