"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

2 C++ Fragen

Lactobacillus 18.02.2001 - 13:55 763 7
Posts

Lactobacillus

Addicted
Registered: Sep 2000
Location: gone
Posts: 389
Hallo,

meine 2 Fragen:

* Wie kann ich am besten testen, ob eine Variable (oder eine "Rechnung") eine ganze Zahl ist, oder nicht?

* Wie kann ich am besten aus einer Variable (oder einer "Rechnung") die Quadratwurzel ziehen?

Was ich eigentlich machen will?
Zitat
(Stellea und Stelleb sind beide Integer-Variablen)

Wenn die Quadratwurzel aus Stellea * Stellea + Stelleb * Stelleb eine ganze Zahl ist, dann...

Wenn Interesse besteht, oder es Unklarheiten gibt, dann kann ich auch den ganzen Quelltext posten/mailen...

BTW: Ich verwende Visual C++ 6 SP4.

Danke
Lactobacillus, der noch das braucht um den *beep* endlich zu releasen :D

[ 18 February 2001: Message edited by: Lactobacillus ]

Lactobacillus

Addicted
Registered: Sep 2000
Location: gone
Posts: 389
Keine C++ler hier? *heul*

Lactobacillus

Addicted
Registered: Sep 2000
Location: gone
Posts: 389
*schluchts*

Lactobacillus

Addicted
Registered: Sep 2000
Location: gone
Posts: 389
Thx,

kann ich auch sqrt(Variable*Variable...) verwenden?

Der Quelltext:
Zitat
int Stellea(1),Stelleb(1),max;
(...)
while (Stellea<=max) //max wird vorher schon von der Tastertur eingelesen
{
if Quadratwurzel(Stellea * Stellea + Stelleb * Stelleb) ist eine ganze Zahl (=keine Nachkommastellen)
{
cout<<"!"<<Stellea<<" "<<Stelleb<<endl;
}
Stelleb++;
if (Stelleb==(max+1))
{
Stellea++;
Stelleb=Stellea; //Optim.
}

Also: Stellea und Stelleb nehmen alle Möglichkeiten (wenn max 2 ist 0-1 1-1 1-2 2-2) an. Wenn die Wurzel aus Stellea*Stellea + Stelleb*Stelleb eine ganze Zahl ist, dann...

Wenn du willst dann schicke ich dir die ganze Datei, dass hier ist etwas gekürzt...

Danke!
Lactobacillus

[ 19 February 2001: Message edited by: Lactobacillus ]

[ 19 February 2001: Message edited by: Lactobacillus ]

[ 19 February 2001: Message edited by: Lactobacillus ]

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Rechnen mit Gleitpunktzahlen ist nie so einfach wie es ausschaut. Der Test, ob irgendeine Zahl eine ganze Zahl ist, ist unmöglich, weil bei den meisten Berechnungen Rundungsfehler auftreten.

In diesem Fall kommst du noch einfach weg: Um zu überprüfen, ob die Wurzel eine ganze Zahl ist, ziehe die Wurzel und runde sie zur nächsten ganzen Zahl. Dann quadriere diese gerundete Zahl und überprüfe, ob sie mit der Ausgangszahl übereinstimmt.

Lactobacillus

Addicted
Registered: Sep 2000
Location: gone
Posts: 389
Thx,

wie runde ich zur nächsten Zahl?

Du meinst man sollte folgendes machen
Zitat
if (gerundet(Quadratwurzel(Stellea*Stellea+Stelleb*Stelleb) * gerundet(Quadratwurzel(Stellea*Stellea+Stelleb*Stelleb) == (Stellea*Stellea+Stelleb*Stelleb))...

Wie könnte man konkret realisieren?

Lactobacillus

[ 19 February 2001: Message edited by: Lactobacillus ]

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Für positive Zahlen floor(x+0.5)

Ja, so meine ich es

[ 19 February 2001: Message edited by: Ringding ]

Lactobacillus

Addicted
Registered: Sep 2000
Location: gone
Posts: 389
Thx, es funkt...

Lactobacillus
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz