Bizepsbenny
Mitglied
Dabei seit: 14.08.2017
Beiträge: 27
|
|
Meine Frage:
Hallo, ich soll ein Pascal Programm schreiben, das einen Geldbetrag in Euro einliest (1-99 Cent) und diesen Betrag in der Stückelung der Centmünzen ausgibt (50,20,10,5,2,1,). Als Beispiel Eingabe: 15 Ausgabe: 0 0 1 1 0 0.
Hat da jemand einen Ansatz für mich?
Danke und Gruß
BB
Meine Ideen:
Habe bisher keinen Ansatz.
|
|
04.10.2017 17:36 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Kennst Du die Ganzzahl-Division mit "div" und die Modulo-Operation mit "mod"?
Die Idee ist: Teile den Betrag zuerst durch den höchsten Münzwert ganzzahlig. Das Ergebnis ist die Anzahl der Münzen und der Rest ist der neue Restwert. Teile diesen wieder ganzzahlig durch den nächst-kleineren Münzwert. Auch hier ist das Ergebnis die Menge dieser Münzen und der Rest mit mod gibt Dir den neuen Restwert, mit dem Du weiter machen musst. Und so weiter, bis Du alle Münzwerte durch hast oder kein Restwert mehr übrig ist (das sollte auf jeden Fall nach dem kleinsten Münzwert der Fall sein, es reicht also den Restwert auf null zu überprüfen).
Gruß
Marco
|
|
04.10.2017 19:50 |
|
|
|
Bizepsbenny
Mitglied
Dabei seit: 14.08.2017
Beiträge: 27
|
|
Ok danke dir!
Ich werde es mal probieren!
Kann ich dich weiterhin fragen, wenn Probleme auftauchen?
Gruß
BB
__________________ Gruß
BB
|
|
05.10.2017 11:44 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Dafür ist das Board hier da
|
|
05.10.2017 14:17 |
|
|
|
Bizepsbenny
Mitglied
Dabei seit: 14.08.2017
Beiträge: 27
|
|
super
ok, also ich habe den Algorithmus kapiert.
Ich gebe als Beispiel 0.99 Euro ein und lasse den Computer 0.99 mod 0.50 rechnen.
Dann bekomme ich 1 Rest 0.49 heraus.
Die 1 ist dann die Anzahl der 50 Cent Münzen und mit den Rest teile ich durch 0.2 usw.
Aber wie bringe ich ihm bei, dass er die '1' ausgeben soll und mit dem Rest weiter rechnen soll?
Gruß
BB
__________________ Gruß
BB
|
|
05.10.2017 15:40 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Vorsicht! "mod" gibt Dir nur den Disvisionsrest, "div" gibt Dir den ganzzahligen Teil der Division.
Wenn Du also 99 mod 50 machst, bekommst Du 49 als Rest raus und mit 99 div 50 bekommst Du 1 als ganzzahligen Divisions-Anteil raus, also hast Du "1 Rest 49".
Ausgabe kannst Du z. B. mit write machen, oder? Magst Du mal ausprobieren so ein Programm zu anzufangen und was Du hast hier rein stellen? Dann können wir leichter auf Deine Fragen eingehen.
Gruß
Marco
|
|
05.10.2017 16:12 |
|
|
|
Bizepsbenny
Mitglied
Dabei seit: 14.08.2017
Beiträge: 27
|
|
Das macht Sinn.
Werde entweder später oder morgen mal was hier rein stellen.
Gruß
BB
__________________ Gruß
BB
|
|
05.10.2017 18:07 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Ah, ich denke, Du brauchst auch wirklich Ganzzahlen (also ohne Komma bzw. Punkt). Das kannst Du aber einfach erreichen, indem Du in Cent rechnest, also alles mit 100 multiplizierst zuerst (also den eingegebenen Betrag mit 100 multiplizierst und dann zuerst mit 50 etc. dividierst).
Gut wäre eventuell auch, wenn man die Beträge der Münzen in ein Array packen könnte zuerst. Das wäre übersichtlicher. Allerdings weiß ich selbst nicht, wie man das in Pascal genau macht... Müsste ich dann selbst mal schauen.
Gruß
Marco
|
|
06.10.2017 13:09 |
|
|
| |
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Hallo!
Das sieht doch schon ganz gut aus!
Ich denke aber, Du brauchst nicht unbedingt immer eine neue Variable für den neuen Betrag-Wert. Du kannst durchaus auch einfach schreiben:
code: |
1:
|
Betrag := Betrag mod 50; |
|
Also immer wieder dieselbe Variable Betrag mit dem neuen Wert überschreiben. Den alten brauchst Du ja nicht mehr wirklich. Vielleicht höchstens den allerersten, um noch die ursprüngliche Eingabe des Benutzers zu kennen, aber bisher brauchst Du das auch nicht unbedingt.
Zum Array muss ich selbst probieren. Ich hab das letzte Mal vor fast 30 Jahren in Pascal programmiert (noch in der Schule... jaja, so lange ist das bei mir doch schon her!). Deshalb weiß ich das alles leider nicht mehr so genau.
Gruß
Marco
|
|
06.10.2017 14:16 |
|
|
|
Bizepsbenny
Mitglied
Dabei seit: 14.08.2017
Beiträge: 27
|
|
Hallo,
du hast Recht, es reicht auch, die Variable Betrag immer wieder zu überschreiben
PS: Ich werde mir dann mal das Kapitel über Arrays durchlesen, aber es wäre toll, wenn du mir in einfachen Worten erklären könntest, was damit ungefähr gemeint ist.
Dann verstehe ich den Text vllt etwas einfacher.
Danke
Gruß
BB
__________________ Gruß
BB
|
|
06.10.2017 14:34 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Ich hab mal selbst etwas rumprobiert. Ich hab als ersten Versuch so was hier:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
Program Muenzen(output);
var muenzwerte : array [1 .. 6] of Integer = (50, 20, 10, 5, 2, 1);
var intBetrag : Integer;
var muenznummer : SmallInt;
var Betrag : Double;
begin
write('Betrag? ');
readln(Betrag);
intBetrag := Trunc(Betrag * 100.0); // umwandeln der Eingabe in Centwerte
muenznummer := 1; // wir beginnen mit der ersten Muenze
while(intBetrag > 0) do
begin
writeln('Muenze: ', muenzwerte[muenznummer], ' Anzahl: ', intBetrag div muenzwerte[muenznummer]);
intBetrag := intBetrag mod muenzwerte[muenznummer];
muenznummer := muenznummer + 1;
end;
end. |
|
Wobei er abbricht, sobald vom Betrag nichts mehr übrig ist. Wenn Du also einen Euro hast, dann gibt er nur zweimal 50Cent aus und bricht dann ab. Weiß nicht, ob das gewünscht ist, kannst ja mal mit einer for... do-Schleife probieren über alle Array-Elemente zu laufen.
Gruß
Marco
|
|
06.10.2017 14:56 |
|
|
| |
|
Ja, bei einer Typdefinition kannst du keine Werte vergeben. Dafür brauchst du eine var.
Trunc = zu 0 hin runden, also abrunden bei positiven Zahlen und aufrunden bei negativen.
__________________ Syntax Highlighting fürs Board (Link)
|
|
07.10.2017 07:00 |
|
|
|
|
|