C++ Quadrat liefern mit Addition

AirForce

Lt. Junior Grade
Registriert
Okt. 2010
Beiträge
296
Schreibe ein Programm das Quadrat liefern soll. Bei der ersten Version habe ich denn Multiplikationsoperator verwendet, jetzt wird die Addition benutzt. Dazu wurde eine Variable auf 0 gesetzt und dazu wurde x-mal x addiert.
Code:
int square(int x)
{
	for (int i = 0; i != x; ++i)
	{
		return (i = x + x);
	}

}

int main()
{
	cout << square(2) << '\n';
	cout << square(10) << '\n';

	return 0;
}

Das erste Ergebnis ist 4 was korrekt ist aber bei zweiten ist das Ergebnis 20 was falsch ist es sollte 100 sein.
 
Mit return wird die Funktion sofort verlassen, daher ergibt square von 100 bei dir 20 (10+10).

Das return darf erst ausgeführt werden, wenn alle additionen beendet sind. Außerdem macht die Anweisung i = x+x keinen Sinn, da i niemals wächst sondern immer wieder den selben Wert annimmt.
 
Du returnst in der for-Schleife.
Also wird die Schleife gar nicht benutzt, da sofort nach der Anweisung returned wird.
 
Code:
int square(int x)
{
	for (int i = 0; i != x; ++i)
	{
		i = x + x;
	}
	return i;
}
Wenn ich es so schreibe bekomme ich den Fehler das i nicht definiert ist. Habe auch bei Google nachgeschaut mit "return'-anweisung außerhalb einer funktion" doch leider ohne Ergenis.
 
So wie du es im moment hast, ist i nur in der schleife sichtbar..

Die logikfehler mal aussen vor gelassen
 
Der Scope von i endet nach der For-Schleife, da i in der For-Schleife definiert wurde.
Du musst es vorher definieren. In der For-Schleife addierst du dann und nach der Schleife returnst du das Ergebnis
 
Habe auf einer anderen Seite das gefunden
Code:
int square(int x)
{
   for(int i=0;i != x; ++i)
      x+=x;
    return x;
}
Das Funktionert auch nicht.
 
Code:
int square(int x)
{
	int erg=0; //Ausgabevariable
	for (int i = 0; i != x; ++i)
		erg += x; // Entsprciht erg=erg+x
	return erg;
}

wäre zb eine Möglichkeit dies zu lösen ^^
dein "i" gilt nur innerhalb der for-schleife,daher kannst du es nicht nach der schleife zurckgeben
 
Zuletzt bearbeitet:
Jetzt habe ich es verstanden. Danke an alle für eure Hilfe.
 
TheAldi schrieb:
Code:
int square(int x)
{
	int erg=0; //Ausgabevariable
	for (int i = 0; i != x; ++i)
		erg += x; // Entsprciht erg=erg+x
	return erg;
}

wäre zb eine Möglichkeit dies zu lösen ^^
dein "i" gilt nur innerhalb der for-schleife,daher kannst du es nicht nach der schleife zurckgeben

Bedenke, daß man auch negative Zahlen quadrieren kann.
 
Sei nicht so sparsam mit den Variablen, die sind doch sowieso sehr billig, dann passieren Dir auch weniger Fehler!
 
Zunächst gewöhne dir bitte an nicht auf a!=b sodern auf a<=b zu prüfen. Wenn Schleifen länger und komplexer werden überspringst du vielleicht a==b und kommst nie aus der Schleife.
 
Zurück
Oben