Grisza Temat założony przez niniejszego użytkownika |
Wypisywane wartości są nie zgodne z programem (tablica, referencja) » 2015-03-08 10:58:08 Witam drogich programistów. Mam pewien problem z moim programikiem. Wszystko pięknie sprawdziłem, ale po odpaleniu programu jako wynik dostaję tablicę(która tak bardzo chciałem)lecz liczby zawarte w niej są dziwnie duże i non stop takie same. Szukałem błędu "rozbierając program" i nie mogę go wyeliminować. Mógłby ktoś pomóc? #include <iostream> #include <cstdlib> #include<time.h> #include<conio.h> using namespace std;
void ustaw( int & refx, int & refy ) { losuj: refx = rand() / 8; refy = rand() / 8; if( refx > 8 || refy > 8 ) goto losuj; }
int main() { srand(( int ) time( NULL ) ); int tab[ 8 ][ 8 ]; int i, j, p, x, y; cout << "Podaj ilosc powt:" << endl; cin >> p; for( i = 0; i < p; i++ ) { ustaw( x, y ); tab[ x ][ y ] = tab[ x ][ y ] + 1; } for( i = 0; i < 8; i++ ) { for( j = 0; j < 8; j++ ) { cout << " " << tab[ i ][ j ]; } cout << endl; } return 0; }
|
|
Brunon3 |
» 2015-03-08 10:59:35 Wstaw kod w [.cpp] //Kod [./cpp] (bez kropek), to będzie można pomyśleć. ;)
Edit: Ok, już jest. :) |
|
Pokropow |
» 2015-03-08 11:15:28 Co ten program ma robić? Na pierwszy rzut oka wygląda to tak: losowy element tablicy zwiększ o jeden. |
|
Grisza Temat założony przez niniejszego użytkownika |
» 2015-03-08 11:20:29 Tak ma dzialac. Ze podajemy ilosc "operacji" i pozniej za kazdym razem sa losowane inne wspolrzedne punktu. Jesli w wczesniej byla tam wartosc to zostaje zwiekszona o jeden. NA koncu wypisuje tablice. Z tym, ze z wypisaniem jest cos nie tak, albo z petlą która zwiększa wartość. Kiedyś miałem podobny problem tylko nie pamiętam jak go rozwiązałem :(
PS: Dlatego tak to wygląda, bo takie są warunki =/ |
|
Pokropow |
» 2015-03-08 11:22:42 Może zeruj tablicę na początku |
|
Brunon3 |
» 2015-03-08 11:26:20 Nie lepiej usunąć to sprawdzanie czy jest > niż 8 i po prostu losować z zakresu?
To goto w ogóle nie jest tam potrzebne. |
|
Grisza Temat założony przez niniejszego użytkownika |
» 2015-03-08 11:31:15 #include <iostream> #include <cstdlib> #include<time.h> #include<conio.h> using namespace std;
void ustaw( int & refx, int & refy ) { losuj: refx = rand() / 8; refy = rand() / 8; if( refx > 8 || refy > 8 ) goto losuj; }
int main() { srand(( int ) time( NULL ) ); int tab[ 8 ][ 8 ]; int i, j, p, x, y; cout << "Podaj ilosc powt:" << endl; cin >> p; for( i = 0; i < 8; i++ ) { for( j = 0; j < 8; j++ ) { tab[ i ][ j ] = 0; } } for( i = 0; i <= p; i++ ) { ustaw( x, y ); tab[ x ][ y ] = tab[ x ][ y ] + 1; } for( i = 0; i < 8; i++ ) { for( j = 0; j < 8; j++ ) { cout << " " << tab[ i ][ j ]; } cout << endl; } return 0; } Tak wystarczyło wyzerować tablicę. Tylko przy duzej ilości wprowadzanych danych program sie zawiesza. Np. przy 15 - sprawdzenie musi byc zeby nie wyjsc poza tablice - obojetnie czy go to / while (tak mi sie wydaje ? ) Dziwne sprawdziłem kilkanaście razy i czasem się wywali, a czasem nie :( Dev-cpp 5.9.2 na laptopie płynnie chodzi i spokojnie jakąkolwiek liczbę przyjmuje. Code Blocks ma focha przy 10 :D |
|
Brunon3 |
» 2015-03-08 11:48:03 Nie, goto i while to nie to samo, gdy nie masz uzasadnienia na użycie goto, to go nie używaj, gdyż powoduje bałagan w kodzie. (Taka rada.) |
|
« 1 » 2 |