Ein Lösungsvorschlag zur Übung mit Funktionen Teil 2.
/* Getraenke Automat Version 0.5 */ #include<stdio.h> // --- Funktions-Prototypen --------------------------- int auswahlGetraenkeSorte(); int eingabeMenge(); float ermittlePreis(int sorte); float bezahlen(float zuZahlen); int pruefeGeldstueck(float muenze); void ausgabeGetraenke(int sorte, int menge); // --- Hauptprogramm ---------------------------------- int main() { printf("Getraenke Automat v0.5\n\n"); int sorte, menge; float preis, zuZahlen, gezahlt; sorte = auswahlGetraenkeSorte(); preis = ermittlePreis(sorte); menge = eingabeMenge(); zuZahlen = preis * menge; gezahlt = bezahlen(zuZahlen); if(gezahlt >= zuZahlen) { ausgabeGetraenke(sorte, menge); printf("\n\nVielen Dank, bitte entnehmen sie ihre Getraenke.\n"); }else { printf("\n\nBezahlvorgang abgebrochen.\n"); printf("Ausgabe von %.2f Euro.\n", gezahlt); } return 0; } // --- Funktionen ------------------------------------- int auswahlGetraenkeSorte() { int sorte; printf("Waehlen sie ihr Getraenk aus:\n"); printf("1) Wasser (0,50 Euro)\n"); printf("2) Limonade (1,00 Euro)\n"); printf("3) Bier (2,00 Euro)\n\n"); printf("Geben sie 1, 2 oder 3 ein: "); scanf("%d", &sorte); return sorte; } int eingabeMenge() { int menge=1; printf("\nGeben sie die gewuenschte Menge ein: "); scanf("%d", &menge); return menge; } /* ermittelt den Preis zu einer Sorte Parameter: sorte, Nummer der Sorte Return-Value: Preis */ float ermittlePreis(int sorte) { float preis=0; switch(sorte) { case 1: preis = 0.5; break; case 2: preis = 1.0; break; case 3: preis = 2.0; break; } return preis; } /* Startet Bezahlvorgang Parameter: zuZahlen, zu zahlender Betrag Return-Value: gezahlter Betrag */ float bezahlen(float zuZahlen) { printf("\n--- Bezahlvorgang ---\n"); printf("\nBezahlvorgang abbrechen mit 0\n"); float einwurf, gezahlt=0; do { printf("\nEs fehlen noch %.2f Euro.", zuZahlen-gezahlt); printf("\nBitte werfen sie ein Geldstueck ein: "); scanf("%f", &einwurf); // Abbruch pruefen if(einwurf == 0) { break; } // eingeworfenen Betrag anrechnen if(pruefeGeldstueck(einwurf)) { gezahlt += einwurf; }else { printf("\nIhr Geldstueck ist ungueltig."); } } while(gezahlt < zuZahlen); return gezahlt; } /* prueft Geldstueck auf Gueltigkeit Parameter: muenze, entpricht eingeworfenem Geldstueck Return-Value: 1, gueltige Muenze 0, falsche Muenze */ int pruefeGeldstueck(float muenze) { // Muenzwert in ganze Zahl umrechnen, also in Cent. // Da die case Anweisung nicht mit floats arbeiten kann. int cent = muenze * 100; switch(cent) { case 5: return 1; case 10: return 1; case 20: return 1; case 50: return 1; case 100: return 1; case 200: return 1; default: return 0; } } void ausgabeGetraenke(int sorte, int menge) { printf("\n--- Getraenkeausgabe ---\n"); int i; for(i=0; i < menge; i++) { printf("\nFlasche %d von %d der Sorte %d wurde ausgegeben.", i+1, menge, sorte); } }