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

[Lekcja 21] Problem z odpowiednim wylosowaniem

Ostatnio zmodyfikowano 2011-11-06 19:53
Autor Wiadomość
Lothar
Temat założony przez niniejszego użytkownika
[Lekcja 21] Problem z odpowiednim wylosowaniem
» 2011-11-06 17:33:37
Witam,
utknalem niestety przy 1 zadaniu domowym w lekcji 21.

Mialem napisac program, ktory wylosuje 2 liczby z podanych wczesniej 3, tak aby sie nie powtarzaly (te wylosowane). Po kompilacji wczytuje 3 liczby, ale wyswietla 2 z zupelnie innego niz te podane. Przypuszczam, ze cos schrzanilem przy bloczku losujacym, ale nie wiem jak to ugryzc.

Widzialem juz tematy dotyczace tej lekcji ale nie bylo to prawidlowe rozwiazanie zadania.

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

int wczytaj( int tabliczka[], int ilosc )
{
    do
    {
        std::cout << "Podaj liczbe ";
        std::cin >> tabliczka[ ilosc ];
        ilosc++;
    } while( ilosc < 3 );
   
}

bool CzyPowtorka( int liczba, int tablica[], int ilosc )
{
    if( ilosc <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tablica[ i ] == liczba )
             return true;
       
        i++;
    } while( i < ilosc );
   
    return false;
   
}

int losowanie( int tablica[], int ilosc )
{
    ilosc = 0;
   
    do
    {
        tablica[ ilosc ] = rand();
        ilosc++;
    } while( ilosc < 2 );
   
}

int main()
{
    srand( time( 0 ) );
    int tablica[ 3 ];
    int ilosc = 0;
    int wyniki[ 2 ];
    wczytaj( tablica, ilosc );
    losowanie( tablica, ilosc );
   
    do
    {
        int liczba = losowanie( tablica, ilosc );
        if( CzyPowtorka( liczba, tablica, ilosc ) == false )
        {
            tablica[ ilosc ] = liczba;
            ilosc++;
        }
    } while( ilosc < 2 );
   
    ilosc = 0;
    do
    {
        std::cout << tablica[ ilosc ] << std::endl;
        ilosc++;
    } while( ilosc < 2 );
   
    return 0;
}

Blad musi lezec gdzies tutaj, przynajmniej mi sie tak wydaje.
C/C++
int losowanie( int tablica[], int ilosc )
{
    ilosc = 0;
   
    do
    {
        tablica[ ilosc ] = rand();
        ilosc++;
    } while( ilosc < 2 );
   
}

Prosze o jakies wskazowki i dziekuje.
P-43444
pekfos
» 2011-11-06 18:52:14
ten kod aż się prosi o pętle for zamiast do-while.
C/C++
int losowanie( int tablica[], int ilosc )
{
    ilosc = 0; //po co argument skoro go zerujesz?
   
    do
    {
        tablica[ ilosc ] = rand(); //wartość od zera do RAND_MAX. ale zakres...
        ilosc++;
    } while( ilosc < 2 );
    //hmm, może return jakis?
   
}
P-43469
Lothar
Temat założony przez niniejszego użytkownika
» 2011-11-06 19:15:52
Bardzo dziekuje za pomoc.
Fakt argument mozna bylo zastapic zmienna wewnatrz, for jeszcze nie znam - ide lekcja po lekcji teraz sie zatrzymalem na tej 21 lekcji, a for bedzie w kolejnych.

A co do return, to czy jego brak i tak nie przypisze wartosci w tym przypadku losowanie(tablica, ilosc) ?
Myslalem ze jest to niekonieczne skoro sie kompilowalo.
P-43478
pekfos
» 2011-11-06 19:21:20
Chyba standard mówi że dla T wartość domyślna to T() czyli dla int to będzie 0. ale po co pomijać return skoro używasz wartości zwracanej (w tym przypadku zawsze to będzie 0)?
P-43481
Lothar
Temat założony przez niniejszego użytkownika
» 2011-11-06 19:53:42
Dobrze bede wiec o tym pamietal.
P-43502
« 1 »
  Strona 1 z 1