Trigonometrie und Potenzfunktionen in C++



  • 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++



  • Hallo

    Solange die Fragen noch zum Thema passen ist es okay. Fragen zur MessageBox bitte in einen neuen Thread.

    bis bald
    akari


Anmelden zum Antworten