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.
^ Reactie #20 geschreven door thekid op woensdag 2 mei 2007 om 22:41:28.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Met welke compiler werk je eigenlijk? als ik het tweede stuk code uitvoer dan is er geen probleem. De exe die ik in bijlage meegaf werkt ook, voor zover ik weet bij Nightcreature en bij mij.

Welk getal geef je op waardoor het crashed, of wat voer je in?
Heb je iets gewijzigd aan de code?

Je moet ook iets van info geven, hé ;) Er kan eigenlijk niet zoveel in misgaan, behalve de array check die enkel kan voorkomen indien test(10) veranderd wordt in test(0) (wat bij mij zelfs geen fout gaf :D), het kan ook zijn dat uwen compiler wat stricter is.

En als laatste, als je al zoiets moet maken voor school moet je toch al iets meer kunnen van programmeren dan da je gij hier aantoont te kunnen, hé, je moet ook zelf wat moeite doen ;)
"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 #21 geschreven door een gast op woensdag 2 mei 2007 om 23:04:12.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
nou,
dat debuggen lukt me niet.
maar betekend het dat een ieder die deze code download en runt, dezelfde foutmelding krijgt, of heeft het met mijn computer ofzo te maken????
^ Reactie #22 geschreven door thekid op woensdag 2 mei 2007 om 23:10:35.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
met welke software run je het project, en werkt de exe die in mijn bijlage zat ook niet, ofwel?

ik ben bijna bang om 2 vragen op een rij te stellen
"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 #23 geschreven door een gast op woensdag 2 mei 2007 om 23:15:06.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
ja,de exe van u werk wel..
met borland cbuilder versie 3.1
^ Reactie #24 geschreven door thekid op woensdag 2 mei 2007 om 23:18:26.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
aha dank u, enig idee waar deze te downloaden valt (freeware natuurlijk), ik heb geen ervaring met cbuilder, maar wie weet heeft Nightcreature hier meer ervaring mee.

ik zal eens kijken of ik er iets mee aan kan vangen.
Mag ik eventueel weten welke kennis jullie in principe al moeten hebben van C++ en in voor welk platform? het blijft toch console gericht hé?
"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 #25 geschreven door een gast op woensdag 2 mei 2007 om 23:21:12.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
nou ik zou niet weten waar die software te vinden is.....
we werken uit een boek, LEEN AMMERAAL C++
^ Reactie #26 geschreven door thekid op donderdag 3 mei 2007 om 00:52:35.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
enfin, ik heb ondertussen wat met het programma'tje zitten experimenteren, en allé, wel nog een paar foutjes gevonden, en ik moet zeggen, als ik mijn try / catch weghaal dat het spellementje direct crashed na ingave van een nieuw getal

ik heb dan maar nen hoop dingen veranderd, en weer op mijn eigen getrouwe manier gaan werken, door gewoonweg zelf mijn functies te kijken voor numeriek controle, en om te zetten naar numerieke waarde (hoewel het natuurlijk heel erg rudimentair is en verre van zo performant als de stl functies, maar who cares, ik ben niet degene die het moet indienen)

Ik heb het trouwens ook met doubles geschreven ipv met integers, ik wilde nl graag weten of mijn na de komma getallen ook werkten, 0 zorgt er nu trouwens ook niet meer voor om het programma te stoppen, en een deconstructor in de AantalVerschillen klasse kuist de allocatie nu ook op van de getallenreeks in het geheugen (ik vermoed dat delete[] getallen; in een deconstructor klasse daarvoor genoeg is?)

en voor het gemak heb ik er nog een stuk commentaar bijgezet, en wat voorbeelden van hoe je bvb kunt "debuggen" (staan nu ook als commentaar)

CODE
  1.  
  2. #include <cstdlib>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. class AantalVerschillen
  8. {
  9.       public:
  10.               enum Status
  11.               {
  12.                    kanToevoegen = 0,
  13.                    eindeProgramma = 1,
  14.                    maximumOverschreden = 2
  15.               };
  16.               bool hasNumber(double number)
  17.               {
  18.                    bool retValue = false;
  19.                    for (int x = 0; x < count; x++)
  20.                        if (number == getallen[x])
  21.                           retValue = true;
  22.                    return retValue;
  23.               }
  24.              AantalVerschillen(int max);
  25.              void add(double number);
  26.              Status currentState() { return state; };
  27.              void stop() { state = eindeProgramma; }
  28.              int Count() { return count; }
  29.              void print()
  30.              {
  31.                     printf("Uw array bevat momenteel %d elementen:\n\t", this->Count());
  32.                     for (int x = 0; x < count; x++)
  33.                       cout << "{0:" << getallen[x] << "}\n\t";
  34.                     cout << endl << endl;
  35.              }
  36.              ~AantalVerschillen()
  37.              {
  38.                 delete[] getallen;
  39.              }
  40.              
  41.       private:
  42.               double* getallen;
  43.               int max;
  44.               int count;
  45.               Status state;
  46. };
  47.  
  48. AantalVerschillen::AantalVerschillen(int max)
  49. {
  50.        this->max = (max >= 0) ? max : 0;
  51.        this->state = kanToevoegen;
  52.        this->count = 0;
  53.        this->getallen = new double[this->max];
  54. }
  55.  
  56. void AantalVerschillen::add(double number)
  57. {
  58.        if (!hasNumber(number) && currentState() == kanToevoegen)
  59.        {
  60.           this->getallen[this->count++] = number;
  61.           if (this->count >= this->max)
  62.              this->state = maximumOverschreden;
  63.        }
  64. }
  65.  
  66. bool isNumeric(string var)
  67. {
  68.      int dotCount = 0;
  69.      bool result = true;
  70.      for (int x = 0; x < var.length(); x++)
  71.      {
  72.          // indien alle voorwaarden niet voldoen ->
  73.          if (!(x == 0 && (var[x] == '-' || var[x] == '+' || (var[x] >= 48 && var[x] <= 57)) || (var[x] >= 48 && var[x] <= 57) || ((var[x] == '.' || var[x] == ',') && dotCount == 0)))
  74.          {
  75.                   // debuggen, kijken waar het getal afgekeurt wordt!
  76.                   //cout << endl << endl << var << " is geen numeriek getal door een foutief teken op " << endl << "\tpositie " << x << endl << "\tnl: '" << var[x] << "'" << endl << endl;
  77.                   result = false;
  78.                   break;
  79.          }
  80.          // indien er op de eerste positie een + of - staat is er geen probleem
  81.          // indien de charwaarde groter of gelijk is aan 48 (=0 in ASCII) en kleiner of gelijk aan 57 (=9 in ASCII) is er geen probleem
  82.          // indien de char gelijk is aan het decimale teken (om na de komma te gaan werken ;)) en er staat nog geen decimale separator is er geen probleem
  83.          else
  84.          {
  85.              if (var[x] == '.' || var[x] == ',')
  86.                 dotCount++;
  87.          }
  88.            
  89.      }
  90.      return result;
  91. }
  92.  
  93. // Eigen geschreven functie, er bestaan zeker betere opties voor, internet werkte niet, dus heb ik het maar zo opgelost
  94. double Power(double var, int power)
  95. {
  96.  double result = var;
  97.  for (int x = 1; x < power; x++)
  98.      result *= var;
  99.  return result;
  100. }
  101.  
  102. // Eigen geschreven functie, aangezien std::atoi(const char*) is maar nikskes anders, en ik wil strings gebruiken moet ik het maar zo oplossen
  103. double toNumber(string var)
  104. {
  105.     double result = 0;
  106.     if (isNumeric(var))
  107.     {
  108.        bool isNegative = false;
  109.        int afterComma = 0;
  110.        for (int x = 0; x < var.length(); x++)
  111.        {
  112.            if (var[x] == '-')
  113.             isNegative = true;
  114.            if (var[x] == ',' || var[x] == '.')
  115.             afterComma = 1;
  116.            if (var[x] >= 48 && var[x] <= 57)
  117.            {
  118.               if (afterComma == 0) // nog geen decimaal teken gevonden
  119.                result = result * 10 + (var[x] - 48);
  120.               else
  121.               { // wel een decimaal teken gevonden, het cijfer delen door 10 tot de macht aantal tekens na de komma
  122.                result += (var[x] - 48) / Power(10, afterComma);
  123.                // volgende positie na de komma instellen
  124.                afterComma++;
  125.               }
  126.            }
  127.        }
  128.        // indien het negatief symbool gevonden werd, resultaat vermenigvuldigen met -1
  129.        if (isNegative)
  130.           result *= -1;
  131.     }
  132.     // debuggen ;)
  133.     // cout << endl << "Transformatie van " << var << " naar " << result << endl;
  134.     return result;
  135. }
  136.  
  137. int main(int argc, char *argv[])
  138. {
  139.     // testklasse aanmaken, maximaal 10 verschillende getallen zijn toegelaten
  140.     AantalVerschillen test(10);
  141.  
  142.     // herhaal ingave zolang er mag toegevoegd worden aan test
  143.     while (test.currentState() == test.kanToevoegen)
  144.     {
  145.         string input;
  146.         cout << "Geef een getal op, om te eindigen, geef stop op!\n\t:";
  147.         cin >> input;
  148.        
  149.         // kijken of input een numeriek getal is
  150.         if (isNumeric(input))
  151.         {
  152.             // getal omzetten naar een double waarde
  153.             double getal = toNumber(input);
  154.             // en proberen toe te voegen in de reeks, de klasse zoekt dan uit of het getal een nieuwe getal is, of als deze al bestaat
  155.             // indien de klasse teveel getallen heeft (zie initialisatie testklasse) wordt de status ook automatisch aangepast
  156.             test.add(getal);
  157.         }
  158.         // alfanumerieke waarde of foutieve invoer van een getal gebeurt, vraag de klasse om het programma te beëindigen
  159.         else test.stop();
  160.     }
  161.     // controleer wat er net gebeurd is
  162.     if (test.currentState() == test.eindeProgramma)
  163.        printf("Er zitten momenteel %d verschillende getallen in de getallenreeks!\n\n", test.Count());
  164.     else
  165.        printf("U hebt teveel verschillende getallen opgegeven!\n\n");
  166.     // debuggen, kijken wat de inhoud van de getallenreeks is om te zien of er inderdaad geen fouten gebeurt zijn
  167.     // test.print();
  168.     system("PAUSE");
  169.     return EXIT_SUCCESS;
  170. }
  171.  


ik hoop dat het probleem nu niet meer gebeurd, en dat het nu wel werkt op dienen cbuilder ;) Als het niet werkt, gebruik die debuggers, haal het commentaar ervanweg, en kijk welke uitvoer je krijgt

in bijlage dan maar nog eens het projectje

Bijlage: 0d4126af0d234a6e43d4c896541fda4d.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 #27 geschreven door NightCreature op donderdag 3 mei 2007 om 13:51:41.
NightCreature's avatar
Multiviteit: 1196
MSc.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
IK wag me niet meer aan de C++Builder of Delphi van Borland heb altijd al ruzie met deze compilers gehad. Werk alleen nog maar met Bloodshed(is eigenlijk gewoon gcc met een ide)(al is dat ook al lang geleden) en Visual Studio(.NET 2003 en 2005)
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 #28 geschreven door NightCreature op donderdag 3 mei 2007 om 13:52:24.
NightCreature's avatar
Multiviteit: 1196
MSc.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
IK wag me niet meer aan de C++Builder of Delphi van Borland heb altijd al ruzie met deze compilers gehad. Werk alleen nog maar met Bloodshed(is eigenlijk gewoon gcc met een ide)(al is dat ook al lang geleden) en Visual Studio(.NET 2003 en 2005)
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 #29 geschreven door thekid op donderdag 3 mei 2007 om 16:38:11.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Mja, ie zal wel van school uit verplicht zijn om deze software te gebruiken vermoed ik. Ik hoop dat mijn implementatie wel werkt op zijnen cbuilder.

Is de gast die hier eigenlijk steeds antwoord ook de TopicStarter?

@NightCreature:
is een delete[] getallen genoeg in een deconstructor om de toegewezen ruimte opnieuw op te ruimen, of mis ik dan nog iets?
"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 #30 geschreven door NightCreature op vrijdag 4 mei 2007 om 15:32:48.
NightCreature's avatar
Multiviteit: 1196
MSc.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Ja als ik het goed heb is dat je enige new in het programma.
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)
  • Pagina
  • <
  • 1
  • [2]
  • RSS
  • Eerste ongelezen reactie
  • Plaats een reactie
  • Abonneer mij
  • Onderwerp sluiten