[PASCAL] Problem mit while

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [PASCAL] Problem mit while

    Hallo,
    für den Unterricht sollen wir ein vorgegebenes Programm beenden,
    dies hab ich soweit auch getan und es funktioniert auch soweit.
    Es gibt nur ein Problem: Wenn ich z.B. 2 Ticket angebe und mit 30 Euro bezahle,
    wird anstatt 2x2 Cent, 1x2 Cent und 1x1 Cent angegeben.

    Vielleicht noch eine Info, das Programm soll ausgeben,
    wie viele 10, 5 €-Scheine, 2, 1 €-Stücke, 0,50, 0,20, 0,10, 0,5, 0,2 und 0,1 Centstücke man zurückbekommt.

    Das ist mein Quellcode:

    Quellcode

    1. // Höft & Wessel AG - TicketChange 0.0.3
    2. // Als Funktionstest soll ein Fahrkartenkauf von Soltau nach
    3. // Hannover Hbf gebucht werden.
    4. program TicketChange;
    5. uses crt;
    6. const priceSingle = 14.63;
    7. var number: integer;
    8. priceTotal, payment, change,
    9. num1, num2, num3, num4, num5,
    10. num6, num7, num8, num9, num10: real;
    11. begin
    12. clrScr;
    13. writeLn ('Fahrkarte Soltau - Hannover Hbf');
    14. writeLn ();
    15. write ('Bitte geben sie die Anzahl der Karten ein: ');
    16. readLn (number);
    17. priceTotal := number * priceSingle;
    18. writeLn ('Der Gesamtbetrag betraegt: ', priceTotal:4:2, ' EUR');
    19. writeLn ('Gebe Sie den EUR Betrag ein, den Sie einzahlen: ');
    20. readLn (payment);
    21. change := payment - priceTotal;
    22. writeLn ('Sie bekommen ', change:4:2, ' Euro zurueck');
    23. writeLn();
    24. writeLn ('Ausgabe des Wechselggelds');
    25. while(change >= 10) do
    26. begin
    27. num1 := num1 + 1;
    28. change := change - 10;
    29. end;
    30. while(change >= 5) do
    31. begin
    32. num2 := num2 + 1;
    33. change := change - 5;
    34. end;
    35. while(change >= 2) do
    36. begin
    37. num3 := num3 + 1;
    38. change := change - 2;
    39. end;
    40. while(change >= 1) do
    41. begin
    42. num4 := num4 + 1;
    43. change := change - 1;
    44. end;
    45. while(change >= 0.5) do
    46. begin
    47. num5 := num5 + 1;
    48. change := change - 0.5;
    49. end;
    50. while(change >= 0.2) do
    51. begin
    52. num6 := num6 + 1;
    53. change := change - 0.2;
    54. end;
    55. while(change >= 0.1) do
    56. begin
    57. num7 := num7 + 1;
    58. change := change - 0.1;
    59. end;
    60. while(change >= 0.05) do
    61. begin
    62. num8 := num8 + 1;
    63. change := change - 0.05;
    64. end;
    65. writeln(change:0:2); // debugging
    66. while(change >= 0.02) do
    67. begin
    68. num9 := num9 + 1;
    69. change := change - 0.02;
    70. end;
    71. writeln(change:0:2); // debugging
    72. while(change >= 0.01) do
    73. begin
    74. num10 := num10 + 1;
    75. change := change - 0.01;
    76. end;
    77. writeln(change:0:2); // debugging
    78. writeLn (num1:4:0, ' 10 Euroschein/e');
    79. writeLn (num2:4:0, ' 5 Euroschein/e');
    80. writeLn (num3:4:0, ' 2 Euromuenze/n');
    81. writeLn (num4:4:0, ' 1 Euromuenze/n');
    82. writeLn (num5:4:0, ' 0.50 Centstueck/e');
    83. writeLn (num6:4:0, ' 0.20 Centstueck/e');
    84. writeLn (num7:4:0, ' 0.10 Centstueck/e');
    85. writeLn (num8:4:0, ' 0.05 Centstueck/e');
    86. writeLn (num9:4:0, ' 0.02 Centstueck/e');
    87. writeLn (num10:4:0, ' 0.01 Centstueck/e');
    88. readKey;
    89. end.
    Alles anzeigen

    Danke im Voraus.
  • du kanns mit floats nicht so einfach vergleichen, da die float zahlen ungenau sind.
    0.02-0.01 ist nicht 0.01 ;) sonderen 9.99999999999844E-0003

    ;)

    ach ja so was

    Quellcode

    1. num1, num2, num3, num4, num5,
    2. num6, num7, num8, num9, num10: real;

    und viele deine schleifen die das ganze tun sind nicht schön
    MfG ShureG

    There are 10 kinds of people. Those who understand binary notation, and those who do not.