C Programmierung Hilfe



  • Ja, das mache ich weil ich ja den Betrag mit Euro und Cent ausgeben will. Wenn ich mit int deklariere dann nimmt er mir bei einer Eingabe von z.b. 200.45 die 45 Cent erst gar nicht an.



  • Nochmal:
    Du liest den Eurowert in float ein. Wandelst den Eurowert in Cent um (* 100) und weist das einem int zu.
    Dann rechnest du mit int.



  • So hatte ichs zuvor. So gings leidr auch nicht..
    Mir kams so vor, dass mit float für die einzelnen Beträge der Fehler nicht so oft auftrat.



  • "ging nicht" ist keine ausreichende Fehlerbeschreibung!



  • Du mußt deine euro500 usw. als int definieren. Denn es geht da ja auch um die Anzahl. Einen halben 500 Euroschein brauchst du da nicht berücksichtigen.



  • hab ich alles versucht. Das Problem tretet immer wieder auf.... rein mathematisch muss es ja funktionieren...darum versteh ich es nicht...



  • ElleT schrieb:

    hab ich alles versucht. Das Problem tretet immer wieder auf.... rein mathematisch muss es ja funktionieren...darum versteh ich es nicht...

    hättest du wirklich alles versucht, wäre auch die richtige lösung dabei.
    also, dann versuchs noch einmal, so wie man es dir hier erklärt hat.
    wenns immer noch nicht funzt, dann poste code.
    mfg



  • Auf float und double beim Einlesen am besten ganz verzichten.
    http://ideone.com/DoKktS



  • Hast du dir mal die Werte nach der Eingabe und Berechnung angesehen?
    Speziell geldbetrag und geldbetrag2.
    Auch kannst du dir restbetrag zwischendurch mal ansehen.

    Am besten geht da mit dem Debugger. Sonst mit printf.



  • Ellet schrieb:

    Da ich ein Anfänger in sachen Programmieren bin hab ich ein eher unprofessionelles Programm geschrieben, welches seine Aufgabe jedoch erfüllt.

    Um der Professionalität einen Schritt näher zu kommen, benutze Arrays und Schleifen.

    #include <stdio.h>
    
    int main(void)
    { // Wechselgeld in Cent.
    	int wechselgeld[] = { 50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1 };
    // Speichert die Anzahl der Wechselgeld-Elemente am entsprechenden Index.
    	int stueckelung [ sizeof(wechselgeld) / sizeof(wechselgeld[0]) ] = { 0 };
        int i = 0;
    ...
    // Solange Betrag in Cent > 0
    // 		Solange Betrag >= Wechselgeld an Position i im Array wechselgeld
    //			Subtrahiere Wechselgeld an Position i vom Betrag
    // 			Inkrementiere Wert im Array stueckelung an Position i
    // Inkrementiere i
    ...
    


  • [quote="profiwerdungsmotivat0r"]

    Ellet schrieb:

    Um der Professionalität einen Schritt näher zu kommen, benutze Arrays und Schleifen.

    Ich würde als letzten Wechselgeldvetrag die 0 wählen. Dann bist du am Ende vom Array und brauchst die stueckelung nicht.

    int wechselgeld[] = { 50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1, 0 };
    


  • naja, wenn man das wechselgeld sofort per printf raushauen will, braucht man kein array namens stueckelung, stimmt, aber auch keine 0 am ende das wechselgeld-arrays.

    man nimmt das array stueckelung gern für kontrollausgaben.



  • Jetz gehts!
    Aber warum versteh ich nicht...

    Hab es folgendermaßen geändert:

    geldbetrag=geldbetrag*100;
        geldbetrag2=geldbetrag;
    

    vorher hatte ich:

    geldbetrag2=geldbetrag*100;
    

    ist das sooo gravierend?

    Und zum Thema Professionalität, des mit den Arrays hab ich noch nicht sooo raus...



  • ElleT schrieb:

    Jetz gehts!
    Aber warum versteh ich nicht...

    Hab es folgendermaßen geändert:

    geldbetrag=geldbetrag*100;
        geldbetrag2=geldbetrag;
    

    vorher hatte ich:

    geldbetrag2=geldbetrag*100;
    

    du spackst immer noch mit float/double rum?
    kannst du deutsch? kannst du lesen?
    warum beachtest du nicht die hinweise, die man dir hier gibt?

    1. benutze kein float
    2. benutze kein double
    3. benutze kein float
    4. benutze kein double
    5. ist es immer noch nicht in der rummsmurmel, gehe zu 1.



  • Wutzs Erbe schrieb:

    ElleT schrieb:

    Jetz gehts!
    Aber warum versteh ich nicht...

    Hab es folgendermaßen geändert:

    geldbetrag=geldbetrag*100;
        geldbetrag2=geldbetrag;
    

    vorher hatte ich:

    geldbetrag2=geldbetrag*100;
    

    du spackst immer noch mit float/double rum?
    kannst du deutsch? kannst du lesen?
    warum beachtest du nicht die hinweise, die man dir hier gibt?

    1. benutze kein float
    2. benutze kein double
    3. benutze kein float
    4. benutze kein double
    5. ist es immer noch nicht in der rummsmurmel, gehe zu 1.

    Ich weiß ja nicht, was du für ein Problem hast. Jedoch wurde mir hier geraten, den Betrag als float einzulesen und dann auf eine int variable zu überschreiben. Das hab ich gemacht und es funktioniert. Fertig.

    Zu deinem Hinweis "kein flaot oder double zu verwenden". Wie sollte ich dies denn tun? Int sind ganzzahlen...

    Nochmals der Hinweis: Ich bin Anfänger. Also bitte nicht gleich angreifend werden.



  • ElleT schrieb:

    Jedoch wurde mir hier geraten, den Betrag als float einzulesen und dann auf eine int variable zu überschreiben. Das hab ich gemacht und es funktioniert. Fertig.

    Hast du dir mein Beispiel angeguckt?
    Es gibt Zahlen, bei denen das nicht funktioniert.
    Solche Zahlen lassen sich auch für den Datentyp float finden.
    http://www.binaryconvert.com/result_float.html?decimal=051050049046049049

    ElleT schrieb:

    ... "kein flaot oder double zu verwenden". Wie sollte ich dies denn tun? Int sind ganzzahlen...

    int euro, cent;
    


  • CJosef schrieb:

    ElleT schrieb:

    ... "kein flaot oder double zu verwenden". Wie sollte ich dies denn tun? Int sind ganzzahlen...

    int euro, cent;
    

    Int sind doch ganzzahlen....da kann ich mit scanf z.b. 125.25 nicht einlesen.
    Der rest ist bei mir als Int deklariert. halt nur nicht der Betrag zum einlesen.



  • Du sollst auch zwei Werte einlesen.
    Etwa

    scanf("%d.%2d", &euro, &cent);
    geldbetrag2 = euro*100+cent;
    

    ungetestet



  • Ah, na klar!
    Nur .!
    Ich habs mit %*c versucht, bekam dann aber einen ab...


Anmelden zum Antworten