Wurzelzeichen



  • Hallo
    Ich möchte ein Programm mit Wurzelberechnung schreiben
    Und möchte wissen ob es dafür in c++ Builder ein extra zeichen gibt?
    z.B wie bei Teilen = / , plus und minus + -.

    Mfg
    Kaster Master



  • Hallo

    siehe die Funktion sqrt() aus math.h
    einfach mal in der BCB-Hilfe danach suchen.

    bis bald
    akari



  • Könntest du mir erklären wie das Funktioniert?
    Die Suchfunktion funktioniert bei mir nicht.

    Das Programm soll auf Kopfdruck die Wurzel ausrechnen

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Eingabe1 = StrToInt (Edit1->Text);
    Ergebnis = Eingabe1 //Wurzelziehen
    Label1->Caption = "Ergebnis:" + String (Ergebnis);
    }
    

    Bitte einfach erklären kenne mich nicht so gut mit C++ aus.

    Mfg
    Kaster Master



  • Hallo

    bitte schau doch mal in BCB-Hilfe, denn dann hättest du das auch selber hinbekommen :

    #include <math.h>
    ...
    int Eingabe1 = StrToInt (Edit1->Text);
    int Ergebnis = sqrt(Eingabe1); //Wurzelziehen
    Label1->Caption = "Ergebnis:" + IntToStr (Ergebnis);
    

    Beachte, das sqrt() auf float-Typen ausgelegt ist, mit int-Typen wird das Ergebnis abgerundet

    bis bald
    akari



  • Es geht noch nicht da kommt in math.h auch noch Fehler:

    extern "C" {
    

    Hat fehler: declaration termated incorrectly.
    Linkage specification not allowed

    Und:

    int Ergebnis = sqrt(Eingabe1) //Wuzelziehen
    

    Fehler:
    Call of nonfunction

    Was ist falsch?

    MFG
    Kaster Master



  • Akaris Code funktioniert einwandfrei. Es muss also bei dir an etwas anderem liegen.



  • Ich habe ihn so eigegeben ist das richtig?

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    #include<math.h>
    ...
    int Eingabe1 = StrToInt (Edit1->Text);
    int Ergebnis = sqrt(Eingabe1) //Wuzelziehen
    Label1->Caption = "Ergebnis:" + String (Ergebnis);
    }
    


  • Hallo

    du solltest dich noch mit den Grundlagen von C++ beschäftigen. Dann dann wüßtest du, das #include<math.h> nach ganz oben zu den anderen includes gehört (z.b. include <vcl.h>). Um die Trennung zu Verdeutlichen, habe ich die die drei Punkte danach gemacht. Diese sollen im Programm dann nicht mehr auftauchen.

    bis bald
    akari



  • Vielen dank für die Hilfe es funktioniert jetzt.



  • Denk doch Mal drüber nach, man muss ja etwas einbinden bevor das eigentliche Programm losgeht und initialisiert wird. Deshalb muss das include über dem eigentlichen Programm stehen da es sich bei includes ja um Header handelt und diese immer über dem Programm stehen. Die Punkte ergeben auch keinen Sinn. Also der gesamte Quellcode muss so ausssehen, wenn du nur den einen Button und die Edit Felder hast.

    #include <vcl\vcl.h>
    #pragma hdrstop
    #include <math.h>
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma resource "*.dfm"
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if(Edit1->Text=="" || Edit1->Text=="0")
    {
    Application->MessageBox("Ungültige Eingabe","Fehler",0+16);
    }
    else
    {
    int Eingabe1 = StrToInt (Edit1->Text);
    float Ergebnis = sqrt(Eingabe1); //Wuzelziehen
    Label1->Caption = "Ergebnis:" + FloatToStrF(Ergebnis,ffNumber,8,2);
    }
    }
    

    Erstell ein neues Projekt mach dort ein Label ein Edit und ein Buttonfeld und kopiere den oberen Quellcode ein. Dann sollte es funktionieren. Aber lass den Builder die Funktionen für die FormCreate Mehtode und Button Click Mehtode erstellen, da es sonst zu 10 Zugriffsverletzungen kommt und dein Builder abstürzt.

    PS: Ich habe das Mal mit ner float Variable gemacht, die auf 2 Stellen rundet.
    Außerdem fängt dieses Programm auch Eingaben von 0 oder nichts ab, da es sonst zu einem Absturz kommen würde.

    Ich hätte eine Frage an die anderen, was bewirkt die Befehlszeile
    #pragma hdrstop?



  • Hm irgendwie hat der Server nicht reagiert und ich die Antwort dreimal gesendet.
    Naja so kommt man auch auf seine Beiträge 😉

    Gruß Alex



  • Hallo
    #pragma hdrstop beendet die Liste der vorkompilierten Header-Dateien. Durch die Verwendung vorkompilierter Header wird die Kompilierung beschleunigt. Andererseits
    benötigen diese aber relativ viel Plattenplatz. Wenn man alle Include-Anweisungen vor diesem Pragma einfügt, kann man die Kompilationszeit reduzieren.
    Du kannst auch mal auf hdrstop klicken und dann F1 drücken.

    Gruß Alex



  • siehe oben

    Gruß Alex



  • Dreimal muss ich es auch nicht wissen, einmal reicht, danke! 😃


Anmelden zum Antworten