Schulaufgaben mit dem Borland Builder...HILFE



  • Hallo,

    ich mache eine Ausbildung zum kaufmännischen Assistenten für Wirtschaftsinformatik und bin mittlerweile im zweiten Ausbildungsjahr.

    Wir arbeiten im Unterricht mit dem C++ Builder 6 und haben zwei Aufgaben erhalten, die wir lösen müssen.

    Ich habe sie glaube ich schon zum größten Teil gelöst, die Programme wollen aber nicht so laufen, wie ich es will.

    Ich schreibe die Aufgaben mit meinen Lösungen mal hier rein, vielleicht hat der eine oder andere ja Lust mir zu helfen, denn im Augenblick weiß ich leider nicht weiter.

    1. Rechnerprogramm

    Schreibe das Programm für das folgende Strukturgramm:

    Klick dir 2 Zahlen
    Strukturgramm:
    Aufschrift Label1: „Wähle eine Rechenart“
    Speicherplatz „Zahl1 erzeugen“
    Speicherplatz „Zahl2 erzeugen“
    Zufallszahl1 erzeugen
    Zufallszahl1 in Zahl1 speichern
    Zufallszahl2 erzeugen
    Zufallszahl2 in Zahl2 speichern
    Zahl1 in Label2 erzeugen
    Zahl2 in Label3 erzeugen
    Beschriftung Label1 ändern
    Zufallszahl1 erzeugen
    Zufallszahl1 an Label2 übergeben
    Zufallszahl2 erzeugen
    Zufallszahl2 an Label3 übergeben

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    randomize();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Label1Click(TObject *Sender)
    {
    Label1 -> Caption="Wähle eine Rechenart";
    Button1 -> Caption="+";
    Button1 -> Caption="-";
    Button1 -> Caption="*";
    Button1 -> Caption="/";
    
    Label2 -> Caption=random(5)+1;
    Label3-> Caption=random(5)+1;
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int zahl1,zahl2;
    String a;
    zahl1 =StrToInt (Label2 -> Caption);
    zahl2 =StrToInt (Label3 -> Caption);
    
    a=IntToStr(zahl1+zahl2);
    Label1->Caption="Das Ergebnis der Addition ist" +a;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    int zahl1,zahl2;
    String a;
    zahl1 =StrToInt (Label2 -> Caption);
    zahl2 =StrToInt (Label3 -> Caption);
    
    a=IntToStr(zahl1-zahl2);
    Label1->Caption="Das Ergebnis der Subtraktion ist" +a;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    int zahl1,zahl2;
    String a;
    zahl1 =StrToInt (Label2 -> Caption);
    zahl2 =StrToInt (Label3 -> Caption);
    
    a=IntToStr(zahl1*zahl2);
    Label1->Caption="Das Ergebnis der Multiplikation ist" +a;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    int zahl1,zahl2;
    String a;
    zahl1 =StrToInt (Label2 -> Caption);
    zahl2 =StrToInt (Label3 -> Caption);
    
    a=IntToStr(zahl1/zahl2);
    Label1->Caption="Das Ergebnis der Division ist" +a;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    Close();
    }
    //---------------------------------------------------------------------------
    

    2. Währungsumrechnung

    a) Nennen Sie die Objekte: ButtonStart, EditEuro und EditDollar.
    b) OnKlick auf ButtonStart soll von Euro in Dollar umgerechnet werden, mit einem festen Kurs von 1,12 (Variable:kurs).
    c) Der Dollarbetrag soll in EditDollar angezeigt werden (Format: 120,24 $).

    Jetzt soll der Kurs veränderbar werden.
    d) Ein neuer Button KursAendern soll ein weiteres Editfeld (EditKurs) sichtbar machen.
    e) Sobald sich hier etwas ändert (und erst dann!), soll ein neues Button (ButtonKursUebernahme) erscheinen.
    f) Ein Klick auf dieses Button verändert den Inhalt der Variablen kurs und lässt EditKurs und ButtonKurs Uebernahme wieder verschwinden.

    Mein Lösungsansatz:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "umrechner_u.h"
    double kurs=1.12;
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ButtonStartClick(TObject *Sender)
    {
    EditDollar -> Text= EditEuro -> Text*kurs;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ButtonKursaendernClick(TObject *Sender)
    {
    EditKursaendern -> Visible=true;        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::EditKursaendernChange(TObject *Sender)
    {
    ButtonUebernahme -> Visible=true;        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ButtonUebernahmeClick(TObject *Sender)
    {
    kurs = StrToFloat(EditKursaendern -> Text);
    EditKursaendern -> Visible=false;
    ButtonUebernahme -> Visible=false;
    
    }
    //---------------------------------------------------------------------------
    

    Vielen Dank im voraus für eure Hilfe.

    <edit> sfds [b]</edit>]



  • Hallo

    - Schlechter, nicht aussagekräftiger Threadtitel
    - Kein Syntax-Highlithning (beim Posten im Forum der Button C/C++ links unter den Smilies) benutzt, um Code zu formatieren
    - Das eigentliche Problem nicht beschrieben

    bis bald
    akari



  • Hi

    hab das kurz überflogen

    das ist garantiert ein Fehler

    EditDollar -> Text= EditEuro -> Text*kurs;
    

    es muss so heißen

    EditDollar -> Text= FloatToStr(StrToFloat(EditEuro -> Text)*kurs);
    

    vllt findet jemand noch mehr Fehler 🙂

    übrigens wenn du unter halb von Quelltext auf die Fehler klickst
    kommst du an die fehlerhafte Zeile.
    Das machst du so lange biss ohne Fehler.
    Kanst auch F1 drücken und kanst heraus finden was faul ist.

    Grüsse



  • Programmabläufe lassen sich übrigens auch gerne mit dem Debugger nachvollziehen. Das erspart dir und uns Postings mit ewig langen Listings mit irelevantem Code und völlig undreflektierten Fehlermeldungen wie "geht nicht".



  • Hi,

    1. In TForm1::Label1Click ordnest Du die vier Grundrechenarten jedesmal dem gleichen Button zu.

    2. Praktischer wäre es in der Art:

    void __fastcall TForm1::AlleButtonsClick(TObject *Sender) 
    { 
        AnsiString Rechenart[4] = {"Addition", "Subtraktion", "Multiplikation", "Division"};
        int zahl1,zahl2; 
        String a; 
        zahl1 = StrToInt(Label2->Caption); 
        zahl2 = StrToInt(Label3->Caption); 
    
        switch(((TButton*)Sender)->Tag)    // Die Tags müssen natürlich vorher
        {                                  // in der IDE gesetzt werden.
            case 0: a = IntToStr(zahl1 + zahl2); break;
            case 1: a = IntToStr(zahl1 - zahl2); break;
            case 2: a = IntToStr(zahl1 * zahl2); break;
            case 3: a = IntToStr(zahl1 / zahl2); break;
        }
    
        Label1->Caption="Das Ergebnis der "+Rechenart[(((TButton*)Sender)->Tag]+" ist " + a; 
    }
    

    3. Warum eigentlich Zufallszahlen??? Statt dessen 2 Edits, so daß der User eigene Zahlen eingeben kann ...

    Umrechnung:
    1. Zum Eingeben des Kurses reicht eigentlich ein permanent sichtbares Editierfeld, was dann jedesmal vor der Umrechnung ausgelesen wird. Ich hoffe, Dein Lehrer hatte sich diesen Umweg ausgedacht 😉

    2. Find ich jetzt keines.

    Viele Grüße,
    Christian Sonder


Anmelden zum Antworten