![]() |
Re: pronzentberechungsproblem
hab ich schon geändert
|
Re: pronzentberechungsproblem
also
Delphi-Quellcode:
müsste doch eigendlich funktionieren
memo4.Lines[1]:= inttostr (round(zeichen / (100 * b)))+'%';
|
Re: pronzentberechungsproblem
was ist mit Deiner Aussage aus Beitrag #9
Zitat:
Grüße Klaus |
Re: pronzentberechungsproblem
Zitat:
Zeichen = Anzahl aller Zeichen = Maximum b = Anzahl der gefundenen Zeichen = Zähler
Delphi-Quellcode:
memo4.Lines[1]:= inttostr (round((100 * b) / zeichen))+'%';
|
Re: pronzentberechungsproblem
Wurde ja schon gesagt, da es nur Integer-Werte sind, kann man mit DIV rechnen und Round sparen.
Delphi-Quellcode:
Klammer um 100 * b wäre auch nicht nötig, aber bevor was falsch optimiert wird, schadet die auch nicht.
memo4.Lines[1]:= IntToStr ((100 * b) div zeichen)+'%';
|
Re: pronzentberechungsproblem
hier besteht das problem irgendwie immer noch, also hier mal der ganz code, ich weiß ist sehr umständlich geschrieben
Delphi-Quellcode:
und am ende noch nicht ganz fertig aber dennoch
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; |
Re: pronzentberechungsproblem
Delphi-Quellcode:
warum arbeitest Du hier nicht mit Float Werten, das ist unter Umständen genauer.
memo4.Lines[0]:= IntToStr ((100 * aa) div zeichen)+'%';
Delphi-Quellcode:
.. und vielleicht mal über die Verwendung von Array nachdenken.
memo4.Lines[0]:= format('%.2f %%',[100 * aa / zeichen]);
.. und nicht vergessen den Quellcode einzurücken, das macht die ganze Geschichte lesbarer. Grüße Klaus |
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 |
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; |
Re: pronzentberechungsproblem
Eine Array-Lösung hatte ich
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 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