/* 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 \n Vielen Dank, bitte entnehmen sie ihre Getraenke.\n " ) ; } else {
printf ( "\n \n Bezahlvorgang 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: " ) ; return sorte;
}
int eingabeMenge( ) {
int menge= 1 ;
printf ( "\n Geben sie die gewuenschte Menge ein: " ) ; 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 ( "\n Bezahlvorgang abbrechen mit 0\n " ) ; float einwurf, gezahlt= 0 ;
do {
printf ( "\n Es fehlen noch %.2f Euro." , zuZahlen
- gezahlt
) ; printf ( "\n Bitte werfen sie ein Geldstueck ein: " ) ;
// Abbruch pruefen
if ( einwurf == 0 ) {
break ;
}
// eingeworfenen Betrag anrechnen
if ( pruefeGeldstueck( einwurf) ) {
gezahlt += einwurf;
} else {
printf ( "\n Ihr 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 ( "\n Flasche %d von %d der Sorte %d wurde ausgegeben." , i+ 1 , menge, sorte) ;
}
}
LyogR2V0cmFlbmtlIEF1dG9tYXQgVmVyc2lvbiAwLjUgKi8KCiNpbmNsdWRlPHN0ZGlvLmg+CgovLyAtLS0gRnVua3Rpb25zLVByb3RvdHlwZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmludCBhdXN3YWhsR2V0cmFlbmtlU29ydGUoKTsKaW50IGVpbmdhYmVNZW5nZSgpOwpmbG9hdCBlcm1pdHRsZVByZWlzKGludCBzb3J0ZSk7CmZsb2F0IGJlemFobGVuKGZsb2F0IHp1WmFobGVuKTsKaW50IHBydWVmZUdlbGRzdHVlY2soZmxvYXQgbXVlbnplKTsKdm9pZCBhdXNnYWJlR2V0cmFlbmtlKGludCBzb3J0ZSwgaW50IG1lbmdlKTsKCi8vIC0tLSBIYXVwdHByb2dyYW1tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaW50IG1haW4oKSB7CglwcmludGYoIkdldHJhZW5rZSBBdXRvbWF0IHYwLjVcblxuIik7CgoJaW50IHNvcnRlLCBtZW5nZTsKCWZsb2F0IHByZWlzLCB6dVphaGxlbiwgZ2V6YWhsdDsKCQoJc29ydGUgPSBhdXN3YWhsR2V0cmFlbmtlU29ydGUoKTsKCXByZWlzID0gZXJtaXR0bGVQcmVpcyhzb3J0ZSk7CgltZW5nZSA9IGVpbmdhYmVNZW5nZSgpOwoJenVaYWhsZW4gPSBwcmVpcyAqIG1lbmdlOwoJZ2V6YWhsdCA9IGJlemFobGVuKHp1WmFobGVuKTsKCQoJaWYoZ2V6YWhsdCA+PSB6dVphaGxlbikgewoJCWF1c2dhYmVHZXRyYWVua2Uoc29ydGUsIG1lbmdlKTsKCQlwcmludGYoIlxuXG5WaWVsZW4gRGFuaywgYml0dGUgZW50bmVobWVuIHNpZSBpaHJlIEdldHJhZW5rZS5cbiIpOwoJfWVsc2UgewoJCXByaW50ZigiXG5cbkJlemFobHZvcmdhbmcgYWJnZWJyb2NoZW4uXG4iKTsKCQlwcmludGYoIkF1c2dhYmUgdm9uICUuMmYgRXVyby5cbiIsIGdlemFobHQpOwoJfQoJCglyZXR1cm4gMDsKfQoKLy8gLS0tIEZ1bmt0aW9uZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppbnQgYXVzd2FobEdldHJhZW5rZVNvcnRlKCkgewoJaW50IHNvcnRlOwoJcHJpbnRmKCJXYWVobGVuIHNpZSBpaHIgR2V0cmFlbmsgYXVzOlxuIik7CglwcmludGYoIjEpIFdhc3NlciAoMCw1MCBFdXJvKVxuIik7CglwcmludGYoIjIpIExpbW9uYWRlICgxLDAwIEV1cm8pXG4iKTsKCXByaW50ZigiMykgQmllciAoMiwwMCBFdXJvKVxuXG4iKTsKCXByaW50ZigiR2ViZW4gc2llIDEsIDIgb2RlciAzIGVpbjogIik7CglzY2FuZigiJWQiLCAmc29ydGUpOwoJcmV0dXJuIHNvcnRlOwp9CgppbnQgZWluZ2FiZU1lbmdlKCkgewoJaW50IG1lbmdlPTE7CglwcmludGYoIlxuR2ViZW4gc2llIGRpZSBnZXd1ZW5zY2h0ZSBNZW5nZSBlaW46ICIpOwoJc2NhbmYoIiVkIiwgJm1lbmdlKTsKCXJldHVybiBtZW5nZTsKfQoKLyoJZXJtaXR0ZWx0IGRlbiBQcmVpcyB6dSBlaW5lciBTb3J0ZQoJUGFyYW1ldGVyOglzb3J0ZSwgTnVtbWVyIGRlciBTb3J0ZQoJUmV0dXJuLVZhbHVlOglQcmVpcwoqLwpmbG9hdCBlcm1pdHRsZVByZWlzKGludCBzb3J0ZSkgewoJZmxvYXQgcHJlaXM9MDsKCXN3aXRjaChzb3J0ZSkgewoJCWNhc2UgMTogcHJlaXMgPSAwLjU7IGJyZWFrOwoJCWNhc2UgMjogcHJlaXMgPSAxLjA7IGJyZWFrOwoJCWNhc2UgMzogcHJlaXMgPSAyLjA7IGJyZWFrOwoJfQoJcmV0dXJuIHByZWlzOwp9CgovKglTdGFydGV0IEJlemFobHZvcmdhbmcKCVBhcmFtZXRlcjogIAl6dVphaGxlbiwgenUgemFobGVuZGVyIEJldHJhZwoJUmV0dXJuLVZhbHVlOglnZXphaGx0ZXIgQmV0cmFnCiovCmZsb2F0IGJlemFobGVuKGZsb2F0IHp1WmFobGVuKSB7CglwcmludGYoIlxuLS0tIEJlemFobHZvcmdhbmcgLS0tXG4iKTsKCXByaW50ZigiXG5CZXphaGx2b3JnYW5nIGFiYnJlY2hlbiBtaXQgMFxuIik7CglmbG9hdCBlaW53dXJmLCBnZXphaGx0PTA7CglkbyB7CgkJcHJpbnRmKCJcbkVzIGZlaGxlbiBub2NoICUuMmYgRXVyby4iLCB6dVphaGxlbi1nZXphaGx0KTsKCQlwcmludGYoIlxuQml0dGUgd2VyZmVuIHNpZSBlaW4gR2VsZHN0dWVjayBlaW46ICIpOwoJCXNjYW5mKCIlZiIsICZlaW53dXJmKTsKCgkJLy8gQWJicnVjaCBwcnVlZmVuCgkJaWYoZWlud3VyZiA9PSAwKSB7CgkJCWJyZWFrOwoJCX0KCQkKCQkvLyBlaW5nZXdvcmZlbmVuIEJldHJhZyBhbnJlY2huZW4KCQlpZihwcnVlZmVHZWxkc3R1ZWNrKGVpbnd1cmYpKSAgewoJCQlnZXphaGx0ICs9IGVpbnd1cmY7CgkJfWVsc2UgewoJCQlwcmludGYoIlxuSWhyIEdlbGRzdHVlY2sgaXN0IHVuZ3VlbHRpZy4iKTsKCQl9CgkJCgl9IHdoaWxlKGdlemFobHQgPCB6dVphaGxlbik7CgoJcmV0dXJuIGdlemFobHQ7Cn0KCi8qCXBydWVmdCBHZWxkc3R1ZWNrIGF1ZiBHdWVsdGlna2VpdAoJUGFyYW1ldGVyOiAgCW11ZW56ZSwgZW50cHJpY2h0IGVpbmdld29yZmVuZW0gR2VsZHN0dWVjawoJUmV0dXJuLVZhbHVlOgkxLCBndWVsdGlnZSBNdWVuemUKCQkJMCwgZmFsc2NoZSBNdWVuemUKKi8KaW50IHBydWVmZUdlbGRzdHVlY2soZmxvYXQgbXVlbnplKSB7CQoJLy8gTXVlbnp3ZXJ0IGluIGdhbnplIFphaGwgdW1yZWNobmVuLCBhbHNvIGluIENlbnQuCgkvLyBEYSBkaWUgY2FzZSBBbndlaXN1bmcgbmljaHQgbWl0IGZsb2F0cyBhcmJlaXRlbiBrYW5uLgoJaW50IGNlbnQgPSBtdWVuemUgKiAxMDA7Cglzd2l0Y2goY2VudCkgewoJCWNhc2UgNToJCXJldHVybiAxOwoJCWNhc2UgMTA6CXJldHVybiAxOwoJCWNhc2UgMjA6CXJldHVybiAxOwoJCWNhc2UgNTA6CXJldHVybiAxOwoJCWNhc2UgMTAwOglyZXR1cm4gMTsKCQljYXNlIDIwMDoJcmV0dXJuIDE7CgkJZGVmYXVsdDoJcmV0dXJuIDA7Cgl9Cn0KCnZvaWQgYXVzZ2FiZUdldHJhZW5rZShpbnQgc29ydGUsIGludCBtZW5nZSkgewoJcHJpbnRmKCJcbi0tLSBHZXRyYWVua2VhdXNnYWJlIC0tLVxuIik7CglpbnQgaTsKCWZvcihpPTA7IGkgPCBtZW5nZTsgaSsrKSAgewoJCXByaW50ZigiXG5GbGFzY2hlICVkIHZvbiAlZCBkZXIgU29ydGUgJWQgd3VyZGUgYXVzZ2VnZWJlbi4iLAoJCQlpKzEsIG1lbmdlLCBzb3J0ZSk7Cgl9Cn0=