Springen naar inhoud

C++ functies


  • Log in om te kunnen reageren

#1

kilon

    kilon


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 20 januari 2010 - 19:00

Ik zit weer met een probleempje.

Ik moet een functie max4 schrijven die het maximum van vier getallen bepaalt met behulp van een functie max2 die het maximum van twee getallen bepaalt.

Nu dacht ik dat ik het beste 2 max2 functies kan maken en deze invoeren in de functie max4.
Maar hoe doe je dit?

Ik heb nu dit
//Functies max2
int max2a(int a, int b)
{
	if (a>b)
	{
		return a;
	}
	else
	{
		return b;
	}
}

int max2b (int c, int d)
{
	if (c>d)
	{
		return c;
	}
	else
	{
		return d;
	}
}


//Functie max4
int max4 (max2a(a,b) , max2b(c,d))
{
	if (max2a(a,b) > max2b(c,d))
	{
		return max2a(a,b);
	}
	else
	{
		return max2b(c,d);
	}
}
maar dat werkt niet.


Oh, en hoe zorg ik ervoor dat ik deze functies ook aan kan roepen in de main?
Want voor alle getallen in het bereik 1 t/m 4 (in de 4 for loops) moet bekeken worden wat het maximum getal is met behulp van een functie test_max4 (prototype of zo).
Dit heb ik echter nooit helemaal begrepen.

#include <iostream>

using namespace std;


int main()
{
	//Declaraties
	int a(1), b(1), c(1), d(1);

	
	for (a=1; a<=4; ++a)
	{
		for (b=1; b<=4; ++b)
		{
			for (c=1; c<=4; ++c)
			{
				for (d=1; d<=4; ++d)
				{
					cout << a << b << c << d;
					cout << endl;
				}
			}
		}
	}
	//vier geneste for loops om te kijken of het wel klopt
	//max4 vraagt max2 telkens aan
	
	
	system("PAUSE");
	return 0;
}

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 20 januari 2010 - 19:08

Je hebt geen twee max2 functies nodig.

#include <iostream>

using namespace std;
int max2(int a, int b){
	if (a>b){
		return a;
	}else{
		return b;
	}
}
int main()
{
	cout << max(3,2) << endl;
	return 0;
}

Wat denk je van:
max4(max2(a,b),max2(c,d))
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#3

kilon

    kilon


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 20 januari 2010 - 19:27

Ok, maar dan blijft het probleem staan dat dat niet werkt zo.

#4

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 20 januari 2010 - 19:31

Hoe bedoel je niet werken? Onderstaande code werkt zonder problemen met GNU GCC compiler. (Code::Blocks als ide)
#include <iostream>

using namespace std;
int max2(int a, int b){
	if (a>b){
		return a;
	}else{
		return b;
	}
}
int max4(int a,int b, int c, int d){
	return max2(max2(a,b),max2(c,d));
}
int main()
{
	cout << max4(3,9,20,-1) <<endl;
	return 0;
}

Wat geeft jouw compiler van errors?
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#5

Landro

    Landro


  • 0 - 25 berichten
  • 18 berichten
  • Gebruiker

Geplaatst op 20 januari 2010 - 21:33

Waarom wil je 2 losse functies maken om 2 getallen te vergelijken?
Je hebt maar 1 functie nodig zoals dit in het bovenstaande voorbeeld staat.

Ik vermoed dat je het begrip scope niet goed begrijpt.
Iedere functie heeft namelijk een eigen set variabelen. Een functie heeft alleen de beschikking over de variabelen die in de functie zelf gedefinieerd worden en de global gedefinieerde variabelen (pointers laat ik nu even buiten beschouwing)

In het bovenstaande voorbeeld van jhnbk wordt zowel in functie max2 als in max4 de variabele "a" gebruikt, maar beide functies hebben hun eigen versie hiervan. (Het voordeel hiervan wordt snel duidelijk als je grotere programma's schrijft in samenwerking met andere programmeurs.)





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures