Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi pronzentberechungsproblem (https://www.delphipraxis.net/133919-pronzentberechungsproblem.html)

mlhk 12. Mai 2009 08:42

Re: pronzentberechungsproblem
 
hab ich schon geändert

mlhk 12. Mai 2009 08:51

Re: pronzentberechungsproblem
 
also
Delphi-Quellcode:
memo4.Lines[1]:= inttostr (round(zeichen / (100 * b)))+'%';
müsste doch eigendlich funktionieren

Klaus01 12. Mai 2009 08:58

Re: pronzentberechungsproblem
 
was ist mit Deiner Aussage aus Beitrag #9

Zitat:

ah danke, so geht das perfekt
Schau nochmals in Dein Mathebuch unter Prozentrechnung nach.

Grüße
Klaus

Blup 12. Mai 2009 09:00

Re: pronzentberechungsproblem
 
Zitat:

Zitat von mlhk
also
Delphi-Quellcode:
memo4.Lines[1]:= inttostr (round(zeichen / (100 * b)))+'%';
müsste doch eigendlich funktionieren

Nein, das ist Quark.

Zeichen = Anzahl aller Zeichen = Maximum
b = Anzahl der gefundenen Zeichen = Zähler

Delphi-Quellcode:
memo4.Lines[1]:= inttostr (round((100 * b) / zeichen))+'%';

Satty67 12. Mai 2009 09:14

Re: pronzentberechungsproblem
 
Wurde ja schon gesagt, da es nur Integer-Werte sind, kann man mit DIV rechnen und Round sparen.
Delphi-Quellcode:
memo4.Lines[1]:= IntToStr ((100 * b) div zeichen)+'%';
Klammer um 100 * b wäre auch nicht nötig, aber bevor was falsch optimiert wird, schadet die auch nicht.

mlhk 12. Mai 2009 09:29

Re: pronzentberechungsproblem
 
hier besteht das problem irgendwie immer noch, also hier mal der ganz code, ich weiß ist sehr umständlich geschrieben
Delphi-Quellcode:
procedure TForm2.startClick(Sender: TObject);
var text: string;
var zeichen,a,aa,i,e,b,c,d,f,g,h,ii,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z :integer;
begin
text:= Eeingabe.Text;
zeichen:= length (text);
Ezeichen.Caption:= inttostr (zeichen);
for I := 1 to zeichen do
begin
a:= ord (text[i]);
case a of
65,97 : aa:=aa+1;
66,98 : b:=b+1;
67,99 : c:=c+1;
68,100 : d:=d+1;
69,101 : e:=e+1;
70,102 : f:=f+1;
71,103 : g:=g+1;
72,104 : h:=h+1;
73,105 : ii:=ii+1;
74,106 : j:=j+1;
75,107 : k:=k+1;
76,108 : l:=l+1;
77,109 : m:=m+1;
78,110 : n:=n+1;
79,111 : o:=o+1;
80,112 : p:=p+1;
81,113 : q:=q+1;
82,114 : r:=r+1;
83,115 : s:=s+1;
84,116 : t:=t+1;
85,117 : u:=u+1;
86,118 : v:=v+1;
87,119 : w:=w+1;
88,120 : x:=x+1;
89,121 : y:=y+1;
90,122 : z:=z+1;
end;
memo3.lines[0]:='A:'+inttostr (aa);
memo3.lines[1]:='B:'+ inttostr (b);
memo3.lines[2]:='C:'+ inttostr (c);
memo3.lines[3]:='D:'+ inttostr (d);
memo3.lines[4]:='E:'+ inttostr (e);
memo3.lines[5]:='F:'+ inttostr (f);
memo3.lines[6]:='G:'+ inttostr (g);
memo3.lines[7]:='H:'+ inttostr (h);
memo3.lines[8]:='I:'+ inttostr (ii);
memo3.lines[9]:='J:'+ inttostr (j);
memo3.lines[10]:='K:'+ inttostr (k);
memo3.lines[11]:='L:'+ inttostr (l);
memo3.lines[12]:='M:'+ inttostr (m);
memo3.lines[13]:='N:'+ inttostr (n);
memo3.lines[14]:='O:'+ inttostr (o);
memo3.lines[15]:='P:'+ inttostr (p);
memo3.lines[16]:='Q:'+ inttostr (q);
memo3.lines[17]:='R:'+ inttostr (r);
memo3.lines[18]:='S:'+ inttostr (s);
memo3.lines[19]:='T:'+ inttostr (t);
memo3.lines[20]:='U:'+ inttostr (u);
memo3.lines[21]:='V:'+ inttostr (v);
memo3.lines[22]:='W:'+ inttostr (w);
memo3.lines[23]:='X:'+ inttostr (x);
memo3.lines[24]:='Y:'+ inttostr (y);
memo3.lines[25]:='Z:'+ inttostr (z);
end;
memo4.Lines[0]:= IntToStr ((100 * aa) div zeichen)+'%';
memo4.Lines[1]:= IntToStr ((100 * b) div zeichen)+'%';
memo4.Lines[2]:= IntToStr ((100 * c) div zeichen)+'%';
memo4.Lines[3]:= IntToStr ((100 * d) div zeichen)+'%';
memo4.Lines[4]:= inttostr (round((e/zeichen) *100))+'%';
memo4.Lines[5]:= inttostr (round((f/zeichen) *100))+'%';
memo4.Lines[6]:= inttostr (round((g/zeichen) *100))+'%';
memo4.Lines[7]:= inttostr (round((h/zeichen) *100))+'%';
memo4.Lines[8]:= inttostr (round((ii/zeichen) *100))+'%';
memo4.Lines[9]:= inttostr (round((j/zeichen) *100))+'%';
memo4.Lines[10]:= inttostr (round((k/zeichen) *100))+'%';
memo4.Lines[11]:= inttostr (round((l/zeichen) *100))+'%';
memo4.Lines[12]:= inttostr (round((m/zeichen) *100))+'%';
memo4.Lines[13]:= inttostr (round((n/zeichen) *100))+'%';
memo4.Lines[14]:= inttostr (round((o/zeichen) *100))+'%';
memo4.Lines[15]:= inttostr (round((p/zeichen) *100))+'%';
memo4.Lines[16]:= inttostr (round((q/zeichen) *100))+'%';
memo4.Lines[17]:= inttostr (round((r/zeichen) *100))+'%';
memo4.Lines[18]:= inttostr (round((s/zeichen) *100))+'%';
memo4.Lines[19]:= inttostr (round((t/zeichen) *100))+'%';
memo4.Lines[20]:= inttostr (round((u/zeichen) *100))+'%';
memo4.Lines[21]:= inttostr (round((v/zeichen) *100))+'%';
memo4.Lines[22]:= inttostr (round((w/zeichen) *100))+'%';
memo4.Lines[23]:= inttostr (round((x/zeichen) *100))+'%';
memo4.Lines[24]:= inttostr (round((y/zeichen) *100))+'%';
memo4.Lines[25]:= inttostr (round((z/zeichen) *100))+'%';

end;
und am ende noch nicht ganz fertig aber dennoch

Klaus01 12. Mai 2009 09:37

Re: pronzentberechungsproblem
 
Delphi-Quellcode:
memo4.Lines[0]:= IntToStr ((100 * aa) div zeichen)+'%';
warum arbeitest Du hier nicht mit Float Werten, das ist unter Umständen genauer.

Delphi-Quellcode:
memo4.Lines[0]:= format('%.2f %%',[100 * aa / zeichen]);
.. und vielleicht mal über die Verwendung von Array nachdenken.
.. und nicht vergessen den Quellcode einzurücken, das macht die ganze Geschichte lesbarer.

Grüße
Klaus

mlhk 12. Mai 2009 09:57

Re: pronzentberechungsproblem
 
das funktioniert jetzt, ich bin auch auf eine fehlerquelle gestoßen und zwar beim memo, bei lines sollte 0 eingestellt sein und das ist mir zwar unerklärlich man muss mit leerzeichen aufpassen

allerherzlichsten danke schon für eure hilfe, hat mich wirklich weiter gebracht

mfg
max

Blup 12. Mai 2009 14:36

Re: pronzentberechungsproblem
 
Ich bezweifle das deine Anwendung so richtig funktioniert.
Deine Variablen für die Summen werden nicht mit 0 initialisiert, bevor du mit dem Zählen beginnst.
Die Ausgabe der Prozente erfolgt zum Teil gerundet, zum Teil werden einfach die Kommastellen abgeschnitten.

Hier mal ein Beispiel nicht getestet:
Delphi-Quellcode:
{Funktionalität von der Oberfläche trennen, eventuell eigene Unit}
type
  TBuchstabenSumme = array['A'..'Z'] of integer;

function ZaehleBuchstaben(const AText: string; out ASumme: TBuchstabenSumme): integer;
var
  i: integer;
  c: Char;
begin
  {Anzahl der Zeichen zurückgeben}
  Result := Length(AText);
  {Anfangswerte für die Summen auf 0 setzen}
  for c := Low(ASumme) to High(ASumme) do
    ASumme[c] := 0;
  {die entsprechende Summe für jedes gültige Zeichen im Text erhöhen}
  for i := 1 to Result do
  begin
    c := UpCase(AText[i]);
    if (c >= Low(ASumme)) and (c <= High(ASumme)) then
      Inc(ASumme[c], 1);
  end;
end;

procedure TForm1.startClick(Sender: TObject);
var
  Zeichen: integer;
  Summe: TBuchstabenSumme;
  y: Integer;
  c: Char;
begin
  {Eingabeparameter an die Funktion übergeben und Ergebnis übernehmen}
  Zeichen := ZaehleBuchstaben(Eeingabe.Text, Summe);
  {Ergebnisausgabe}
  Ezeichen.Caption:= IntToStr(Zeichen);
  {mit erster Zeile im Memo beginnen, ein Grid wäre vieleicht besser}
  y := 0;
  for c := Low(Summe) to High(Summe) do
  begin
    memo3.Lines[y] := c + ': ' + IntToStr(Summe[c]);
    memo4.Lines[y] := IntToStr(Round((100 * Summe[c]) / Zeichen)) + '%';
    Inc(y);
  end;
end;

DeddyH 12. Mai 2009 14:54

Re: pronzentberechungsproblem
 
Eine Array-Lösung hatte ich gestern auch schon vorgeschlagen, aber das scheint ihm/ihr nicht zu behagen (:shock: das reimt sich ja sogar).


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 Uhr.
Seite 2 von 3     12 3      

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