Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rechtschreibprüfung (https://www.delphipraxis.net/128396-rechtschreibpruefung.html)

foerster7892 29. Jan 2009 07:45


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)

Klaus01 29. Jan 2009 07:58

Re: Rechtschreibprüfung
 
Guten Morgen,

zu Deinem ersten Problem, schaust Du dir vielleicht mal das dawg von Hagen an.

Zum 2. Problem, wenn Du Wörter trennen willst kannst Du vielleicht explode aus der CodeLib nutzen.

Grüße
Klaus

taaktaak 29. Jan 2009 08:02

Re: Rechtschreibprüfung
 
Zitat:

aber bitte keine vollkommende Umstrukturierung des Quelltextes
Hmmm, wäre aber besser, das zu tun.
Zunächst müssen mal die globalen Variablen verschwinden...

foerster7892 29. Jan 2009 08:13

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 ^^)

Klaus01 29. Jan 2009 08:20

Re: Rechtschreibprüfung
 
Zitat:

Zitat von foerster7892
@Klaus

Danke sieht interessant aus aber sehr kompliziert!

sieht nicht nur so aus, ist auch interessant.
.. und lernen kann man dabei auch etwas.

Delphi-Quellcode:
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;
Ich würde schon das Design ändern, wie taaktak bereits geschrieben hat, und mher auf
lokale Variablen setzen.

Grüße
Klaus

taaktaak 29. Jan 2009 08:21

Re: Rechtschreibprüfung
 
Zitat:

Naja die brauch ich aber...
Nein, du brauchst sie nicht!
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

foerster7892 29. Jan 2009 08:32

Re: Rechtschreibprüfung
 
Klaus thx für info mit Slaenge

werd mir das mal anschauen

taaktaak
werd versuchen an globalen var zu sparen^^

foerster7892 29. Jan 2009 09:03

Re: Rechtschreibprüfung
 
Delphi-Quellcode:
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.
so schauts aus die anderen oben bekomme ich nihct mehr weg

Das mit Laenge scheck ich nicht warum das größer wird als LaengeS


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