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

Problem ze zrozumieniem przykładu z rozdziału 21 i zadania.

Ostatnio zmodyfikowano 2014-06-25 01:28
Autor Wiadomość
snajperek130
Temat założony przez niniejszego użytkownika
Problem ze zrozumieniem przykładu z rozdziału 21 i zadania.
» 2014-06-18 13:19:10
Szukałem po forum i troche juz opisalem kod, ale sa czesci opisane pytajnikami, ktorych nie rozumiem. W pierwszym jak nastepuje sprawdzenie, czy liczba byla? Prosze o dokladny opis, bo nie moge tego zczaic i siedze juz nad tym bardzo dlugo. Co do drugiej czesci to powoli cos zaczynam rozumiec, ale takze prosilbym o dobry opis dzialania.



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

bool czyBylaWylosowana( int iLiczba, int tab[], int ile )
{
    if( ile <= 0 ) // Ten warunek jest konieczny. Jeżeli tablica jest
    //pusta (a jest na samym początku pusta zanim nastąpi pierwsze losowanie i zapisanie)
    //to nie ma się wykonać żadne szukanie czy liczba istnieje.
         return false;
   
   
    int i = 0; // jesli nie jest to pierwsze losowanie to trzeba sprawdzic:
    do // petla sprawdzajaca wszystkie liczby po kolei
    {
        if( tab[ i ] == iLiczba ) // ?? Tu chodzi o to, ze jak wylosowana liczba bedzie sie rownac liczbie w tablicy to
        // nie przyporzadkuje liczby do tablicy, bo w
        // if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false) musi byc false, a
        // a tutaj jest return true ??
             return true;
       
        i++;
    } while( i < ile );
   
    return false;
}

int wylosuj()
{
    return( rand() % 10 ) + 1; //losuje liczby
}

int main()
{
    srand( time( 0 ) );
    int wylosowane[ 5 ]; //wylosowanych liczb jest 5
    int wylosowanych = 0; // wartosc poczatkowa
    do
    {
        int liczba = wylosuj(); //przypisanie do zmiennej liczby wyloswane liczby
        if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false ) //??
        // liczba to wylosowana liczba
        // wylosowane to tablica, do ktorej sa dopisywane liczby?
        // wylosowanych to wartosc poczatkowa?
        {
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        } //if
    } while( wylosowanych < 5 );
   
    wylosowanych = 0;
   
    // tu nastepuje wypisanie liczb z tablicy:
    do
    {
        std::cout << wylosowane[ wylosowanych ] << std::endl;
        wylosowanych++;
    } while( wylosowanych < 5 );
   
    return 0;
}
P-112226
pekfos
» 2014-06-18 16:56:59
W pierwszym jak nastepuje sprawdzenie, czy liczba byla? Prosze o dokladny opis
Tak. Dokładniejszy opis masz w swoim komentarzu..

C/C++
// wylosowane to tablica, do ktorej sa dopisywane liczby?
C/C++
wylosowane[ wylosowanych ] = liczba;

C/C++
// wylosowanych to wartosc poczatkowa?
C/C++
wylosowanych++;
Jak kilka linii niżej wyraźnie widać - nie..

P-112238
snajperek130
Temat założony przez niniejszego użytkownika
» 2014-06-19 22:24:21
Ok, zeby nie robic znowu tematu wykonuje zadanie z tej lekcji i nie powiem, ciezki to temat :/. Posilkowalem sie troche przykladem, i wyszedl mi taki kod, gdzie zrobilem blad?? Jeszcze bede nad tym siedzial, bo nie ukrywam trudny to dla mnie temat :/:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

bool sprawdzenie( int liczba, int tablica2[], int ile ) //funkcja sprawdza, czy sie juz nie powtorzyly
{
    if( ile <= 0 )
    {
        return true;
    }
    else if( ile > 0 )
    {
        int l = 0;
        do
        {
            if( liczba = tablica2[ l ] )
           
                 return false;
           
           
            l++; //jesli nie przechodzi do kolejnej pozycji tabeli
           
        } while( 1 != ile );
       
        return true;
    }
   
}
int wpisz( int tablica1[] ) // funkcja wpisuje liczby do tablicy1
{
    cout << "Wpisz 3 liczby:";
    int l = 0;
    do
    {
        cin >> tablica1[ l ];
        l++;
    } while( l < 3 );
   
    return tablica1[ l ]; // funkcja zwraca liczby w tablicy 1
}
int losuj( int tablica1[] )
{
    int a = rand() % 3; // z tego bedzie losowac, czyli losuje z zakresu 3 liczb
    int b = tablica1[ a ]; //  funkcja losuje z 3 podanych liczb 1 liczbe i zwraca do zmiennej b
    return b;
}

void wypisz( int tablica1[], int tablica2[] )
{
    cout << "Liczby podane:" << tablica1[ 0 ] << "" << tablica1[ 1 ] << "" << tablica1[ 2 ] << endl;
    cout << "Liczby wylosowane:" << tablica2[ 0 ] << "" << tablica2[ 1 ] << endl;
}
int main()
{
    srand( time( NULL ) );
    int tablica1[ 3 ]; // tablica przechowujaca liczby podane przez uzytkownika
    int tablica2[ 2 ]; // tablica przechowujaca liczby wylosowane
    wpisz( tablica1 );
    int l = 0;
    do
    {
        int liczba = losuj( tablica1 );
        tablica2[ l ] = liczba;
        if( sprawdzenie( liczba, tablica2, l ) == true )
       
             l++;
       
       
       
    } while( l < 2 );
   
    wypisz( tablica1, tablica2 );
   
   
   
    return 0;
}
P-112344
pekfos
» 2014-06-19 22:35:12
gdzie zrobilem blad??
Założyłeś temat na forum bez zapoznania się z zasadami.. Jaki błąd? Co nie działa? Chcesz otrzymać odpowiedź, czy tracić czas?
P-112346
snajperek130
Temat założony przez niniejszego użytkownika
» 2014-06-19 22:47:08
Po wprowawadzeniu 3 liczb przez uzytkownika program sie wiesza i nie da sie nic wpisac. Podejrzewam, ze blad musi byc gdzies w funkcji "sprawdzenie".
P-112349
pekfos
» 2014-06-19 23:03:34
C/C++
if( liczba = tablica2[ l ] )
Zły operator.

C/C++
return tablica1[ l ];
Nie możesz tak zrobić. Nie ma nawet po co.

P-112350
snajperek130
Temat założony przez niniejszego użytkownika
» 2014-06-20 16:23:23
Dzieki, jestem juz blisko, tylko druga liczba jest losowana z tych 3 liczb, a nie powinna sie powtarzac. Jeszcze bede to analizowal, ale jak znajdziesz blad to pisz.
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

bool sprawdzenie( int liczba, int tablica2[], int ile ) //funkcja sprawdza, czy sie juz nie powtorzyly
{
    if( ile <= 0 )
    {
        return true;
    }
    else
    {
        int l = 0;
        do
        {
            if( liczba != tablica2[ l ] )
           
                 l++;
           
            return true;
           
        } while( l != ile );
       
        return true;
    }
   
}
int wpisz( int tablica1[] ) // funkcja wpisuje liczby do tablicy1
{
    cout << "Wpisz 3 liczby:";
    int l = 0;
    do
    {
        cin >> tablica1[ l ];
        l++;
    } while( l < 3 );
   
}
int losuj( int tablica1[] )
{
    int a = rand() % 3; // z tego bedzie losowac, czyli losuje z zakresu 3 liczb
    int b = tablica1[ a ]; //  funkcja losuje z 3 podanych liczb 1 liczbe i zwraca do zmiennej b
    return b;
}

int wypisz( int tablica1[], int tablica2[] )
{
    cout << "Liczby podane:" << endl;
    cout << tablica1[ 0 ] << endl;
    cout << tablica1[ 1 ] << endl;
    cout << tablica1[ 2 ] << endl;
    cout << "Liczby wylosowane:" << endl;
    cout << tablica2[ 0 ] << endl;
    cout << tablica2[ 1 ] << endl;
   
}
int main()
{
    srand( time( NULL ) );
    int tablica1[ 3 ]; // tablica przechowujaca liczby podane przez uzytkownika
    int tablica2[ 2 ]; // tablica przechowujaca liczby wylosowane
    wpisz( tablica1 );
    int l = 0;
    do
    {
        int liczba = losuj( tablica1 );
        tablica2[ l ] = liczba;
        if( sprawdzenie( liczba, tablica2, l ) == true )
       
             l++;
       
    } while( l != 2 );
   
   
   
    wypisz( tablica1, tablica2 );
   
   
   
    return 0;
}

edit
Niestety nie znalazlem przyczyny, wedlug mnie powinno dzialac :/.
P-112387
pekfos
» 2014-06-20 22:29:26
C/C++
do
{
    if( liczba != tablica2[ l ] )
   
         l++;
   
    return true;
   
} while( l != ile );

return..?
P-112412
« 1 » 2
  Strona 1 z 2 Następna strona