| Autor |
Beitrag |
johna123
Hält's aus hier
Beiträge: 2
|
Verfasst: Di 14.12.10 01:57
Hallo,
Ich hab mich mal an einem kaffeeautomaten versucht und bekomme immer nur "Nichts" oder "kabumm(explosion)
Könnt ihr mir sagen wo der fehler ist ? Unit2 -> Matrix ->
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type Tzustand = ( zan, zwasser, zfilter,zwasser_filter,zfilter_kaffee ,zwasser_filter_kaffee); Tausgabe = ( kaffee, Nichts,aWasser, afilter,aan,aexplosion); Teingabe = (ewasser, efilter, ekaffee,ean); type Tkaffeeautomat = class(Tobject)
private
public Zustand : TZustand; constructor create; destructor destroy; function eingabe (peingabe: teingabe) : tausgabe ; function ueberfuerung (pzustand: tzustand; peingabe : teingabe) :tzustand ; function ausgabefunktion(pzustand:tzustand; peingabe:teingabe):tausgabe;
end;
implementation constructor Tkaffeeautomat.create;
begin inherited create ; zustand := Zan ;
end;
destructor Tkaffeeautomat.destroy;
begin inherited create;
end;
function Tkaffeeautomat.eingabe(peingabe: teingabe) : tausgabe ; BEGIN
eingabe:= ausgabefunktion (zustand,peingabe); zustand:= ueberfuerung (zustand,peingabe); end;
function tkaffeeautomat.ueberfuerung(pzustand: tzustand; peingabe : teingabe) :tzustand ; const matrix : array [tzustand, teingabe] of tzustand =(( zwasser,zfilter,zanzan ), ( zan,zwasser_filter,zan,zan ), ( zwasser_filter,zan,zfilter_kaffee,zan ), ( zan, zan,zwasser_filter_kaffee,zan ), (zwasser_filter_kaffee,zan,zan, zan), (zan,zan,zan,zan)); begin
ueberfuerung :=matrix[pzustand,peingabe]; end;
function tkaffeeautomat.ausgabefunktion(pzustand:tzustand; peingabe:teingabe):tausgabe; const matrix : array [tzustand, teingabe] of tausgabe = ((nichts, nichts, aexplosion,nichts), (aexplosion,nichts, aexplosion, aexplosion), ( nichts,aexplosion, nichts, aexplosion), ( aexplosion,aexplosion, nichts, aexplosion), ( nichts, aexplosion,aexplosion,aexplosion), ( aexplosion, aexplosion, aexplosion,kaffee));
begin ausgabefunktion := matrix [pzustand, peingabe] ; end;
end. |
Danke Delphi-Team
Moderiert von Gausi: CS- durch Delphi-Tags ersetzt
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 03:21
 und hallo bei uns
In dem Quelltext fallen mir einige Probleme auf: - Grauenhafte Formatierung, so kann man den Quelltext kaum lesen
- In deinem Destruktor rufst du den geerbten Konstruktor auf
- Der Rückgabewert gehört in Result. Den Funktionsnamen zu benutzen stammt noch von Delphi 1 und sollte nicht mehr benutzt werden.
- Destroy sollte niemals direkt aufgerufen werden (siehe Delphi Hilfe)
Zum Problem: In welcher Reihenfolge drückst du denn die Knöpfe? Und wie soll es sein? Hast du einmal debuggt?
Wenn ich die Knöpfe in der Reihenfolge 1, 2, 4, 3 (Wasser, Filter, Kaffee, An) drücke, kommt Kaffee als Ausgabe heraus. Ist das so nicht korrekt?
Ein wenig übersichtlicher formatiert: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| type TZustand = (zAn, zWasser, zFilter, zWasserFilter, zFilterKaffee, zWasserFilterKaffee); TAusgabe = (aKaffee, aNichts, aWasser, aFilter, aAn, aExplosion); TEingabe = (eWasser, eFilter, eKaffee, eAn);
TKaffeeautomat = class(TObject) private FZustand : TZustand; function Ueberfuerung(AEingabe : TEingabe): TZustand ; function AusgabeFunktion(AEingabe: TEingabe): TAusgabe; public constructor Create; destructor Destroy; override; function Eingabe(AEingabe: TEingabe): TAusgabe; property Zustand: TZustand read FZustand; end;
[..]
constructor TKaffeeautomat.Create; begin inherited Create; FZustand := zAn; end;
destructor TKaffeeautomat.Destroy; begin inherited; end;
function TKaffeeautomat.Eingabe(AEingabe: TEingabe): TAusgabe ; begin Result := AusgabeFunktion(AEingabe); FZustand := Ueberfuerung(AEingabe); end;
function TKaffeeautomat.Ueberfuerung(AEingabe: TEingabe): TZustand; const Matrix: array [TZustand, TEingabe] of TZustand = ( (zWasser, zFilter, zAn, zAn), (zAn, zWasserFilter, zAn, zAn), (zWasserFilter, zAn, zFilterKaffee, zAn), (zAn, zAn, zWasserFilterKaffee, zAn), (zWasserFilterKaffee, zAn, zAn, zAn), (zAn, zAn, zAn, zAn)); begin Result := Matrix[FZustand, AEingabe]; end;
function TKaffeeautomat.AusgabeFunktion(AEingabe: TEingabe): TAusgabe; const Matrix: array [TZustand, TEingabe] of TAusgabe = ( (aNichts, aNichts, aExplosion, aNichts), (aExplosion, aNichts, aExplosion, aExplosion), (aNichts, aExplosion, aNichts, aExplosion), (aExplosion, aExplosion, aNichts, aExplosion), (aNichts, aExplosion, aExplosion, aExplosion), (aExplosion, aExplosion, aExplosion, aKaffee)); begin Result := Matrix[FZustand, AEingabe]; end; |
|
|
johna123 
Hält's aus hier
Beiträge: 2
|
Verfasst: Di 14.12.10 12:12
Hi Jaenicke,
die Rheienfolge ist Wasser, Filter, An, Kaffee
könnte ja dadran liegen das immer nur Kabumm(explosion) und Nichts kommt
| Zitat: | * Grauenhafte Formatierung, so kann man den Quelltext kaum lesen
* In deinem Destruktor rufst du den geerbten Konstruktor auf
* Der Rückgabewert gehört in Result. Den Funktionsnamen zu benutzen stammt noch von Delphi 1 und sollte nicht mehr
benutzt werden.
* Destroy sollte niemals direkt aufgerufen werden (siehe Delphi Hilfe) |
Das wurde so vorgeschrieben in der Schule....ich wollte es ja anders haben aber nur die Matrix war uns selbst überlassen.
| Zitat: | | Teingabe = (ewasser, efilter, ekaffee,ean); |
Dort die Rheinfolge ändern ?
P.S
Danke für deine hilfe
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 12:26
johna123 hat folgendes geschrieben : | | die Rheienfolge ist Wasser, Filter, An, Kaffee |
Wer die Aufgabe gemacht hat, hat noch nie Kaffee gekocht...
Zumindest bei meiner Kaffemaschine funktioniert das so nicht. Wenn die an ist, muss der Kaffee auch schon drin sein. Gut ok, bis das erste Wasser kommt hat man noch etwas Zeit, aber trotzdem...
Ja, es sollte reichen das auszutauschen, auch wenn ich noch nicht genauer geschaut habe.
johna123 hat folgendes geschrieben : | | Das wurde so vorgeschrieben in der Schule....ich wollte es ja anders haben aber nur die Matrix war uns selbst überlassen. |
Wenn dem so ist, mein Beileid zu dem Lehrer...
Ich hoffe du gewöhnst dir das nicht so an, wenn du später selbst was programmieren willst...
Zumindest bei dem klein geschriebenen Konstruktor und Destruktor sollte sogar eine Warnung oder ein Hinweis von Delphi kommen, und dass man Destroy nie selbst aufgerufen werden sollte, steht wie gesagt in der Hilfe. Du kannst ja mal auf Destroy gehen und F1 drücken und das deinem Lehrer zeigen.
Oder in dem Link steht es auch beim Hersteller in der Doku:
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 14.12.10 19:02
jaenicke hat folgendes geschrieben : | johna123 hat folgendes geschrieben : | | die Rheienfolge ist Wasser, Filter, An, Kaffee | Wer die Aufgabe gemacht hat, hat noch nie Kaffee gekocht...
Zumindest bei meiner Kaffemaschine funktioniert das so nicht. Wenn die an ist, muss der Kaffee auch schon drin sein. Gut ok, bis das erste Wasser kommt hat man noch etwas Zeit, aber trotzdem...
|
ich weiß, das ist jetzt vollkommen OT, aber ich wollts trotzdem mal anmerken: Ich denke die meinen die Reihenfolge so:
Ich geb wasser in die Maschine; geb den Filter rein, in dem schon der gemahlene Kaffee drin ist; schalte die Maschine an; Und tata: Rauskommen tut der fertige Kaffee.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 19:05
Nein, das sind die Eingaben. 
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Di 14.12.10 20:46
elundril hat folgendes geschrieben : | | Und tata: Rauskommen tut der fertige Kaffee. |
Oder die Maschine explodiert wirklich. Ich hatte vor etwa 15 Jahren bei mir erlebt, daß es einen Knall gab, die Kaffeemaschine einen Satz von 10 cm nach oben machte und dann auf der Seite liegen blieb. Das gab jedenfalls eine mächtige Sauerei auf dem Tisch und dem Fußboden ...
|
|
|