Mögliche Lösungen zum Bankautomat

Die Aufgabe finden Sie hier Bankautomat.

C

Iterativ

bank_iterativ.c
#include <stdio.h>
 
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

bank_zweischleifen.c
#include <stdio.h>
 
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

bank_schleifenlos.c
#include <stdio.h>
 
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

bank_funktion.c
#include <stdio.h>
 
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

bank.f
      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<schein(i))
            i=i+1;
          enddo
          write (*,*) schein(i)
          betrag=betrag-schein(i)
 
        enddo
        write (*,*) betrag
      end program

Haskell

bank.hs
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

bank.rs
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);
    }
}