Thema: Delphi Rechnen mit Mengen

Einzelnen Beitrag anzeigen

Highttower

Registriert seit: 2. Jun 2009
Ort: Worms
88 Beiträge
 
Delphi 2010 Professional
 
#1

Rechnen mit Mengen

  Alt 9. Dez 2009, 15:24
Hallo zusammen,

ich habe folgendes Problem:

Das kleine Rotkäpchen packt ihren Korb mit Lebensmitteln für ihre Großmutter zur Verfügung stehen ihr folgende Lebensmittel:

Delphi-Quellcode:
type
 TLebensmittel = (Moehren, Erbsen, Kartoffeln, Tomaten, Erdnuesse, Aepfel, Birnen, Banananen, Annanas, Sahnetorten, Fruchtkuchen, Lebkuchen, Spekulatius);

TKorb = set of TLebensmittel;
Soweit ist alles schön und gut

Jetzt möchte ich ihr aber sagen können, packe nur Obst, Gemüse oder nur Backwaren ein.

Dazu bin ich bisher so vorgegangen:

Delphi-Quellcode:
type
TLebensmittelgruppen = (Obst, Gemuese, Backwaren)

var
FKorb : TKorb;

impelmentation

procedure packeKorbEin(AGruppe : TLebensmittelgruppen );
begin
    case AGruppe of
        Obst: begin
            FKorb := FKorb + Aepfel, Birnen, Banananen, Annanas;
        end;
        Gemuese: begin
            FKorb := FKorb + Moehren, Erbsen, Kartoffeln, Tomaten;
        end;
        Backwaren: begin
            FKorb := FKorb + Sahnetorten, Fruchtkuchen, Lebkuchen, Spekulatius;
        end;
    end;
end;
Da Rotkäpchen aber sehr vergässlich ist, guckt sie noch einmal nach ob noch alles da ist:

Delphi-Quellcode:
procedure guckeInKorb;
var neSache : TLebensmittel;
begin
    for neSache in FKorb do begin
        case neSache of
            Aepfel, Birnen: ShowMessage('Heimische Früchte hab ich!');
            Banananen, Annanas: ShowMessage('Exotische Früchte hab ich!');
            Moehren, Erbsen, Kartoffeln: ShowMessage('Gemüse hab ich!');
            Tomaten: ShowMessage('Tomaten aus dem eigenen Garten hab ich!');
            Sahnetorten, Fruchtkuchen, Lebkuchen, Spekulatius: ShowMessage('Sachen die dick machen hab ich!');
            else: ShowMessage('Den andern Kram wie Erdnüsse und so hab ich auch!')
    end;
end;
Wie ihr seht reicht ihr oft eine Sache von einer ganzen Gruppe von Sachen. Daher will sie danach nicht mehr danach suchen müssen, Äpfel und Birnen sehen ja auch ähnlich aus. Darum packt sie das Obst einfach aus dem Korb heraus ... und genau das will nicht klappen:

Delphi-Quellcode:
type
THeimischesObst = (Aepfel, Birnen);
TExotischesObst = (Bananen, Annanas);
TGemuese = (Moehren, Erbsen, Kartoffeln);
// usw.

implementation

procedure guckeInKorb;
var neSache : TLebensmittel;
begin
    for neSache in FKorb do begin
        case neSache of
            THeimischesObst : begin
                FKorb = FKorb - THeimischesObst;
                ShowMessage('Heimische Früchte hab ich!');
            end;
            TExotischesObst :begin
                FKorb = FKorb - TExotischesObst ;
                ShowMessage('Exotische Früchte hab ich!');
            end;
            TGemuese :begin
                FKorb = FKorb - TGemuese ;
                ShowMessage('Gemuese hab ich!');
            end;
            Tomaten: ShowMessage('Tomaten aus dem eigenen Garten hab ich!');
            TGebaeck: begin
                FKorb = FKorb - TGebaeck;
                ShowMessage('Gebäck hab ich!');
            end;
            else: ShowMessage('Den andern Kram wie Erdnüsse und so hab ich auch!')
    end;
end;
Das Problem daran ist er versteht nicht das das Teilmengen sind. Kann mir jemand erklären wie das in Delphi geht? Hier in dem Beispiel habe ich jetzt die Typen genommen, es bringt auch nix wenn ich davon "Objekte" anlege.

Das hier habe ich mir angeguckt bringt mich aber nicht sonderlich weiter.

Vielen Dank,

Tobias
Tobi
Rechtschreib und Semikolion Fehler dürfen behalten werden.
  Mit Zitat antworten Zitat