Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [Anfänger] Wortliste auf einen String überprüfen (https://www.delphipraxis.net/113263-%5Banfaenger%5D-wortliste-auf-einen-string-ueberpruefen.html)

JonasxD 5. Mai 2008 13:17


[Anfänger] Wortliste auf einen String überprüfen
 
Hallo DP-User,

Im Informatik Unterricht haben wir (endlich) mit Delphi angefangen. Nun sollen wir bis zum Ende des Schuljahres eine Abgespeckte Version des Spiels "Text Express" schreiben.
Bei dem Spiel geht es darum, dass man verschiedene Buchstaben bekommt (6). Und dann aus diesen Wörter bilden muss. Je größer das Wort desto mehr Punkte erhält man.
Wir entwickeln das Programm vollständig in der Schule, doch habe ich im Moment nichts zu tun und dachte mir ich fange schonmal an um ein paar Pluspunkte zu sammeln.
Das gesamte Programm soll als Konsolenanwendung geschrieben werden.

Mein Problem ist nun, dass ich nicht weiß, wie ich eine vorhandene Wortliste ( wortliste.txt eine Zeile - ein Wort) auf einen String hin überprüfen lassen kann.
Ich habe bereits dieses und andere Foren durchstöbert und nichts konkretes gefunden.
Ich muss wohl die gesamte Liste mit LoadFromFile in eine string-Liste einlesen und dann überprüfen, ob mein String darin enthalten ist.
Da stecke ich fest. Hier mein bisheriger Quellcode:


Delphi-Quellcode:
program TEultra;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  option : integer;
  buchstaben : array[1..6] of string;
  buchstabe : integer;
  i : integer;
  wort : string;
begin
repeat
  writeln('Willkommen bei Text Express Ultra!');
  writeln('1 = Spiel starten');
  writeln('2 = Highscore');
  writeln('3 = Spiel Beenden');
  readln(option);
  if option = 1 then
    begin
    for I := 1 to 6 do
      begin
      randomize;
      buchstabe := random(26) + 65;
      buchstaben[i] := char(buchstabe);
      end;
      writeln(buchstaben[1]);
      writeln(buchstaben[2]);
      writeln(buchstaben[3]);
      writeln(buchstaben[4]);
      writeln(buchstaben[5]);
      writeln(buchstaben[6]);
      writeln('Bilden sie aus diesen Buchstaben nun die Wörter!');
      writeln('Drücken sie enter um mit dem Spiel zu Beginnen!');
      readln;
      readln(wort);
    end
  else if option = 2 then
    begin

    end
  else
    begin
    writeln('Bitte eine Gültige Option eingeben!');
    end;
until option = 3;
end.
Ihr müsst nur mal meinem Gehirn nen Anstoß geben^^

bis dahin mfg Jonas

DeddyH 5. Mai 2008 13:21

Re: [Anfänger] Wortliste auf einen String überprüfen
 
Hallo Jonas, wenn Du eine Stringliste verwendest, könntest Du Dir mal die Methode IndexOf() anschauen.

Luckie 5. Mai 2008 13:22

Re: [Anfänger] Wortliste auf einen String überprüfen
 
Lade die Datei mit der Wortliste ein eine Delphi-Referenz durchsuchenTStringListe und gucke mit der Methode IndexOf von TStringList, ob das Wort in der Liste vorhanden ist.

himitsu 5. Mai 2008 13:25

Re: [Anfänger] Wortliste auf einen String überprüfen
 
jupp, TStringList biete Möglichkeiten zum Suchen :angel:

ansonsten die Datei per ReadLn zeilenwise einlesen und dann einfach prüfen ob eine eingelesene Zeile (Zeile=Wort, bei einem Wort pro Zeile) mit dem eingegebenem String übereinstimmt.

ddcool 5. Mai 2008 13:37

Re: [Anfänger] Wortliste auf einen String überprüfen
 
Hi Jonas,

so nebenbei. Was mir gerade auffällt ist, dass du 6 Buchstaben zufällig erzeugst.
Was aber wenn man aus diesen 6 Buchstaben gar kein Wort bilden kann?
Ich würde an deiner Stelle die Textdatei mit den Wörtern auslesen und dann die Buchstaben eines Wortes zufällig ausgeben lassen.

Delphi-Quellcode:
var
  TextDatei: TStringList;
  wort: String;
  i: Integer;
begin
  TextDatei := TStringList.Create;
  TextDatei.LoadFromFile('Datei.txt');
 
  randomize;
  wort := TextDatei.Strings[random(TextDatei.Count-1)];

  for i := 0 to Length(wort)-1 do
  begin
    randomize;
    writeln(wort[random(Length(wort)-1)]; // Hier musst du dir noch ausdenken, wie du es realisierst,
                                          // dass ein Buchstabe nich zweimal genommen wird.
  end;

  TextDatei.Free;
end;
Grüße ddcool

grenzgaenger 5. Mai 2008 13:43

Re: [Anfänger] Wortliste auf einen String überprüfen
 
solltest auch auf klein-/GROSSSCHREIBUNG achten, denn das und DAS oder Das ist was anderes. für die bildschirmsteuerung, würd ich mir noch die ANSI Escapesequenzen ansehen, oder 'ne nachgebaute CRT unit.

@himitsu: fände es nicht so toll, wenn bei eingabe jedes buchstabens die gesamte wortliste neu durchsucht werden sollte, dies betrifft sowohl kleine als auch grosse wortlisten. bei kleinen wäre wohl 'ne stringlist von vorteil, für grösse, bräuchte man schon inkrementelle verfahren und 'ne spezielle datenstruktur, damit das effizient laufen kann.

<HTH> GG

JonasxD 5. Mai 2008 13:47

Re: [Anfänger] Wortliste auf einen String überprüfen
 
danke für die Antworten bisher! werd mal sofort testen
@ddcool Ich hatte es eigentlich so geplant, dass man sich 6 neue Buchstaben geben kann , wenn man nicht mehr weiter kommt aber dafür dann Punkte abgezogen werden!

mfg

Luckie 5. Mai 2008 13:49

Re: [Anfänger] Wortliste auf einen String überprüfen
 
Und wenn du den Lehrer wirklich beeindrucken willst, dass implementierst du eine Binärsuche. ;)

Klaus01 5. Mai 2008 13:49

Re: [Anfänger] Wortliste auf einen String überprüfen
 
Zitat:

Zitat von JonasxD
danke für die Antworten bisher! werd mal sofort testen
@ddcool Ich hatte es eigentlich so geplant, dass man sich 6 neue Buchstaben geben kann , wenn man nicht mehr weiter kommt aber dafür dann Punkte abgezogen werden!

mfg

Ich würde es aber nur für sinnvoll halten, wenn es den Punktabzug nur dann
geben würde wenn es möglich gewesen wäre aus den Buchstaben ein Wort zu bilden.

Grüße
Klaus

ddcool 5. Mai 2008 13:55

Re: [Anfänger] Wortliste auf einen String überprüfen
 
Zitat:

Ich würde es aber nur für sinnvoll halten, wenn es den Punktabzug nur dann
geben würde wenn es möglich gewesen wäre aus den Buchstaben ein Wort zu bilden.
Ja genau das, bei zufälligen Buchstaben kann es ja sein, dass man sich viel zu häufig neue Buchstaben hohlen muss um das Wort zu vervollständigen. Das würde unnützen Punkteabzug geben, weil die warscheinlichkeit, dass ein Buchstabe vorkommt liegt bei nur 26 Buchstaben schon bei 1/26 oder 6/156.

Grüße ddcool

himitsu 5. Mai 2008 13:57

Re: [Anfänger] Wortliste auf einen String überprüfen
 
@grenzgaenger: es ist für die Schule, da darf man doch auch mal etwas rumspielen und muß nicht gleich alles extrem optimalisieren :angel2:

außerdem wird bestimmt die Wortliste nicht extrem groß sein.


vorschlag:
- Buchtstaben per Zufall bestimmen
- schauen ob mindestens ein Wort zu bilden ist
- wenn nicht, dann neue Buchstaben wählen und wieder prüfen

- dann würde es bestimmt schön sein, wenn auch abhängig von der Anzahl möglicher Antworten die Punkte bestimmt würden

langes Wort = mehr Punkte
und
viele mögliche Lösungen = weniger Punkte

JonasxD 5. Mai 2008 17:33

Re: [Anfänger] Wortliste auf einen String überprüfen
 
so danke schonmal ich habe es soweit hinbekommen, dass er erkennt ob das Wort in einer liste drinn ist oder nicht^^ *stolzsei*
doch das Problem besteht weiterhin, dass es manchmal keine Wörter gibt das von himitsu würde ich ja gerne übernehmen allerdings müsste das Programm dann ja alle Kombinationen der 6 Buchstaben durchprobieren und gucken ob diese in der Wortliste vorhanden sind!
Hab darüber schon ein bisschen was im Forum gefunden - Permutation ??
wenn ja ist mir das glaube ich für den Anfang doch ein bisschen kompliziert und ich weiß auch nicht, ob das nicht sogar ein bisschen lange dauert...
werde versuchen mal ddcools Lösung zu dem Problem zu versuchen.
Wenn sonst noch jemand eine Idee hat^^......

mfg

P.S.Edit: achja das mit den verschieden Punkten pro langes oder kurzes Wort hatte ich natürlich auch vor ist auch im original so!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz