🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
11 messages
11 total messages Started by TRAX Fri, 16 May 2003 07:55
hier ben ik weer :(
#5242
Author: TRAX
Date: Fri, 16 May 2003 07:55
39 lines
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 :(
#5247
Author: Roel Schroeven
Date: Fri, 16 May 2003 08:59
51 lines
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 :(
#5248
Author: TRAX
Date: Fri, 16 May 2003 09:37
23 lines
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 :(
#5249
Author: Roel Schroeven
Date: Fri, 16 May 2003 09:46
35 lines
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 :(
#5254
Author: TRAX
Date: Fri, 16 May 2003 11:16
24 lines
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 :(
#5256
Author: TRAX
Date: Fri, 16 May 2003 12:29
7 lines
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 :(
#5258
Author: Roel Schroeven
Date: Fri, 16 May 2003 13:09
35 lines
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 :(
#5259
Author: TRAX
Date: Fri, 16 May 2003 13:21
34 lines
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 :(
#5260
Author: Roel Schroeven
Date: Fri, 16 May 2003 13:40
29 lines
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 :(
#5261
Author: TRAX
Date: Fri, 16 May 2003 15:07
30 lines
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 :(
#5262
Author: Roel Schroeven
Date: Fri, 16 May 2003 15:27
43 lines
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