Luncustaf Geschrieben 11. Januar 2001 Teilen Geschrieben 11. Januar 2001 Hy Leutz, ich bins mal wieder mit Delphi. zu meinem Problem: Ich muss ein Programm schreiben das mir nachdem ich einen Text eingegeben habe die Anzahl der Wörter, Zahlen und Zeichen(. : ; ,) ausgibt. hier der Code den ich geschrieben habe program Uebung9; {$APPTYPE CONSOLE} uses sysutils; var text:string; Zzahl:integer; // Variablen Zwort:integer; Zzeichen:integer; Zustand:string; i:integer; begin write('Mit diesem Programm wird errechnet, nach Eingabe eines Textes, wieviele Woerter und Saetze der Text beinhaltet'); writeln; write('Bitte geben Sie einen Text ein: '); // Text eingeben Readln(text); // Text einlesen Zzahl:=0; Zzeichen:=0; Zwort:=0; if length(text)=0 //wenn kein Text eingegeben wird then begin write('Sie muessen einen Text eingeben'); end else if (text[1]>='0') and (text[1]<='9') //if (text[1]='0') and (text[1]='1') and (text[1]='2') and (text[1]='3') and (text[1]='4') and (text[1]='5') and (text[1]='6') and (text[1]='7') and (text[1]='8') and (text[1]='9') then Zustand:='Zahl' else if (text[1]='.') or (text[1]=',') or (text[1]=';') or (text[1]=':') then Zustand:='Zeichen' else if (text[1]=' ') then Zustand:='kein Wort' else zustand:='Wort'; for i:= 2 to length(text) do begin if Zustand='Wort' then begin if (text[i]>='0') and (text[i]<='9') then begin Zustand:='Zahl'; Zwort:=Zwort +1; end else if (text[i]='.') or (text[i]=',') or (text[i]=';') or (text[i]=':') then begin Zustand:='Zeichen'; Zwort:=Zwort +1; end else if (text[i]=' ') then begin Zustand:='Kein Wort'; Zwort:=Zwort +1; end else end; if Zustand='Zeichen' then begin if (text[i]>='A') or (text[i]<='Z') then begin Zustand:='Wort'; Zzeichen:=Zzeichen +1 end else if (text[i]>='0') and (text[i]<='9') then begin Zustand:='Zahl'; Zzeichen:=Zzeichen +1; end else if (text[i]=' ') then begin Zustand:='kein Wort'; Zzeichen:=Zzeichen +1; end else end; if Zustand='Zahl' then begin if (text[i]>='A') and (text[i]<='Z') then begin Zustand:='Wort'; Zzahl:=Zzahl +1 end else if (text[i]='.') or (text[i]=',') or (text[i]=';') or (text[i]=':') then begin Zustand:='Zeichen'; Zzahl:=Zzahl +1; end else if (text[i]=' ') then begin Zustand:='kein Wort'; Zzahl:=Zzahl +1; end else end; if Zustand='kein Wort' then begin if (text[i]>='A') and (text[i]<='Z') then begin Zustand:='Wort'; end else if (text[i]='.') or (text[i]=',') or (text[i]=';') or (text[i]=':') then begin Zustand:='Zeichen'; end else if (text[i]>='0') and (text[i]<='9') then begin Zustand:='Zahl'; end else end; end; write(format('Ihr Text hat %d Woerter',[Zwort])); writeln; write(format('Ihr Text hat %d Zeichen',[Zzeichen])); writeln; write(format('Ihr Text hat %d Zahlen',[Zzahl])); readln; end. Ich weis nicht woran es liegt das es nich funzt. danke im voraus für eure Antworten euer Cruzito Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
X_22 Geschrieben 12. Januar 2001 Teilen Geschrieben 12. Januar 2001 Option Explicit Private Sub Command1_Click() Uhhhhhhh.... Ein Code ist ja grauenvoll. Der besteht ja nur aus IF befehlen. Blöderweise kann ich kein Delphi aber weil Delphi und Visual Basic ähnlich sind hab ich mal dein Programm in VB geschrieben. Vieleicht hilft es dir ja weiter, wenn du den Code in Delphi schreibst. Dim Text As String 'Variablen werden Deklariert Dim N As Integer Dim TextZeichen As String * 1 Dim Punkt As Integer, Komma As Integer, Zahl As Integer, Buch As Integer Text = Text1 'der Text wird zugewiesen For N = Len(Text) To 0 Step -1 'Die schleife fährt die Zeichenkette ab TextZeichen = Mid$(Text, N, 1) 'Ich holle mir ein Zeichen aus der Zeichenkette If TextZeichen = "." Then Punkt = Punkt + 1 'wenn Zeichen . ist dann Zähler +1 If TextZeichen = "," Then Komma = Komma + 1 'wenn Zeichen , ist dann Zähler +1 Select Case TextZeichen Case 1 To 9 Zahl = Zahl + 1 Case "a" To "z" Buch = Buch + 1 End Select If N = 1 Then Exit For Next MsgBox ("Punkt: " & Punkt) MsgBox ("Komma: " & Komma) MsgBox ("Zahlen: " & Zahl) MsgBox ("Buchstaben: " & Buch) End Sub Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lpd Geschrieben 12. Januar 2001 Teilen Geschrieben 12. Januar 2001 Ähmmm.....Mit was für einer Version von Delphi arbeitest du eigentlich??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lpd Geschrieben 12. Januar 2001 Teilen Geschrieben 12. Januar 2001 Der Ansatz von X_22 ist richtig. Mit einer for...to Schleife sparts du dir eine Menge Geschreibsel (In diesem Fall min. 60%, soweit ich das sehen kann) und lass diese ständigen if..then..else-Bedingungen bloß weg, wenn da nämlich ein Laufzeit-Fehler drin ist, schmiert dir das Ding komplett ab Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Luncustaf Geschrieben 12. Januar 2001 Autor Teilen Geschrieben 12. Januar 2001 Danke für euere Antworten!! Ich habe das ganze nun durch den debuggmodus laufen lassen und dort hab ich gesehen das er wenn er den Zustand wechselt aus dm neuen zustand nicht mehr heraus geht. Keine ahnung warum. @dirtydog Ich arbeite mit der Delphi 5.0 Enterprise Edition. Kannst du mir vielleicht den Ansatz aufschreiben wie ich das ohne if und else mache. Eine For Schleife ist ja schon drin. Es reicht ja für einen Zustabd den rest brauch ich ja dann nur übertragen. Ich muss noch sagen das ich and er Aufgabe schon 2 Tage dran bin und es einfach nicht auf die reihe bekomme. Das Was x_22 hingeschrieben hat check ich überhaupt nicht da ich null ahnung von VB hab sorry. euer Cruzito Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Luncustaf Geschrieben 12. Januar 2001 Autor Teilen Geschrieben 12. Januar 2001 hy ich hab den code nochmal neu geschrieben hoff er ist jetzt ein wenig verständlicher. program Uebung9a; {$APPTYPE CONSOLE} uses sysutils; var text :string; Zustand :string; Zwort :integer; Zzeichen :integer; Zzahl :integer; i :integer; begin write('Bitte geben Sie einen Text ein: '); read(text); if length(text)=0 then begin write('Sie haben keinen Text eingegeben, bitte starten Sie das Progeamm neu') end else begin end; if (text[1]='.') or (text[1]=',') or (text[1]=';') or (text[1]=':') then begin Zustand:='Zeichen'; end else if (text[1]='0') or (text[1]='1') or (text[1]='2') or (text[1]='3') or (text[1]='4') or (text[1]='5') or (text[1]='6') or (text[1]='7') or (text[1]='8') or (text[1]='9') then begin Zustand:='Zahl'; end else if (text[1]=' ') then begin Zustand:='kein Wort'; end else Zustand:='Wort'; Zzahl:=0; Zzeichen:=0; Zwort:=0; for i:= 2 to length(text) do begin if Zustand='Zeichen' then begin if (text[i]='0') and (text[i]='1') or (text[i]='2') or (text[i]='3') or (text[i]='4') or (text[i]='5') or (text[i]='6') or (text[i]='7') or (text[i]='8') or (text[i]='9') then begin Zustand:='Zahl'; Zzeichen:=(Zzeichen +1); end; if (text[i]>='A') and (text[i]<='Z') and (text[i]>='a') and (text[i]<='z') then begin Zustand:='Wort'; Zzeichen:=(Zzeichen +1); end; if (text[i]=' ') then begin Zustand:='kein Wort'; Zzeichen:=(Zzeichen +1); end; end else if Zustand='Wort' then begin if (text[i]='0') and (text[i]='1') and (text[i]='2') and (text[i]='3') and (text[i]='4') and (text[i]='5') and (text[i]='6') and (text[i]='7') and (text[i]='8') and (text[i]='9') then begin Zustand:='Zahl'; Zwort:=(Zwort +1); end; if (text[i]='.') or (text[i]=',') or (text[i]=';') or (text[i]=':') then begin Zustand:='Zeichen'; Zwort:=(Zwort +1); end; if (text[i]=' ') then begin Zustand:='kein Wort'; Zwort:=(Zwort +1); end; end else if Zustand='Zahl' then begin if (text[i]='.') or (text[i]=',') or (text[i]=';') or (text[i]=':') then begin Zustand:='Zeichen'; Zzahl:=(Zzahl +1); end; if (text[i]>='A') and (text[i]<='Z') then begin Zustand:='Wort'; Zzahl:=(Zzahl +1); end; if (text[i]=' ') then begin Zustand:='kein Wort'; Zzahl:=(Zzahl +1); end; end else if Zustand='kein Wort' then begin if (text[i]='.') or (text[i]=',') or (text[i]=';') or (text[i]=':') then begin Zustand:='Zeichen'; end; if (text[i]>='A') and (text[i]<='Z') and (text[i]>='a') and (text[i]<='z') then begin Zustand:='Wort'; end; if (text[i]='0') and (text[i]='1') and (text[i]='2') and (text[i]='3') and (text[i]='4') and (text[i]='5') and (text[i]='6') and (text[i]='7') and (text[i]='8') and (text[i]='9') then begin Zustand:='Zahl'; end end; end; write(format('Ihr Text hat %d Woerter',[Zwort])); writeln; write(format('Ihr Text hat %d Zahlen',[Zzahl])); writeln; write(format('Ihr Text hat %d Zeichen',[Zzeichen])); readln; readln; end. euer Cruzito [Dieser Beitrag wurde von Cruz Candalaria am 12. Januar 2001 editiert.] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
andik Geschrieben 13. Januar 2001 Teilen Geschrieben 13. Januar 2001 hallo, so wie ich es verstanden haben sollen vier beliebige wörter eingegeben und dann sortiert werden. hier meine lösung: program Project1; {$APPTYPE CONSOLE} uses sysutils, Classes; var i: Integer; WortList: TStringList; Wort: string; begin WortList := TStringList.Create; for i := 0 to 3 do begin WriteLn('Bitte Wort ' + IntToStr(i + 1) + ' eingeben:'); ReadLn(Wort); WortList.Add(Wort); end; WriteLn('Woerter sortieren? <Enter>'); WortList.Sort; for i := 0 to 3 do begin Wort := WortList; WriteLn(Wort); end; Read(i); //Nur damit konsole nicht gleich verschwindet. end. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.