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

[Lekcja 21] Zadanie 1

Ostatnio zmodyfikowano 2012-04-28 18:00
Autor Wiadomość
quentine
Temat założony przez niniejszego użytkownika
[Lekcja 21] Zadanie 1
» 2012-04-28 17:35:26
Witam,

Realizuję kurs c++ krok po kroku, w dość powolnym niestety tempie, no i w końcu dotarłem do zadania, na którym utknąłem, dokładniej losowanie bez powtórzeń.

Trzy wieczory nad tym spędziłem i po prostu nie mam pojęcia dlaczego zamiast drugiej wylosowanej liczby mam zawsze -1.

Gdybyście mogli mnie jakoś nakierować to byłbym bardzo wdzięczny.

C/C++
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
bool czyByla( int ind, int t1[], int t2[], int k )
{
    if( k <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( t2[ i ] == t1[ ind ] )
             return true;
       
        i++;
    } while( i < 2 );
   
    return false;
}
int losuj( int min, int max )
{
    int x =( rand() % max ) + min;
    return x;
}
int main( int argc, char * argv[] )
{
    srand( time( NULL ) );
    int t1[ 3 ];
    int t2[ 2 ];
    cout << "Podaj trzy kolejne liczby. Program zapisze je w tablicy" << endl;
    int i = 0;
    do
    {
        cin >> t1[ i ];
        i++;
    } while( i < 3 );
   
    int ind = losuj( 0, 2 );
    cout << endl << t1[ ind ] << endl;
    int k = 0;
    do
    {
        if( czyByla( ind, t1, t2, k ) == false )
       
             t2[ k ] = t1[ ind ];
       
        k++;
       
    } while( k < 2 );
   
    cout << t2[ 0 ] << ", " << t2[ 1 ] << endl;
   
    system( "pause" );
    return 0;
}
P-55561
SeaMonster131
» 2012-04-28 17:43:12
Bo Ty jej/ich nigdzie nie losujesz.
P-55562
quentine
Temat założony przez niniejszego użytkownika
» 2012-04-28 17:43:48
losuję, ale indeks i potem wyciągam liczbę z tablicy znajdującą się pod tym indeksem.
P-55563
xevuel
» 2012-04-28 17:52:23
Funkcję losuj wywołujesz tylko raz, więc jak 2 liczba może przyjąć inną wartość?
P-55564
quentine
Temat założony przez niniejszego użytkownika
» 2012-04-28 18:00:16
Faktycznie, to był błąd. Zapomniałem też o klamrach w:

C/C++
{
    t2[ k ] = t1[ ind ];
    k++;
}

Dziękuję bardzo za podpowiedź :). Trochę wstyd, że tyle czasu sam tego nie wyłapałem.

Poprawiony program, gdyby to kogoś interesowało - poniżej :)

C/C++
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
bool czyByla( int ind, int t1[], int t2[], int k )
{
    if( k <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( t2[ i ] == t1[ ind ] )
             return true;
       
        i++;
    } while( i < 2 );
   
    return false;
}
int losuj( int min, int max )
{
    int x =( rand() % max ) + min;
    return x;
}
int main( int argc, char * argv[] )
{
    srand( time( NULL ) );
    int t1[ 3 ];
    int t2[ 2 ];
    cout << "Podaj trzy kolejne liczby. Program zapisze je w tablicy" << endl;
    int i = 0;
    do
    {
        cin >> t1[ i ];
        i++;
    } while( i < 3 );
   
    int k = 0;
    do
    {
        int ind = losuj( 0, 2 );
        if( czyByla( ind, t1, t2, k ) == false )
       
        {
            t2[ k ] = t1[ ind ];
            k++;
        }
    } while( k < 2 );
   
    cout << t2[ 0 ] << ", " << t2[ 1 ] << endl;
   
    system( "pause" );
    return 0;
}
P-55565
« 1 »
  Strona 1 z 1