AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Einlesen in ein Array

Ein Thema von Mo53 · begonnen am 18. Jun 2021 · letzter Beitrag vom 5. Jul 2021
Antwort Antwort
Mo53

Registriert seit: 16. Mai 2021
59 Beiträge
 
Delphi 10.3 Rio
 
#1

Einlesen in ein Array

  Alt 18. Jun 2021, 12:24
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Einlesen in ein Array

  Alt 18. Jun 2021, 12:31
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Einlesen in ein Array

  Alt 18. Jun 2021, 16:46
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 .
Michael Gasser

Geändert von Michael II (19. Jun 2021 um 11:19 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#4

AW: Einlesen in ein Array

  Alt 5. Jul 2021, 13:47
Hier meine Variante des allseits beliebten Cocktail-Programms.
Angehängte Dateien
Dateityp: zip Cocktail.zip (72,0 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:39 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