Thread View: be.comp.programming
11 messages
11 total messages
Started by TRAX
Fri, 16 May 2003 07:55
hier ben ik weer :(
Author: TRAX
Date: Fri, 16 May 2003 07:55
Date: Fri, 16 May 2003 07:55
39 lines
2240 bytes
2240 bytes
een merkwaardig probleem, en t'zal weer iets simpel zijn:
void main(){
int rij=2;
int kolom=4;
int getal;
int aantalparen=4;
int *kaartentabel;
kaartentabel=new int [rij, kolom];
int *controletabel;
controletabel=new int[aantalparen];
for (int i=0; i<aantalparen; i++){
controletabel[i]=0;
};
randomize();
for (int i=0; i<rij; i++) {
for (int j=0; j<kolom; j++) {
do {
getal=random(5);
} while (controletabel[getal] >= 2);
controletabel[getal]++;
kaartentabel[i,j]=getal;
}
}
for (int i=0; i<rij; i++) {
cout<<endl;
for (int j=0; j<kolom; j++) {
cout<<kaartentabel[i,j]<<" ";}
}
getch();
}
de code moet een tabel opvullen met random cijfers tussen 0 en 4, doet ie
ook maar blijkbaar neemt hij enkel de 4 laatst gekozen getallen en zet die
in dezelfde volgorde in rij1 en rij2. Met breakpoints heb ik gezien dat hij
wel andere getallen kiest, maar als ik de tabel dan eens laat zien, zijn rij
1 en 2 dezelfde. Iemand die de fout ziet?
--
stijn.verspeet@pandora[delete.this].be
Re: hier ben ik weer :(
Author: Roel Schroeven
Date: Fri, 16 May 2003 08:59
Date: Fri, 16 May 2003 08:59
51 lines
2939 bytes
2939 bytes
TRAX wrote:
> een merkwaardig probleem, en t'zal weer iets simpel zijn:
> void main(){
> int rij=2;
> int kolom=4;
> int getal;
> int aantalparen=4;
> int *kaartentabel;
> kaartentabel=new int [rij, kolom];
> int *controletabel;
> controletabel=new int[aantalparen];
> for (int i=0; i<aantalparen; i++){
> controletabel[i]=0;
> };
> randomize();
> for (int i=0; i<rij; i++) {
> for (int j=0; j<kolom; j++) {
> do {
> getal=random(5);
> } while (controletabel[getal] >= 2);
> controletabel[getal]++;
> kaartentabel[i,j]=getal;
> }
> }
> for (int i=0; i<rij; i++) {
> cout<<endl;
> for (int j=0; j<kolom; j++) {
> cout<<kaartentabel[i,j]<<" ";}
> }
> getch();
> }
>
>
> de code moet een tabel opvullen met random cijfers tussen 0 en 4, doet ie
> ook maar blijkbaar neemt hij enkel de 4 laatst gekozen getallen en zet die
> in dezelfde volgorde in rij1 en rij2. Met breakpoints heb ik gezien dat hij
> wel andere getallen kiest, maar als ik de tabel dan eens laat zien, zijn rij
> 1 en 2 dezelfde. Iemand die de fout ziet?
Zoals al eerder gezegd, 'tabel[i, j]' is niet de manier waarop C en C++
multidimensionele tabellen gebruiken. De juiste manier is 'tabel[i][j]',
en je moet eerst de tabel op de juiste manier aanmaken ook. 'tabel[i,j]'
gebruikt de expressie 'i,j' als index, waarbij de komma de
komma-operator is. Het resultaat van de komma-operator is de waarde van
de tweede expressie, j dus in dit geval. Of, met andere woorden, de
waarde van i speelt helemaal geen rol.
--
"Codito ergo sum"
Roel Schroeven
Re: hier ben ik weer :(
Author: TRAX
Date: Fri, 16 May 2003 09:37
Date: Fri, 16 May 2003 09:37
23 lines
1978 bytes
1978 bytes
> > Zoals al eerder gezegd, 'tabel[i, j]' is niet de manier waarop C en > C++ multidimensionele tabellen gebruiken. De juiste manier is > 'tabel[i][j]', > en je moet eerst de tabel op de juiste manier aanmaken ook. > 'tabel[i,j]' gebruikt de expressie 'i,j' als index, waarbij de komma > de > komma-operator is. Het resultaat van de komma-operator is de waarde > van > de tweede expressie, j dus in dit geval. Of, met andere woorden, de > waarde van i speelt helemaal geen rol. als ik de tabel als volgt aanmaak: int *kaartentabel; kaartentabel[rij][kolom]; krijg ik de error: constant expression required cannot convert int (*)[1] to int* verderop, wanneer ikde tabel dan gebruik: kaartentabel[i][j]; is de error: invalid indirection
Re: hier ben ik weer :(
Author: Roel Schroeven
Date: Fri, 16 May 2003 09:46
Date: Fri, 16 May 2003 09:46
35 lines
2286 bytes
2286 bytes
TRAX wrote: >>Zoals al eerder gezegd, 'tabel[i, j]' is niet de manier waarop C en >>C++ multidimensionele tabellen gebruiken. De juiste manier is >>'tabel[i][j]', >>en je moet eerst de tabel op de juiste manier aanmaken ook. >>'tabel[i,j]' gebruikt de expressie 'i,j' als index, waarbij de komma >>de >>komma-operator is. Het resultaat van de komma-operator is de waarde >>van >>de tweede expressie, j dus in dit geval. Of, met andere woorden, de >>waarde van i speelt helemaal geen rol. > > > als ik de tabel als volgt aanmaak: > int *kaartentabel; > kaartentabel[rij][kolom]; > > krijg ik de error: > constant expression required > cannot convert int (*)[1] to int* > > verderop, wanneer ikde tabel dan gebruik: > kaartentabel[i][j]; > is de error: invalid indirection > > cfr http://groups.google.com/groups?q=g:thl2841073955d&dq=&hl=en&lr=&ie=UTF-8&oe=UTF-8&selm=1rnwa.1395%241u5.221%40afrodite.telenet-ops.be -- "Codito ergo sum" Roel Schroeven
Re: hier ben ik weer :(
Author: TRAX
Date: Fri, 16 May 2003 11:16
Date: Fri, 16 May 2003 11:16
24 lines
2037 bytes
2037 bytes
heb dat veranderd, vector is included
in declaratie van de klasse staat:
int rij, kol;
std::vector< std::vector<int*> > kaartentabel(rij,
std::vector<int*>(kol));
en om de tabel te vullen;
for (int i=0; i<kaartentabel.size(); i++) {
for (int j=0; j<kaartentabel[rij].size(); j++) {
do {
getal=random(5);
} while (controletabel[getal] >= 2);
controletabel[getal]++;
kaartentabel[i][j]=getal;
}
}
nu geeft hij een fout op de eerste for: structure required on left side of .
or .*
tweede for: Member function must be called or its address taken, en: invalid
indirection
grmbl, ben ik nu zo dom? Ik heb nog nooit met vectoren gewerkt dus heb
totaal geen idee wat er fout aan is
Re: hier ben ik weer :(
Author: TRAX
Date: Fri, 16 May 2003 12:29
Date: Fri, 16 May 2003 12:29
7 lines
1514 bytes
1514 bytes
> > std::vector< std::vector<int> > kaartentabel(rij,std::vector<int>(kol)); > > zonder sterretjes. nog altijd dezelfde fout als met pointers
Re: hier ben ik weer :(
Author: Roel Schroeven
Date: Fri, 16 May 2003 13:09
Date: Fri, 16 May 2003 13:09
35 lines
2543 bytes
2543 bytes
TRAX wrote:
> heb dat veranderd, vector is included
>
> in declaratie van de klasse staat:
> int rij, kol;
> std::vector< std::vector<int*> > kaartentabel(rij,
> std::vector<int*>(kol));
>
> en om de tabel te vullen;
> for (int i=0; i<kaartentabel.size(); i++) {
> for (int j=0; j<kaartentabel[rij].size(); j++) {
> do {
> getal=random(5);
> } while (controletabel[getal] >= 2);
> controletabel[getal]++;
> kaartentabel[i][j]=getal;
> }
> }
>
> nu geeft hij een fout op de eerste for: structure required on left side of .
> or .*
> tweede for: Member function must be called or its address taken, en: invalid
> indirection
> grmbl, ben ik nu zo dom? Ik heb nog nooit met vectoren gewerkt dus heb
> totaal geen idee wat er fout aan is
In de tweede for moet staan kaartentabel[i] ipv kaartentabel[rij], maar
dat is niet het probleem.
Heb je #include <vector> gedaan?
--
"Codito ergo sum"
Roel Schroeven
Re: hier ben ik weer :(
Author: TRAX
Date: Fri, 16 May 2003 13:21
Date: Fri, 16 May 2003 13:21
34 lines
2410 bytes
2410 bytes
> Heb je #include <vector> gedaan?
yup, zowel in de header file van de klasse, als in de cpp file met de
methoden.
de vector wordt wel in de header file aangemaakt, is dat misschien het
probleem? Ik heb hem namelijk nodig in verschillende methoden.
#include "memoryklasse.h"
#include <stdlib.h>
#include <strstrea.h>
#include <vector>
memory::memory(int rij, int kol){
this->aantalparen = (rij*kol)/2;
aantalgelinkt=0;
this->rij=rij;
this->kol=kol;
int getal;
int *controletabel;
controletabel=new int[aantalparen];
for (int i=0; i<aantalparen; i++){
controletabel[i]=0;
};
randomize();
for (int i=0; i<kaartentabel.size(); i++) {
for (int j=0; j<kaartentabel[rij].size(); j++) {
do {
getal=random(5);
} while (controletabel[getal] >= 2);
controletabel[getal]++;
kaartentabel[i][j]=getal;
}
}
};
Re: hier ben ik weer :(
Author: Roel Schroeven
Date: Fri, 16 May 2003 13:40
Date: Fri, 16 May 2003 13:40
29 lines
2507 bytes
2507 bytes
TRAX wrote: >>Heb je #include <vector> gedaan? > > > yup, zowel in de header file van de klasse, als in de cpp file met de > methoden. Is niet nodig van dat in allebei te doen; als je hem enkel in de source file nodig hebt zet je hem daar, heb je hem ook in de header nodig zet je hem daar. De header wordt geinclude in de source, samen met alles wat de header include. > de vector wordt wel in de header file aangemaakt, is dat misschien het > probleem? Ik denk het. Het kan wel, maar dan net iets anders. Je kan hem dan enkel declareren, maar nog geen grootte meegeven. Dus je zet in de header file enkel std::vector< std::vector<int> > kaartentabel; en in de constructor kaartentabel.assign(rij, std::vector<int>(kol)); -- "Codito ergo sum" Roel Schroeven
Re: hier ben ik weer :(
Author: TRAX
Date: Fri, 16 May 2003 15:07
Date: Fri, 16 May 2003 15:07
30 lines
2489 bytes
2489 bytes
T'blijft maar duren, de problemen :(
Ik heb dus gedaan wat je zei, en er zijn geen fouten meer, maar nu slaat hij
het opvullen van de tabel over denk ik, vraag mij niet waarom, want er
zitten altijd allemaal nullen in. Ik heb met breakpoints gekeken, en hij
gebruikt het stukje code niet om de tabel op te vullen:
mory::memory(int rij, int kol){
this->aantalparen = (rij*kol)/2;
aantalgelinkt=0;
this->rij=rij;
this->kol=kol;
kaartentabel.assign(rij, std::vector<int>(kol));
int getal;
int *controletabel;
controletabel=new int[aantalparen];
for (int i=0; i<aantalparen; i++){
controletabel[i]=0;
};
randomize();
for (int i=0; i<kaartentabel.size(); i++) {
for (int j=0; j<kaartentabel[rij].size(); j++) {
do {
getal=random(5);
} while (controletabel[getal] >= 2);
controletabel[getal]++;
kaartentabel[i][j]=getal; //hier zette ik mijn breakpoint, en
programma stopte niet, dus code wordt niet uitgevoerd
}
}
};
Re: hier ben ik weer :(
Author: Roel Schroeven
Date: Fri, 16 May 2003 15:27
Date: Fri, 16 May 2003 15:27
43 lines
2809 bytes
2809 bytes
TRAX wrote:
> T'blijft maar duren, de problemen :(
> Ik heb dus gedaan wat je zei, en er zijn geen fouten meer, maar nu slaat hij
> het opvullen van de tabel over denk ik, vraag mij niet waarom, want er
> zitten altijd allemaal nullen in. Ik heb met breakpoints gekeken, en hij
> gebruikt het stukje code niet om de tabel op te vullen:
>
> mory::memory(int rij, int kol){
> this->aantalparen = (rij*kol)/2;
> aantalgelinkt=0;
> this->rij=rij;
> this->kol=kol;
> kaartentabel.assign(rij, std::vector<int>(kol));
> int getal;
> int *controletabel;
> controletabel=new int[aantalparen];
> for (int i=0; i<aantalparen; i++){
> controletabel[i]=0;
> };
> randomize();
> for (int i=0; i<kaartentabel.size(); i++) {
> for (int j=0; j<kaartentabel[rij].size(); j++) {
i ipv rij
> do {
> getal=random(5);
> } while (controletabel[getal] >= 2);
> controletabel[getal]++;
> kaartentabel[i][j]=getal; //hier zette ik mijn breakpoint, en
> programma stopte niet, dus code wordt niet uitgevoerd
> }
> }
> };
>
>
>
--
"Codito ergo sum"
Roel Schroeven
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads