Mittelalterliche Währungen umrechnen - bin ratlos :(



  • Hallo ihr Lieben,
    ich habe eine ganz konkrete Frage (oder eher 2). Ich habe wegen des Studiums gerade erst mit C++ angefangen. Jetzt haben wir 2 Hausaufgaben, die mich ratlos machen. Ich sitze seit Dienstag daran und bekomme es einfach nicht hin. Ich habe auch sämtliche Seiten im Internet durchforstet und hier im Forum auch alles möglich gelesen, aber weiter hat mich das irgendwie nicht gebracht 😕
    Hoffentlich hat hier jemand Zeit und Lust, sich das mal anzugucken 🙂 (ist für Könner wahrscheinlich pipifax 😃 )

    Also Aufgabe 1:
    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.

    Da habe ich bisher das hier, aber es werden einige Fehlermeldungen angezeigt die ich nicht verstehe, bzw nicht wegbekomme:

    #include <iostream>
    using namespace std;
    int main()
    {
    int pfund[10],shilling[10],pfennig[10],pfenn=0;
    char action;
    aktiv=1;
    while (aktiv==1)
    cout << "Bitte geben sie einen Betrag in Pfund an: ";
    cin >> pfund;
    cout << "Bitte geben sie einen Betrag in Shilling an:";
    cin >> shilling;
    cout << "Bitte geben sie einen Betrag in Pfennig an:";
    cin >> pfennig;
    switch(action)
    {
    pfenn=pfund4800;
    break;
    pfenn=shiling
    20;
    break;
    pfenn=pfennig;
    break;
    cout << cout << "Die Summe in Pfennig lautet: " << pfenn << endl;
    if (pfenn == 0) aktiv=0;
    }
    return 0;
    }

    Die zweite Aufgabe, bei der ich noch gar keinen Ansatz habe:
    Schreiben Sie ein Programm, das von der Tastatur beliebige Zeilen liest, bis
    das Zeichen '@' angetroffen wird und anschließend die Zahl der gefundenen
    Buchstaben ausgibt, z.B.:
    a kommt 17 mal vor
    b kommt 12 mal vor
    c kommt 13 mal vor
    ...

    Ich wäre soooo dankbar, wenn mir da jemand helfen könnte!! 🙂 🙂



  • Warum zeigst du die Fehlermeldungen nicht?
    Warum sind pfund, schilling und pfennig als Array definiert?



  • Ich habe mich jetzt an dem entlanggehangelt, was wir als Beispiele in den Stunden hatten...(das waren erst 2). ich bin wie gesagt noch super neu und hab die Begriffe noch nicht alle drauf 😕
    Kann ich die Fehlermeldungen hier irgendwie reinkopieren? (Benutze den Qt-Creator)



  • ich kenne den Creator nicht gut, aber man wird die Meldungen wohl irgendwie kopieren können.

    Array:
    int pfennig**[10]**



  • Lena1906 schrieb:

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

    Das heißt:
    1 Pfund = 240 Pfennig
    und
    1 Shilling = 12 Pfennig

    Variablen braucht es nicht viele und vor allem keine Arrays:

    int summePfennig = 0;
    int pfund, shilling, pfennig;
    

    Dann solltest du jeweils einen Wert für die drei Einheiten einlesen. Das hast du ja schon mehr oder minder versucht:

    cout << "Pfund: ";
    cin >> pfund; 
    cout << "Shilling: ";
    cin >> shilling; 
    cout << "Pfennig: ";
    cin >> pfennig;
    

    Jetzt musst du die drei Einheiten in Pfennige umrechnen (siehe oben) und auf summePfennig addieren.

    Das ganze soll zweimal geschehen: Eine einfache for -Schleife würde sich anbieten.

    Die Summe in Pfennigen ausgeben hast du ja auch schon hinbekommen.

    Das ganze wieder in die drei Einheiten aufdröseln geht dann in etwa so:

    pfennig = summePfennig % 12;
    shilling = (summePfennig / 12) % …;
    pfund = …;
    

    PS: Und Fehlermeldungen helfen ungemein bei der Fehlerbeseitigung, lerne früh sie richtig zu lesen um Fehler schneller zu finden und zu beheben.

    PPS: Code-Tags machen es für andere erheblich leichter den Quelltext zu lesen.



  • Zu deiner Zweiten Aufgabe: Den String kannst du mit cin einlesen, oder wenn es auch Abstände gibt mit getline(cin, *Variablenname*) (Speichers in einem String).
    Danach kannst du mit *Variablenname.find("@") Das erste Zeichen suchen (find() liefert die Position des Zeichens als als Zahl. Anschliessend würde ich die Suche nach der Anzahl der jeweiligen Zahlen über eine Schleife machen. Also zb. so,
    int st = 0;
    int anzzeichen[26] //Als Zahl musst du hier natürlich die Anzahl zeichen //nehmen, die du abfragen willst
    while(st < *Variablenname.find("@")) {
    if(*Variablenname*[st] == 'a') {
    anzzeichen[0]++;}
    if(*Variablenname*[st] == 'b') {
    anzzeichen++;}
    //Und so weiter, für alle Zeichen die du abfragen musst eine if-Bedingung
    st++;
    }
    Anschliessend kannst du Alles aus anzzeichen ausgeben (In meinem Beispiel wäre anzzeichen[0] = wie oft a vorkommt, anzeichen[1] = wäre wie oft b vorkommt, usw.

    PS: Evtl. musst du zuerst alle Werte von anzzeichen = 0 setzen.



  • Vielen Dank schonmal, das werd ich alles mal ausprobieren! 🙂
    (Könnte was dauern)
    Wenn noch jemand Tipps hat, immer her damit! 😃



  • Mach alle Gedanken um Arrays weg.

    Und rechne lagalopexs Formeln mal per Hand mit ein paar Zahlen. Die stimmen, sind nur noch nicht ganz fertig.



  • bitte löschen



  • Chapeau!

    Jetzt bekommt der TE die Lösung auf dem Silbertablett und der Lerneffekt liegt irgendwo bei Null.



  • @DocShoe
    Ruhig Blut.
    Der Code buggt und macht auch nicht genau das was in der Aufgabe gefordert wurde. (Bzw. würde auch nicht das machen wenn er nicht sowieso buggy wäre.)



  • bitte löschen



  • Zwoertsch schrieb:

    ist allerdings ohne den Modulo da ich keinen grund finde den zu benutzen aber evtl hab ich die aufgabe falsch verstanden kannst sie ja ma komplett posten die Aufgabenstellung wenn dir das hier nicht helfen sollte

    Du hast ja auch nur den einfachen Teil der Aufgabe gelöst. Modulo kann man gebrauchen, wenn man einen Betrag in Pfund, Schilling und Pfennig aufteilen will.

    BTW, deine Kommataste ist anscheinend kaputt. Kannst bei mir ein paar rauskopieren, wenn du willst.


Anmelden zum Antworten