Page 1 of 2 12 Last
  1. #1
    FRozEN_FRoST's Avatar
    Registered
    14/07/03
    Posts
    1,147
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0

    Q: C++ Rekenmachine

    Nadak de 5 eerste lessen van Cprogramming.com heb gedaan, en tijdens die lessen enkele voorbeelde had gemaakt, wou ek nu es alles van die lessen samengieten in een eigen projectje; een rekenmachine. Enkele dage gelede haddek et al es geprobeerd, maar toen bleefek maar foutmeldingen krijge, en nu hebbek et nekeer van 0 herschreven en zijn de foutmeldingen eruit, maar klopt het programma langs geen kanten.

    Het begint goed, de gebruiker moet ingeve offem +,-,*,/ wil doen, en dan de twee getallen ingeve. Achteraf wordt er ook gevraagd of em opnieuw wilt (j) of niet (n), en da werkt ook, maar 't probleem zit bij de berekeningen zelf. Hij geeft een totaal verkeerd getal weer, en alsek + ingeef, doetem zowel + en -, alsek min ingeef - en *, en alsek * ingeef doetem * en /, in de volgorde van de code dus. Beetje te vreemd om het uit te leggen, moeste jullie es wille zien wa het probleem is, da zou heel vriendelijk zijn

    Code:
    /* Rekenmachine
    5 maart 2005
    Bruno Moorthamers */
    
    #include <iostream>
    
    using namespace std;
    
    int add(int x, int y)   // Functie declareren
    {
      return x + y;
    }
    
    int mul(int x, int y)   // Functie declareren
    {
      return x * y;
    }
    
    int sub(int x, int y)   // Functie declareren
    {
      return x - y;
    }
    
    int divi(int x, int y)  // Functie declareren
    {
      return x / y;
    }
    
    int main()
    {
    	char berekening;	// Welke berekening wil de gebruiker doen?
    	int x, y;		   // De twee getallen die gebruikt worden voor de berekening.
    	char opnieuw[1];	// Wil de gebruiker een nieuwe berekening maken?
    	
    	do
    	{
    		  cout << "Wilt u optellen(+), aftrekken(-), vermenigvuldigen(*) of delen(/)?\n";
    		  cin >> berekening;
    		  
    		  switch(berekening)
    		  {
    		  case '+':
    			   cout << "Welke twee getallen wilt u optellen?\n";
    			   cin >> x, y;
    			   cin.ignore();
    			   cout << "De uitkomst is: " << add(x, y) << ".\n";
    		  case '-':
    			   cout << "Welke twee getallen wilt u aftrekken?\n";
    			   cin >> x, y;
    			   cin.ignore();
    			   cout << "De uitkomst is: " << sub(x, y) << ".\n";
    		  case '*':
    			   cout << "Welke twee getallen wilt u vermenigvuldigen?\n";
    			   cin >> x, y;
    			   cin.ignore();
    			   cout << "De uitkomst is: " << mul(x, y) << ".\n";
    		  case '/':
    			   cout << "Welke twee getallen wilt u delen?\n";
    			   cin >> x, y;
    			   cin.ignore();
    			   cout << "De uitkomst is: " << divi(x, y) << ".\n";
    		  }
    		  
    		  cout << "Wilt u een nieuwe berekening maken (j) of niet (n)?\n";
    		  cin >> opnieuw[1];
    		  
    	}
    	while(opnieuw[1] == 'j');
    	cin.get();
    
    	return 0;
    }
    Greetz
    no votes  

  2. #2

    Registered
    10/12/04
    Posts
    58
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Je laatste statement van een case moet een "break;" zijn als je niet wil dat de volgende gevallen worden uitgevoerd.
    no votes  

  3. #3
    FRozEN_FRoST's Avatar
    Registered
    14/07/03
    Posts
    1,147
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    k, ty, da werkt nu al, nu nog een verklaring voor de vreemde oplossingen :-/
    no votes  

  4. #4
    QplQyer's Avatar
    Registered
    17/07/02
    Location
    PSPACE
    Posts
    4,603
    iTrader
    14 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/18
    Voor wat gebruik je eigenlijk een array voor die opnieuw als je er maar 1 char insteekt?
    Only art and science can and try to change the world, therefore paying millions to useless sportsmen is sheer idiocy.
    The man, the legend: Dijkstra
    no votes  

  5. #5
    Tyfius's Avatar
    Registered
    01/09/02
    Location
    Peutie
    Posts
    7,664
    iTrader
    0
    Mentioned
    4 Post(s)
    Reputation
    13/105
    simpel
    normaal zou uwe tut da moeten uitgelegd hebben
    Code:
    switch() {
     case 1:
      doSomething();
      break;
     case 2:
      doSomething();
      break;
     default:
      doSomething();
      break;
    }
    Elke moegelijkheid moet ge hard afsluiten (mbv break). Een switch-case is ook de enige plaats waar ge in principe een break; moogt gebruiken.

    Als ge geen break; gebruikt gaat die doorgaan, dus bvb
    Code:
    switch(antwoord) {
     case 'J':
     case 'j':
      actionYes();
      break;
     case 'N':
     case 'n':
      actionNo();
      break;
     default:
      actionNo();
      break;
    }
    Hier gaat gij dus kijken, als 'antwoord' == 'J', dan verder gaan tot als hij een functie tegenkomt (in dit geval actionYes(); en na deze functie de switch-case beeindigen.
    Vanaf nu gaan we verder op BeyondGaming!
    In deze thread wordt uitgelegd hoe je jouw account kan migreren.
    no votes  

  6. #6
    MasterOfTerror's Avatar
    Registered
    17/07/02
    Location
    -
    Posts
    1,234
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/2
    eigenlijk toch wel een ingewikkeld script.. kan toch veel simpeler, maar kom

    bij switch moet je idd na iedere case een break hebben
    en dan op het einde van je case's een default waarde met ernaa break
    Elder Scrolls Online: @Epothon

    Website: http://www.mathiasdecru.be
    no votes  

  7. #7

    Registered
    30/09/02
    Location
    Mariakerke
    Posts
    554
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    2/2
    Quote Originally Posted by MasterOfTerror
    This quote is hidden because you are ignoring this member. Show
    eigenlijk toch wel een ingewikkeld script.. kan toch veel simpeler, maar kom

    bij switch moet je idd na iedere case een break hebben
    en dan op het einde van je case's een default waarde met ernaa break
    Wat is er zo ingewikkeld aan dat script? Ik zie niet hoe je het veel eenvoudiger zou kunnen maken. (buiten die char die em in een array van 1 lang steekt dan)
    no votes  

  8. #8
    wlibaers's Avatar
    Registered
    18/07/02
    Posts
    2,279
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Quote Originally Posted by Tyfius
    This quote is hidden because you are ignoring this member. Show
    Elke moegelijkheid moet ge hard afsluiten (mbv break). Een switch-case is ook de enige plaats waar ge in principe een break; moogt gebruiken.
    Break kan ook in loops gebruikt worden, om uit de loop te raken voordat hij op de normale manier eindigt.

    Voor een voorbeeld van een meer geavanceerde rekenmachine kan je eens in "The C++ Programming Language" (Stroustrup) gaan kijken.
    "If you have a right to respect, that means other people don't have a right to their own opinions."
    Thomas Sowell
    no votes  

  9. #9
    Ollie's Avatar
    Registered
    27/07/02
    Posts
    644
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Ik begrijp niet dat jij geen runtime errors krijgt als ik zie hoe jij je opnieuw array gebruikt. Array indices beginnen vanaf 0 en niet vanaf 1.
    no votes  

  10. #10
    QplQyer's Avatar
    Registered
    17/07/02
    Location
    PSPACE
    Posts
    4,603
    iTrader
    14 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/18
    Quote Originally Posted by Ollie
    This quote is hidden because you are ignoring this member. Show
    Ik begrijp niet dat jij geen runtime errors krijgt als ik zie hoe jij je opnieuw array gebruikt. Array indices beginnen vanaf 0 en niet vanaf 1.
    Nu je het zegt, dat moet een index out of bounds opleveren inderdaad.
    Only art and science can and try to change the world, therefore paying millions to useless sportsmen is sheer idiocy.
    The man, the legend: Dijkstra
    no votes  

  11. #11

    Registered
    07/09/03
    Posts
    140
    iTrader
    0
    Mentioned
    0 Post(s)
    Quote Originally Posted by QplQyer
    This quote is hidden because you are ignoring this member. Show
    Nu je het zegt, dat moet een index out of bounds opleveren inderdaad.
    C++ geeft geen out of bounds errors geloof ik, maar ge zit wel te rommelen in geheugen dat niet gealloceerd is voor uwen array, kan interessante resultaten geven
    no votes  

  12. #12

    Registered
    04/12/04
    Posts
    23
    iTrader
    0
    Mentioned
    0 Post(s)
    Quote Originally Posted by wlibaers
    This quote is hidden because you are ignoring this member. Show
    Break kan ook in loops gebruikt worden, om uit de loop te raken voordat hij op de normale manier eindigt.
    bad programming
    no votes  

  13. #13
    Silenger.BE's Avatar
    Registered
    18/07/02
    Location
    Ninove
    Posts
    63
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    ??? Waarom dat, zou stom zijn om de cpu nog eens 1000 keer te laten loopen om niets te doen....
    no votes  

  14. #14
    Tyfius's Avatar
    Registered
    01/09/02
    Location
    Peutie
    Posts
    7,664
    iTrader
    0
    Mentioned
    4 Post(s)
    Reputation
    13/105
    dan is uw lus eigelijk fout, break; moet zoveel mogelijk vermeden worden, en de enige correcte plaats waar ge die zou mogen gebruiken is een switch-case.
    Vanaf nu gaan we verder op BeyondGaming!
    In deze thread wordt uitgelegd hoe je jouw account kan migreren.
    no votes  

  15. #15

    Registered
    30/09/02
    Location
    Mariakerke
    Posts
    554
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    2/2
    Als ge een break hebt in een lus, betekend dat meestal dat je een lus hebt die mag uitvoeren totdat er aan een voorwaarde is voldaan. Ipv dan break te gebruiken kan je die voorwaarde in uw while steken, en als je een for hebt gebruikt, betekend dat dat je beter een while zou gebruiken.
    Een break in een lus wordt echt aanzien als een serieuse stijlfout ivm programmeren.
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in