Multidesk.be » Forums » C en C++ » aantal gelezen getallen (gesloten)

Helpinformatie
Dit onderwerp bevindt zich in het archief.
Het is bijgevolg niet mogelijk er nog op te reageren.
  • Pagina
  • [1]
  • 2
  • RSS
  • Eerste ongelezen reactie
  • Plaats een reactie
  • Abonneer mij
  • Onderwerp sluiten
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door Badco op donderdag 26 april 2007 om 16:11:01.
Badco heeft nog geen avatar toegevoegd
Multiviteit: 3
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Wie kan me helpen?
ik moet de volgende opdracht maken:

schrijf een programma dat een rij gehele getallen leest, afgesloten door een willekeurige niet-numerieke code , bijvoorbeeld het woord STOP. bepaal hoeveel verschillende getallen ingelezen worden. het aantal gelezen getallen is onbeperkt, maar er zullen maximaal 10 verschillende getallen aangeboden worden. (worden er meer dan 10 verschillende getallen aangeboden, dan moet een foutmelding gegeven worden en mag het programma direckt stoppen...
^ Reactie #1 geschreven door thekid op donderdag 26 april 2007 om 17:05:54.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
C++ gepruts :D

NightCreature zal het wel beter kunnen opstellen :D
CODE
  1.  
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <string.h>
  5.  
  6. using namespace std;
  7.  
  8. class AantalVerschillen
  9. {
  10.       private:
  11.               int max;
  12.               int* getallenReeks;
  13.               int count;
  14.              
  15.               bool hasNumber(int a)
  16.               {
  17.                    bool retValue = false;
  18.                    for (int x = 0; x < count; x++)
  19.                        if (getallenReeks[x] == a)
  20.                           retValue = true;
  21.                    return retValue;
  22.               }
  23.              
  24.       public:
  25.              AantalVerschillen(int Maximaal)
  26.              {
  27.                max = Maximaal;
  28.                getallenReeks = new int[max];
  29.                count = 0;
  30.              }
  31.              
  32.              bool add(int a)
  33.              {
  34.                   bool retValue = false;
  35.                   if (!hasNumber(a))
  36.                      {
  37.                       if (count < max)
  38.                       {
  39.                          getallenReeks[count] = a;
  40.                          count++;
  41.                          retValue = true;
  42.                       }
  43.                      }
  44.                   return retValue;
  45.              }
  46.              
  47.              int Count()
  48.              {
  49.                  return count;
  50.              }
  51. };
  52.  
  53. AantalVerschillen test(10);
  54.  
  55. int main(int argc, char *argv[])
  56. {
  57.     test.add(-1);
  58.     test.add(50);
  59.     test.add(5);
  60.     test.add(10);
  61.     test.add(9);
  62.     test.add(-11);
  63.     test.add(50);
  64.     test.add(5);
  65.     test.add(11);
  66.     test.add(9);
  67.     test.add(-1);
  68.     test.add(0);
  69.     test.add(45);
  70.     test.add(103);
  71.     test.add(90);
  72.     printf("Er zitten momenteel %d verschillende getallen in de testklasse!\n\n", test.Count());
  73.     system("PAUSE");
  74.     return EXIT_SUCCESS;
  75. }
  76.  
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #2 geschreven door NightCreature op donderdag 26 april 2007 om 17:15:53.
NightCreature's avatar
Multiviteit: 1196
MSc.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Dit zal niet compileren doordat je
bool add(int a)
{
bool retValue = false;
if (!hasNumber)
{

hasNumber aanroept zonder parameter, functie call moet kloppen
Zal er over een uur nog eens naar kijken en mijn eigen implementatie plaatsen, ben klaar met werken dan
Deze tekst werd het laatst bewerkt voor 4.41 % door NightCreature op donderdag 26 april 2007 om 17:16:43.
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
^ Reactie #3 geschreven door thekid op donderdag 26 april 2007 om 17:17:22.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
eila, er is weeral tekst gedisappeared

mja, het is eigenlijk hasNumber ( a ) maar als ja dienen ( a ) zonder spaties zet ziet ie het als smiley en verdwijnt da uit de code regels, grrrrr martijn ;) ;)

*edit*
want het compileerde wel degelijk :D
Deze tekst werd het laatst bewerkt voor 10.57 % door thekid op donderdag 26 april 2007 om 17:17:54.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #4 geschreven door een gast op donderdag 26 april 2007 om 18:23:29.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Hi alvast bedankt.
deze werkt wel.maar als ik het goed begrijp moet de gebruiker de getallen zelf invoeren....zou u die ook kunnen maken???
^ Reactie #5 geschreven door Badco op donderdag 26 april 2007 om 18:49:17.
Badco heeft nog geen avatar toegevoegd
Multiviteit: 3
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
hoi
ja,die wat u maakte werkt wel. maar de gebruiker moet zelf de getalen invoeren....wie kan me daarmee helpen??????
THNX!!!!!
^ Reactie #6 geschreven door thekid op donderdag 26 april 2007 om 19:21:32.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
ja, ik zou het zeker kunnen, maar aangezien het voor een (school)opdracht is, wil ik het ook niet volledig opschrijven, hé ;)

waar heb je juist nog problemen mee? ik denk dat je meer zult leren door te zeggen wat je zelf al hebt en dat wij kunnen helpen met oplossen dan gewoon klakkeloos een oplossing van ons in te geven ;)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #7 geschreven door een gast op donderdag 26 april 2007 om 21:07:04.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
hey maak je niet druk
geef die oplossing gewoon jo
is wel een moeilijke opdracht, ik zou het ook niet zo een twee drie kunnen hoor....
^ Reactie #8 geschreven door thekid op vrijdag 27 april 2007 om 03:37:40.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
enfin

't is toch op een "originele" manier opgelost, dus mja, hieronder dus implementatie. Mocht iemand enig idee hebben hoe ik beter kan controleren of een string infeite een getal is of alfanumeriek, laat maar komen

CODE
  1.  
  2. #include <cstdlib>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. class AantalVerschillen
  8. {
  9.       private:
  10.               int* getallen;
  11.               int max;
  12.               int count;
  13.               bool hasNumber(int number)
  14.               {
  15.                    bool retValue = false;
  16.                    for (int x = 0; x < count; x++)
  17.                        if (number == getallen[x])
  18.                           retValue = true;
  19.                    return retValue;
  20.               }
  21.              
  22.       public:
  23.               enum Status
  24.               {
  25.                    kanToevoegen = 0,
  26.                    eindeProgramma = 1,
  27.                    maximumOverschreden = 2
  28.               };
  29.              AantalVerschillen(int max);
  30.              void add(int number);
  31.              Status currentState() { return state; };
  32.              void stop() { state = eindeProgramma; }
  33.              int Count() { return count; }
  34.              
  35.       private:
  36.               Status state;
  37. };
  38.  
  39. AantalVerschillen::AantalVerschillen(int max)
  40. {
  41.        this->max = max;
  42.        this->state = kanToevoegen;
  43.        this->count = 0;
  44.        this->getallen = new int[max];
  45. }
  46.  
  47. void AantalVerschillen::add(int number)
  48. {
  49.        if (!hasNumber(number) && currentState() == kanToevoegen)
  50.        {
  51.           this->getallen[this->count++] = number;
  52.           if (this->count >= this->max)
  53.              this->state = maximumOverschreden;
  54.        }
  55. }
  56.  
  57. AantalVerschillen test(10);
  58.  
  59. int main(int argc, char *argv[])
  60. {
  61.     char* input;
  62.     while (test.currentState() == test.kanToevoegen)
  63.     {
  64.         cout << "Geef een getal op, om te eindigen, geef stop op!\n\t:";
  65.         cin >> input;
  66.         try
  67.         {
  68.             char* q = input + '1';
  69.             if (std::atoi(q) != std::atoi(input))
  70.             {
  71.                 int getal = std::atoi(input);
  72.                 test.add(getal);
  73.             }
  74.             else test.stop(); // geen numerieke waarde
  75.         }
  76.         catch (exception ex)
  77.         {
  78.             // algemene fout
  79.             printf("Er is een fout gebeurd!\n");
  80.             test.stop();
  81.         }
  82.     }
  83.     if (test.currentState() == test.eindeProgramma)
  84.        printf("Er zitten momenteel %d verschillende getallen in de getallenreeks!\n\n", test.Count());
  85.     else
  86.        printf("U hebt teveel verschillende getallen opgegeven!\n\n");
  87.     system("PAUSE");
  88.     return EXIT_SUCCESS;
  89. }
  90.  
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #9 geschreven door NightCreature op vrijdag 27 april 2007 om 11:21:46.
NightCreature's avatar
Multiviteit: 1196
MSc.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Ok alles wat je met new aan maakt moet je aan het einde van je programma delete anders lekt je programma geheugen als een mandje. Dit is een van de dingen die in c/c++ belangrijk zijn om te wete. Dus voeg een deconstructor toe, C++ zal er zelf voor zorgen dat deze wordt aangeroepen als je programma beeindigt.
This is niet verplicht maakt het wel makkelijker om te lezen.
if (!hasNumber(number) && currentState() == kanToevoegen)
{
this->getallen[this->count++] = number;
if (this->count >= this->max)
this->state = maximumOverschreden;
}

eerst die check doen dan pas toevoegen. C/C++ heeft geen arrayindex checking als je over de maximum waarde heen gaat schrijft hij nog steeds dat getal weg maar als daar een andere variabele van je programma staat overschrijft hij deze gewoon, op passen dus

Klasse in main aanmaken aub anders heb je een globale variabele en die wil je zo veel mogelijk vermijden in iedere programmeer taal.
Deze tekst werd het laatst bewerkt voor 7.17 % door NightCreature op vrijdag 27 april 2007 om 11:26:15.
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
^ Reactie #10 geschreven door thekid op vrijdag 27 april 2007 om 12:00:59.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
dank u voor de tips. Ge ziet, in .net neemt de garbage collector alles weg, dus ik ben niet gewoon om daarachter te kijken :D

Van die arraycheck, ja, 't is waar, de check moet ervoor komen om alles op te vangen, maar 't is enkel wanneer met max <= 0 zou zijn dat die fout zou gebeuren zekers? als ik gewoon in de constructor max op minimumwaarde van 1 zou zetten indien kleiner dan 1 dan zou ik die fout sowieso nooit tegenkomen ;) :D

ja, die globale variabele, 't is waar, ook akkoord, 't was een vergetelheidje ;)
Heb je trouwens een betere manier om te controleren of de input een alfanumerieke waarde is dan mijn manier? Omdat ik weet dat een alfanumerieke waarde met een std::atoi(alfa) == 0 oplevert heb ik da 1tje toegevoegd erna indien std::atoi("a") == 0 en std::atoi("a" + '1') == 0 gelijk is dan is het sowieso alfa numeriek, maar 'k hoopte toch dat er iets beter bestaat dan isdigit(char*, locale) want da leverde constant fouten op bij mij :D
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #11 geschreven door NightCreature op vrijdag 27 april 2007 om 14:20:31.
NightCreature's avatar
Multiviteit: 1196
MSc.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Ja daar was ik ook al over na aan het denken. Er moet een manier zijn om via een while lus steeds cin.getline te doen en dan te kijken of het geen je ophaalt niet in een set van letters zit. Maar ik weet niet zo snel hoe je dit precies zou uit moeten programmeren
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
^ Reactie #12 geschreven door thekid op vrijdag 27 april 2007 om 14:28:50.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
zou dit niet op te lossen zijn dmv reguliere expressies, de input testen tov van een test expressie die enkel true retourneert indien er enkel een getal is ingevoerd?
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #13 geschreven door NightCreature op zaterdag 28 april 2007 om 14:13:24.
NightCreature's avatar
Multiviteit: 1196
MSc.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
ja dat kan maar reg ex(reguliere expressies) is niet iets dat C++ standaard ondersteunt
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
^ Reactie #14 geschreven door een gast op dinsdag 1 mei 2007 om 02:31:34.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
heren,
ik heb de code gedownload, maar ik krijg een fout bij het runnen....
^ Reactie #15 geschreven door thekid op dinsdag 1 mei 2007 om 19:31:35.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid

Dixit

Dixit Gast op 01/05/2007 02:31:34:

heren,
ik heb de code gedownload, maar ik krijg een fout bij het runnen....


Oja, daar weten we veel mee ;) een foutmelding of op welk lijnnr de fout is gebeurd is natuurlijk ook handig ;)

allé, ik ga het bestandje nog hier als bijlage plaatsen, deze werkte bij mij met Bloodshed C++ en de standaard gebruikte C/C++ compiler die bij deze tool zit


Bijlage: a1078fbbd57c395c7a1d27b4aa775484.zip
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #16 geschreven door een gast op woensdag 2 mei 2007 om 03:36:08.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
ja sorry:) de fout verschijnt na het runnen,de instruktie voor een getal invoeren verschijnt.voer je een getal in, daarna op enter voor de volgende, dan gebeurt het..

project.exe raised exception class eaccessviolation with message 'access violation at adres 0040f124. write of adres 7c809eff'.process stopped.use step or run to continue

deze teks boven verschijnt dan....

wat gaat fout????
^ Reactie #17 geschreven door NightCreature op woensdag 2 mei 2007 om 10:55:30.
NightCreature's avatar
Multiviteit: 1196
MSc.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Dat betekent dat je moet gaan debuggen. Kan niet zomaar zeggern wat er mis gaat ik krijg die fout niet als ik de exe run.

@the kid:
is mooier in een klasse om alle public en private methods en variabelen bij elkaar te houden. Is slechts een afspraak hoor voor de rest zoals ik al zei ziet er goed uit
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
^ Reactie #18 geschreven door een gast op woensdag 2 mei 2007 om 22:05:41.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
hallo,
ok,maar hoe debug je dan precies??
:)
^ Reactie #19 geschreven door Simon op woensdag 2 mei 2007 om 22:16:59.
Simon's avatar
Multiviteit: 3742
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Debuggen is eigenlijk gewoon je code overlopen en de bugs eruit halen :).
Je kan dit doen door eventuele variabelen te outputten en te kijken of ze opgevuld zijn of bestaan, door slechts sommige delen van je code te laten runnen door de rest in commentaar te zetten, ...
Je overloopt gewoon je programma en gaat stap voor stap na wat wat doet en kijkt of het allemaal klopt :).
  • Pagina
  • [1]
  • 2
  • RSS
  • Eerste ongelezen reactie
  • Plaats een reactie
  • Abonneer mij
  • Onderwerp sluiten