Thread: Q: C++ Rekenmachine
-
05-03-2005, 18:27 #1
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
GreetzCode:/* 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; }no votes
-
-
05-03-2005, 18:36 #2
Je laatste statement van een case moet een "break;" zijn als je niet wil dat de volgende gevallen worden uitgevoerd.
no votes
-
05-03-2005, 19:16 #3
k, ty, da werkt nu al, nu nog een verklaring voor de vreemde oplossingen :-/
no votes
-
05-03-2005, 19:25 #4Member
- 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: Dijkstrano votes
-
05-03-2005, 19:29 #5Crew Member
- 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
Elke moegelijkheid moet ge hard afsluiten (mbv break). Een switch-case is ook de enige plaats waar ge in principe een break; moogt gebruiken.Code:switch() { case 1: doSomething(); break; case 2: doSomething(); break; default: doSomething(); break; }
Als ge geen break; gebruikt gaat die doorgaan, dus bvb
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.Code:switch(antwoord) { case 'J': case 'j': actionYes(); break; case 'N': case 'n': actionNo(); break; default: actionNo(); break; }Vanaf nu gaan we verder op BeyondGaming!
In deze thread wordt uitgelegd hoe je jouw account kan migreren.no votes
-
05-03-2005, 21:19 #6
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 breakno votes
-
06-03-2005, 11:45 #7Member
- Registered
- 30/09/02
- Location
- Mariakerke
- Posts
- 554
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/2
no votes
-
06-03-2005, 22:08 #8
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 Sowellno votes
-
07-03-2005, 08:28 #9
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
-
07-03-2005, 14:14 #10Member
- Registered
- 17/07/02
- Location
- PSPACE
- Posts
- 4,603
- iTrader
- 14 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/18
Only art and science can and try to change the world, therefore paying millions to useless sportsmen is sheer idiocy.
The man, the legend: Dijkstrano votes
-
07-03-2005, 14:23 #11Member
- Registered
- 07/09/03
- Posts
- 140
- iTrader
- 0
- Mentioned
- 0 Post(s)
no votes
-
07-03-2005, 14:39 #12Member
- Registered
- 04/12/04
- Posts
- 23
- iTrader
- 0
- Mentioned
- 0 Post(s)
no votes
-
07-03-2005, 18:26 #13
??? Waarom dat, zou stom zijn om de cpu nog eens 1000 keer te laten loopen om niets te doen....
no votes
-
07-03-2005, 18:35 #14Crew Member
- 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
-
07-03-2005, 21:06 #15Member
- 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
bad programming
