Ein Konto verfügt über einen Betrag von 5000 €. Bei einem Minus-Zeichen vor dem eingegebenen Betrag wird der Betrag vom Kontostand abgezogen, steht vor dem Betrag ein Plus-Zeichen wird der Betrag auf das Konto eingezahlt.
Das Programm stellt fest:
- ob es sich um eine Ein- oder Auszahlung handelt, fehlt die Information, wird eine Fehlermeldung angezeigt.
- ob sich das Konto durch den auszuzahlenden Betrag im Soll befindet
in diesem Fall wird kein Geld ausgezahlt - wie viele Scheine im Wert von 50 €, 20 € und 10 € ausgegeben werden müssen
So sieht es aus:
Lege im Kopf des Programms die globalen Variablen fest.
int Kontostand = 5000;
// Scheine, die eingezahlt/ausgegeben werden
int Fuenfziger;
int Zwanziger;
int Zehner;
Im setup-Teil wird der Serielle Monitor gestartet und die ⇒Funktion KontoAnzeigen() aufgerufen. Der Funktion wird der aktuelle Kontostand als Variable übergeben. Außerdem dient sie als Information über den Ablauf des Programms.
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
// Startbildschjirm
KontostandAnzeigen(Kontostand);
}
void KontostandAnzeigen(int Kontostand)
{
// Kontostand anzeigen
// \u20ac = €
Serial.println("Neuer Kontostand: " + String(Kontostand) + " \u20ac");
Serial.println("-------------------------------------------------------");
Serial.println("Wie viel m\u00f6chtest du einzahlen oder abheben?");
Serial.println("Der Betrag muss durch 10 teilbar sein!");
Serial.println("Auszahlung -> dem Betrag ein - Zeichen voranstellen");
Serial.println("Einzahlung -> dem Betrag ein + Zeichen voranstellen");
Serial.println("-------------------------------------------------------");
}
Der loop-Teil fragt die Eingabe ab. Dem Betrag muss ein Minus-Zeichen oder ein Plus-Zeichen vorangestellt werden. Beachte die Kommentare.
void loop()
{
// abgehobener/eingezahlter Betrag
int Betrag;
// auf serielle Eingabe warten
while (Serial.available() > 0)
{
// Eingabe im Seriellen Monitor bis zum return lesen
String Eingabe = Serial.readStringUntil'\n');
// return entfernen
Eingabe = Eingabe.substring(0, Eingabe.length());
// Testen, ob das erste Zeichen + char(43) oder - char(45) ist
if (Eingabe.charAt(0) == char(43) || Eingabe.charAt(0) == char(45))
{
// Auszahlung
if (Eingabe.startsWith("-"))
{
Betrag = Eingabe.toInt() * -1;
// Betrag muss durch 10 teilbar sein
if (Betrag % 10 == 0) BetragAuszahlen(Betrag);
}
// Einzahlung
if (Eingabe.startsWith("+"))
{
Betrag = Eingabe.toInt();
// Betrag muss durch 10 teilbar sein
if (Betrag % 10 == 0) BetragEinzahlen(Betrag);
}
}
}
}
Die Funktionen BetragAuszahlen() und BetragEinzahlen() sorgen für die Berechnung des Kontostandes. Außerdem wird hier die Funktion AnzahlScheine() aufgerufen. Sie berechnet mit Hilfe von ⇒modulo die Anzahl der 50er, 20er und 10er. Beachte die Kommentare.
void BetragEinzahlen(int Betrag)
{
Kontostand = Kontostand + Betrag;
// \u00f6 = ö, \u20ac = €
Serial.println("Du m\u00f6chtest " + String(Betrag) + " \u20ac einzahlen.");
// Anzahl der Scheine (50, 20 und 10) feststellen
AnzahlScheine(Betrag);
// Kontostand und Info anzeigen
KontostandAnzeigen(Kontostand);
}
void BetragAuszahlen(int Betrag)
{
// der auszuzahlende Betrag ist zu hoch, das Konto ist im Soll
// \u00f6 = ö, \u20ac = €
if (Kontostand - Betrag < 0)
{
Serial.println("Auszahlung nicht m\u00f6glich!");
Serial.println("Kontostand ist im Soll: " + String(Kontostand - Betrag) + " \u20ac");
Serial.println("Bitte gib einen kleineren Betrag ein!");
Serial.println("----------------------------------------");
}
// Betrag auszahlen
else
{
Kontostand = Kontostand - Betrag;
Serial.println("Du m\u00f6chtest " + String(Betrag) + " \u20ac abheben.");
Serial.println("Du bekommst:");
// Anzahl der Scheine (50, 20 und 10) feststellen
AnzahlScheine(Betrag);
// Kontostand und Info anzeigen
KontostandAnzeigen(Kontostand);
}
}
void AnzahlScheine(int Betrag)
{
// Anzahl der 50er
int Rest = Betrag % 50;
/*
vom Betrag den Rest abziehen
Beispiel:
130 % 50 ergibt Rest 30
130 - 30 = 100
100 ist durch 50 teilbar
*/
Fuenfziger = (Betrag - Rest) / 50;
/*
Rest berechnen
wenn nicht durch 20 teilbar, kann neuerRest nur 10er sein
30 % 20 ergibt Rest 10
*/
int neuerRest = Rest % 20;
/*
Anzahl der 20er
der neueRest muss von Rest abgezogen werden
-> ergibt die 20er
*/
Zwanziger = (Rest - neuerRest) / 20;
// Anzahl der 10er
Zehner = neuerRest / 10;
// Anzahl der Geldscheine anzeigen
if (Fuenfziger > 0) Serial.println(String(Fuenfziger) + " F\u00fcnfziger");
if (Zwanziger > 0) Serial.println(String(Zwanziger) + " Zwanziger");
if (Zehner > 0) Serial.println(String(Zehner) + " Zehner");
}
Verwandte Anleitungen:
- Einmaleinsreihen anzeigen
- Fußballtipp
- Laplace-Versuch
- Lottozahlen - Anzeige im Seriellen Monitor
- Primzahlen ermitteln
- Satzmaschine
- Schneckenrennen
- Städte-Info
- Taschenrechner Grundrechenarten
- Teiler bestimmen
- Vokale zählen
- Vollkommene Zahlen
- Würfeln Serieller Monitor
Letzte Aktualisierung: