Umrechner(komplex für Noobs)



  • Hallo liebe Leute,
    ich habe mich gerade hier angemedet und freue mich bei Euch zu sein.
    Ich habe jetzt ein paar Seiten im Archiv durchgecheckt, aber nicht genau mein Beispiel gefunden.
    Wenn´s das denn irgendwo gibt, sorry für den Thread hier.
    Also ich bin ein Anfänger, checke aber das gefühl von C++ allmählich.

    Ich studiere als Nebenfach Medieninformatik und habe dieses Semester mitC++ angefangen, mir Bücher gekauft und verusche einzusteigen.

    Aufgabe:

    II. Mittelalterliche Währungen wurden meist in "Pfund", Shilling" und "Pfennig"
    angegeben.

    Dabei gilt: 1 Pfund = 20 Shilling = 240 Pfennig.

    Schreiben Sie ein Programm, das den Benutzer nach zwei derartigen Beträgen
    frägt, also jeweils nach "Pfund", Shilling" und "Pfennig" und die
    Summe in Pfennigen ausgibt.
    Modifizieren Sie dieses Programm so, daß es den Betrag wieder in
    "Pfund", Shilling" und "Pfennig" ausgibt.

    Hinweis: C++ kennt einen Modulo-Operator "%", der den Rest einer Zahl nach
    einer Division ergibt.

    10 % 10 ergibt 0.

    11 % 10 ergibt 1.

    12 % 10 ergibt 2.

    etc.

    Zu erst habe ich mir überlegt wie das ganze angehe:

    Ich mache dem Programm erstmal die Variablen klar, Pfund, Schilling und Pfennig.
    Danach teile ich ihm mit wie viel ich von jeder Variable (ist das der richtige Begriff?) besitze.

    Danach erstelle ich über cout eine Abfrage, der zuerst Pfund, dann Schilling abfragt.

    Jetzt muss er durch eine Aktion, das zusammentragen und das Ergebnis in Pfennigen ausspucken. Dazu braucht er eine Anweisung, die definiert, wie viel Pfund = wie viel Schilling respektiv wie viel Pfennig das sind. Mit dieser Anweisung muss er umgehen können und rechnen.

    Ps: Arbeite mit Xcode (QT creator noch nicht installiert)
    mein Code (habe vielerorts recherchiert und es klappt nicht ganz):

    #include <iostream>

    using namespace std;

    int main()
    {
    unsigned char Pfund=0, Pfennig=0;
    // hier wollte ich erstmal Pfund auf Pfennig machen, diesen Block kopieren und mit Schilling wiederholen und das dann zusammentragen

    cout << "Rechne Pfund auf Pfennige\n" << endl;
    cout << "Professor, bitte Geben Sie an, wie viel Pfund Sie in der Tasche haben: "
    << endl;
    cin >> Pfund;
    Pfennig = Pfund / 240;

    cout << Pfund << " Pfund sind gleich " << Pfennig << " Pfennige\n";

    return 0;

    }

    Die Ausgabe ist das

    Rechne Pfund auf Pfennige

    Professor, bitte Geben Sie an, wie viel Pfund Sie in der Tasche haben:
    1
    1 Pfund sind gleich (umgedrehtes Fragezeichen) Pfennige

    ------------------

    Davor habe ich versucht, vielleicht mit Arrays und einer Schleife zu arbeiten

    Ich ordne den einzelnen Chars dann 1, 20 und 240 zu, sodass der bei der abfrage dass Eingegebene multipliziert, noch nicht geschrieben...

    unlogischer Code auch teilweise^^

    /*

    char Pfund=0, Schilling= 0, Pfennig= 0, aktion;
    int geldwert [3] = {1, 20, 240};
    int Pfennig;

    cout << "Umrechnung auf Pfennig von Schilling und/oder Pfund"
    << endl;
    cout << "Professor, bitte geben Sie einen Wert fuer Pfund ein: ";
    cin >> Pfund;
    Pfennig = Pfund / 4800;
    cout << "Professor, bitte geben Sie einen Wert fuer Schilling ein: ";
    cin >> Schilling;
    Pfennig = Schilling / 240;

    aktion=Pfund + Schilling;

    /*Pfennig = 0;
    for (i=0; Pfund [i]!='\0'; i++)
    {
    for (j= 0; Schilling [j] !='\0'; j++) {
    <#statements#>
    }
    }

    cout << Pfennig << " Pfund und << " Schilling sind gleich" << Pfennig << " Pfennige\n";

    return 0;
    }

    */

    Bitte: Ich will unter keinen Umstände eine Lösung oder einen Code hier erhalten. Ich will C++ ernsthaft lernen und es verstehen. Ich würde mich sehr über Tips, Hilfen, Denkvorgänge und Möglichkeiten aller Art freuen.

    Ich weiß, ihr denkt jetzt, wat is dat fürn Lappen, aber jeder fängt doch mal klein an!!

    Gruß 3DMan



  • Warum benutzt du für Pfund Pfennig usw. (unsigned) char?



  • 3DMan schrieb:

    Ich mache dem Programm erstmal die Variablen klar, Pfund, Schilling und Pfennig.
    Danach teile ich ihm mit wie viel ich von jeder Variable (ist das der richtige Begriff?) besitze.

    Danach erstelle ich über cout eine Abfrage, der zuerst Pfund, dann Schilling abfragt.

    Und Pfennig?

    Jetzt muss er durch eine Aktion, das zusammentragen und das Ergebnis in Pfennigen ausspucken. Dazu braucht er eine Anweisung, die definiert, wie viel Pfund = wie viel Schilling respektiv wie viel Pfennig das sind.

    Anweisungen "definieren" nichts. 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.

    Ps: Arbeite mit Xcode (QT creator noch nicht installiert)

    Vollkommen egal. Du brauchst nur einen Compiler, QT oder sonstwelche GUI-Spielereien kannst du dir am Anfang (= mindestens die ersten 6 Monate) schenken.

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
       unsigned char Pfund=0, Pfennig=0;
        // hier wollte ich erstmal Pfund auf Pfennig machen, diesen Block kopieren und mit Schilling wiederholen und das dann zusammentragen
    
       cout << "Rechne Pfund auf Pfennige\n" << endl;
        cout << "Professor, bitte Geben Sie an, wie viel Pfund Sie in der Tasche haben: "
             << endl;
             cin >> Pfund;
             Pfennig = Pfund / 240;
        
        cout << Pfund << " Pfund sind gleich " << Pfennig << " Pfennige\n";
        
        return 0;
        
    }
    

    Das ist erstmal technisch falsch, weil du den falschen Datentyp benutzt. unsigned char wird für Zeichen benutzt (char wie character), nicht für Zahlen. Deswegen bekommst du auch seltsame Zeichen bei der Ausgabe.

    Es ist auch weder mathematisch richtig (240 Pfund sind 1 Pfennig, dachte das war andersrum) noch entspricht es der Aufgabe: Du sollst zwei Beträge in Pfund, Schilling und Pfenning einlesen, davon die Summe bilden und diese erst in Pfennigen und dann in Pfund, Schilling und Pfennig ausgeben.

    Beispiel:
    Erster Betrag: 1 Pfund, 10 Schilling, 50 Pfennige
    Zweiter Betrag: 2 Pfund, 10 Schilling, 0 Pfennige
    => (macht 3 Pfund 20 Schilling 50 Pfennige, also:) 1010 Pfennige, oder 4 Pfund, 0 Schilling und 50 Pfennige.

    Den Rest ignoriere ich mal, das sind ja doch ganz gravierende Probleme am Anfang.



  • Weil ich in einem Beispiel in meinem Buch den Datentyp double gesehen habe, womit er zahlen mit Kommastellen belegt hat. Im selben Kapitel las ich, dass für zahlen bis 255 mit unsigned char arbeitet.

    Habe das jetzt auf integer bzw. int gesetzt und jetzt spuckt er wenigstens

    Rechne Pfund auf Pfennige

    Professor, bitte Geben Sie an, wie viel Pfund Sie in der Tasche haben:
    1
    1 Pfund sind gleich 0 Pfennige

    ...aus.



  • Hallo 3DMan,

    benutzte anstatt "unsigned char" besser "unsigned int" (bzw. noch besser einfach "int"). cout behandelt chars besonders und gibt daher anstatt einer Zahl ein Zeichen aus (denn bei z.B. "cout << 'x'" möchte man ja dieses Zeichen sehen, und nicht den Zahlenwert des Zeichens 'x').

    Wenn man doch explizit den Zahlenwert eines chars haben will, dann kann man diesen so ausgeben:

    char x = 'x';
    cout << (int)x;
    

    edit: ups, zu spät...



  • Boah Leute, vielen Dank,
    habe jetzt mal rumgewerkelt und ES MACHT RICHTIG BOCK!!!!

    #include <iostream>

    using namespace std;

    int main()
    {
    int Pfund=0, Schilling= 0, Pfennig=0, resultat1, resultat2, resultat3;

    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 << Pfund << " Pfund sind gleich " << Pfennig << " Pfennige\n";

    return 0;

    }

    Es geht bestimmt och viel eleganter, aber ich hatte grad son Glücksmoment :D:D
    mal schauen wie´s jetzt weitergeht, keine Lust gleich arbeiten zu gehen 😞 lieber programmieren



  • Hm, jetzt verstehe ich nicht, wieso er mir das Ergenis so ausspuckt:

    Rechne zwei Beträge zusammen

    Professor, bitte Geben Sie an, wie viel Pfund Sie in der linken Tasche haben:
    10
    Professor, bitte Geben Sie an, wie viel Schilling Sie in der linken Tasche haben:
    5
    Professor, bitte Geben Sie an, wie viele Pfennige Sie in der linken Tasche haben:
    1
    Sie haben 10 Pfund 5 Schilling und 1 Pfennige in der linken Tasche
    Professor, bitte Geben Sie diesmal an, wie viel Pfund Sie in der rechten Tasche haben:
    10
    Professor, bitte Geben Sie nun an, wie viel Schilling Sie in der rechten Tasche haben:
    5
    Professor, bitte Geben Sie an, wie viele Pfennige Sie in der rechten Tasche haben:
    1
    Sie haben 10 Pfund 5 Schilling und 1 Pfennige in der rechten Tasche
    Ihr Vermoegen beträgt insgesamt 1606451199 Pfund 1606500250 Schilling und 1606496223 Pfennige

    ------------------------------

    #include <iostream>

    using namespace std;

    int main()
    {
    int Pfund=0, Schilling= 0, Pfennig=0, resultat1, resultat2, resultat3, resultat4, resultat5, resultat6, endergebnis;

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

    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;

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

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

    return 0;

    }

    Kann es sein, dass meine Definitionen int a, int b und int c (ich wollte einfach verschiedene resultate mit einer variable zusammenfassen), vielleicht syntaktisch nicht korrekt sind??



  • du rechnest die resultate auf bevor du überhaut die für die berechnung notwendingen daten kennst. rechne die resultate also erst aus sobald du weisst, wie viel in den taschen ist!



  • 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!?

    Mal gucken ob ich den zweiten Teil auch noch hinkriege.

    Vielen Dank an alle, die so nett waren und mir gewantwortet haben.
    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!?

    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??


Log in to reply