Reavey Temat założony przez niniejszego użytkownika |
[Lekcja 21] Problem z zadaniem. » 2012-12-15 18:34:36 Witam. Od dłuższego czasu męczę się z doprowadzeniem tego zadania do stanu, w którym by działało. Jednakże - bezskutecznie. Czy mógłbym prosić o jakąś poradę, bądź o wskazanie błędów? Z góry dziękuję. Pozdrawiam. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int wylosuj( int iTablica[] ) { return iTablica[( rand() % 3 ) + 0 ]; }
bool sprawdzenie( int iLiczba, int tab[], int miejsca ) { if( miejsca <= 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < miejsca ); return false; }
int main() { srand( time( NULL ) ); int a, b, c; int tablica[ 3 ]; cout << "Podaj 3 liczby calkowite: " << endl; cin >> a; a = tablica[ 0 ]; cin >> b; b = tablica[ 1 ]; cin >> c; c = tablica[ 2 ]; int pom = 0; do { int liczba = wylosuj( tablica ); if( sprawdzenie( liczba, tablica, 2 ) == false ) { cout << liczba << endl; pom++; } } while( pom < 2 ); system( "Pause" ); return 0; } |
|
Admixior |
» 2012-12-15 22:22:29 Programowanie jest trochę luźniejsze i bardziej intuicyjne niż C się wydaje (to nie assembly): ( rand() % 3 ) + 0 //po co robisz +0 ?? cin >> a; a = tablica[ 0 ];
cin >> tablica[ 0 ];
cin >> tablica;
Po za tym twój algorytm w ogóle coś jest zły (mam dokładnie na myśli funkcje sprawdzenie()) Najpierw losujesz liczbę później funkcja sprawdzenie sprawdza czy jest ona na zerowym (indeksowanie od zera) miejscu jeśli tak to zwraca true.. później sprawdza i robi to samo dla 1 miejsca w tablicy. Czyli można wywnioskować, że najpierw losuje liczbę z 3 elementowej tablicy i później sprawdza czy jest ona na którymś z 2 pierwszych miejsc. Jeśli tak to jeszcze raz. Czyli powinno wypisać 2 razy ostatnią liczbę. |
|
Berux |
» 2012-12-15 22:29:22 #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int wylosuj() { return( rand() % 3 ) + 0; }
bool sprawdzenie( int iLiczba, int tab[], int miejsca ) { if( miejsca <= 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < miejsca ); return false; }
int main() { srand( time( NULL ) ); int a, b, c; int tablica[ 3 ]; cout << "Podaj 3 liczby calkowite: " << endl; cin >> tablica[ 0 ]; cin >> tablica[ 1 ]; cin >> tablica[ 2 ]; int pom = 0; do { int liczba = wylosuj(); if( sprawdzenie( liczba, tablica, pom ) == false ) { cout << tablica[ liczba ] << endl; pom++; } } while( pom < 2 ); system( "Pause" ); return 0; }
|
|
Reavey Temat założony przez niniejszego użytkownika |
» 2012-12-15 22:45:33 Dziękuję za odpowiedzi, ale mam jedno pytanie. Skoro w moim kodzie w funkcji main() przy sprawdzaniu, czy liczba nie została wylosowana, nie może wystąpić wartość "2", to w tym: Losowanie bez powtórzeńrozdziale, co oznacza zmienna "ile" w funkcji "czyBylaWylosowana()" ? Prawdę mówiąc, od początku miałem z tym problem. Jest to ilość "zajętych" miejsc w tabeli, czy ich maksymalna ilość? A może coś zupełnie innego? Pozdrawiam. |
|
Berux |
» 2012-12-15 23:00:01 Jest to ilość wylosowanych już liczb |
|
Reavey Temat założony przez niniejszego użytkownika |
» 2012-12-16 18:34:06 Przepraszam za zawracanie głowy, ale ciągle czegoś nie rozumiem. Mianowicie, oto moja funkcja, która sprawdza, czy liczba nie została już wylosowana: bool sprawdzenie( int iLiczba, int tab[], int elem ) { if( elem <= 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < elem ); return false; }
A tutaj jest jej zastosowanie: do { int liczba = wylosuj(); if( sprawdzenie( liczba, tablica, pom ) == false ) { cout << tablica[ liczba ] << endl; pom++; } } while( pom < 2 );
Jeżeli funkcja wylosuj() zwraca wartość od 0 do 2 i ta wartość jest podstawiana jako zmienna liczba , to jakim prawem ten cały program działa, skoro w tym: if( tab[ i ] == iLiczba ) return true;
miejscu wartość danego elementu w owej tablicy nigdy nie będzie równa tej liczbie? np. tab[ 0 ] nigdy nie będzie równy 1 o ile użytkownik nie poda takich liczb. Przepraszam jeszcze raz za zawracanie głowy. Pozdrawiam. |
|
« 1 » |