![]() |
Datenbank: kp wie das heißt • Version: 1.0.1 • Zugriff über: ...
Bereinigen des Records
Moin Moin
ich bin grad dabei für die schule ein programm zu schreiben mit dem man die relativen häufigkeiten von zeichen in einer zeichenkette feststellt. das programm funktioniert auch beim ersten mal gut aber beim zweiten mal kombiniert das programm das was ich eingegeben hab mit dem vorigen Datensatz ich benutz diese datenbank, keine ahnung wie man die nennt type tdatensatz = record zeichen:char; anzahl:integer; haeufig:real; end; :ein beispiel was das programm ausspuckt: 1. eigegeben: alles klar Gesamtlänge: 10 Zeichen Anzahl Häufigkeit a 2 0,2 l 3 0,3 e 1 0,1 s 1 0,1 1 0,1 k 1 0,1 r 1 0,1 2. eingegeben: dummbeutel Gesamtlänge: 10 Zeichen Anzahl Häufigkeit a 2 0,2 l 3 0,3 e 3 0,3 s 1 0,1 1 0,1 k 1 0,1 r 1 0,1 d 1 0,1 u 2 0,2 m 2 0,2 b 1 0,1 t 1 0,1 l 1 0,1 also brauch ich einen befehl der nach der berechnung der häufigkeiten die datensätze bereinigt. vielen dank im voraus greeeetz B1 |
Re: Problem *g*
Hallo,
erst mal willkommen in der DP! 1. Kannst du bitte den Titel deines Posts ändern? "Probleme" haben hier viele... 2. Kannst du ein bisschen SourceCode posten wie du den Record befüllst bzw. was du mit dem Record machst? Dann wird es einfacher dir zu helfen. |
Re: Problem *g*
Und es unterschlägt auch noch Zeichen! : :stupid:
|
Re: Problem *g*
Mahlzeit :wink:
1. Dein Thread-Titel ist ja mal wirklich toll gewählt. Wer weiß denn da was für ein Problem du hast?! 2. Was meinst du mit "Datenbank"?! Deinen record oder wie?! 3. Wie gibts du die relative Häufigkeit denn aus?! In einem Memo oder in einer ListBox?! Wenn ja, dann solltest vielleicht mal das probieren:
Delphi-Quellcode:
4. Es gibt extra ein BBCode, sodass dein geposteter Code im Delphi-Highlightning erscheint!!! Musst mal schauen wenn du einen Post schreibst ist drüber eine Auswahlleiste!
Memo1.Lines.Clear;
//oder ListBox1.Items.Clear; [Edit]Jetzt war doch jemand schneller als ich :cry: [/Edit] mfg shark |
Re: Problem *g*
Zitat:
Bitte Titel ändern, sodass er dein Problem beschreibt. |
Re: Bereinigen des Records
okey ich versuch das problem noch etwas genauer zu beschreiben
wenn ich nach der ersten eingabe die zweite mache, vergleicht das programm die zeichenkette auch mit den records der ersten eingabe, was er nicht soll!!! ich brauch einen befehl der den record bereinigt sodass nichts mehr in ihm enthalten ist ich hoffe das es klar genug ist ..... grüße nochmal B1 |
Re: Bereinigen des Records
Delphi-Quellcode:
type
tdatensatz = record zeichen:char; anzahl:integer; haeufig:real; end; const maxzahl = 40; var datensatz: array[1..maxzahl] of tdatensatz; zahl: integer; satz: string; procedure TForm1.Button1Click(Sender: TObject); var laenge,a,c,d,g,e:integer; b,f:char; h:real; begin satz:=edit1.text; memo.Clear; laenge:=length(satz); a:=0; //wir sind beim a-ten zeichen memo.lines.add('Gesamtlänge: ' + inttostr(laenge)); while a<laenge do begin a:=a+1; b:=satz[a]; //b ist das aktuelle zeichen c:=laenge; // einfacher d:=0; e:=zahl; while c>0 do begin if b=datensatz[e].zeichen then begin datensatz[e].anzahl:=datensatz[e].anzahl+1; c:=0; d:=1; // d gibt an ob der buchstabe schon zugeordnet wurde end else begin c:=c-1; //c geht alle buchstaben durch e:=e-1; // e ist hier der zähler um alle datensätze abzuklappern end; end; if d=0 then begin zahl:=zahl+1; datensatz[zahl].zeichen:=b; datensatz[zahl].anzahl:=1 end; end; e:=0; //hier ist e der zähler um alle datensätze auszugeben memo.lines.add('Zeichen Anzahl Häufigkeit'); while e<zahl do begin e:=e+1; f:=datensatz[e].zeichen; g:=datensatz[e].anzahl; h:=(g/laenge); memo.lines.add(f + ' ' + inttostr(g) + ' ' + floattostr(h)) end; end; |
Re: Bereinigen des Records
Hi,
normalerweise solltest du as Array "Datensatz" bereits vor dem ersten Start initialisiert haben. Vor einem erneuten Berechnen der Werte muss das nur erneut geschehen... Versuch's man mit fillchar(...) oder mit einer For-Next Schleife, in der du definierte Ausgangswerte für "Datensatz" festlegt. |
Re: Bereinigen des Records, bis jetzt noch ungelöst "!&
Mach in deinem OnButtonClick einfach folgendes:
Delphi-Quellcode:
Damit initialisierst du den Record mit "leeren Werten", dann muesste es klappen.
var i : Integer;
for i := 1 to maxzahl do begin datensatz[i].zeichen := ''; datensatz[i].anzahl:= 0; datensatz[i].haeufig:= 0; end; |
Re: Bereinigen des Records, bis jetzt noch ungelöst "!&
Leider funktioniert das nich,
das programm erzähl mir dann, dass die typen char und string inkompatibel sind wenn ich es umändere von
Delphi-Quellcode:
in
datensatz[i].zeichen := '';
Delphi-Quellcode:
dann gibt er die häufigkeit des leerzeichens aus ...
datensatz[i].zeichen := ' ';
wie folgt: Gesamtlänge: 14 Zeichen Anzahl Häufigkeit 0 0 0 0 0 0 0 0 0 0 u 5 0,357142857142857 j 5 0,357142857142857 f 4 0,285714285714286 --> Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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