Vraag & Antwoord

Programmeren

C++ Vraagje

6 antwoorden
  • ik ben net begonnen met C++ en ik moet zeggen heel erg leuk, nu probeer ik het mijzelf aan te leren en daarvoor heb ik een boek uit de bieb gehaald en na een hoofdstuk theorie staan er allemaal oefeningetjes in maar geen oplossingen. Mijn probleem, ik kom dus niet uit een van die vragen in het boek. De bedoeling is het volgende, je moet een geheel getal invoeren en van dat ingevoerde getal moeten de laatste twee getallen opgetelt worden. bv 28957897259[u:6190e90eba]87[/u:6190e90eba] (invoer) --> inlezen --> 8 + 7 --> uitvoer --> 15 Nu ben ik zelf al bezig geweest maar ik kom er niet uit. als ik cin >> invoer doe dan leest ie ineens het hele getal dus dacht ik doe ik dit [code:1:6190e90eba] #include <iostream> using namespace std; int main() { char invoer[20]; int i, getal, laatste, enerlaatste, uitvoer; for (getal=1; getal < 20; getal ++) // max 20 getallen { cin.get(invoer[getal]); if(invoer[getal] == '\n') break; // loopt er een te ver door } laatste = invoer[getal - 1]; // terug ascii --> integer enerlaatste = invoer[getal - 2]; uitvoer = laatste + enerlaatste; cout << "uitvoer = " << uitvoer << endl; return 0; } [/code:1:6190e90eba] Maar dit gaat verkeerd waarschijnlijk omdat ie de ascii waardes bij elkaar opteld en niet de werkelijke waardes. Nu kan ik met mijn beetje C++ kennis het "if" commando en een ascii tabel het waarschijnlijk wel voor elkaar krijgen maar dit moet toch makkelijker kunnen lijkt mij. Wie kan mij helpen, volgens mij ben ik veel te moeilijk bezig. Alvast bedankt voor de oplossing. thefly
  • Om van een ASCII-getal een gewoon getal te maken moet je er 48 vanaf halen. Je moet de regels waarin je laatste en enerlaatste vaststelt veranderen in[code:1:18e3cc0316]laatste=invoer[getal-1]-48; enerlaatste=invoer[getal-2]-48;[/code:1:18e3cc0316]
  • [quote:81bd48b3d8="thefly"]ik ben net begonnen met C++ en ik moet zeggen heel erg leuk, nu probeer ik het mijzelf aan te leren en daarvoor heb ik een boek uit de bieb gehaald en na een hoofdstuk theorie staan er allemaal oefeningetjes in maar geen oplossingen. Mijn probleem, ik kom dus niet uit een van die vragen in het boek. De bedoeling is het volgende, je moet een geheel getal invoeren en van dat ingevoerde getal moeten de laatste twee getallen opgetelt worden. bv 28957897259[u:81bd48b3d8]87[/u:81bd48b3d8] (invoer) --> inlezen --> 8 + 7 --> uitvoer --> 15 Nu ben ik zelf al bezig geweest maar ik kom er niet uit. als ik cin >> invoer doe dan leest ie ineens het hele getal dus dacht ik doe ik dit [code:1:81bd48b3d8] #include <iostream> using namespace std; int main() { char invoer[20]; int i, getal, laatste, enerlaatste, uitvoer; for (getal=1; getal < 20; getal ++) // max 20 getallen { cin.get(invoer[getal]); if(invoer[getal] == '\n') break; // loopt er een te ver door } [/code:1:81bd48b3d8] [/quote:81bd48b3d8] een array begint altijd bij 0 tellen [code:1:81bd48b3d8] if (invoer[getal-1] == '\n') break; [/code:1:81bd48b3d8] [quote:81bd48b3d8="thefly"] [code:1:81bd48b3d8] laatste = invoer[getal - 1]; // terug ascii --> integer enerlaatste = invoer[getal - 2]; [/code:1:81bd48b3d8] [/quote:81bd48b3d8] Er bestaat ook nog een functie atoi(...) Wellicht dien je ook nog te controleren of er wel minstens twee karakters zijn ingevoerd. [quote:81bd48b3d8="thefly"] [code:1:81bd48b3d8] uitvoer = laatste + enerlaatste; cout << "uitvoer = " << uitvoer << endl; return 0; } [/code:1:81bd48b3d8] [/quote:81bd48b3d8]
  • [quote:bbd693b201="h4xX0r"][quote:bbd693b201="thefly"][code:1:bbd693b201] #include <iostream> using namespace std; int main() { char invoer[20]; int i, getal, laatste, enerlaatste, uitvoer; for (getal=1; getal < 20; getal ++) // max 20 getallen { cin.get(invoer[getal]); if(invoer[getal] == '\n') break; // loopt er een te ver door } [/code:1:bbd693b201] [/quote:bbd693b201] een array begint altijd bij 0 tellen [code:1:bbd693b201] if (invoer[getal-1] == '\n') break; [/code:1:bbd693b201] [/quote:bbd693b201]getal is hier niet de lengte van de string, dus de code was goed. Dat wil zeggen: als cin.get een enkele karakter invult. Maar dan moet de for-loop wel met nul beginnen. [quote:bbd693b201="h4xX0r"][quote:bbd693b201="thefly"] [code:1:bbd693b201] laatste = invoer[getal - 1]; // terug ascii --> integer enerlaatste = invoer[getal - 2]; [/code:1:bbd693b201] [/quote:bbd693b201] Er bestaat ook nog een functie atoi(...) Wellicht dien je ook nog te controleren of er wel minstens twee karakters zijn ingevoerd. [/quote:bbd693b201]De functie atoi kan van een string een getal maken. Als je dit wilt gebruiken kun je de getallen bij elkaar optellen door [code:1:bbd693b201]#include <stdlib.h> //Voor atoi #include <iostream.h> int main(int argc, char *argv[]) { int getal; char invoer[20]; short uitvoer; cin >> invoer; getal=atoi(invoer); uitvoer=(getal%10)+(getal%100)/10; cout << "uitvoer = " << uitvoer << endl; }[/code:1:bbd693b201]Het %-teken betekend modulo, oftewel rest bij deling. Let er verder op dat een int een maximum heeft van ongeveer 2 miljard. Indien dit niet genoeg is moet je een groter type nemen, maar wel een die niet afrond.
  • Thnx voor alle info ik heb de - 48 oplossing gebruikt en dit is de code geworden. [code:1:88315dab3b] #include <iostream> using namespace std; int main() { char invoer[20]; int getal, laatste, enerlaatste, uitvoer; cout << "Voer een Geheel getal in :" ; for (getal=1; getal < 20; getal ++) // max 20 getallen, tellen begint bij 1 { cin.get(invoer[getal]); if(invoer[getal] == '\n') break; // loopt er een te ver door } if(getal > 2) // minimaal 2 getallen invoeren { laatste = invoer[getal - 1] - 48; // terug ascii --> integer enerlaatste = invoer[getal - 2] - 48; uitvoer = laatste + enerlaatste; cout << "uitvoer = " << uitvoer << endl; } else cout << "het getal is te klein" << endl; return 0; } [/code:1:88315dab3b] Hij checkt nu ook of er wel 2 getallen zijn ingevoerd De opmerking over een array begint te tellen bij 0 dacht ik Met deze regel : for ([b:88315dab3b]getal=1[/b:88315dab3b]; getal < 20; getal ++) veranderd te hebben, nu begint ie toch bij 1 te tellen en niet bij 0 of zie ik dat nou verkeerd. De opmerking die ik er beschreef over dat ie er een tever door loopt, kwam omdat na het laatste ingelezen cijfer de for loop nog een keer het getal met 1 verhoogd en dan pas '\n' vindt en met 'break' de 'for' loop stopt. het getal is er dus eigenlijk 1 te hoog. De atoi(...) functie snap ik nog niet helemaal maar in mijn boek gaan ze later pas op de functie in zag ik, maar iedergeval bedankt voor het voorbeeld. THNX voor alle hulp nu kan ik vanavond weer rustig slapen, want het irriteerde mij dat ik er niet uit kwam.
  • [quote:2702c56008="thefly"]Thnx voor alle info ik heb de - 48 oplossing gebruikt en dit is de code geworden. [code:1:2702c56008] #include <iostream> using namespace std; int main() { char invoer[20]; int getal, laatste, enerlaatste, uitvoer; cout << "Voer een Geheel getal in :" ; for (getal=1; getal < 20; getal ++) // max 20 getallen, tellen begint bij 1 { cin.get(invoer[getal]); if(invoer[getal] == '\n') break; // loopt er een te ver door } if(getal > 2) // minimaal 2 getallen invoeren { laatste = invoer[getal - 1] - 48; // terug ascii --> integer enerlaatste = invoer[getal - 2] - 48; uitvoer = laatste + enerlaatste; cout << "uitvoer = " << uitvoer << endl; } else cout << "het getal is te klein" << endl; return 0; } [/code:1:2702c56008] Hij checkt nu ook of er wel 2 getallen zijn ingevoerd De opmerking over een array begint te tellen bij 0 dacht ik Met deze regel : for ([b:2702c56008]getal=1[/b:2702c56008]; getal < 20; getal ++) veranderd te hebben, nu begint ie toch bij 1 te tellen en niet bij 0 of zie ik dat nou verkeerd. [/quote:2702c56008]Je zet karakters in een array. De array begint bij 0, en eindigd in zit geval bij 19. Nu je bij 1 begint gebruik je het eerste adres (invoer[0]) niet. Je gebruikt ook - en terecht - 20 niet omdat er 'getal [b:2702c56008]<[/b:2702c56008] 20' staat. Hierdoor moet je trouwens ook de vergelijking met het aantal ingevoerde letters veranderen in '>= 2', omdat getal=2 in principe ook mag.[quote:2702c56008="thefly"]De opmerking die ik er beschreef over dat ie er een tever door loopt, kwam omdat na het laatste ingelezen cijfer de for loop nog een keer het getal met 1 verhoogd en dan pas '\n' vindt en met 'break' de 'for' loop stopt. het getal is er dus eigenlijk 1 te hoog. De atoi(...) functie snap ik nog niet helemaal maar in mijn boek gaan ze later pas op de functie in zag ik, maar iedergeval bedankt voor het voorbeeld. THNX voor alle hulp nu kan ik vanavond weer rustig slapen, want het irriteerde mij dat ik er niet uit kwam.[/quote:2702c56008]

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.