Umrechner(komplex für Noobs)



  • 3DMan schrieb:

    WOW! nice, vielen vielen Dank für diesen Tip. Ich dacte das Programm greift automatisch erst darauf zu, wenn Handlungen betrieben werden. Das bedeutet, dass die Platzierung im Text sehr wichtig, das bedeutet dann wohl, er compiliert von oben nach unten!?

    exakt! und schöner code zeichnet sich - unter anderem - dadurch aus, dass man variablen so spät (also weit unten) wie möglich definiert, anders gesagt genau dann wenn man sie braucht.

    3DMan schrieb:

    Verstehe nicht wieso manche kein Bock drauf haben das zu lernen, macht doch unnormal fun, vor allem wenn man mal was schafft!!

    🙂



  • 3DMan schrieb:

    WOW! nice, vielen vielen Dank für diesen Tip. Ich dacte das Programm greift automatisch erst darauf zu, wenn Handlungen betrieben werden. Das bedeutet, dass die Platzierung im Text sehr wichtig, das bedeutet dann wohl, er compiliert von oben nach unten!?

    Bei dir sollte man anscheinend auch erst warten, dass du in eine Falle läufst, bevor man dich darauf hinweist ...

    ich vorhin schrieb:

    Vielleicht meinst du es ja richtig, aber manche verstehen das tatsächlich völlig falsch, deshalb sage ich es ausdrücklich: Eine Anweisung tut irgendwas in dem Moment, in dem sie ausgeführt wird.



  • Hallo Leute, habe direkt nachm Aufstehen erstmal weiter programmiert. Jetzt geht es darum, das Ergebnis nicht nur zusamengerechnet auszugeben, sondern nur in Pfennigen. Pfund=20 Schilling=240 Pfennig

    jetzt habe ich das programmiert aber es klappt nicht:

    #include <iostream>
    #include <string.h>

    using namespace std;

    int main()
    {
    int Pfund=0, Schilling= 0, Pfennig=0, resultat1, resultat2, resultat3, resultat4, resultat5, resultat6;
    char befehl;
    void beenden();
    void umwandeln();

    cout << "Rechne zwei Beträge zusammen\n" << endl;

    cout << "Professor, bitte Geben Sie an, wie viel Pfund Sie in der linken Tasche haben: " << endl;
    cin >> Pfund;

    cout << "Professor, bitte Geben Sie an, wie viel Schilling Sie in der linken Tasche haben: " << endl;
    cin >> Schilling;
    cout << "Professor, bitte Geben Sie an, wie viele Pfennige Sie in der linken Tasche haben: " << endl;
    cin >> Pfennig;

    resultat1 = Pfund;
    resultat2 = Schilling;
    resultat3 = Pfennig;

    cout << "Sie haben " << resultat1 << " Pfund "<< resultat2 << " Schilling " << "und " << resultat3 << " Pfennige" << " in der linken Tasche" << endl;

    cout << "Professor, bitte Geben Sie diesmal an, wie viel Pfund Sie in der rechten Tasche haben: " << endl;
    cin >> Pfund;

    cout << "Professor, bitte Geben Sie nun an, wie viel Schilling Sie in der rechten Tasche haben: " << endl;
    cin >> Schilling;
    cout << "Professor, bitte Geben Sie an, wie viele Pfennige Sie in der rechten Tasche haben: " << endl;
    cin >> Pfennig;

    resultat4 = Pfund;
    resultat5 = Schilling;
    resultat6 = Pfennig;

    int a = resultat1 + resultat4;
    int b = resultat2 + resultat5;
    int c = resultat3 + resultat6;

    cout << "Sie haben " << resultat4 << " Pfund "<< resultat5 << " Schilling " << "und " << resultat6 << " Pfennige" << " in der rechten Tasche" << endl << endl;

    cout << "Ihr Vermoegen beträgt insgesamt " << (int) a << " Pfund "<< (int) b << " Schilling " << "und " << (int) c << " Pfennige!" << endl;

    cout << " Moechten Sie, dass das Programm [B]eendet wird oder eine weitere [U]mwandlung durchfuehrt? " << endl;
    cin >> befehl;
    cout << endl;

    befehl= tolower (befehl);
    switch (befehl)

    {
    case 'b': beenden (); break;
    case 'u': umwandeln (); break;

    default: cout << " Engueltige Eingabe!! " << endl;
    break; //wie mache ich, dass er wieder zu zeile 59 kommt?? mit return klappts nicht
    }

    }

    void beenden()

    {

    //habe hier versucht mit return 0; zu arbeiten, dass er das programm beendet auch mit quit(0); (hatte auch das cstdlib eingebunde, welches er aber nicht findet!

    }

    void umwandeln()

    {

    int a, b, c, ergebnis;

    ergebnis = (int) a * 240 + (int) b * 20 + (int) c; // hier sagt er, dass er das ncht findet. Irgendwie greift er nicht auf die Ergebnisse aus der Main datei zurück....ob ich nun umwandlung: u oder beenden: b benutze, immer gibt er mir: Lieber Professor, sie haben 174507 Pfennige in der Tasche! Egal was ich mache...

    cout << "Lieber Professor, sie haben " << ergebnis << " Pfennige in der Tasche!" << endl;

    }

    PS: wie mache, ich dass ich ein Screenshot kriege, sodass die das angezeigte auch farbig angezeigt wird, so wie ihr es in euren Beispielbildern habt??
    Gruß,
    3Dman



  • 3DMan schrieb:

    wie mache, ich dass ich ein Screenshot kriege, sodass die das angezeigte auch farbig angezeigt wird, so wie ihr es in euren Beispielbildern habt??

    Das ist kein Screenshot.
    Das passiert, wenn Du
    [cpp]Hier Dein Text.[/cpp]
    schreibst ("Code-Tags").
    Text markieren und unter dem Editierfenster den Button C++ drücken funktioniert auch.
    Ich schlage vor, dass Du Deine alten Posts dahingehend editierst.



  • #include <iostream> 
    #include <string.h> 
    
    using namespace std; 
    
    int main() 
    { 
    int Pfund=0, Schilling= 0, Pfennig=0, resultat1, resultat2, resultat3, resultat4, resultat5, resultat6; 
    char befehl; 
    void beenden(); 
    void umwandeln(); 
    
    cout << "Rechne zwei Beträge zusammen\n" << endl; 
    
    cout << "Professor, bitte Geben Sie an, wie viel Pfund Sie in der linken Tasche haben: " << endl; 
    cin >> Pfund; 
    
    cout << "Professor, bitte Geben Sie an, wie viel Schilling Sie in der linken Tasche haben: " << endl; 
    cin >> Schilling; 
    cout << "Professor, bitte Geben Sie an, wie viele Pfennige Sie in der linken Tasche haben: " << endl; 
    cin >> Pfennig; 
    
    resultat1 = Pfund; 
    resultat2 = Schilling; 
    resultat3 = Pfennig; 
    
    cout << "Sie haben " << resultat1 << " Pfund "<< resultat2 << " Schilling " << "und " << resultat3 << " Pfennige" << " in der linken Tasche" << endl; 
    
    cout << "Professor, bitte Geben Sie diesmal an, wie viel Pfund Sie in der rechten Tasche haben: " << endl; 
    cin >> Pfund; 
    
    cout << "Professor, bitte Geben Sie nun an, wie viel Schilling Sie in der rechten Tasche haben: " << endl; 
    cin >> Schilling; 
    cout << "Professor, bitte Geben Sie an, wie viele Pfennige Sie in der rechten Tasche haben: " << endl; 
    cin >> Pfennig; 
    
    resultat4 = Pfund; 
    resultat5 = Schilling; 
    resultat6 = Pfennig; 
    
    int a = resultat1 + resultat4; 
    int b = resultat2 + resultat5; 
    int c = resultat3 + resultat6; 
    
    cout << "Sie haben " << resultat4 << " Pfund "<< resultat5 << " Schilling " << "und " << resultat6 << " Pfennige" << " in der rechten Tasche" << endl << endl; 
    
    cout << "Ihr Vermoegen beträgt insgesamt " << (int) a << " Pfund "<< (int) b << " Schilling " << "und " << (int) c << " Pfennige!" << endl; 
    
    cout << " Moechten Sie, dass das Programm [B]eendet wird oder eine weitere [U]mwandlung durchfuehrt? " << endl; 
    cin >> befehl; 
    cout << endl; 
    
    befehl= tolower (befehl); 
    switch (befehl) 
    
    { 
    case 'b': beenden (); break; 
    case 'u': umwandeln (); break; 
    
    default: cout << " Engueltige Eingabe!! " << endl; 
    break; //wie mache ich, dass er wieder zu zeile 59 kommt?? mit return klappts nicht 
    } 
    
    } 
    
    void beenden() 
    
    { 
    
    //habe hier versucht mit return 0; zu arbeiten, dass er das programm beendet auch mit quit(0); (hatte auch das cstdlib eingebunde, welches er aber nicht findet! 
    
    } 
    
    void umwandeln() 
    
    { 
    
    int a, b, c, ergebnis; 
    
    ergebnis = (int) a * 240 + (int) b * 20 + (int) c; // hier sagt er, dass er das ncht findet. Irgendwie greift er nicht auf die Ergebnisse aus der Main datei zurück....ob ich nun umwandlung: u oder beenden: b benutze, immer gibt er mir: Lieber Professor, sie haben 174507 Pfennige in der Tasche! Egal was ich mache... 
    
    cout << "Lieber Professor, sie haben " << ergebnis << " Pfennige in der Tasche!" << endl; 
    
    } 
    
    .
    

    [code="cpp"]



  • Okay, das mit den Tags hat ja schon mal funktioniert.

    Deine Funktion umwandeln() musst Du die Teilbeträge übergeben.
    Das mag erstmal umständlich erscheinen verhindert aber alle Arten von Verwirrung.
    Stell Dir vor, du änderst a in umwandeln() und daraufhin hat a in main() einen anderen Wert...Chaos.

    Schau in Deinen Kursunterlagen, was zu Funktionsargumenten, bzw. Funktionen in C++ allgemein steht.

    Uebrigens benutzt Du auch schon eine Funktion mit einem Argument in Deinem Code: tolower() .

    Z.B. so

    #include <iostream>
    
    typedef int pfennig;
    typedef int shilling;
    typedef int pfund;
    
    /* gibt die summe der Teilbetraege pd + sh + pf zurueck. */
    pfennig umwandeln(pfund pd, shilling sh, pfennig pf){
    	return 240*pd + 20*sh + pf;
    }
    
    int main(){
    	pfund a    = 1;
    	shilling b = 1;
    	pfennig c  = 1;
    	std::cout << umwandeln(a, b, c) << '\n';
    }
    

    Die typedefs sind selbsterklärend, oder? (pfennig ist ein anderer Name fuer int, shilling ist ein anderer Name fuer int...)
    Wenn nicht, lass sie weg und nimm überall int.



  • Also ich möchte, dass Void umwandeln() auf die int a,int b,int c aus der main() zurückgreift und den die werte daraus nimmt.
    also ungefähr so (int) a * 240 + (int) b * 20 + (int) c;

    aber das klappt anscheinend nicht, weil es könnte ja sein, dass woanders noch a b und c deklariert wurden. Jetzt wäre es klug da etwas greifendes vorzudefinieren.

    Ich verstehe nicht, wo genau

    pfennig umwandeln(pfund pd, shilling sh, pfennig pf){
    return 240*pd + 20*sh + pf;

    ...hinkommen soll.

    Genausowenig:

    pfund a = 1;
    shilling b = 1;
    pfennig c = 1;
    std::cout << umwandeln(a, b, c) << '\n';

    ich habe oben ja doch schon

    int Pfund=0, Schilling= 0, Pfennig=0, resultat1, resultat2, resultat3, resultat4, resultat5, resultat6;

    deklariert...

    bin etwas verwirrt



  • 3DMan schrieb:

    bin etwas verwirrt

    Sorry dafuer - mein Beispiel ist nur ein Beispiel, wie Du eine Funktion umwandeln() schreiben koenntest.

    3DMan schrieb:

    Also ich möchte, dass Void umwandeln() auf die int a,int b,int c aus der main() zurückgreift und den die werte daraus nimmt.
    also ungefähr so (int) a * 240 + (int) b * 20 + (int) c;

    umwandeln() kann nicht ohne weiteres auf die Werte in main() zugreifen. Das habe ich schon geschrieben.

    Du musst umwandeln() die Werte übergeben. Dafuer musst Du umwandeln() so umwandeln (Kalauer, pardon...), dass die Funktion Argumente entgegennimmt.

    void umwandeln(int a, int b, int c)
    {
      int ergebnis = a * 240 + b * 20 + c;  
      cout << "Lieber Professor, sie haben " << ergebnis 
           << " Pfennige in der Tasche!" << endl;
    }
    

    Beim Aufruf, musst Du dann aber auch Argumente übergeben:

    int main(){
      int pfennig = ...
      int shilling = ...
      int pfund = ...
      // Code code code....
      umwandeln(pfund, shilling, pfennig);
      // Noch mehr Code...
    }
    


  • Ohne Spass ich sitze seit gestern dran und verstehes einfach nicht. Ich bin eigentlich kein dummer Mensch und gehe jeden Schritt durch, ich befasse mich somit zwar intensiv damit, aber irgendwie checke ich nicht, was falsch ist...
    Habe auch das Thema Funktionen nochmal gelesen aber keine Ahnung ...:(

    #include <iostream>
    #include <string.h>
    using namespace std;
    
    int main()
    {
        int Pfund=0, Schilling= 0, Pfennig=0, resultat1, resultat2, resultat3, resultat4, resultat5, resultat6;
        int Pfennig1 = (int) c;
        int Shilling1 = (int) b*20;
        int Pfund1 = (int) a*240;
        char befehl;
        void beenden();
        void umwandeln ();
    
        cout << "Rechne zwei Beträge zusammen\n" << endl;
    
        cout << "Professor, bitte Geben Sie an, wie viel Pfund Sie in der linken Tasche haben: " << endl;
        cin >> Pfund;
    
        cout << "Professor, bitte Geben Sie an, wie viel Schilling Sie in der linken Tasche haben: " << endl;
        cin >> Schilling;
        cout << "Professor, bitte Geben Sie an, wie viele Pfennige Sie in der linken Tasche haben: " << endl;
        cin >> Pfennig;
    
        resultat1 = Pfund;
        resultat2 = Schilling;
        resultat3 = Pfennig;
    
        cout << "Sie haben " << resultat1 << " Pfund "<< resultat2 << " Schilling " << "und " << resultat3 << " Pfennige" <<  " in der linken Tasche" << endl;
    
        cout << "Professor, bitte Geben Sie diesmal an, wie viel Pfund Sie in der rechten Tasche haben: " << endl;
        cin >> Pfund;
    
        cout << "Professor, bitte Geben Sie nun an, wie viel Schilling Sie in der rechten Tasche haben: " << endl;
        cin >> Schilling;
        cout << "Professor, bitte Geben Sie an, wie viele Pfennige Sie in der rechten Tasche haben: " << endl;
        cin >> Pfennig;
    
        resultat4 = Pfund;
        resultat5 = Schilling;
        resultat6 = Pfennig;
    
        int a = resultat1 + resultat4;
        int b = resultat2 + resultat5;
        int c = resultat3 + resultat6;
    
        cout << "Sie haben " << resultat4 << " Pfund "<< resultat5 << " Schilling " << "und " << resultat6 << " Pfennige" <<  " in der rechten Tasche" << endl << endl;
    
        cout << "Ihr Vermoegen beträgt insgesamt " << (int) a << " Pfund "<< (int) b << " Schilling " << "und " << (int) c << " Pfennige!" << endl;
    
        cout << " Moechten Sie, dass das Programm [B]eendet wird oder eine weitere [U]mwandlung durchfuehrt? " << endl;
        cin >> befehl;
        cout << endl;
    
        befehl= tolower (befehl);
    
        switch (befehl)
    
        {
            case 'b': beenden (); break;
            case 'u': umwandeln (); break;
    
            default: cout << " Ungueltige Eingabe!! " << endl;
                break; //wie mache ich, dass er wieder zu zeile 59 kommt?? mit return klappts nicht
        }
    
    }
    
    void beenden()
    
    {
    
        //habe hier versucht mit return 0; zu arbeiten, dass er das programm beendet auch mit quit(0); (hatte auch das cstdlib eingebunde, welches er aber nicht findet!
    
    }
    
    void umwandeln(int a, int b, int c)
    
    {
        int ergebnis = a * 240 + b * 20 + c;
        cout << "Lieber Professor, sie haben " << ergebnis
        << " Pfennige in der Tasche!" << endl;
    }
    

    [code="cpp"]



  • 3DMan schrieb:

    Ohne Spass ich sitze seit gestern dran und verstehes einfach nicht. Ich bin eigentlich kein dummer Mensch und gehe jeden Schritt durch, ich befasse mich somit zwar intensiv damit, aber irgendwie checke ich nicht, was falsch ist...
    Habe auch das Thema Funktionen nochmal gelesen aber keine Ahnung ...:(

    Funktionen zu begreifen ist aber wichtig... Und auch nicht schwer.

    Lös Dich mal von Deiner Aufgabe und schreib kleinere Programme, wo Du nicht den Faden verlierst.

    Z.B. nochmal von mir zwei Funktionen:

    #include <iostream>
    #include <string>
    
    /* get_num() erwartet ein string Argument
     * und gibt einen int zurueck
     */
    int get_num(std::string prompt)
    {
      std::cout << prompt;
      int i;
      std::cin >> i;
      return i;
    }
    
    /* print_sum() erwartet zwei int Argumente
     * und gibt nichts zurueck (void)
     */
    void print_sum(int a, int b)
    {
      std::cout << a << '+' << b << '=' << a+b << '\n';
    }
    
    int main(){
      int i = get_num("Bitte geben sie eine Zahl ein: ");
      print_sum(i,i);
    }
    


  • Nice, vielen vielen Dank! Ich habe jetzt einen anderen Weg gefunden. Soll ich den posten oder ist okay??



  • 3DMan schrieb:

    Nice, vielen vielen Dank! Ich habe jetzt einen anderen Weg gefunden. Soll ich den posten oder ist okay??

    Moin.

    Poste es hier hin. Da sind einige Sachen, die zu bequatschen sich durchaus lohnt in Deinem Code von oben.

    Dazu kommt, dass es gerade noch einen zweiten Thread gab, in dem man gut sehen konnte, was dabei rauskommt, wenn man sich nicht ein paar Gedanken macht und hier geübte Kritik gar nicht beachtet.


Anmelden zum Antworten