Trigonometrie und Potenzfunktionen in C++
-
Hallo zusammen,
da bin ich schon wieder. Kann ich in C++ beispielsweise mit Sinus und Cosinus arbeiten und lassen sich Potenzfunktionen berechnen?Bsp: G = T * P ^ 0.5
Wie kann ich das C++ Builder beibringen?
Vielen DankfrakC++
-
Hallo
wie waere es wenn du (mittels der F1-Taste) mal im Builder suchst ?
(zB nach Cosinus)Mfg
Klaus
-
Such mal nach der Header math.h. Wie der Name sagt hat die was mit Mathe zutun und kann so ziemlich alles was damit zutun hat. Vor allem aber das was du willst.
-
Leider kann ich das Hilfprogramm nicht öffnen, da ich mit Vista x64 arbeite und es dieses nicht unterstützt. Ich bin daher auf eure Hilfe angewiesen!
lg, freakC++
-
für die Winkel kannste folgendes benutzen:
extern PACKAGE void __fastcall SinCos(Extended Theta, Extended &Sin, Extended &Cos);
Wenn du beide einzeln nutzen willst, dann so:
double sin(double x); double cos(double x);
Potenzen kannst du mit dem machen:
pow(x, y)
oder
extern PACKAGE Extended __fastcall Power(Extended Base, Extended Exponent);
bei allem musst du die math.h einbinden
-
Hallo
Hier eine Referenz der ganzen mathematischen Funktion in C/C++.
Bitte beachte aber das in C++ die Headerdatei cmath und nicht math.h heißt und das alle Funktionen im Namespace std liegen. Wenn der C++ Compiler auf die C-Variante annimmt dann ist das zwar nett aber kein ordentliches C++.Außerdem gibt es noch die (alle großgeschriebenen) Funktion der VCL, die letzendlich die selben Routinen aufrufen.
bis bald
akari
-
Is ja toll das man da cmath.h nimmt unser Lehrer hat gesagt man nimmt immer math.h.
Also mit math.h gehts auch, bei mir jedenfalls.
-
Wie würde denn dann das Beispiel 5*8^3 heißen? Ich mach nämlich noch irgendetwas falsch, da immer der Fehler "Ausdruckssyntax" kommt!
Vielen Dank
freakC++
-
Na dann zeig mal, was du genau machst.
-
So funzt es bei mir im C++ Builder 5 und im Turbo C++ Explorer 2006.
#include <math.h> double a,b,c,d; a = 5; b = 8; c = 3; d = a * pow(b,c);
-
Hallo
Doc Compliziert schrieb:
Is ja toll das man da cmath.h nimmt unser Lehrer hat gesagt man nimmt immer math.h.
Also mit math.h gehts auch, bei mir jedenfalls.Nein nicht cmath.h sondern nur cmath wie bei allen Headern der Standard-Lib.
Und nur weil etwas compiliert ist es noch lange nicht korrekt.
bis bald
akari
-
Wenn ich diesen Wert dann in einem Meldungfenster (MessageBox) darstellen möchte, kommen bei mir folgende Fehler:
[C++ Warnung] Unit1.cpp(32): W8004 'GM' wurde ein Wert zugewiesen, der nie verwendet wird
[C++ Fehler] Unit1.cpp(31): E2015 Mehrdeutigkeit zwischen '_fastcall Sysutils::IntToStr(__int64)' und '_fastcall Sysutils::IntToStr(int)'
Dies passiert aber erst, nachdem ich diese Potenzfunktion gemacht habe. So hieß es bei mir ursprünglich:
Application->MessageBox (IntToStr (GM).c_str (), "Für R = 6 und V = 240:", 0);GM ist hier das Ergebnis (ich hatte dieses Thema mit dem Meldungsfenster schonmal angesprochen^^)
Weshalb kommen diese Fehler und warum kann das Ergebnis, das ich in GM darstelle nicht mehr in der MessageBox angezeigt werden??
Vielen Dank
freakC++
-
Hallo
Es wäre natürlich sehr hilfreich den Code zur Fehlermeldung zu posten...
Ausgehend von den letzten Posts ost GV ein double, weshalb der Compiler sich nicht entscheiden kann welche der beiden in den Fehlermeldungen angegebenen IntToStr-Varianten er nehmen soll.
Also entweder kopierst du GV erstmal in einen int oder du verwendest anstelle von IntToStr eben FloatToStr.bis bald
akari
-
Hey,
Vielen,vielen Dank!!! Alles klappt (fast) perfekt. Ein Ergebnis kommt in der MessageBox und jegliche Fehler sind verschwunden. Leider gibt es noch ein kleines Manko (bitte gebt die Hoffnung bei mir nicht auf). Das Ergebnis ist falsch. Irgendwasn stimmt also noch nicht. Ich poste nochmal den Quelltext:
void __fastcall TForm1::Button1Click(TObject *Sender)
{R = 6;
V = 240;
POT = 0,5;
GM = V * pow(POT,R);Application->MessageBox (FloatToStr (GM).c_str (), "Für R = 6 und V = 240:", 0);
}POT ist die Potenz. Das Ergebnis (für die Aufgabe GM = 240 * 6^0,5) ist 587,8775. Leider kommt bei mir 240, also V heraus! Was stimmt denn nicht?
Vielen Dank und lg, freakC++
PS. Da ich noch Anfänger bin, die wahrscheinlich blöde Frage: Mit welchen Befehl kopiere ich denn etwas in einen int??
-
POT = 0.5;
-
Hey, vielen Dank!! Alles funktioniert nun perfekt!! Ihr seit echt gut!!! Ich möchte nun das Ergebnis auf zwei Stellen runden. Ich weiß, dass das theoretich so geht:
FloatToStrF (GM, ffNumber, 8, 2);Wie baue ich das denn nun ich meine MessageBox ein ( Application->MessageBox (FloatToStr (GM).c_str (), "Für R = 6 und V = 240:", 0);
Muss ich das GM.c_str () irgendwie in Klammern setzen oder nicht??
Ich danke euch!lg, freakC++
-
Am besten wohl eher in der Art:
AnsiString Titel = "Für R = " + AnsiString(R) + " und V = "+ AnsiString(V); AnsiString Nachricht = FloatToStrF(GM, ffNumber, 8, 2); Application->MessageBoxA(Nachricht.c_str(), Titel.c_str(), MB_OK);
Und verwende keine Magic-Numbers...
-
Was bedeutet denn AnsiString??
Vielen Dank,
freakC++
-
Hallo
AnsiString ist ein Datentyp der VCL des Builders. Häheres findest du in der Builder-Hilfe zum Stichwort.
bis bald
akari
-
Vielen Dank!!! Werds mir gleich anschauen. Ich weiß nicht wie es hier im Forum zu geht, da ich immer weiter und weiter frage. Ist das ok oder soll ich einen neuen Thread eröffnen? Es ist nämlich so, dass die MessageBox viel zu klein erschein, sodass der Titel gar nicht ganz drauf ist. Was kann ich tun??
Vielen Dank für eure tolle Hilfe
lg, freakC++