Autor Beitrag
Frost
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 14.06.08 09:54 
Guten Tag,

das hier ist mein erster Post in diesem Forum und ich hoffe mal, ich habe die richtige Sparte erwicht.

Na ja, ich fang dann gleich mal mit meinem Problem an:
Also ich bin dabei, die Huffmann Kodierung zu programmieren. Theoretisch finde ich das alles ja ganz einfach aber beim umsetzen ins Praktische stoße ich immer wieder auf kleine Probleme, an denen ich mir die Zähne ausbeiße.
Also, als erstes hab' ich hier eine Funktion erstellt, die, wenn sie fertig ist, alle Buchstaben zählen soll.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
//function zum zählen von zeichen im gegebenen string
  function ZeichenZaehlen:integer;
  var int,int2,zaehler,IItem,IItem2:integer;

      s:string;
  begin
    Zaehler:=0;  // zähler auf 0 setzen
    IItem:=Form1.ListBox1.Count;  // IItem bekommt die Anzahl der Zeilen in der Listbox
    s:=Form1.ListBox1.Items.text; // s bekommt den Text aus der ListBox1 zugewiesen
      for int:= 0 to IItem-1 do  // For-Schleife, die alle Zeilen durchgeht
       IItem2:= length(Form1.ListBox1.Items.Strings[0]); // IItem2 bekommt die Anzahl der Zeichen in der Zeile (IItem) zugewiesen
          for int2:=0 to IItem2 do // For-Schleife, die  in jeder Zeile alle Zeichen durchgeht
          if s[int2] = 'a' then inc(Zaehler); // addiert jeweils 1 zum Zaehler, wenn ein "a" im String gefunden wird
//kontrolle
showmessage(' Zaehler (a) hat den Wert:'+inttostr(zaehler)+', IItem hat den Wert:'+IntToStr(IItem)+' IItem2 hat den Wert:'+IntToStr(IItem2)+'');
  end;

Nur leider ist mir aufgefallen, dass sie immer nur die, im moment nur "a", in der ersten Zeile zählt und sie dann mit der Zeilenanzahl multipliziert anstatt eine Zeile weiterzurücken.
Nun bräuchte ich eine Anweisung oder irgendwas, dass nach jedem Schleifendurchlauf den Zähler eine Zeile tiefer rücken lässt.

Freu mich über jede Hilfe.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 14.06.08 14:23 
Hallo,

:welcome: hier in der EE.

Du weist s den kompletten Inhalt der Listbox zu. Willst aber dann aus Itemanzahl und Itemlänge der ListBox eine Laufvariable berechnen um auf jedes Zeichen in s zugreifen zu können. Da verkomplizeierst Du die Sache enorm. :wink:

Das ganze reduziert:
ausblenden Delphi-Quelltext
1:
2:
3:
for i := 0 to Length(s) do
  if s[i] = 'a' then
    /...

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 14.06.08 14:56 
user profile iconFrost hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
          for int2:=0 to IItem2 do // For-Schleife, die  in jeder Zeile alle Zeichen durchgeht
          if s[int2] = 'a' then inc(Zaehler); // addiert jeweils 1 zum Zaehler, wenn ein "a" im String gefunden wird



user profile iconLannes hat folgendes geschrieben:
Das ganze reduziert:
ausblenden Delphi-Quelltext
1:
2:
3:
for i := 0 to Length(s) do
  if s[i] = 'a' then
    /...

Bei mir beginnen Strings aber bei eins. ;)

Willst Du nun berrechnen, wieviele Zeichen in jedem Listbox Item jeweils vorkommen oder im gesamten Text? ;)

Grüße,
Marc


Zuletzt bearbeitet von Marc. am Sa 14.06.08 15:02, insgesamt 2-mal bearbeitet
Frost Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 14.06.08 14:59 
user profile iconLannes hat folgendes geschrieben:
Hallo,

:welcome: hier in der EE.

Du weist s den kompletten Inhalt der Listbox zu. Willst aber dann aus Itemanzahl und Itemlänge der ListBox eine Laufvariable berechnen um auf jedes Zeichen in s zugreifen zu können. Da verkomplizeierst Du die Sache enorm. :wink:

Das ganze reduziert:
ausblenden Delphi-Quelltext
1:
2:
3:
for i := 0 to Length(s) do
  if s[i] = 'a' then
    /...


Danke! :)
Nu funktioniert alles. :)