![]() |
Rechtschreibprüfung
Hi@all,
Ich hab versucht (wie man unten sieht) eine Rechtschreibprüfung zu entwerfen. Leider funktioniert sie nicht richtig. 1.Problem Es gibt keine Textdokumente mit nem Duden drin(für den Test hat mir zum Glück gereicht nen Txt mit nen paar Worten zu nutzen) 2.Problem Es erkennt keine einzelnen Wörter was es aber laut quelltext machen sollte 3.Problem Wenn ich den Button ein 2.Mal drücke hängt es sich auf 4.Problem Es erkennt Fehler bei einzelnen Wörtern, aber wenn richtig dann 3.
Delphi-Quellcode:
const Worterbuch = 'C:\Users\user\Desktop\Wörterbuch.txt';
var Form4: TForm4; Eingabe, Zwablage, Fehler, Mistake :String; Beginn, Laenge, Ende, richtig, LaengeS :Integer; implementation {$R *.dfm} function Falsch(Kontrolle :boolean; Ende, Anfang :integer):string; var Wort, Woerter :string; begin if Kontrolle=false then begin Wort := copy(Eingabe, Anfang, Ende); Woerter := Woerter +Wort + ', '; Falsch := Woerter; richtig := richtig + 1; end; end; function Kontrollf(Ende, Anfang :integer):boolean; var Buch :textfile; Wort :string; richtig :integer; begin richtig := 0; Zwablage := copy(Eingabe, Anfang, Ende-1); AssignFile(Buch, Worterbuch); reset(Buch); repeat readln(Buch, Wort); if Zwablage = Wort then richtig := richtig+1; until ((Zwablage = Wort) or (EOF(Buch))); if richtig = 1 then Kontrollf := true else Kontrollf := false; end; function Rechtschreibung(Eingabe:string):string; var Anfang :integer; Kontrolle :boolean; Wort, Worter :string; begin Anfang := Ende; repeat Beginn := Beginn + 1; Ende:= Ende + 1; Laenge := Laenge + 1; Zwablage := copy(Eingabe, Beginn, Ende); until ((Zwablage = ' ') or (Laenge=LaengeS)); Kontrolle := Kontrollf(Anfang, Ende); Wort := Falsch(Kontrolle, Ende, Anfang); Worter := Worter + Wort; Rechtschreibung := Worter; end; procedure TForm4.Button1Click(Sender: TObject); begin richtig := 0; Beginn := 0; Ende := 0; Eingabe := Edit1.Text; LaengeS:=length(Eingabe); repeat Fehler := Rechtschreibung(Eingabe); until (LaengeS=Laenge); if richtig >= 1 then Showmessage('Diese Wörter haben sie falsch geschrieben: ' + Fehler) else Showmessage('Alles richtig'); end; end. Könnt ihr mir helfen (aber bitte keine vollkommende Umstrukturierung des Quelltextes k? bin happy das so geschafft zu haben bisher) |
Re: Rechtschreibprüfung
Guten Morgen,
zu Deinem ersten Problem, schaust Du dir vielleicht mal das ![]() Zum 2. Problem, wenn Du Wörter trennen willst kannst Du vielleicht ![]() Grüße Klaus |
Re: Rechtschreibprüfung
Zitat:
Zunächst müssen mal die globalen Variablen verschwinden... |
Re: Rechtschreibprüfung
@Klaus
Danke sieht interessant aus aber sehr kompliziert! @taaktaak Naja die brauch ich aber an einigen stellen (globale Var.) wirf mal plz nen blick drauf und mach mal nen Vorschlag(Ich hab mir ja auch was bei gedacht ^^) |
Re: Rechtschreibprüfung
Zitat:
.. und lernen kann man dabei auch etwas.
Delphi-Quellcode:
Ich würde schon das Design ändern, wie taaktak bereits geschrieben hat, und mher auf
procedure TForm4.Button1Click(Sender: TObject);
begin // Laenge wird hier nirgendwo initialisiert // nach dem ersten Durchlauf hat es einen Wert, der größer ist als // LaengeS richtig := 0; Beginn := 0; Ende := 0; Eingabe := Edit1.Text; LaengeS:=length(Eingabe); repeat Fehler := Rechtschreibung(Eingabe); until (LaengeS=Laenge); // hier nicht auf gleichheit prüfen if richtig >= 1 then Showmessage('Diese Wörter haben sie falsch geschrieben: ' + Fehler) else Showmessage('Alles richtig'); end; lokale Variablen setzen. Grüße Klaus |
Re: Rechtschreibprüfung
Zitat:
Sie sind ein Grund, dass dein Code nicht funktioniert. Auch wenn's ein wenig länger dauert: Versuche zunächst selbst, diese Variablen zu entfernen |
Re: Rechtschreibprüfung
Klaus thx für info mit Slaenge
werd mir das mal anschauen taaktaak werd versuchen an globalen var zu sparen^^ |
Re: Rechtschreibprüfung
Delphi-Quellcode:
so schauts aus die anderen oben bekomme ich nihct mehr weg
const Worterbuch = 'C:\Users\user\Desktop\Wörterbuch.txt';
var Form4: TForm4; Zwablage :String; richtig :Integer; implementation {$R *.dfm} function Falsch(Eingabe :string; Kontrolle :boolean; Ende, Anfang :integer):string; var Wort, Woerter :string; begin if Kontrolle=false then begin Wort := copy(Eingabe, Anfang, Ende); Woerter := Woerter + Wort + ', '; Falsch := Woerter; richtig := richtig + 1; end; end; function Kontrollf(Eingabe: string; Ende, Anfang :integer):boolean; var Buch :textfile; Wort :string; richtig :integer; begin richtig := 0; Zwablage := copy(Eingabe, Anfang, Ende-1); AssignFile(Buch, Worterbuch); reset(Buch); repeat readln(Buch, Wort); if Zwablage = Wort then richtig := richtig+1; until ((Zwablage = Wort) or (EOF(Buch))); if richtig = 1 then Kontrollf := true else Kontrollf := false; end; procedure Rechtschrp(var Rechtschreibung: string; Eingabe: string; LaengeS: integer; var Beginn, Ende, Laenge :integer); var Anfang :integer; Kontrolle :boolean; Wort, Worter :string; begin Anfang := Ende; repeat Beginn := Beginn + 1; Ende:= Ende + 1; Laenge := Laenge + 1; Zwablage := copy(Eingabe, Beginn, Ende); until ((Zwablage = ' ') or (Laenge=LaengeS)); Kontrolle := Kontrollf(Eingabe, Anfang, Ende); Wort := Falsch(Eingabe, Kontrolle, Ende, Anfang); Worter := Worter + Wort; Rechtschreibung := Worter; end; procedure TForm4.Button1Click(Sender: TObject); var Eingabe, Fehler :string; LaengeS, Beginn, Ende, Laenge, richtig :integer; begin richtig := 0; Beginn := 0; Ende := 0; Eingabe := Edit1.Text; LaengeS:=length(Eingabe); repeat Rechtschrp(Fehler, Eingabe, LaengeS, Beginn, Ende, Laenge); until (LaengeS=Laenge); if richtig >= 1 then Showmessage('Diese Wörter haben sie falsch geschrieben: ' + Fehler) else Showmessage('Alles richtig'); end; end. Das mit Laenge scheck ich nicht warum das größer wird als LaengeS |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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