Pascal-Programm

Neue Frage »

Auf diesen Beitrag antworten »
Bizepsbenny Pascal-Programm

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.
 
Auf diesen Beitrag antworten »
as_string

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
Auf diesen Beitrag antworten »
Bizepsbenny

Ok danke dir!
Ich werde es mal probieren!

Kann ich dich weiterhin fragen, wenn Probleme auftauchen?

Gruß
BB
Auf diesen Beitrag antworten »
Karlito

Dafür ist das Board hier da smile
 
Auf diesen Beitrag antworten »
Bizepsbenny

super smile

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
Auf diesen Beitrag antworten »
as_string

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
Auf diesen Beitrag antworten »
Bizepsbenny

Das macht Sinn.

Werde entweder später oder morgen mal was hier rein stellen.

Gruß
BB
Auf diesen Beitrag antworten »
Bizepsbenny

Moin,

ich habe mal angefangen mit dem Programm (auch wenn ich noch nicht weiß wo die Reise hingeht Augenzwinkern ) aber ich verstehe die folgende Fehlermeldung nicht....

Gruß
BB
Auf diesen Beitrag antworten »
as_string

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
Auf diesen Beitrag antworten »
Bizepsbenny

Hallo,

also so weit bin ich, siehe Foto...und immer so weiter dann bin ja schon fertig.

PS: Arrays müsste ich mir auch erst durchlesen, das ist das nächste Kapitel zum lernen.

Könntest du mir erklären, wie das ginge? So sieht das Programm nämlich ziemlich kompliziert aus. Danke schonmal für deine Hilfe soweit Daumen hoch

Gruß
BB
Auf diesen Beitrag antworten »
as_string

Hallo!

Das sieht doch schon ganz gut aus! Tanzen
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
Auf diesen Beitrag antworten »
Bizepsbenny

Hallo,

du hast Recht, es reicht auch, die Variable Betrag immer wieder zu überschreiben Daumen hoch

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 smile

Gruß
BB
Auf diesen Beitrag antworten »
as_string

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
Auf diesen Beitrag antworten »
Bizepsbenny

Moin,

danke!

Ich habe auch einmal ein bissel herum probiert und den array-Typ verwendet. Wenn ich ihn so darstelle, wie in deinem Programm, erscheint bei mir folgende Fehlermeldung (siehe Anhang)

Woran liegt es?

Vllt daran, dass ich das array als type definiert habe?

PS: Ist Trunc die Gaußklammer-Funktion?

Gruß
BB
Auf diesen Beitrag antworten »
eulerscheZahl

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.
Auf diesen Beitrag antworten »
Bizepsbenny

ok vielen Dank smile

Gruß
BB
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »