Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Einlesen in ein Array (https://www.delphipraxis.net/208150-einlesen-ein-array.html)

Mo53 18. Jun 2021 11:24

Einlesen in ein Array
 
Hallo, ich erstelle hier gerade eine Procedure in einem Programm was Cocktails einliest und deren Name, Alkoholgehalt, und Zutaten ausgiebt.

Jetzt habe ich hier ein kleines Problem mit dieser Anforderung

Gültige Zutaten sind eine beliebige Menge aus den Werten Cocktailkirsche, Sahne, Eis, Saft und Rum, einzulesen wie folgt:
Deklariert Euch zunächst einen Aufzählungstyp TIngredient mit den Elementen Cocktailkirsche, Sahne, Eis, Saft und Rum in sinnvoller, einheitlicher Benennung (z.B. mit demselben Präfix in für Ingredient) als mögliche Zutaten.
Ergänzt dann einen Typ TIngredientSet für eine Menge dieses Aufzählungstyps.
Deklariert weiterhin exakt folgendes konstantes Stringarray mit den textuellen Bezeichnern aller Zutaten:

INGREDIENT_NAMES : array[TIngredient] of string = ('Cocktailkirsche', 'Sahne', 'Eis', 'Saft', 'Rum');
Somit habt Ihr ein Array mit fünf Elementen vom Typ String, die auch gleich gesetzt werden.
Beispiel: INGREDIENT_NAMES[inJuice]liefert dann z.B. den String 'Saft', wenn inJuice ein Wert des Aufzählungstyps TIngredient ist.
Entscheidend ist hier dieselbe Reihenfolge im Aufzählungstyp und im Stringarray, damit die Zuordnung funktioniert!
Bei der Eingabe sind dabei die Bezeichner aller Zutaten (wie im konstanten Stringarray angegeben) mit einem + oder - davor zulässig. Dazu ein Beispiel:
Gibt der Benutzer nacheinander '+Rum', '+Sahne', '+Eis' an (jeweils abgeschlossen mit einem Return, also in einer Schleife und nur jeweils genau eine Zutat pro Eingabe!), dann werden diese drei Zutaten in die Menge der Zutaten aufgenommen. Folgt noch ein '-Sahne', dann wird diese Zutat wieder aus der Menge entfernt. Mehrfache Eingaben derselben Zutat haben keine Auswirkung (ein Element kann halt nicht mehrfach in einer Menge vorkommen). Gleiches gilt für ungültige Eingaben (z.B. '+abc' oder '+ Rum' oder '--Saft'). Die Eingabe der Zutaten endet immer mit einem 'X' oder 'x'. Es soll auch möglich sein, gar keine Zutat für einen Cocktail zu definieren.
Zur "Umwandlung" eines vom Benutzer eingegebenen Strings in einen Wert des Aufzählungstyps TIngredient, der dann der Menge hinzugefügt wird, nehmt Ihr bitte KEINE 10 if (5 für + und 5 für -) nacheinander und auch KEIN case, sondern folgendes Vorgehen:
Lauft in einer Schleife solange über die einzelnen Werte aus TIngredient und wandelt diese jeweils mit dem konstanten Stringarray INGREDIENT_NAMES in einen String um, bis dieser String der Eingabe des Benutzers entspricht (das + oder - am Beginn der Eingabe kann mit einem copy "entfernt" bzw. "überlesen" werden).

Delphi-Quellcode:
type
  TIngredient = (inCherry, inCream, inIce, inJuice, inRum);
  TIngredientSet = set of TIngredient;

const
  INGREDIENT_NAMES: array [TIngredient] of string = ('Cocktailkirsche', 'Sahne',
    'Eis', 'Saft', 'Rum');
Delphi-Quellcode:
procedure readIngredients(TIngredientSet: TIngredient): record;

begin
  writeln('Was möchtest du im Cocktail haben?');
  readln(readIngredients);
  if (readIngredients in INGREDIENT_NAMES) then
  begin
    for I := Low to High do

  end;


end;
Jetzt weiß ich nicht wie ich das Programm dazu bringen kann wenn z.B. Sahne oder +Sahne gefunden wurde, das auch in den Array einzulesen ohne dafür eine If Anweisung zu verwenden.

Danke im Voraus:thumb:

DeddyH 18. Jun 2021 11:31

AW: Einlesen in ein Array
 
Du sollst die Eingaben ja gar nicht in ein Array einlesen, sondern in eine Menge. Es sollen also sehr wahrscheinlich Mengenoperatoren geübt werden. Also: F1 und los geht's.

Michael II 18. Jun 2021 15:46

AW: Einlesen in ein Array
 
Zitat:

Zitat von Mo53 (Beitrag 1491228)
nehmt Ihr bitte KEINE 10 if (5 für + und 5 für -) nacheinander

In der Aufgabe steht ja nur, dass du nicht 10 IFs nacheinander (und auch nicht case) verwenden sollst.
Von "IF gar nicht verwenden" steht nix ;-).

Blup 5. Jul 2021 12:47

AW: Einlesen in ein Array
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier meine Variante des allseits beliebten Cocktail-Programms.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 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