Autor Beitrag
johna123
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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 -> :autsch:

ausblenden volle Höhe Delphi-Quelltext
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



    { Private-Deklarationen }
  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;
    { Public-Deklarationen }

  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 user profile iconGausi: CS- durch Delphi-Tags ersetzt
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.12.10 03:21 
:welcome: 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 :shock:
  • 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:
ausblenden volle Höhe Delphi-Quelltext
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
    (zAn, zWasserFilter, zAn, zAn),           // zWasser
    (zWasserFilter, zAn, zFilterKaffee, zAn), // zFilter
    (zAn, zAn, zWasserFilterKaffee, zAn),     // zWasserFilter
    (zWasserFilterKaffee, zAn, zAn, zAn),     // zFilterKaffee
    (zAn, zAn, zAn, zAn));                    // zWasserFilterKaffee
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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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 :shock:
* 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.12.10 12:26 
user profile iconjohna123 hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconjohna123 hat folgendes geschrieben Zum zitierten Posting springen:
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:
docwiki.embarcadero....stem.TObject.Destroy hat folgendes geschrieben:
Do not call Destroy directly. Call Free instead. Free verifies that the object reference is not nil before calling Destroy.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 14.12.10 19:02 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjohna123 hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.12.10 19:05 
Nein, das sind die Eingaben. ;-)
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 14.12.10 20:46 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
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 ...