AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Geldrückgabeautomat programmieren, aber wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Geldrückgabeautomat programmieren, aber wie?

Ein Thema von steffi20021 · begonnen am 18. Okt 2005 · letzter Beitrag vom 21. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
steffi20021

Registriert seit: 18. Okt 2005
8 Beiträge
 
#1

Geldrückgabeautomat programmieren, aber wie?

  Alt 18. Okt 2005, 15:22
Hallo

wir sollen als Hausaufgabe über die Ferien einen Geldrückgabeautomaten programmieren.
Also der zu zahlende Betrag wird eingegeben, dann der eingezahlte Betrag und dann soll angegeben werden, welche Scheine/Münzen vom Automaten ausgegeben werden sollen und wie viele.

Erstmal paar allgemeine Fragen zu dem, was wir noch nicht im Unterricht hatten:
1) Meine Lehrerin hat drauf geschrieben, dass man die edit2.change Prozedur nehmen soll.
Wird dann das Ergebniss errechnet, sobald ich den Wert im Edit2 ändere, oder erst, wenn ich edit2 verlasse?
2) Wir sollen den Befehl rest:=Round(Rueckgeld*100); verwenden. Was bedeutet das "round"?


Jetzt noch zum Algorithmus:
Ich hab jetzt schonma ein Struktogramm angefangen.
Also grob, erst die Differenz zwischen zu zahlendem Betrag und eingezahltem Betrag. Das dann in Cent umrechnen (mit dem Befehl zu dem ich vorhin schon gefragt hab).
Dann würde ich eine case...of-Anweisung machen. Also wenn man 20001cent hat erstma durch 20000(für 200€scheine), das wäre ja dann die Anzahl der scheine. Das ganze mit div und dann nochma mit mod, für den rest. Aber der Rest müsste dann wieder in die case...of-Anweisung. Also müsste ich das theoretisch als Schleife machen, aber das hatten wir im Unterricht nochnicht.

Ich hoffe ich hab es jetzt nicht zu verwirrend erklärt!

Jetzt wollt ich fragen, ob ich irgendwie den leichten Weg übersehen hab oder allgemein nen groben Fehler drin hab (denn ich bin die Beste in Info und kann mir nich vorstellen, dass die Anderen auf das kommen), oder gibt es überhaupt einen Weg um Schleifen zu umgehen? Wenn ja, wäre ein kleiner Gedankenanstoß nützlich
und ein Link zu einer Seite wo Schleifen erklärt werden, vll auch noch (obwohl ich mir da auch selbst was suchen könnte).

Naja ich hoffe ihr könnt mir helfen!

Steffi


PS: In der Schule haben wir Borland Delphi 6 und zuhause hab ich die 8. Muss ich irgendwas beachten, oder gibt es da keine großen Unterschiede?(außer im Design?)
Nur tote Fische schwimmen mit dem Strom!
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Geldrückgabeautomat programmieren, aber wie?

  Alt 18. Okt 2005, 15:27
zu (1) TEdit.OnChange wird bei jeder Änderung des Inhalts ausglöst
zu (2) Round rundet bankisch Real- auf Integer-Werte

und Hallo im Forum
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Geldrückgabeautomat programmieren, aber wie?

  Alt 18. Okt 2005, 15:39
Delphi-Quellcode:
  for I := 1 to 14 do
  begin
    case I of
     1: G := 20000; //200,00€
     etc.
     14: G := 1 ; //0,01€
    end;
    Anzahl := Geld div G;
   Geld := Geld-Anzahl*G;
   //Anzahl auswerten
  end;
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Geldrückgabeautomat programmieren, aber wie?

  Alt 18. Okt 2005, 15:44
Zitat von steffi20021:
(...)
und ein Link zu einer Seite wo Schleifen erklärt werden, vll auch noch (obwohl ich mir da auch selbst was suchen könnte).
Übersicht über Themen betreffend die Delphi Language
Tutorial zu Schleifen

Man liest sich, Stanlay

PS: Herzlich willkommen!
  Mit Zitat antworten Zitat
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#5

Re: Geldrückgabeautomat programmieren, aber wie?

  Alt 18. Okt 2005, 15:57
HiHo,

erstmal: Hallo im Forum!

Eigentlich kannst du das Problem auch ohne Schleifen lösen. Der Ansatz ist zwar mehr zu schreiben (und damit nicht so raffiniert ), aber für Delphi-Neulinge (also den Rest deines Kurses) einfacher zu verstehen.
Du kannst den Restbetrag immer DIV die einzelnen Stückelungen rechnen und anschließend die Anzahl der ausgegebenen Scheine mal deren Wert vom Rest abziehen. Dadurch ergibt sich so eine eintöige Leiter, die immer die selbe Struktur hat, aber Schleifen brauchst du dafür nicht.

Als Code könnte man sich dann in etwa Folgendes vorstellen:
Delphi-Quellcode:
Rest := Gegeben - Preis; //in Euronen

spe_Anzahl200ter.Value := Rest DIV 200;
Rest := Rest - spe_Anzahl200ter.Value * 200;

spe_Anzahl100ter.Value := Rest DIV 100;
...
Um mit Schleifen usw. vertraut zu werden lohnt sich auf jeden Fall ein Blich in die Delphi-Grundlagen.

MfG,

hanselmansel

P.S.: Stanlay hat ja schon die entsprechenden tutorials auf dsdt.info verlinkt.
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Geldrückgabeautomat programmieren, aber wie?

  Alt 18. Okt 2005, 16:02
Hi nochmal. Ich würde die Lösung mit der Schleife bevorzugen, denn wie ich mir das vorstelle, könnte der Infolehrer daran denken, das ganze auszubauen: z.B. könnten einzelne Scheine (z.B. der 100er) ausgehen und das Programm muss sich anders behelfen. Dazu müsste man die einzelnen Stückelungen dann nur in ein Array übertragen und schon wäre das Ganze (die Lösung mit der Schleife) in dieser Hinsicht flexibel, während der hardgecodete ...äh... Code ( ) dann an seine Grenzen stößt.

Man liest sich, Stanlay
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#7

Re: Geldrückgabeautomat programmieren, aber wie?

  Alt 18. Okt 2005, 16:03
Hallo, ich würde das spontan so lösen


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const // 500€ 200€ 100€ 50€ 20€ 10€ 5€ 2€ 1€ Cents...
  Money: Array[0..13] of Cardinal = (50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 10, 5, 2, 1);
var
  Change: Cardinal;
  i : Integer;
begin
  Change := Round(StrToInt(EditChange.Text)); // aus dem Eingabefeld in Cents
  Memo1.Lines.Add('Rückgeld: ' + IntToStr(Change));

  while Change > 0 do
  for i := low(Money) to High(Money) do
    if Change >= Money[i] then begin
      case i of
        0..6: Memo1.Lines.Add(Format('Zahle %d € Schein', [Money[i] div 100]));
        7..8: Memo1.Lines.Add(Format('Zahle %d € Münze', [Money[i] div 100]));
        9..13: Memo1.Lines.Add(Format('Zahle %d Cent Münze', [Money[i]]));
        else Memo1.Lines.Add('??');
      end;
      Dec(Change, Money[i]);
      Break;
    end;
end;
Im Memo wird die Liste der ausgezahlten Geldmittel dargestellt.

Edit: Hatte 2€ vergessen
und Thanks Hanks

Edit: 2 Cent Münze eingefügt, mit so kleinen Beträgen kenne ich mich nicht aus
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#8

Re: Geldrückgabeautomat programmieren, aber wie?

  Alt 18. Okt 2005, 16:38
Die 2 Cent Münze hast du auch vergessen
  Mit Zitat antworten Zitat
steffi20021

Registriert seit: 18. Okt 2005
8 Beiträge
 
#9

Re: Geldrückgabeautomat programmieren, aber wie?

  Alt 18. Okt 2005, 18:09
Erstmal DANKE für eure Tipps und Infos!

@s14: Ich blick bei deinem quellcode überhaupt nich durch, wenn du Zeit und Lust hast, kannst mir ja ma erklären

Ich hab jetzt mal die Dinge die ich so einigermaßen verstanden hab zusammengeworfen und probiert das Programm zu schreiben...
-->viele Fehlermeldungen, hab es aber hinbekommen

NUR der Quellcode is extrem lang!
Weil:
Code:
case rest of
                    50000..100000:begin anz:=rest div 50000;
                                       rest:=rest mod 50000;
                                       label4.caption:=''+inttostr(anz)+' x 500€';
                                       label4.color:=clred;
                                 end;
                    20000..49999:begin anz:=rest div 20000;
                                       rest:=rest mod 20000;
                                       label5.caption:=''+inttostr(anz)+' x 200€';
                                       label5.color:=clred;
                                 end;

                .....
und ich muss am Anfang der Prozedur die label alle so zu sagen wieder auf 0 setzen (17 Stück)

Ich glaub mir muss echt ma jemand den Quellcode von s14 erklären

ich werd wohl morgen auch nochma probieren das ganze bissl zu vereinfachen, ma sehn ob ich nen weg finde. Nur ich weiß halt nochnich so viel und da is das bissl schwerer (verständlich, oder?)

Oh und noch ein Problem. Ich hab öfters mal "Lust" zu programmieren, aber mir fehlen die Ideen. Gibt es da Seiten, wo so Vorschläge vorgestellt sind? Oder was habt ihr so gern als "Anfänger" gemacht?

Nochma Danke, dass ihr mir geholfen habt und mich so freundlich aufgenommen habt!

Steffi
Nur tote Fische schwimmen mit dem Strom!
  Mit Zitat antworten Zitat
simonko

Registriert seit: 2. Jun 2005
125 Beiträge
 
#10

Re: Geldrückgabeautomat programmieren, aber wie?

  Alt 18. Okt 2005, 18:20
Solche Aufgaben kann man prima mit der Automatentechnik lösen. Google mal mealy -moor automat.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz