====== 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); } }