====== Mögliche Lösungen zum Bankautomat ======
Die Aufgabe finden Sie hier [[training:bank:start]].
===== C =====
==== Iterativ ====
#include
int main()
{
int betrag;
scanf("%d", &betrag);
if (betrag%5!=0 || betrag<0)
{
printf ("Dieser Betrag ist nicht ausgebbar. Beende.\n");
return 0;
}
while (betrag>=500)
{
betrag-=500;
printf ("Gebe 500 Euro aus\n");
}
while (betrag>=200)
{
betrag-=200;
printf ("Gebe 200 Euro aus\n");
}
while (betrag>=100)
{
betrag-=100;
printf ("Gebe 100 Euro aus\n");
}
while (betrag>=50)
{
betrag-=50;
printf ("Gebe 50 Euro aus\n");
}
while (betrag>=20)
{
betrag-=20;
printf ("Gebe 20 Euro aus\n");
}
while (betrag>=10)
{
betrag-=10;
printf ("Gebe 10 Euro aus\n");
}
while (betrag>=5)
{
betrag-=5;
printf ("Gebe 5 Euro aus\n");
}
return 0;
}
==== Iterativ, aber nur mit zwei Schleifen ====
#include
int main()
{
int betrag;
int schein[]={500, 200, 100, 50, 20, 10, 5};
scanf("%d", &betrag);
if (betrag%5!=0 || betrag<0)
{
printf("Der Betrag ist nicht ausgebbar, breche ab");
return 0;
}
for (int i=0; i<7; i++)
{
while (betrag>=schein[i])
{
betrag-=schein[i];
printf("Gebe %d Euro-Schein aus.\n", schein[i]);
}
}
return 0;
}
==== komplett ohne Schleifen ====
#include
int main()
{
int betrag;
scanf("%d", &betrag);
if (betrag%5!=0 || betrag<0)
{
printf ("Betrag ist nicht ausgebbar, Beende. ");
return 0;
}
printf ("Gebe %d 500 Euro Scheine aus\n", betrag/500);
betrag%=500;
printf ("Gebe %d 200 Euro Scheine aus\n", betrag/200);
betrag%=200;
printf ("Gebe %d 100 Euro Scheine aus\n", betrag/100);
betrag%=100;
printf ("Gebe %d 50 Euro Scheine aus\n", betrag/50);
betrag%=50;
printf ("Gebe %d 20 Euro Scheine aus\n", betrag/20);
betrag%=20;
printf ("Gebe %d 10 Euro Scheine aus\n", betrag/10);
betrag%=10;
printf ("Gebe %d 5 Euro Scheine aus\n", betrag/5);
betrag%=5;
return 0;
}
==== Unter Benutzung einer Funktion ====
#include
int anz(int* betrag, int schein)
{
int anzahlScheine=*betrag /schein;
*betrag%=schein;
return anzahlScheine;
}
int main()
{
int betrag;
int scheine[]={500, 200, 100, 50, 20, 10, 5};
scanf ("%d", &betrag);
if (betrag%5!=0 || betrag<0)
{
printf ("Der Betrag ist nicht ausggebbar, Beende.");
return 0;
}
for (int i=0; i<7; i++)
{
printf ("Gebe %d %d Euro Scheine aus\n", anz(&betrag, scheine[i]), scheine[i]);
}
return 0;
}
===== Fortran =====
program bank
integer betrag
integer,dimension(7)::schein
integer i
schein(1) = 500
schein(2) = 200
schein(3) = 100
schein(4) = 50
schein(5) = 20
schein(6) = 10
schein(7) = 5
read (*,*) betrag
i=1
do while (betrag>4)
do while (betrag
===== Haskell =====
bank :: Int -> Int -> IO()
bank betrag schein
| betrag == 0 = return ()
| betrag >= schein = do putStrLn ( show(schein) )
bank (betrag-schein) schein
| schein == 5 && betrag /= 0 = putStrLn ( "der Betrag geht nicht auf" )
| betrag < schein = bank betrag (klSchein ( schein ))
klSchein :: Int -> Int
klSchein schein
| schein == 500 = 200
| schein == 200 = 100
| schein == 100 = 50
| schein == 50 = 20
| schein == 20 = 10
| schein == 10 = 5
| otherwise = 5
===== Rust =====
fn main() {
let bank = [500, 200, 100, 50, 20, 10, 5];
let betrag = 42035;
let mut rest = betrag;
// I need to borrow a slice from the array to iterate over it
for x in &bank {
let r1 = rest % x;
let dif = rest - r1;
println!("Ich gebe {}x einen {}€ Schein aus", (dif/x), x);
rest = r1;
}
if rest != 0 {
println!("Der Betrag kann nicht passend ausgezahlt werden. Rest: {}", rest);
}
}