| Autor |
Beitrag |
lany
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 30.06.07 14:41
Hi Leute,
nachdem ich mit eurer Hilfe meine alte Aufgabe meistern konnte, steh ich jetzt vor einem neuen Rätsel. Bei mir hakt es leider schon im Ansatz - naja seht selbst!
ps. ich würde mehr wert auf den code legen, als auf das struktogramm.
mfg lany
Einloggen, um Attachments anzusehen!
|
|
Shorty
      
Beiträge: 107
Win XP, Ubuntu 8.04
Delphi 7 Prof., Delphi 2005 Pers.
|
Verfasst: Sa 30.06.07 15:12
Du könntest einfach ein so: array[ord('A')..ord('z')] of integer ein array anlegen, dann den text mit einer for-Schleife durchlaufen, dann gucken welchen Ordinalwert das jeweilige Zeichen hat und diese Stelle im Array einfach um einen erhöhen.
Wenn die Schleife dann fertig ist, dein array nochmal mit einer Schleife durchlaufen und wenn die jeweilige Stelle einen Eintrag größer als 0 hat, per chr(stelle) den Buchstaben und mit deinString[stelle] die Zahl ausgeben.
MfG Shorty
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Sa 30.06.07 15:18
Shorty hat folgendes geschrieben: | Du könntest einfach ein so: array[ord('A')..ord('z')] of integer ein array anlegen, dann den text mit einer for-Schleife durchlaufen, dann gucken welchen Ordinalwert das jeweilige Zeichen hat und diese Stelle im Array einfach um einen erhöhen. Wenn die Schleife dann fertig ist, dein array nochmal mit einer Schleife durchlaufen und wenn die jeweilige Stelle einen Eintrag größer als 0 hat, per chr(stelle) den Buchstaben und mit deinString[stelle] die Zahl ausgeben.
MfG Shorty |
Sehr performance-fressend..
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
Zuletzt bearbeitet von ZeitGeist87 am Sa 30.06.07 15:28, insgesamt 1-mal bearbeitet
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Sa 30.06.07 15:27
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type RLetter = record Buchstabe: Char; Anzahl: Integer; end;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private public myLetter: Array of RLetter; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var lstart: Integer; i, i2: integer; begin setlength(myLetter, 0); setlength(myLetter, 26);
lstart:= 97; for i:= low(myLetter) to high(myLetter) do begin myLetter[i].Buchstabe:= chr(lstart + i); myLetter[i].Anzahl:= 0; end;
for i:= low(myLetter) to high(myLetter) do begin if pos(myLetter[i].Buchstabe, lowercase(edit1.text)) > 0 then begin for i2:= 1 to length(edit1.text) do begin if lowercase(edit1.text[i2]) = myLetter[i].Buchstabe then inc(myLetter[i].Anzahl); end; end; end;
listbox1.Items.Clear;
for i:= low(myLetter) to high(myLetter) do begin if myLetter[i].Anzahl > 0 then listbox1.items.add(myLetter[i].Buchstabe + ': ' + inttostr(myLetter[i].Anzahl)); end;
end;
end. |
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
Shorty
      
Beiträge: 107
Win XP, Ubuntu 8.04
Delphi 7 Prof., Delphi 2005 Pers.
|
Verfasst: Sa 30.06.07 16:33
Sicher, dass dein Source nicht wesentlich Performance-fressender ist? Soweit ich das sehe, gehst du im worst case den Text in Edit1 26-mal durch oder? Also wenn jeder der 26 Buchstaben in dem String vorkommt. Ich dagegen brauch mit meiner Methode gerade mal einen Durchgang mit dieser Methode: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button1Click(Sender: TObject); var i: integer; buchstaben: array[ord('A')..ord('z')] of integer; s: string; begin ListBox1.Clear; s:= Edit1.Text; for i:= ord('A') to ord('z') do buchstaben[i]:= 0;
for i:= 1 to length(s) do inc(buchstaben[ord(s[i])]);
for i:= ord('A') to ord('z') do if buchstaben[i] > 0 then ListBox1.Items.Add(chr(i)+': '+inttostr(buchstaben[i])); end; | Oder irre ich mich da? 
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Sa 30.06.07 16:54
Das mit der Performance ist ne gute Frage..
Obwohl..stimmt..du hast Recht, du gehst einmal durch und ich jedesmal..
Somit ist deine Variante "schneller".
Man lernt nie aus!
Danke!
LG
Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
lany 
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 30.06.07 18:43
ich hab zu danken!
Und wenn ich indirekt andern auch noch helfen kann, um so besser =)
also schönen abend noch
|
|
|