Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [C++] Zit er een 6 of 9 in een int (https://forum.scholieren.com/showthread.php?t=695759)

Dr HenDre 20-12-2003 13:25

[C++] Zit er een 6 of 9 in een int
 
Ik heb een kort vraagje, hoe kan ik kijken of er een 6 of een 9 in een bepaalde int zit?

Screaming Slave 20-12-2003 13:35

Code:

#include <stdlib.h>
#include <string>

std::string blaat (itoa(de_int));

bool bZesOfNegen = (blaat.find('6') != basic_string::npos) ||
(blaat.find('9') != basic_string::npos);

zoiets :p hier staan btw vast wel een paar slordigheidsfoutjes in.

Dr HenDre 20-12-2003 13:51

hoezo basic_string::npos?

Screaming Slave 20-12-2003 13:53

da's een constante (die per implementatie van de c++ standaard kan verschillen) die gereturned wordt als find niks vindt. dus als het niet zo als dat find.6 niks vindt óf find.9, dan wordt die boolean variable true (als het goed is :p)

Dr HenDre 20-12-2003 14:05

char * itoa ( int value, char * buffer, int radix );

het wordt dus opgeslagen in een char/char array. bij een string krijg je een error
Code:

#include <iostream>
#include <stdlib.h>
#include <string>


using namespace std;

int main()
{
    cout <<"De eerste 200 getallen die deelbaar zijn door 78\n";
    unsigned long counter=1;
    string stringbuffer[200];
    int i=0;
    while(i<200)
    {
        if(counter%78 == 0)
        {
               
                itoa(counter, stringbuffer[i], 10);
               
                if(bool bZesOfNegen = (stringbuffer[i].find('6') != basic_string::npos) ||
                  (stringbuffer[i].find('9') != basic_string::npos))
                {
                  i++;
                }
        }
       
        counter++;
    }
   
    for(i=0; i<200; i++)
    {
        cout<<stringbuffer[i]<<" ";
    }
   
    cout<<endl;
    system("pause");
    return 0;
}

cannot convert `std :: string' to `char*
over de regel, itoa(counter, stringbuffer[i], 10);

Screaming Slave 20-12-2003 14:08

je moet het dus ook tijdelijk opslaan in een char array, niet in een stringbuffer.

daarna maak je er een string van met de char* constructor, waarin je vervolgens kunt gaan find-en.

Dr HenDre 20-12-2003 14:11

Citaat:

Screaming Slave schreef op 20-12-2003 @ 15:08:
je moet het dus ook tijdelijk opslaan in een char array, niet in een stringbuffer.

daarna maak je er een string van met de char* constructor, waarin je vervolgens kunt gaan find-en.

kan je char gewoon casten naar een string. Volgens mij niet of wel?

Screaming Slave 20-12-2003 14:13

als je een char array hebt die char_array heet, maak je als volgt er een string string_uit_char_array van.

Code:

std::string string_uit_char_array(char_array);
(std::string heeft een char* constructor)

Dr HenDre 20-12-2003 14:21

string_uit_char_array undeclared

heb je may be msn, voeg me toe @ drhendre@hotmail.com

Dr HenDre 20-12-2003 15:34

keej, ik heb effe zitten puzzelen, en dit heb ik nu

Code:

#include <iostream>
#include <stdlib.h>
#include <string>


using namespace std;

int main()
{
    cout <<"De eerste 200 getallen die deelbaar zijn door 78\n";
    unsigned long counter=1;
    unsigned long buffer[200];
    char charbuffer[50];
    int i=0;
    while(i<200)
    {
        if(counter%78 == 0)
        {
               
                itoa(counter, charbuffer, 10);
                string string_uit_buffer(charbuffer);
                if((string_uit_buffer.find("6",0) == string::npos) ||
                  (string_uit_buffer.find("9",0) == string::npos))
                {
                  buffer[i]=counter;
                  i++;
                }
        }
       
        counter++;
    }
    cout<<i<<endl<<endl;
   
    for(i=0; i<200; i++)
    {
        cout<<buffer[i]<<" ";
    }
   
    cout<<endl;
    system("pause");
    return 0;
}


met syntax highlithing
http://www.rafb.net/paste/results/v2946342.html

maar dit werkt niet..... :(
terwijl het andersom wel werkt, als ik string_uit_buffer.find("6",0) == string::npos) verander in string_uit_buffer.find("6",0) != string::npos) Dan krijg ik juist alle getallen MET een 6 of 9

char * buffer 20-12-2003 17:28

owk, never mind, heb het al opgelost :D

[edit]
ow ik ben trouwens Dr HenDre
[/edit]

McMotion 20-12-2003 23:27

Citaat:

Screaming Slave schreef op 20-12-2003 @ 14:35:
Code:

#include <stdlib.h>
#include <string>

std::string blaat (itoa(de_int));

bool bZesOfNegen = (blaat.find('6') != basic_string::npos) ||
(blaat.find('9') != basic_string::npos);

zoiets :p hier staan btw vast wel een paar slordigheidsfoutjes in.

hehehe :D(y)

McMotion 20-12-2003 23:40

ik gebruik er zelf altijd een zelfgemaakte functie voor maar ik weet niet of het de snelste manier is.. hij werkt iig erg goed!

Code:

#define SIX 6
#define NINE 9

typedef enum {SIXORNINE_SIX, SIXORNINE_NINE, SIXORNINE_OTHER} SIXORNINE;

SIXORNINE investigateSixOrNineValuedInt(int iValue) {
  int iIterator, iCounter = 0;
  SIXORNINE returnValue;
  assert(SIX!=NINE);
  for(iIterator=0;iIterator<iValue;iIterator++) {
    iCounter++;
    if(iCounter>NINE) break;
  }
  if ((iCounter!=SIX)&&(iCounter!=NINE)) {
    returnValue=SIXORNINE_OTHER;
  }
  else {
    returnValue=(iCounter==SIX?SIXORNINE_SIX:SIXORNINE_NINE);
  }
  return returnValue;
}


Screaming Slave 21-12-2003 00:38

Citaat:

McMotion schreef op 21-12-2003 @ 00:27:
hehehe :D(y)
wa :p? klopt vrij aardig, altijd paar argjes bij itoa vergeten (had ff geen zin om std headers op te zoeken :o).

verder houd ik niet zo van het wiel opnieuw uitvinden, zoals jouw code bv doet :p

McMotion 21-12-2003 01:41

Citaat:

Screaming Slave schreef op 21-12-2003 @ 01:38:
wa :p? klopt vrij aardig, altijd paar argjes bij itoa vergeten (had ff geen zin om std headers op te zoeken :o).

verder houd ik niet zo van het wiel opnieuw uitvinden, zoals jouw code bv doet :p

niks wiel opnieuw uitvinden :) bij die code van mij is de performance veel beter :D

Screaming Slave 21-12-2003 02:21

uh, performance beter? doubtful. meestgebruikte implementaties van c++ standard library (gcc, bcc, vc) zijn erg efficiënt, dus waarom die niet gewoon gebruiken :|

poeplelijke assert erin, defines staan 5 regels erboven :p

talentje :evil:

McMotion 21-12-2003 14:43

waarom een lelijke assert? :confused:

McMotion 21-12-2003 14:44

en ja hoor, de STL van vc is érg efficient ;)

Screaming Slave 21-12-2003 14:58

Citaat:

McMotion schreef op 21-12-2003 @ 15:43:
waarom een lelijke assert? :confused:
Citaat:

poeplelijke assert erin, defines staan 5 regels erboven
d.w.z, hij slaat niet echt ergens op.

McMotion 21-12-2003 15:40

Citaat:

Screaming Slave schreef op 21-12-2003 @ 15:58:
d.w.z, hij slaat niet echt ergens op.
je gaat me toch niet vertellen dat je de vraag uit de topic of jouw antwoord wel ergens op vindt slaan :rolleyes:

Screaming Slave 21-12-2003 15:44

Citaat:

McMotion schreef op 21-12-2003 @ 16:40:
je gaat me toch niet vertellen dat je de vraag uit de topic of jouw antwoord wel ergens op vindt slaan :rolleyes:
wat zever je nou, dumbass ? :| maargoed, adios.

McMotion 21-12-2003 18:03

Citaat:

Screaming Slave schreef op 21-12-2003 @ 16:44:
wat zever je nou, dumbass ? :| maargoed, adios.
ik zever niet, lees de topic maar eens door! HenDre maakt een geintje, jij gaat daarop in, ik ga daar weer op in en jij zeikt me tot de grond toe af :) en dan doet het er nog niet eens toe wie er gelijk heeft en wie niet

Screaming Slave 21-12-2003 18:33

:confused:

waar heb je het in godsnaam over kerel?

khad dr hendre al geholpen via msn :|

McMotion 21-12-2003 18:50

hmm ok ik zie het al :D ik dacht dat hendre een geintje maakte.. in de topic staat "Zit er een 6 of 9 in een int" en ik dacht dus dat hij bedoelde hoe je kan kijken of een int een 6 of een 9 is :) nu begrijp ik het.. hij wil weten of het teken '6' of '9' in de string representatie van een int zit :D

Dr HenDre 21-12-2003 18:59

Ik heb het dankzij Screaming Slave opgelost. Dit is mijn oplossing:

Code:

#include <iostream>
#include <stdlib.h>
#include <string>


using namespace std;

int main()
{
    cout <<"De eerste 200 getallen die deelbaar zijn door 78\n";
    unsigned long counter=1;
    unsigned long buffer[200];
    char charbuffer[50];
    int i=0;
    while(i<200)
    {
        if(counter%78 == 0)
        {
               
                itoa(counter, charbuffer, 10);
                string string_uit_buffer(charbuffer);
                if((string_uit_buffer.find("6",0) == string::npos) &&
                  (string_uit_buffer.find("9",0) == string::npos))
                {
                  buffer[i]=counter;
                  i++;
                }
        }
       
        counter++;
    }
    cout<<i<<endl<<endl;
   
    for(i=0; i<200; i++)
    {
        cout<<buffer[i]<<" ";
    }
   
    cout<<endl;
    system("pause");
    return 0;
}


Screaming Slave 21-12-2003 19:05

Citaat:

McMotion schreef op 21-12-2003 @ 19:50:
...
duh. misverstandje, ken gebeuren, zullen we maar zeggen :p

McMotion 21-12-2003 20:28

yup :bloos:

eddie 22-12-2003 07:57

kan het hele opzoeken niet sneller dmv een bitand?

Code:

int zoekgetal = 9, maal = 10, getal = 9;

while( zoekgetal & getal != zoekgetal && zoekgetal <= getal)
{
  zoekgetal *= maal;
}

if( zoekgetal <= getal )
{
  // blaat... een 9 gevonden
}
else
{
  //blaat... geen 9 gevonden
}

Maar ik kan het fout hebben hoor...
[edit]
idd... ik heb het fout :o
[/edit]

G.T.C. 22-12-2003 09:57

Citaat:

eddie schreef op 22-12-2003 @ 08:57:
kan het hele opzoeken niet sneller dmv een bitand?

Code:

bla bla bla
Maar ik kan het fout hebben hoor...
[edit]
idd... ik heb het fout :o
[/edit]

nee, zo zou ik het ook gedaan hebben hoor. Maar ja...ze waren allemaal zo moeilijk aan het doen dat ik zoiets had van, ik zal maar niet reageren als groentje in de c taal ;)

Maar ja.....je werkt met integers. Dan kan je net zo goed gewoon effe 2 if statement maken die kijkt of het tussen de 5 en de 7 ligt, of tussen de 8 en de 10.

eddie 22-12-2003 10:01

Citaat:

G.T.C. schreef op 22-12-2003 @ 10:57:
nee, zo zou ik het ook gedaan hebben hoor. Maar ja...ze waren allemaal zo moeilijk aan het doen dat ik zoiets had van, ik zal maar niet reageren als groentje in de c taal ;)

Maar ja.....je werkt net integers. Dan kan je net zo goed gewoon effe 2 if statement maken die kijkt of het tussen de 5 en de 7 ligt, of tussen de 8 en de 10.

Het probleem is dat binair niet zo werkt.

9 kan
90 kan ook
900 kan ook
maar 198 werkt niet. en er zit toch echt een 9 in...

G.T.C. 22-12-2003 10:02

Citaat:

eddie schreef op 22-12-2003 @ 11:01:
Het probleem is dat binair niet zo werkt.

9 kan
90 kan ook
900 kan ook
maar 198 werkt niet. en er zit toch echt een 9 in...

ohww op die fiets.....jah, zo had ik het niet begrepen. Dan is die bitand idd wel een goed idee (y)

eddie 22-12-2003 10:08

Citaat:

G.T.C. schreef op 22-12-2003 @ 11:02:
ohww op die fiets.....jah, zo had ik het niet begrepen. Dan is die bitand idd wel een goed idee (y)
Alleen werkt die bitand dus niet :p
binair, of liever hexadecimaal, gaat tot 16 decimaal.
Dan zou je bij 19 decimaal al in de problemen komen.
Code:

9d = 9h  = 0000 1001b
19d = 13h = 0001 0011b

Waar ligt (binair) de 9?

McMotion 22-12-2003 12:56

voor datgene dat hendre wil maken, maakt het niet uit of de uitvoering nou 1 of 2 milliseconden duurt... en eerst converteren naar een string is wel veel leesbaarder

ik begrijp alleen niet zo waarom hendre's probleem zo ingewikkeld moet worden opgelost... moet het perse met dit algoritme voor school ofzo? anders kan je toch veel beter dit doen als je de eerste 200 getallen deelbaar door 78 wil weergeven?

Code:

#include <iostream>

int main(int argc, char *argv[])
{
    int I;

    cout << "De eerste 200 getallen die deelbaar zijn door 78" >> endl;
    for (I = 0; I < 200; I++)
    {
        cout << I * 78 << " ";
    }
    cout << endl;

    return 0;
}

als ik het weer niet goed begrepen heb.. mijn excuses :) dan zal ik me er voor de rest van de topic buiten houden ;)

Screaming Slave 22-12-2003 12:57

tafelvan78.cpp :D

Dr HenDre 22-12-2003 15:15

ja de eerste 200 getallen die deelbaar zijn door 78 is geen probleem, maar het probleem ligt meer in dat de getallen géén 6 óf 9 mogen bevatten vanwege een engels grapje ;)

Why is the 6 afraid of the 7?
Spoiler


Ik heb nu trouwens iets uitdagenders.

Dit is de opdr8 waar ik al een 2 dagen mee aan het puzzelen ben.

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 genummerd1 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?

Het probleem is hoe maak ik een 2de array met een dynamische groote. Een gewone array lukt wel, maar bij 2d krijg ik een error van mn compiler.

voor een gewone array met dynamische grootte doe ik
Code:

int * dArray;
dArray = new int [size];

maar dit werkt dan niet
Code:

int * dArray;
dArray = new int [size1][size2];


eddie 22-12-2003 18:57

Citaat:

Dr HenDre schreef op 22-12-2003 @ 16:15:
*verhaaltje*
Dus er komen evenveel Romeinen langs als dat er potten zijn.

Je kan trouwens malloc e.d. gebruiken voor dynamische geheugen toewijzing.

Dr HenDre 22-12-2003 19:22

Citaat:

eddie schreef op 22-12-2003 @ 19:57:
Dus er komen evenveel Romeinen langs als dat er potten zijn.

Je kan trouwens malloc e.d. gebruiken voor dynamische geheugen toewijzing.

volgens het verhaaltje wel, maar dat wil ik dus niet, ik wil gewoon dat je kan opgeven hoeveel Roemeinen er zijn en hoeveel potjes je hebt. Wordt het net íets uitdagender (y).

En malloc, hmm het is nog een C-style (tog) maar ik zal er effe naar kijken, maar geheugentoewijzen en pointers enzo dat is niet mn sterkste punt... ;)

Ok, ik heb effe malloc bekeken. Stel ik wil een 2d array maken met malloc. Werkt dat dan ong zo

Code:

int * dArray;
dArray = (int*)malloc((nP*sizeof(int))*(nR*sizeof(int)));

Dan heb ik wel het geheugen gealloceerd, maar hoe kan ik daar dingen in opslaan netzoals ik dat in een array doe? Moet ik dan het geheugen direct aanspreken of kan ik op de een of andere manier werken met indexen netzoals bij array's. Want daar kan ik nergens informatie over vinden...

eddie 22-12-2003 19:33

Citaat:

Dr HenDre schreef op 22-12-2003 @ 20:22:
volgens het verhaaltje wel, maar dat wil ik dus niet, ik wil gewoon dat je kan opgeven hoeveel Roemeinen er zijn en hoeveel potjes je hebt. Wordt het net íets uitdagender (y).
Zolang je maar zorgt dat er niet meer Romeinen zijn dan potten ;)

eddie 22-12-2003 19:55

Citaat:

Dr HenDre schreef op 22-12-2003 @ 20:22:

Dan heb ik wel het geheugen gealloceerd, maar hoe kan ik daar dingen in opslaan netzoals ik dat in een array doe? Moet ik dan het geheugen direct aanspreken of kan ik op de een of andere manier werken met indexen netzoals bij array's. Want daar kan ik nergens informatie over vinden...

Dat weet ik ook niet meer... Is al lang geleden voor mij.

Trouwens, hier kun je het programmatje dat ik net heb gemaakt nav jou verhaaltje van de Romeinen bekijken, geschreven in FoxPro.
Als het goed is heb je niet de 7 MB aan dll's nodig die FoxPro zo graag wilt. Maar dat weet ik niet. Laat het even weten :)

Dr HenDre 22-12-2003 19:58

Citaat:

eddie schreef op 22-12-2003 @ 20:55:
Dat weet ik ook niet meer... Is al lang geleden voor mij.

Trouwens, hier kun je het programmatje dat ik net heb gemaakt nav jou verhaaltje van de Romeinen bekijken, geschreven in FoxPro.
Als het goed is heb je niet de 7 MB aan dll's nodig die FoxPro zo graag wilt. Maar dat weet ik niet. Laat het even weten :)

mjah, geen zin om nu te downloaden, maar het gaat me dus meer om de bron dan om het te hebben....

dll's heb je wel nodig (n) :(

eddie 22-12-2003 20:01

Citaat:

Dr HenDre schreef op 22-12-2003 @ 20:58:
mjah, geen zin om nu te downloaden, maar het gaat me dus meer om de bron dan om het te hebben....
Ik dacht al... ik ben iets vergeten :D

http://www.divinity-universe.nl/downloads/romein.prg
Nu heb ik wel jouw huiswerk lopen maken.. maarja. Voor één keer maakt mij dat niet zoveel uit ;)

Dr HenDre 22-12-2003 20:02

Citaat:

eddie schreef op 22-12-2003 @ 21:01:
Ik dacht al... ik ben iets vergeten :D

http://www.divinity-universe.nl/downloads/romein.prg
Nu heb ik wel jouw huiswerk lopen maken.. maarja. Voor één keer maakt mij dat niet zoveel uit ;)

dis mn huiswerk niet, dis gewoon hobby.... :cool:

eddie 22-12-2003 20:07

Citaat:

Dr HenDre schreef op 22-12-2003 @ 20:58:
dll's heb je wel nodig (n) :(
:eek:
Voor een bestandje van 25Kb heb je 7 MB aan dll's nodig? Jemig, wat slecht!
*zoekt in help van FoxPro*

Dr HenDre 22-12-2003 20:09

Citaat:

eddie schreef op 22-12-2003 @ 21:07:
:eek:
Voor een bestandje van 25Kb heb je 7 MB aan dll's nodig? Jemig, wat slecht!
*zoekt in help van FoxPro*

Hoezo 7Mb? Misshien dat ik ze allemaal al heb op 1 na. Hij vraagt naar 1 dll, misshien dat ie om de volgende vraagt als ik deze heb maar goed... :p

Screaming Slave 23-12-2003 00:23

ieuw, malloc, wat ontzettend niet-c++ van jullie :nono:

eddie 23-12-2003 10:44

Citaat:

Dr HenDre schreef op 22-12-2003 @ 21:09:
Hoezo 7Mb? Misshien dat ik ze allemaal al heb op 1 na. Hij vraagt naar 1 dll, misshien dat ie om de volgende vraagt als ik deze heb maar goed... :p
Helaas.
In de help staat dat elke exe 2 support dll's nodig heeft, te weten Vfp8r.dll en Vfp8renu.dll. En laten deze 2 samen nu toevallig 5.19 MB zijn. (ok, 7 MB was wat overdreven...)

Dr HenDre 23-12-2003 12:50

Citaat:

Screaming Slave schreef op 23-12-2003 @ 01:23:
ieuw, malloc, wat ontzettend niet-c++ van jullie :nono:
hoe moet je anders dynamisch geheugen alloceren?

Screaming Slave 23-12-2003 12:51

Citaat:

Dr HenDre schreef op 23-12-2003 @ 13:50:
hoe moet je anders dynamisch geheugen alloceren?
new :)

Dr HenDre 23-12-2003 12:52

Citaat:

Screaming Slave schreef op 23-12-2003 @ 13:51:
new :)
werkt dus niet :)
Code:

int *dArray;
dArray = new int[size1][size2];

werkt dus niet

Screaming Slave 23-12-2003 12:53

tuurlijk werkt dat niet.

int * dArray kan niet gebruikt worden als 2-dimensionale array, afaik.


Alle tijden zijn GMT +1. Het is nu 06:17.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.