MDK Temat założony przez niniejszego użytkownika |
Z jakiego powodu ten program nie losuje mi liczby 16? » 2016-11-02 19:38:38 Sprawdziłem wielokrotnie. U mnie na komputerze program potrafi wylosować wszystkie pozostałe liczby, oprócz 16. Nie wiem, czy to wina procesora, czy może coś innego jest źle. A jeśli ograniczę zakres losowania w losujLiczbe do 20, to wogóle nie wyświetla wartości ale to zapewne przez to, że nie losuje "16". #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int losujLiczbe() { return(( rand() % 21 ) + 1 ); }
bool sprawdz( int tablica[], int liczbaDoSprawdzenia, int wielkoscTablicy ) { int i = 0; do { if( tablica[ i ] == liczbaDoSprawdzenia ) return true; i++; } while( i < wielkoscTablicy ); return false; }
main() { srand( time( 0 ) ); int tSize = 20; int tab[ tSize ]; int l = 0; do { int wylosowanaLiczba = losujLiczbe(); if( sprawdz( tab, wylosowanaLiczba, tSize ) == false ) { tab[ l ] = wylosowanaLiczba; l++; }; } while( l < tSize ); l = 0; do { cout << tab[ l ] << endl; l++; } while( l < tSize ); return 0; }
|
|
michal11 |
» 2016-11-02 20:27:43 #include <iostream> #include <cstdlib> #include <ctime>
#include <algorithm>
using namespace std;
int losujLiczbe() { return(( rand() % 21 ) + 1 ); }
bool sprawdz( int tablica[], int liczbaDoSprawdzenia, int wielkoscTablicy ) { int i = 0; do { if( tablica[ i ] == liczbaDoSprawdzenia ) return true; i++; } while( i < wielkoscTablicy ); return false; }
main() { srand( time( 0 ) ); int tSize = 21; int tab[ tSize ]; int l = 0; do { int wylosowanaLiczba = losujLiczbe(); if( sprawdz( tab, wylosowanaLiczba, tSize ) == false ) { tab[ l ] = wylosowanaLiczba; l++; }; } while( l < tSize ); l = 0; do { cout << tab[ l ] <<( l != tSize - 1 ? ", ": "" ); l++; } while( l < tSize ); cout << endl; sort( tab, tab + tSize ); l = 0; do { cout << tab[ l ] <<( l != tSize - 1 ? ", ": "" ); l++; } while( l < tSize ); return 0; }
odpal to u siebie i sprawdź czy wszystkie są, ew. wrzuć tutaj screena jeżeli czegoś ( np. 16) będzie brakowało. |
|
mateczek |
» 2016-11-02 20:33:27 if( sprawdz( tab, wylosowanaLiczba, l ) == false )
bool sprawdz( int tablica[], int liczbaDoSprawdzenia, int wielkoscTablicy ) { int i = 0; do { if( tablica[ i ] == liczbaDoSprawdzenia ) return true; i++; } while( i < wielkoscTablicy ); return false; } ewentualnie kod mógłby zostać po staremu ale deklaracja tablicy w ten sposób int tSize = 20; int tab[ tSize ] { - 1 }; |
|
carlosmay |
» 2016-11-03 18:26:50 constexpr int tSize = 20; @mateczek Warto by zastosować się do konwencji nazewniczych i stałą nazwać wielkimi literami. |
|
MDK Temat założony przez niniejszego użytkownika |
» 2016-11-03 18:33:31 Oczywiście, problem można obejść, np. tak jak pisze michal11. I jeśli wprowadzimy zamiast tSize = 20, tSize = 21, to wszystkie liczby się losują. Nie mogę jednak pojąć, skąd się bierze problem przy oryginalnych wartościach. Po prostu jest to problem dość niezwykły, a takie mnie przyciągają :-D |
|
mateczek |
» 2016-11-03 18:39:14 constexpr int tSize = 20; @mateczek Warto by zastosować się do konwencji nazewniczych i stałą nazwać wielkimi literami. |
Jasne lepiej się wówczas czyta. Bo pierwszy rzut oka i już wiadomo o co chodzi. @MDK kolego masz niezainicjalizowaną tablicę !!! poniżej zdjęcie jakie losowe wartości przyjmuje twoja tablica po utworzeniu https://zapodaj.net/dc0eff85e3541.png.htmldlaczego na ostatnim miejscu jest 16 nie mam pojęcia tak czy siak mogła tam być dowolna losowa liczba. A ponieważ sprawdzasz w programie całą tablicę, a zwłaszcza tą jej część wypełnioną przypadkowymi liczbami, to zwyczajnie masz kuku!!! #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int losujLiczbe() { return(( rand() % 20 ) + 1 ); }
bool sprawdz( int tablica[], int liczbaDoSprawdzenia, int lastElementIndex ) { for( int i = 0; i <= lastElementIndex; i++ ) if( tablica[ i ] == liczbaDoSprawdzenia ) return true; return false; }
main() { srand( time( 0 ) ); constexpr int SIZE_TAB = 20; int tab[ SIZE_TAB ]; int i = 0; while( i < SIZE_TAB ) { int wylosowanaLiczba = losujLiczbe(); if( sprawdz( tab, wylosowanaLiczba, i - 1 ) == false ) { tab[ i ] = wylosowanaLiczba; i++; } } for( int element: tab ) { cout << element << " "; } cout << endl; return 0; }
|
|
MDK Temat założony przez niniejszego użytkownika |
» 2016-11-03 19:11:35 Dzięki mateczek. Udało ci się zapalić tą żarówkę nad moją głową. |
|
Monika90 |
» 2016-11-03 19:12:56 Warto by zastosować się do konwencji nazewniczych i stałą nazwać wielkimi literami.
|
Taka konwencja jest w Javie a nie w C++. W C++ TAKICH_NAZWY używa się dla makr. |
|
« 1 » 2 |