# der Geldautomat



## cRaZe (31. März 2003)

Hi Leute

Also mein Dozent gab mir, einem anfänger, die Aufgabe ein prog zu schreiben das folgende sachen können muss:
-1,37€ müssen fon dem betrag abgehoben werden
-es kann mir münzen oder mit scheinen bezahlt werden.
-es MUSS immer der geringste münzen aufwand genommen werden.(Also nicht alles in cent zurück geben oder so.
------------------------------------
Im eigentlichen ist das dingen ein geldwechselautomat

Also ich habe mal so angefangen aber es ist nicht viel. Brauche mal so ein paar tipps wie man es realisieren kann.


```
#include<stdio.h>

float money=1,37;
int abetrag;

main()
{
```

und genau jetzt weis ich nicht mehr weite 

Hat einer von euch ein paar tipps?

Gruß


----------



## Robert Martinu (31. März 2003)

Formelles: globale Variablen sind etwas, dass ein Dozent üblicherweise nicht gerne sieht.

Geldrückgabe:
nimm die grösste Münze, schau ob der rückzugebende Betrag grösser ist - dann gib diese Münze raus und verringere den Rückgabebetrag entsprechen, wenn nicht versuchs mit der nächstkleineren Münze.
Mit Scheinen geht nat. genauso.


Vielleicht solltest u statt mit Nachkomma-Euros mit Integer-Cents rechnen, so vermeidet man Ärger bei der Binär-/Dezimalumrechnung.


----------



## cRaZe (31. März 2003)

jo erstmal danke für die tipps.

Nimms mir nicht übel aber der größteteil wurde von mir nicht verstanden. Werde mich aber trotzdem daran halten.

Im groben kann ich es rechnen oder von c ausgeben lassen. Das Problem besteht darin C klar zu machen.
Sagen wir ich gebe mit über scanf 2€ ein und das prog zieht die erwähnten 1,37€ ab. Somit bleibt der Rest von 63€cent übrig. Dies sollte dann natürlich ein 50-, ein 10-, ein 2-, und ein 1 cent stück sein.

Aber genau das ist das Problem. Wie mache ich es. Ich kann es zwar als int definieren doch im prog muss es ja irgendwie dazu gebracht werden immer die grösste auswahl an münzen oder scheinen zurück zu geben.

Vielleicht ist es jetzt deutlicher geworden was er von uns ferlangt. 

Gruß


----------



## SilentWarrior (31. März 2003)

hm öh... hat er das nicht gerade erklärt? einfach von oben bis unten prüfen. da ich in der schweiz wohne, weiss ich net, welches die grösste euro-note ist. (evtl. 500 € oder so) und dann halt abwärts zählen. bps. 63 c:

500 - 5 € - nichts
2 + 1 € - auch nichts
50c - einmal
20c - nichts
10c - einmal
5c - nichts
2c - einmal
1c - einmal

weiss net, ob die wertangaben stimmten. aber das prinzip solltest du verstanden haben, oder?


----------



## cRaZe (31. März 2003)

hi silent

Das prinzip habe ich schon verstanden schon bevor ich gepostet habe. Nur die anwendung bzw. die formel hab ich dazu nicht. Und genau da wollte ich hilfe von euch.


----------



## Matthias Reitinger (31. März 2003)

```
while (euro > 0 && cent > 0) {
  if (euro >= 500) {
    puts("500€-Schein");
    euro -= 500;
  } else if (euro >= 200) {
    puts("200€-Schein");
    euro -= 200;
  // usw. für die anderen scheine und euro-münzen
  } else if (cent >= 50) {
    puts("50-Cent Münze");
    cent -= 50;
  } else if (cent >= 20) {
    puts("20-Cent Münze");
    cent -= 20;
  // usw. für alle cent-münzen
  }
}
puts("Auszahlung komplett!");
```
Wäre eine denkbare Möglichkeit. Ist allerdings ungetestet.


----------



## SilentWarrior (31. März 2003)

> if (euro >= 500) {
> [...]
> } else if (euro >= 200)


läuft soweit ich weiss so nicht. 600 z.b. ist ja in beiden fällen true, da gibt's komplikationen.

also sorry craze, ich prog kein c/c++/... was auch immer. nur php. aber ich hab mal bei selfhtml nen artikel gefunden. da geht's zwar um zeit, aber das grundproblem is genau das gleiche wie bei dir.

http://selfaktuell.teamone.de/tippstricks/programmiertechnik/zeitberechnung/index.htm

da wird mit dem rest gearbeitet, also z.b 753 euro gibt 1 rest 253. und dann rechnest du mit 253 weiter.


----------



## Matthias Reitinger (31. März 2003)

Hm, wieso gibt's da Komplikationen? Es wird immer zuerst geprüft ob die größere Geldeinheit ausgezahlt werden kann, wenn nicht wird auf die nächstkleinere geprüft usw. Ich seh da keine Probleme...?


----------



## Christian Fein (1. April 2003)

> _Original geschrieben von reima _
> 
> ```
> while (euro > 0 && cent > 0) {
> ...



Nicht schlecht
aber ich würde komplett alles in Cent umrechnen

```
while (cent > 0) {
  if (cent >= 500000) {
    puts("500€-Schein");
    cent-= 50000;
  } else if (cent >= 200000) {
    puts("200€-Schein");
    cent-= 200000;
  } else if (cent >= 50) {
    puts("50-Cent Münze");
    cent -= 50;
  } else if (cent >= 20) {
    puts("20-Cent Münze");
    cent -= 20;
  // usw. für alle cent-münzen
  }
}
```
Das vereinfacht die Berechnung weil du nur mit Cent rechnen musst.
Aber vom prinzip ists das selbe I


----------



## rook (1. April 2003)

```
int main()
{
	float betrag;
	
	printf("Betrag eingeben: ");
	scanf("%f", &betrag);

	betrag += 0.001f; // da nach einer höheren zahl mit komma, die eingabe nichtmehr stimmt...

	while(betrag >= 0.01f)
	{

		if(betrag >= 500.00)
		{
			printf("500 Euro Schein\n");
			betrag -= 500.00f;
		}
		else if(betrag >= 200.00)
		{
			printf("200 Euro Schein\n");
			betrag -= 200.00f;
		}
		else if(betrag >= 100.00)
		{
			printf("100 Euro Schein\n");
			betrag -= 100.00f;
		}
		else if(betrag >= 50.00)
		{
			printf("50 Euro Schein\n");
			betrag -= 50.00f;
		}
		else if(betrag >= 20.00)
		{
			printf("20 Euro Schein\n");
			betrag -= 20.00f;
		}
		else if(betrag >= 10.00)
		{
			printf("10 Euro Schein\n");
			betrag -= 10.00f;
		}
		else if(betrag >= 5.00)
		{
			printf("5 Euro Schein\n");
			betrag -= 5.00f;
		}
		else if(betrag >= 2.00)
		{
			printf("2 Euro\n");
			betrag -= 2.00f;
		}
		else if(betrag >= 1.00)
		{
			printf("1 Euro\n");
			betrag -= 1.00f;
		}
		else if(betrag >= 0.50)
		{
			printf("50 Cent\n");
			betrag -= 0.50f;
		}
		else if(betrag >= 0.20)
		{
			printf("20 Cent\n");
			betrag -= 0.20f;
		}
		else if(betrag >= 0.10)
		{
			printf("10 Cent\n");
			betrag -= 0.10f;
		}
		else if(betrag >= 0.05)
		{
			printf("5 Cent\n");
			betrag -= 0.05f;
		}
		else if(betrag >= 0.02)
		{
			printf("2 Cent\n");
			betrag -= 0.02f;
		}
		else if(betrag >= 0.01)
		{
			printf("1 Cent\n");
			betrag -= 0.01f;
		}

	}
	printf("Ihr Betrag wurde ausgezahlt.\n");

	return 0;
}
```

ich find das so ganz nett, auch wenn ihr es nicht so machen würdet... ich würde es auf jeden fall so machen...


----------



## Christian Fein (1. April 2003)

lol das ist nichts anderes als meine
umänderung.


----------



## rook (1. April 2003)

hmm.... nur muss man nichts umrechnen...


----------

