Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Buchstaben zählen (https://www.delphipraxis.net/140676-buchstaben-zaehlen.html)

michapitbull 23. Sep 2009 16:54


Buchstaben zählen
 
Moin,
ich soll ein Programm schreiben, das Buchstaben zählt. Das heißt ich habe ein Editfeld, einen Button und ein Label. In das Edit Feld soll ich einen beliebigen Text eingeben und dann die Anzahl der Buchstaben im Label ausgeben lassen. Also nehmen wir mal als Beispiel "Der Hund jagt die Katze" dann soll im Label stehen:aaddee.... usw. da 2 zwei man enthalten ist,ihr versteht schon ^^. Nun bin ich so weit, dass ich das ganze nur mit einem a machen kann und so sieht mein Quellcode aus :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
satz:=edit1.Text;
zaehlen:=length(satz);
for buchstabe:=1 to zaehlen do
 begin
 if satz[buchstabe] = 'a'
then neuertext := neuertext + satz [buchstabe];
end;
label1.Caption:=neuertext;


end;
ich hab es schon versucht einfach hinter if satz[buchstabe] = 'a' mehrere Bedingungen anzuknüpfen aber ich komme zu keinem Ergebnis, dann meckert delphi nämlich immer rum, dass FOR-Schleifen eine einfache lokale Variable sein muss, was mir aber nicht wirklich was sagt. Mir ist klar, dass es funktioniert wenn ich eine mehrere if Schleifen schreibe für jeden einzelnen Buchstaben, aber das ist nicht mein ziel. Könnt ihr mir da helfen ?

Medium 23. Sep 2009 17:02

Re: Buchstaben zählen
 
Im Grunde kannst du dafür eine Art Histogramm erstellen. Wichtig ist dabei nur, dass du weisst was eine Bei Google suchenASCII Tabelle ist, also dass Zeichen letztlich auch nur Zahlen sind - nur anders dargestellt.

Delphi-Quellcode:
var
  s: String;
  i: Integer;
  hist: array[byte] of Integer;
begin
  s := 'Der Hund jagt die Katze';
  for i := 1 to Length(s) do
    inc(hist[Ord(s[i])]);
end;
In hist[65] (bzw. hist[Ord('A')], da Ord('A') = 65) steht hiernach z.B. wie viele große 'A' im String sind.

Der.Kaktus 23. Sep 2009 17:04

Re: Buchstaben zählen
 
Hi, versuch es doch einfach mal so
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var buchstabe,zaehlen:integer; <<------------------------------eingefuegt = lokale Variablen
begin
satz:=edit1.Text;
zaehlen:=length(satz);
for buchstabe:=1 to zaehlen do
begin
if satz[buchstabe] = 'a'
then neuertext := neuertext + satz [buchstabe];
end;
label1.Caption:=neuertext;


end;
[roter Kasten] :-D [/roter Kasten]

rollstuhlfahrer 23. Sep 2009 17:08

Re: Buchstaben zählen
 
HI,

für dein Buchstaben zählen hätte ich einen ganz anderen Ansatz gewählt. Zuerst würde ich ein Array mit den entsprechenden Anzahlen der Zeichen füllen und dann dieses Array wieder ausgeben. Im Grunde geht das dann so:
Delphi-Quellcode:
procedure ArrayFüllen(s: str);
var
  myarray: array[char] of integer;
  i: Integer;
begin
  for i := 1 to Length(s) do
    inc(myarray[s[i]]);
end;
Die Ausgabe bleibt dir dann überlassen. Also einfach durch das gewonnene Array durchgehen und eben Anzahl-Mal so viele Zeichen generieren.

Bernhard

PS: Ist ja das Histogramm

p80286 23. Sep 2009 17:08

Re: Buchstaben zählen
 
[OT]
Zitat:

Zitat von michapitbull
... mehrere if Schleifen schreibe...

sie ist nicht kaputt zu kriegen, es gibt keine IF-Schleifen!
[/OT]

Mist, wieder mal nicht schnell genug.

K-H

michapitbull 23. Sep 2009 17:13

Re: Buchstaben zählen
 
Sollte mir vielleicht angewöhnen die Variablen lokal und nich global zu deklarieren.
hab das ganze jetzt so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  var
  satz,neuertext:string;
  buchstabe,zaehlen:integer;
begin
satz:=edit1.Text;
zaehlen:=length(satz);
for buchstabe:=1 to zaehlen do
 begin
 if satz[buchstabe] = 'a' and satz[buchstabe] = 'B'       <---- warum ist hier das 2. = Zeichen falsch ?
then neuertext := neuertext + satz [buchstabe];
end;
label1.Caption:=neuertext;
okay danke. Also es scheint ja mit einem array zu gehen, aber das hatten wir in der Schule noch nich. Ich denke wir sollen das so machen wie ich es schon versucht habe. Wie würde es dann gehen ? Würde es mit eine While ... do Schleife oder For... to...do Schleife irgendwie funktionieren ?

Klaus01 23. Sep 2009 17:16

Re: Buchstaben zählen
 
.. wenn hier schon jeder mit Code um sich wirft:

Meine Version:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 zArray : Array['a'..'z'] of Byte;
 c : Char;
 s : String;
 sOut : String;
 i : Integer;
begin
  // init

  for c:= 'a' to 'z' do
    zArray[c] := 0;
  s:= 'ZZZZccddaaaaabaumeinzweidrei';
  for i:=1 to length(s) do
    for c:= 'a' to 'z' do
      begin
        if lowerCase(s[i]) = c then
          inc(zArray[c]);
      end;

  // Ausgabe
  sOut := '';
  for c := 'a' to 'z' do
    begin
      i:=0;
      while i < zArray[c] do
        begin
          sOut:=sOut+c;
          inc(i);
        end;
    end;

  showMessage(sOut);
end;
Grüße
Klaus

michapitbull 23. Sep 2009 17:20

Re: Buchstaben zählen
 
okay danke. Also es scheint ja mit einem array zu gehen, aber das hatten wir in der Schule noch nich. Ich denke wir sollen das so machen wie ich es schon versucht habe. Wie würde es dann gehen ? Würde es mit eine While ... do Schleife oder For... to...do Schleife irgendwie funktionieren ?

Klaus01 23. Sep 2009 17:38

Re: Buchstaben zählen
 
.. ohne Array wird das aber recht unübersichtlich.

Wie willst Du dir denn merken wie oft das a oder b bereits in dem Satz vorhanden waren?


Alternativ ohne Array:

Delphi-Quellcode:
sOut := '';


for c := 'a' to 'z' do
  begin
    for i:=1 to length(s) do
      if c = lowerCase(s[i]) then
        sOut := sOut + s[i];
  end;
Grüße
Klaus

himitsu 23. Sep 2009 18:01

Re: Buchstaben zählen
 
Da es die Buchstaben nicht zählen, sondern sortieren soll, kann man auch einfach die Buchstaben sortieren.
> passende Sortieralgorithmen gibt es ja unmassen

Und dann vorher oder nachher noch alle Zeichen entfernen, welche man nicht möchte, wie z.B. die Lerrzeichen.

Der.Kaktus 23. Sep 2009 19:07

Re: Buchstaben zählen
 
Zitat:

Zitat von himitsu
Da es die Buchstaben nicht zählen, sondern sortieren soll, kann man auch einfach die Buchstaben sortieren.
> passende Sortieralgorithmen gibt es ja unmassen

Und dann vorher oder nachher noch alle Zeichen entfernen, welche man nicht möchte, wie z.B. die Lerrzeichen.

Himitsu?..der User iss Anfaenger..und hatte Quelltext..inner Schule geht es nun mal etwas langsam zu..lieber erstmal einfach :wink: gut gemeint iss net immer gut gelernt.

himitsu 23. Sep 2009 19:43

Re: Buchstaben zählen
 
gerade zu "einfachen" Sortieralgos findet man unmassen an Informationen
und ich bin mir Sicher auch in der Schule sortiert man irgendwann mal etwas, da kann es nicht schaden dieses gleich mit zu lernen :mrgreen:

PS: so schwer ist es doch nicht ... man nehme 2 For-Schleifchen, eine IF-Abfrage zum Vergleich und baue sich damit (tut mir Leid, aber das paßt grad einfach so gut ) eine IF-Schleife :lol:

Der.Kaktus 23. Sep 2009 19:46

Re: Buchstaben zählen
 
[Bau das mal OT]
Zitat:

Zitat von himitsu
gerade zu "einfachen" Sortieralgos findet man unmassen an Informationen
und ich bin mir Sicher auch in der Schule sortiert man irgendwann mal etwas, da kann es nicht schaden dieses gleich mit zu lernen :mrgreen:

PS: so schwer ist es doch nicht ... man nehme 2 For-Schleifchen, eine IF-Abfrage zum Vergleich und baue sich damit (tut mir Leid, aber das paßt grad einfach so gut ) eine IF-Schleife :lol:

Himi Du(wir) koennen das..aber son Anfaenger..hat es net leicht..wir koennen uns doch "hier " schon freuen, wenn man von den "neuen" ne Tuete Quelltext bekommt..war doch net boess gemeint ;-) :cheers: Radeberger :dancer:
[/OT]

rollstuhlfahrer 23. Sep 2009 20:00

Re: Buchstaben zählen
 
um mal für Klarstellung zu sorgen: Sortierverfahren gibt's erst nach 1/2 Jahr Informatikunterricht (also bei mir).
Also mal nicht so kompliziert anfangen, obwohl eine Sortierung am einfachsten zum Ergebnis führt.

Bernhard

DeddyH 23. Sep 2009 20:19

Re: Buchstaben zählen
 
Zitat:

Zitat von himitsu
Da es die Buchstaben nicht zählen, sondern sortieren soll, kann man auch einfach die Buchstaben sortieren.

Öhm... ja, macht Sinn :roll:

himitsu 23. Sep 2009 20:51

Re: Buchstaben zählen
 
Zitat:

Zitat von DeddyH
Öhm... ja, macht Sinn :roll:

wieso?
Er hat beschrieben, daß er sie "angeblich" zählen muß,
aber sein Beispiel "aaddee..." zeigt, daß er sie "eigentlich" sortieren soll.

DeddyH 23. Sep 2009 22:19

Re: Buchstaben zählen
 
Ich bezog mich ja auch auf Deinen Satz, der sinngemäß besagt: wenn man Buchstaben sortieren soll, kann man auch Buchstaben sortieren.


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