c++ und mehrere felder



  • Hallo leute ^^

    Vorweg: sorry für diesen titel, mir fiel auf anhieb kein anderer ein.
    Wir haben in der schule gerade c++, wir sollten ein programm schreiben, was geometrische funktionen besitzt.. sprich die berechnung eines kreises, eines rechtecks usw..
    Ich kriege das allerdings nicht so hin, habe aber mal angefangen, ich hoffe ihr versteht meine überlegung.

    #include <iostream>
    #include <math.h>

    using namespace std;
    //Definitionen der Funktionen

    //Ausgabe des Titels
    void titelAusgabe();
    //Die Funktion für den Kreis
    void kreisBerechnung();

    int main()
    {
    //Variabeln Definition
    int auswahl;

    titelAusgabe();

    cin >>auswahl;
    if (auswahl ==1)
    {
    kreisBerechnung();
    }

    }

    void titelAusgabe()
    {
    cout<<"Mit diesem Programm könnt ihr einige Berechnungen\n";
    cout<<"Mit einem Kreis, einem Rechteck sowie einer Fläche ausführen\n";
    cout <<"Bitte wählen sie die Berechnung aus\n";
    cout<<"1 steht für den Kreis, 2 für die Fläche und 3 für das Rechteck";
    cout <<"Bitte geben Sie eine Zahl ein:\n";
    }

    void kreisBerechnung()
    {
    //Variabeln deklaritionen
    double fInhalt=1;
    double umfang=2;
    //double durchmesser=3;

    cout<<"Wilkommen zu Berechnung des Kreises\n";
    cout<<"Welche sachen möchten Sie berechnen?\n";
    cout<<"Benutzen Sie folgende Eingaben:\n";
    cout<<"1 für die Fläche, 2 für den Umfang und 3 für den Durchmesser:\n";

    cin>>fInhalt;
    cin>>umfang;
    //cin>>durchmesser;

    if(fInhalt ==1)
    {
    double r;
    cout<<"Gebe bitte den Radius an:\n";
    cin>> r;
    double f=r*r*M_PI;
    cout<<"Der Inhalt der Fläche beträgt\n"<<f;
    }

    if (umfang ==2)
    {
    double r;
    cout<<"Geben sie bitte den radius ein\n";
    cin>>r;
    double u=2*r*M_PI;
    cout<<"Der Umfang des Kreises beträgt\n" <<u;
    }
    }

    Wie im code ersichtlich, gibt es zuerst eine begrüssung- und eine erklärung zum programm..
    Der nutzer gibt dann die zahl 1 für den kreis ein, die zahl 2 für eine andere berechnung.
    Gut, soweit läuft das programm, ich gebe die 1 ein, dann erscheint die funktion kreisBerechnung. Dann gibt es wider eine erklärung. Und ab da beginnt das problem, ich habe eine auswahlmöglichkeit von 1 bis 3, bei 1 funktioniert es wider, dann berechnet man den flächeninhalt des kreises, wenn ich aber zwei eingebe springt er nicht zum zweiten if der funktion, 2 wäre der umfang.
    Meine frage wäre, kann ich das so machen? Kann ich mehrere eingabefelder einfach so definieren?
    Das programm ist noch nicht fertig, die fehleingaben die habe ich noch nicht abgefangen, aber will mal das die funktionen laufen.
    Sorry wenn das jetzt eine dume frage ist, aber habe erst gerade mit dem programmieren angefangen:
    Ich verstehe das mit den funktionen und den parametern nicht so ganz, die variabeln die in den klammern stehen, könnte mir das jemand einfach erklären?
    Danke für eure antwort^^..



  • ...



  • danke..
    ich idiot bin später dann auch auf die idee gekommen, dass ich eigentlich den inhalt der variable nur ändere und ich eigentlich nur eine variable brauche.. quasi so:
    double auswahlKreis;
    if (auswahlKreis==1)
    {
    }
    dann das bei jeder ausführung ändern.
    ich weiss nicht, wegen den funktionen solle ich einen neuen tread aufmachen?
    ich verstehe einfach zwei sachen bei den funktionen nicht wirklich, in erster linie der rückgabe typ und die parameter die man einer funktion übergibt..
    könnte mir das jemand einfach erklären??^^



  • An eine Funktion gibt's du die Daten, die du berechnen willst.

    Stell dir ne Funktion als Suppentopf vor.
    Wenn du in der Suppe Erbsen und Bohnen haben willst, dann mußt du all das natürlich in den Suppentopf reintun. Das gleiche machst du bei Funktionen, du gibst einer Funktion dann eben die Erbsen bzw. Bohnen bzw. die Datenwerte die notwendig sind um Z.B. wie in deinem Aufgabenfall die Kreisfläche zu berechnen.

    Tja und am Ende gibt die Funktion etwas zurück, das ist der Rückgabetyp.
    Bzw. beim Suppentopf die fertige Suppe.

    Wichtig ist hierbei:

    Bei der Parameterübergabe kannst du so viele Daten übergeben wie du willst.
    Bei der Rückgabe kannst du nur einen einzigen Datenwert zurückerhalten.

    Auf den Suppentopf übertragen.
    Du kannst so viele Zutaten in die Suppe reinwerfen wie du willst, aber am ende kommer immer nur EINE einzige Suppe raus.

    Das gilt zumindest für die Übergabe per Call by Value.
    Call steht für Aufruf der Funktion und Value für Wert.
    Die Werte werden bei Call by Value kopiert.

    Man kann aber anstatt Werte auch Adressen übergeben, die auf Werte zeigen.
    Z.b. eine Adresse eines Arrays oder Strutcs.
    Das nennt man Call by Reference.
    Dadurch ist es nicht nur möglich mehrere Datenwerte über eine einzige Angabe, nämlich der Adresse eines Arrays zu übergeben, sondern man kann dadurch auch mehrere Daten zu der aufrufenden Funktion zurückgeben.
    Denn wenn man die Adresse von Datenwerten der aufrufenden Funktion (z.b. der main Funktion hat), dann kann man in der aufrufenden Funktion natürlich diese Daten ändern, denn man hat ja die Adresse und weil das so ist, kann man durch die Veränderung von mehreren Werten natürlich auch mehrere Werte an die aufrufende Funktion zurückgeben.
    Mithilfe von Referenzen kann man also z.B: auch ein komplettes Array oder ein Struct, dass in der Funktion erzeugt wurde, mit dem Rückgabetyp zurückgeben.

    Der Rückgabetyp mus dem entsprechen was du mit return zurückgibst.
    Wenn das ein double wert ist, also z.b.

    return 3.14

    Dann muss im Funktionskopf beiM Rückgabetyp natürlich double stehen.

    Wenn du ein Array von Ints zurückgibst, dann entsprechend der Rückgabetyp eines Zeigers auf Ints. Also *int

    usw.


Anmelden zum Antworten