C++ cmath.h ( pow() )

whaaatz

Newbie
Registriert
Aug. 2009
Beiträge
2
ich bin jetzt seit einer Woche C++ am programmieren. ( als Hobby)
For und if else die hab ich schon begriffen aber ich habe von einem Buch eine Aufgabe entnomme...

Die Aufgabe ist:

Man soll ein Programm schreiben denn die Ausgabewert alle Quadratzahlen vorkommen von 1 - 144.
ich habe dies mit for gemacht und das war ziemlich einfach ich will jetzt mit mathematischen funktionen programmieren... ich habe ihr ein link http://www.cplusplus.com/reference/clibrary/cmath/
habe mir mit der Funktion pow() auseinandere gesetzt und ich denke das ist die Lösung nur ich weiss nicht wie man genau programmiert...

Kann mir jemand helfen?
 
Hi, ich geb dir mal ein Codebeispiel:

Code:
#include <stdio.h>
#include <math.h>

int main()
{
     double zahl;
     for(zahl=0; zahl<=144; zahl++)
     {
         printf("%f zum Quadrat= %lf\n", zahl, pow(zahl, 2));
     }
}

Ist eigentlich selbsterklärend, wenn du was nicht verstehst, frag:)
Ich habs nicht ausprobiert, aber ich hoffe ich hab hier nicht kompletten Murks geschrieben:D
 
Zuletzt bearbeitet: (Semikolon vergessen)
ging leider nicht :(

die Ausgabe sollte 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, sein..

printf geht bei mir gar nicht mehr :S nur cout....

ich bin erst seit einer woche dran vielleicht bin ich einfach noch nicht so weit.... aber das nimmt mich jetzt echt wunder wie das funktioniert
 
Naja, printf ist glaub ich eher ne C-Funktion:)
So sollte das mit "cout" funktionieren:
Code:
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
     int zahl;
     for(zahl=1; zahl<=144; zahl++)
     {
         cout<<zahl<<" zum Quadrat= "<<pow(zahl,2)<<"\n";
     }
}

btw, ich lern C++ auch nur aus Büchern, und das Beste was du machen kannst ist ausprobieren, da lernst du einfach am meisten. Wenn du Ideen für eigene Programme hast, um so besser, nicht immer nur die Aufgaben aus den Büchern, wenn du selber was schreibst merkst du dir das viel besser;)
 
Zuletzt bearbeitet:
Wenn man mit C++ programmiert sollte man <cmath> und nicht <math.h> includieren!
Außerdem verlangt pow als ersten Parameter ein double und kein int.
Und wenn du die Zahlen bis 144 ausgibst hast du ein paar zu viel, du brauchst nur 12.

Hier der veränderte Code:
Code:
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	double zahl;
	for(zahl=1; zahl<=12; zahl++)
	{
		cout << zahl << " zum Quadrat= " << pow(zahl,2) << "\n";
	}
}

Gruß
BlackMark
 
In dem Fall ist es aber unnötig eine double-Variable zu verwenden, wenn int benutzt wird ist das ganze effizienter, oder irre ich mich da?
 
Natürlich ist in dem Fall ein double überflüssig, da ein int alle mal ausreicht.
Aber manche Compiler machen wenn man pow als ersten Parameter ein int gibt probleme. ( zB VC++ )
Ich hab ein double hingeschrieben, weil es die Funktion verlangt und nicht weil es in diesem Fall notwendig ist.

Gruß
BlackMark
 
Prinzipiell sollte man stets den Datentyp verwenden der von der Funktion per Definition vorgegeben wird, sonst wird es später böse Überraschungen wegen implizierter Typenkonvertierungen geben. Sollte der Datentyp nicht vorliegen, dann eine explizite Konvertierung machen und bloss nicht den Compiler entscheiden lassen. Der macht zwar meist alles richtig aber hin und wieder kommt es zu Problemen und das nur weil der falsche Datentyp verwendet wurde.

@BlackMark: Mich würde interessieren warum es besser ist cmath statt math zu includieren?
 
BlackMark: Danke erstmal für die schnelle Antwort. Also wie ich das verstehe, habe ich bei cmath einen Wrapper für die math.h Funktionen etc. Desweiteren werden einige Altlasten und Inkonsistenzen bereinigt. Was an sich gut klingt. Dennoch gibt es einen Konflikt bei der pow() Funktion im Zusammenhang mit 2 Integer Werten, da hier der Compiler eine implizite Konvertierung in double oder float versucht und unter Umständen behandelt oder nicht. Gut zu Wissen... Danke.
 
Wenn Du ernsthaft mathematische Dinge programmieren willst, kommst Du kaum um Matlab (oder Octave/Scilab) herum.

Qellcode in Matlab für Dein Problem so ganz nebenbei:

fprintf('%d\n', [1:12].^2);
 
wozu eigentlich pow hier??
wenn du quadrieren willst, dann nimm einfach zahl * zahl. das is einfacher, schneller und besser.
 
Zurück
Oben