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

[Lekcja 21] Pytanie dotyczące zadania 1

Ostatnio zmodyfikowano 2013-05-13 19:27
Autor Wiadomość
Fley
Temat założony przez niniejszego użytkownika
[Lekcja 21] Pytanie dotyczące zadania 1
» 2013-05-11 19:51:26
Problem dotyczy działania programu, podczas losowania 8 liczb nie losuje on 8 liczb, nie mam pojęcia dlaczego. Czy ktoś mógłby mi to wyjaśnić?

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

bool wbp( int liczba, int t[], int licznik )
{
    if( licznik <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( t[ i ] == liczba )
             return true;
       
        i++;
    } while( i < licznik );
   
    return false;
}
int wylosuj( int tab[] )
{
    return tab[( rand() & 10 ) ];
}
int main()
{
    srand( time( NULL ) );
    int tablica[ 10 ];
    int licznik = 0;
    int liczba;
    std::cout << "Prosze podac 10 liczb" << std::endl;
    do
    {
        std::cin >> tablica[ licznik ];
        licznik++;
    } while( licznik < 10 );
   
    licznik = 0;
    do
    {
        liczba = wylosuj( tablica );
        if( wbp( liczba, tablica, licznik ) == false )
        {
            std::cout << liczba << ", ";
            licznik++;
        }
    } while( licznik < 8 );
   
    return 0;
}
P-82707
CodeMeister
» 2013-05-11 20:08:52
Jak to nie losuje?

P-82711
pekfos
» 2013-05-11 20:10:04
C/C++
return tab[( rand() & 10 ) ];
Zły operator, powinno być
%
.
P-82712
Fley
Temat założony przez niniejszego użytkownika
» 2013-05-11 20:24:04
Dzięki, :P teraz tylko muszę wykminić jak naprawić tą chece z powtarzaniem.
P-82715
usmiech
» 2013-05-11 20:32:07
Realizuj program etapami.. najpierw opanuj jak uzytkownik ma wprowadzic np 10 liczb , pozniej kaz programowi je wydrukowac na ekranie (uzyj tu petli for). Pozniej rand wylosuj 1 liczbe z tej tablicy.. jak bedziesz potrafil to robic to losuj wiecej.. pozniej dopiero zastsujesz bool :)
P-82717
Fley
Temat założony przez niniejszego użytkownika
» 2013-05-11 20:49:58
Problem w tym ,że nie wiem jak się do tego losowania bez powtórzeń zabrać. Wylosować jest prosto, tylko jak zastosować do tego bool? Tak wygląda kod bez wcześniejszego bool:
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>

int wylosuj()
{
    return( rand() % 10 );
}
int main()
{
    srand( time( 0 ) );
    int tablica[ 10 ];
    int licznik = 0;
    std::cout << "Prosze podac 10 liczb" << std::endl;
    do
    {
        std::cin >> tablica[ licznik ];
        licznik++;
    } while( licznik < 10 );
   
    licznik = 0;
    do
    {
        std::cout << tablica[ wylosuj() ] << ", ";
        licznik++;
    } while( licznik < 8 );
   
    return 0;
}
P-82721
Bajt
» 2013-05-11 20:57:19
Może tak:
C/C++
//Liczby to nazwa tablicy
for( int i = 0; i < ilosc_liczb_w_tablicy; )
{
    //losowanie
    Liczby[ i ] = rand() % maksymalna_liczba_w_twojej_tablicy + 1;
   
    // sprawdzenie, czy się ona nie powtarza
    bool PowtarzaSie = false;
    for( int j = 0; j < i; ++j )
    {
        if( Liczby[ j ] == Liczby[ i ] )
        {
            PowtarzaSie = true;
            break;
        }
        if( PowtarzaSie == false )
             ++i;
       
    }
P-82722
Fley
Temat założony przez niniejszego użytkownika
» 2013-05-11 21:20:00
Zrozumiałym dla mnie jest moment do sprawdzenia, a póżniej to wygląda tak?:
Czyli : ,ze bool "powtarzasię" ma wartość false, dla 'j' początkowej =0 jeżeli 'j<0' (j zwrasta po każdej pętli) to: dla liczb 'j' oraz 'i' jeżeli są równe to bool dostaje wartość true. I dalej dla bool"powtarzasię" jest false to "i" wzrasta. Tak?
P-82724
« 1 » 2
  Strona 1 z 2 Następna strona