Achtergrondverhaal:
De Romeinen hadden een spelletje met muntjes, te weten sestertii.
Er staan een heleboel lege potjes op een rij en de eerste Romein
die langskomt gooit in elk potje een sestertius. Daarna komt de
tweede Romein die haalt uit alle even potjes het muntje. De
potjes zijn genummerd van 1 t/m n, waarbij n het laatste potje is.
De nummering is opeenvolgend. Dan komt de 3e romein en gaat alle
potjes die een veelvoud van drie zijn na, en als er een muntje
inligt dan pakt hij dat, en als er geen muntje inligt dan doet hij
er een in. Dus hij pakt het muntje uit potje 3 en doet dat in potje 6.
Daarna pakt hij het muntje uit potje 9 en doet dat in potje 12, enzovoort.
De vierde Romein doet hetzelfde voor alle potjes met als nummer een
viervoud. Nadat er n Romeinen zijn geweest, in hoeveel potjes ligt
er dan een muntje? Kan je ook een rij maken van X-en en O-en waarbij
een X staat voor wel een munt, en O voor geen munt?
Nu wil ik dat doen door een 2d array te maken(is nu nog van statische grootte, later breid ik dit uit zodat het van dynamische grootte wordt, maar is nu voorlopig niet van toepassing). Mn 2de array heb ik voorlopig al, die is gemaakt voor 6 potjes en 3 Romeinen die meedoen.
Nu krijg ik steeds een verkeerd uitkomst, dus ik uit alle macht maar debuggen, ben ik erachter gekomen dat hij bij vanaf p=5 ipv dit
dit
doorloopt.
Als ik alle waarden van mn 2de array print krijg ik dit:
De eerste waarde is de waarde voordat de waarde verandert(moet worden) en de 2de waarde nadat het verandert is. Zoals je ziet verandert de waarde van [1][5] en [1][6] niet.
Mijn vraag is, waarom zegt hij dat [1][5] 0 is, en toch de verkeerde If() doorloopt?
De Romeinen hadden een spelletje met muntjes, te weten sestertii.
Er staan een heleboel lege potjes op een rij en de eerste Romein
die langskomt gooit in elk potje een sestertius. Daarna komt de
tweede Romein die haalt uit alle even potjes het muntje. De
potjes zijn genummerd van 1 t/m n, waarbij n het laatste potje is.
De nummering is opeenvolgend. Dan komt de 3e romein en gaat alle
potjes die een veelvoud van drie zijn na, en als er een muntje
inligt dan pakt hij dat, en als er geen muntje inligt dan doet hij
er een in. Dus hij pakt het muntje uit potje 3 en doet dat in potje 6.
Daarna pakt hij het muntje uit potje 9 en doet dat in potje 12, enzovoort.
De vierde Romein doet hetzelfde voor alle potjes met als nummer een
viervoud. Nadat er n Romeinen zijn geweest, in hoeveel potjes ligt
er dan een muntje? Kan je ook een rij maken van X-en en O-en waarbij
een X staat voor wel een munt, en O voor geen munt?
Nu wil ik dat doen door een 2d array te maken(is nu nog van statische grootte, later breid ik dit uit zodat het van dynamische grootte wordt, maar is nu voorlopig niet van toepassing). Mn 2de array heb ik voorlopig al, die is gemaakt voor 6 potjes en 3 Romeinen die meedoen.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| unsigned int nP, nR; cout<<"Hoeveel potjes staan er?\n"; cin>>nP; cout<<"Hoeveel Romeinen doen er mee?\n"; cin>>nR; int Matrix[6+1][3+1]; int counter=0; for(int i=0; i<(7); i++) { for(int j=0; j<(4); j++) { Matrix[i][j] = 0; cout<<Matrix[i][j]<<" "; counter++; } } cout<<endl<<counter<<endl; for(int r=1; r<=nR; r++) { for(int p=r; p<=nP; p += r) { if((Matrix[r-1][p]) == 0) { cout<<"["<<r-1<<"]["<<p<<"] = "<<Matrix[r-1][p]<<endl; (Matrix[r][p]) = 1; cout<<"["<<r<<"]["<<p<<"] = "<<Matrix[r][p]<<endl; } else if((Matrix[r-1][p]) == 1) { cout<<"["<<r-1<<"]["<<p<<"] = "<<Matrix[r-1][p]<<endl; (Matrix[r][p]) = 0; cout<<"["<<r<<"]["<<p<<"] = "<<Matrix[r][p]<<endl; } else cout<<"Er is iets foutgegaan\n"; if(p == nP) { for(int h=1; h<=nP; h++) { Matrix[r+1][h] = Matrix[r][h]; } } } } |
Nu krijg ik steeds een verkeerd uitkomst, dus ik uit alle macht maar debuggen, ben ik erachter gekomen dat hij bij vanaf p=5 ipv dit
C++:
1
2
3
4
| if((Matrix[r-1][p]) == 0) { ...... } |
dit
C++:
1
2
3
4
| if((Matrix[r-1][p]) == 1) { ...... } |
doorloopt.
Als ik alle waarden van mn 2de array print krijg ik dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| [1][1] = 0 [1][1] = 1 [1][2] = 0 [1][2] = 1 [1][3] = 0 [1][3] = 1 [1][4] = 0 [1][4] = 1 [1][5] = 0 [1][5] = 0 [1][6] = 0 [1][6] = 0 |
De eerste waarde is de waarde voordat de waarde verandert(moet worden) en de 2de waarde nadat het verandert is. Zoals je ziet verandert de waarde van [1][5] en [1][6] niet.
Mijn vraag is, waarom zegt hij dat [1][5] 0 is, en toch de verkeerde If() doorloopt?
[ Voor 31% gewijzigd door Verwijderd op 23-12-2003 14:47 ]