Rozdział 21-niedziałający przyapdek
Ostatnio zmodyfikowano 2017-09-08 13:26
sebekxp Temat założony przez niniejszego użytkownika |
Rozdział 21-niedziałający przyapdek » 2017-09-05 19:16:07 Witam mam problem odnośnie zadania domowego z rozdziału 21. Program napisalem po dłuższysz zastanowieniu, działa wszystko jak nalezy poza jednym przypadkiem (gdy wczytam 3 takie same liczby).Wg mnie program powinien wylosowac wtedy minimum jedna liczbe, lecz funkcja losujaca zakończy sie wtedy i tylko wtedy gdy wylosuje 2 rożne lioczby a w przyapdku 3 takich samych nigdy sie nie zakonczy i program nic losuje żadnej liczby. Z pomoca przyszedł mi kolega i powiedział zebym napisał funkcję sprawdzającą ile jest rożnych wylosowanych liczb i wtedy dostosowal liczbe losowanych liczb. Ale juz od paru dni głowie się z taka funkcja i nic nie działa :/ Pytanie moje brzmi czy da się zrobić taka funkcję z wiedzą zdobyta z tych 21 rozdziałow ? Jak tak to prosze o jakies wskazówki jak to moge zrobic. Z góry Dziękuję! Kod programu: #include <iostream> #include <ctime> #include <cstdlib>
using namespace std;
void wczytaj( int tab[] ) { int i = 0; do { cin >> tab[ i ]; i++; } while( i < 3 ); }
bool wylosuj( int bat[], int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( bat[ i ] == tab[ iLiczba ] ) return true; i++; } while( i < ile ); return false; }
int losowanie() { return( rand() % 3 ) + 0; }
int main() { srand( time( 0 ) ); int wczytane[ 3 ]; int wylosowanych[ 3 ]; int wylosowane = 0; cout << "Wczytaj 3 liczby :" << endl; wczytaj( wczytane ); cout << "Losujemy 2 z nich bez powtorzen : " << endl; do { int liczba = losowanie(); if( wylosuj( wylosowanych, liczba, wczytane, wylosowane ) == false ) { wylosowanych[ wylosowane ] = wczytane[ liczba ]; wylosowane++; } } while( wylosowane < 2 ); wylosowane = 0; do { cout << wylosowanych[ wylosowane ] << endl; wylosowane++; } while( wylosowane < 2 ); return 0; }
|
|
mateczek |
» 2017-09-05 20:05:12 zależy co chcesz osiągnąć. Zwyczajnie nie da się wylosować dwóch różnych liczb jeśli wszystkie są identyczne.
1 sprawdzaj przy wczytywaniu czy liczby są różne i nie dopuść do wpisania identycznych 2 losuj Index tablicy te zawsze będą różne. |
|
sebekxp Temat założony przez niniejszego użytkownika |
Dobre rozumowanie ? » 2017-09-07 17:18:28 moim założeniem było napisanie funkcji która sprawdzi ile jest różnych liczb w tablicy a potem zastosuje tą infirmacje w funkcjach z losowaniem. Problem ze sprawdzeniem czy liczby(jak napisał mateczek) sa identyczne ma jedna wade poniewaz gdy wprowadzimy 2 liczby takie same, a 3 inna to program powinen nam wylosowac 2 liczby rozne bez problemu, taki program sprawdzajacy miałby sens ale gdyby dopuszczał do wpisanoa 2 takich samych liczb, dobrze myślę ? |
|
pekfos |
» 2017-09-07 19:37:58 Jakby program nie dopuszczał wpisania 2 takich samych liczb, to faktycznie nie było by sensu w sprawdzaniu potem, ile jest różnych liczb w tablicy, bo wszystkie są wtedy różne. |
|
sebekxp Temat założony przez niniejszego użytkownika |
Czyli co dalej ? » 2017-09-07 21:55:47 Mogę uznać ze zadanie zostało wykonane poprawnie(raczej nie bo nie działa jeden przypadek) ? Czy raczej próbowac zrobić funkcje, która nie dopuszcza do wprowadzenia takich samych liczb ? (Bo z funkcja ktora zlicza ile jest rożnych liczb będzie o wiele ciężej,tak coś czujęi nie do konca wiem jak sie za nią zabrać) |
|
mateczek |
» 2017-09-08 13:26:22 Nie ma co się rozkminiać nad zadaniem ćwiczebnym. Jeśli masz 3 pudelka i w dwóch jest cukier w trzecim mąka. losujesz po prostu pudełka a co w środku Cie nie obchodzi !!! PS.jak chcesz załadować w tablice tylko różne liczby to np takie rozwiązanie.I w kontenerze masz tylko różne liczby. A rozmiar kontenera mówi Ci ile różnych liczb masz zapakowanych #include <iostream> #include <set> using namespace std;
int main() { srand( time( NULL ) ); set < int > konterner; for( int i = 0; i < 15; i++ ) { int liczba = rand() % 15; cout << liczba << " "; konterner.insert( liczba ); } cout << endl; cout << konterner.size(); }
|
|
« 1 » |