AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

pronzentberechungsproblem

Ein Thema von mlhk · begonnen am 12. Mai 2009 · letzter Beitrag vom 14. Mai 2009
Antwort Antwort
Seite 2 von 3     12 3      
mlhk

Registriert seit: 4. Mai 2009
29 Beiträge
 
#11

Re: pronzentberechungsproblem

  Alt 12. Mai 2009, 08:42
hab ich schon geändert
  Mit Zitat antworten Zitat
mlhk

Registriert seit: 4. Mai 2009
29 Beiträge
 
#12

Re: pronzentberechungsproblem

  Alt 12. Mai 2009, 08:51
also
memo4.Lines[1]:= inttostr (round(zeichen / (100 * b)))+'%'; müsste doch eigendlich funktionieren
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.756 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: pronzentberechungsproblem

  Alt 12. Mai 2009, 08:58
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
Klaus
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: pronzentberechungsproblem

  Alt 12. Mai 2009, 09:00
Zitat von mlhk:
also
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

memo4.Lines[1]:= inttostr (round((100 * b) / zeichen))+'%';
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#15

Re: pronzentberechungsproblem

  Alt 12. Mai 2009, 09:14
Wurde ja schon gesagt, da es nur Integer-Werte sind, kann man mit DIV rechnen und Round sparen.
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.
  Mit Zitat antworten Zitat
mlhk

Registriert seit: 4. Mai 2009
29 Beiträge
 
#16

Re: pronzentberechungsproblem

  Alt 12. Mai 2009, 09:29
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
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.756 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: pronzentberechungsproblem

  Alt 12. Mai 2009, 09:37
memo4.Lines[0]:= IntToStr ((100 * aa) div zeichen)+'%'; warum arbeitest Du hier nicht mit Float Werten, das ist unter Umständen genauer.

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
Klaus
  Mit Zitat antworten Zitat
mlhk

Registriert seit: 4. Mai 2009
29 Beiträge
 
#18

Re: pronzentberechungsproblem

  Alt 12. Mai 2009, 09:57
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
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: pronzentberechungsproblem

  Alt 12. Mai 2009, 14:36
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.544 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: pronzentberechungsproblem

  Alt 12. Mai 2009, 14:54
Eine Array-Lösung hatte ich gestern auch schon vorgeschlagen, aber das scheint ihm/ihr nicht zu behagen ( das reimt sich ja sogar).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr.
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