Autor Beitrag
lany
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 107

Win XP, Ubuntu 8.04
Delphi 7 Prof., Delphi 2005 Pers.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Sa 30.06.07 15:18 
user profile iconShorty 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Sa 30.06.07 15:27 
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    myLetter: Array of RLetter;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var lstart: Integer;
    i, i2: integer;
begin
 //MyLetter intialisieren
 setlength(myLetter, 0);
 setlength(myLetter, 26);

 //Klein a in ASCII-Table
 lstart:= 97;
 //Zuordnung a-z
 for i:= low(myLetter) to high(myLetter) do
 begin
  myLetter[i].Buchstabe:= chr(lstart + i);
  myLetter[i].Anzahl:= 0;
 end;


 //Text durchsuchen
 for i:= low(myLetter) to high(myLetter) do
 begin
  if pos(myLetter[i].Buchstabe, lowercase(edit1.text)) > 0 then
  begin
   //Buchstabe vorhanden, dann Text durchgehen
   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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 107

Win XP, Ubuntu 8.04
Delphi 7 Prof., Delphi 2005 Pers.
BeitragVerfasst: 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:
ausblenden 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? :gruebel:
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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