Hallo,
Als hobby pas (weer) begonnen met C++ en maak daarvoor gebruik van visual studio 2017 en deze website waarvan onderstaande link meteen opgave 3 toont waar mijn vraag over gaat :
http://www.ronkes.nl/oldprogrammeren/oefeningen8.html
Ik probeer het zo kort mogelijk te houden met hierna mijn broncode.
Ik begrijp namelijk niet goed waarom de parameter int ivUitkomst in de functie Machtsverheffen niet verandert, ondanks de for-lus eronder die deze parameter wijzigt.
Als de functie zn bewerking heeft gedaan en terugspringt naar main() krijg ik namelijk niet de gewijzigde waarde van ivUitkomst maar de beginwaarde ervan, dus van voordat de functie werd aangeroepen.
Lastig dit onder woorden te brengen maar heb mn best gedaan.
Hopelijk maakt de broncode duidelijker :
ik heb op iedere regel breakpoints gezet en integer variabele ivUitkomst veranderde prima mee totdat die terugkwam in main waarna die weer zn beginwaarde aannam. Mijn vraag is nu , waar gebeurt dat dan precies en waarom behoudt ivUitkomst niet zn laatste waarde na de berekening in de for-lus ?
Overigens heb ik het inmiddels zelf goed gekregen, maar dat verklaart (mij) nog niet waarom bovenstaande niet werkt.
Vrijwel zelfde code maar dan iets anders :
Alvast bedankt voor een antwoord
Aangaande dit topic, van mij mogen anderen die ook C++ beginnersvragen hebben dit topic gebruiken om hun eigen vraag/opmerking te stellen.
Als hobby pas (weer) begonnen met C++ en maak daarvoor gebruik van visual studio 2017 en deze website waarvan onderstaande link meteen opgave 3 toont waar mijn vraag over gaat :
http://www.ronkes.nl/oldprogrammeren/oefeningen8.html
Ik probeer het zo kort mogelijk te houden met hierna mijn broncode.
Ik begrijp namelijk niet goed waarom de parameter int ivUitkomst in de functie Machtsverheffen niet verandert, ondanks de for-lus eronder die deze parameter wijzigt.
Als de functie zn bewerking heeft gedaan en terugspringt naar main() krijg ik namelijk niet de gewijzigde waarde van ivUitkomst maar de beginwaarde ervan, dus van voordat de functie werd aangeroepen.
Lastig dit onder woorden te brengen maar heb mn best gedaan.
Hopelijk maakt de broncode duidelijker :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
| /* 3. Schrijf een functie die een grondtal en een exponent(beide gehele getallen) als parameters meekrijgt en hiermee een machtsverheffing uitvoert. Gebruik voor de berekening van het antwoord een for - lus. Schrijf de onderstaande unit test voor de functie : - een specifiek geval(bijvoorbeeld 3^5 = 243) */ #include<iostream> using namespace std; int ivGrondtal; int ivExponent; int ivUitkomst; // functie machtsverheffen int Machtsverheffen( int ivGrondtal, int ivUitkomst) { for (int i = 1; i < ivExponent; i++) { ivUitkomst = ivUitkomst * ivGrondtal; cout << ivUitkomst << endl; } cout << endl << endl << "ivUitkomst vlak voor return = " << ivUitkomst << endl; return ivUitkomst; } int main() { cout << "voer een willekeurig grondtal in, maar gebruik voor deze test een 3 \n"; cin >> ivGrondtal; cout << "voer een willekeurige exponent in, maar gebruik voor deze test een 5 \n"; cin >> ivExponent; // nodig om kwadraat te berekenen : ivUitkomst = ivGrondtal; // zet alvast de eerste twee getallen van de machtsverheffings-reeks neer van x^0 en x^1 cout << endl << "1" << endl; cout << ivGrondtal << endl; //roep functie aan Machtsverheffen(ivGrondtal, ivUitkomst); cout << "dit krijg ik dan terug als return van de functie :" << endl << endl; cout << endl << "ivUitkomst is niet gelijk meer aan de return in de functie Uitkomst ??????" << endl << endl; cout << "ivUitkomst is namelijk teruggesprongen naar zijn beginwaarde vlak voor het aanroepen van de functie" << endl << endl; cout << "ivUitkomst is weer " << ivUitkomst << " geworden terwijl ik 243 had verwacht en daarom mislukt de Test." << endl << endl; //unit test if (ivGrondtal == 3 && ivExponent == 5 && ivUitkomst == 243) { cout << "Test gelukt !!" << endl; cout << endl; system("pause"); } else { cout << "Test mislukt !!" << endl; cout << endl; system("pause"); } } |
ik heb op iedere regel breakpoints gezet en integer variabele ivUitkomst veranderde prima mee totdat die terugkwam in main waarna die weer zn beginwaarde aannam. Mijn vraag is nu , waar gebeurt dat dan precies en waarom behoudt ivUitkomst niet zn laatste waarde na de berekening in de for-lus ?
Overigens heb ik het inmiddels zelf goed gekregen, maar dat verklaart (mij) nog niet waarom bovenstaande niet werkt.
Vrijwel zelfde code maar dan iets anders :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| /* 3. Schrijf een functie die een grondtal en een exponent(beide gehele getallen) als parameters meekrijgt en hiermee een machtsverheffing uitvoert. Gebruik voor de berekening van het antwoord een for - lus. Schrijf de onderstaande unit test voor de functie : - een specifiek geval(bijvoorbeeld 3^5 = 243) */ #include<iostream> using namespace std; int ivGrondtal; int ivExponent; int ivUitkomst; int ivResultaat; // functie machtsverheffen int Machtsverheffen(int ivGrondtal, int ivUitkomst) { for (int i = 1; i < ivExponent; i++) { ivUitkomst = ivUitkomst * ivGrondtal; cout << ivUitkomst << endl; } ivResultaat = ivUitkomst; return ivResultaat; } int main() { cout << "voer een willekeurig grondtal in, maar gebruik voor deze test een 3 \n"; cin >> ivGrondtal; cout << "voer een willekeurige exponent in, maar gebruik voor deze test een 5 \n"; cin >> ivExponent; // nodig om kwadraat te berekenen : ivUitkomst = ivGrondtal; // zet alvast de eerste twee getallen van de machtsverheffings-reeks neer van x^0 en x^1 cout << endl << "1" << endl; cout << ivGrondtal << endl; //roep functie aan Machtsverheffen(ivGrondtal, ivUitkomst); cout << endl << "dit krijg ik terug als return van de functie :" << ivResultaat << endl << endl; //unit test if (ivGrondtal == 3 && ivExponent == 5 && ivResultaat == 243) { cout << "Test gelukt !!" << endl; cout << endl; system("pause"); } else { cout << "Test mislukt !!" << endl; cout << endl; system("pause"); } } |
Alvast bedankt voor een antwoord
Aangaande dit topic, van mij mogen anderen die ook C++ beginnersvragen hebben dit topic gebruiken om hun eigen vraag/opmerking te stellen.