Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem : rechnen mit arrays (https://www.delphipraxis.net/119516-problem-rechnen-mit-arrays.html)

Muffel 27. Aug 2008 22:25


Problem : rechnen mit arrays
 
Hallo,
ich habe ein kleines großes problem.

ich habe in meiner memo versch zahlen wie

20
30
40
50
...

nun will ich aus diesen zahlen den mittelwert bilden.
jedoch weis ich nicht wie ich das machen kann..
bis jetzt kann ich das nur manuel machen

Delphi-Quellcode:
while i < t do begin
   v := a * i ;
  v := v * 3.6;
   i := i+1;

  Memo1.Lines.Add(FloatToStr(v));
  end;



  zahl1 := StrToFloat(Memo1.Lines[1]);
  zahl2 := StrToFloat(Memo1.Lines[2]);
  zahl3 := StrToFloat(Memo1.Lines[3]);
  gesamt := zahl1 + zahl2 + zahl3;
  ende := gesamt / t;

  Edit1.Text := FloatToStr(ende);
abhängig von i werden mehrere einträge gemacht.
mit dieser manuellen art kann ich nur von den 1. drei reihen die zahlen addieren und die durch i teilen ..

kann mir einer helfen wie ich die Memo Line inhalte zusammenrechne ?

MfG

Muffel

mkinzler 27. Aug 2008 22:28

Re: Problem : rechnen mit arrays
 
Delphi-Quellcode:
for i := 0 to Memo.Lines.Count do
begin
    Summe := Summe + StrToIntDef( Memo.Lines[i], 0);
end;

mittelwert := summe / Memo.Lines.Count;

Muffel 27. Aug 2008 23:06

Re: Problem : rechnen mit arrays
 
erstmal vielen dank für die schnelle antwort

habe aber immernoch ein problem,
als mittelwert der werte

0
18
36
54
72

wird mir 1,03518951684639E269 ausgegeben .... =/

Delphi-Quellcode:

  while i < t do begin
   v := a * i ;
  v := v * 3.6;
   i := i+1;

  Memo1.Lines.Add(FloatToStr(v));
  end;

  for i := 0 to Memo1.Lines.Count do
begin
    Summe := Summe + StrToIntDef( Memo1.Lines[i], 0);
end;

Mittelwert := Summe / Memo1.Lines.Count;

  Edit1.Text := FloatToStr(Mittelwert);
end;

Benedikt 27. Aug 2008 23:52

Re: Problem : rechnen mit arrays
 
Nabend,

spontan würd mir die Frage einfallen: Hast du Summe vorher mal mit 0 initialisiert?

Und ansonsten:
Delphi-Quellcode:
for i := 0 to Memo1.Lines.Count-1 do
MfG Benedikt

oldmax 28. Aug 2008 05:30

Re: Problem : rechnen mit arrays
 
Hi

Zitat:

spontan würd mir die Frage einfallen: Hast du Summe vorher mal mit 0 initialisiert?
Ich seh es genauso, obwohl bei dem Codeschnipsel alles andere auch möglich ist....
Manchmal frage ich mich, wie ihr eure eigenen Programme nachvollziehen könnt, ohne ein wenig Form in die Zeilen zu bringen. Einrücken heißt, 2-4 Leerzeichen nach jedem Begin und vor End wieder in die Zeile zurück. Außerdem, es gibt die F7 Taste, die ein Zeilenweises abarbeiten der Anweisungen ermöglicht und wenn dann mit dem Cursor auf die Variablen gegangen wird, ist durch eine Anzeige der Inhalte eine Kontrolle möglich. Dann stellst du selber gleich fest, warum es zu solchen "unerwarteten" Ergebnissen kommt. Auch Haltepunkte sind in der Form hilfreich. Nicht, das wir unsere Hilfe verweigern, aber der Hinweis auf Formatierung ist auch eine Hilfe. Erstaunlich nur, wie selten er beachtet wird.
Gruß oldmax

Muffel 28. Aug 2008 17:19

Re: Problem : rechnen mit arrays
 
danke für die tollen ratschläge =)

jetzt hab eich aber noch ein problem...

der rechnet jetzt den durschnitt aus , aber erst ab einem bestimmten wert.

wenn ich jetzt für den wert t oder a einen wert eingebe der kleiner als 5 ist kommt als durchschnittsgeschw. 0

wenn ich dann bei beiden 5 oder mehr eingebe kommt dannt eine durchschnittgeschwindigkeit.
woran kann das liegen ?

kleine bemerkung
weill einfach nur die durchschnittsgeschwindidkeit bei einem auto rechnen dabei sind halt
t oder a variabel
also die zeit wie lange er beschleunigt und die stärke der beschleunigung....

warum fängt er erst ab t und a =5 an zu rechnen ?

marabu 28. Aug 2008 17:33

Re: Problem : rechnen mit arrays
 
Hallo,

den Fehler aufzeigen kann nur, wer den Quellcode kennt - das bist momentan du alleine.

Grüße vom marabu

HalloDu 28. Aug 2008 17:57

Re: Problem : rechnen mit arrays
 
Meine spontane Vermutung ist (also prakitsch nur :glaskugel:), dass du Floatwerte in die Memo schreibst, weiß natürlich nicht ob das wirklich Fließkommawerte sind, da ich a und v nicht kenne, aber aufgrund des mal 3.6 recht wahrscheinlich, und die dann mit StrToIntDef ausliest was bedeutet, dass anstatt alle Werte die Hinterkommastellen haben, einfach nur 0 eingelesen wird. Was dazu führt, dass der Durchschnitt gedrückt wird. Naja, versuch mal statt StrToIntDef StrToFloatDef zu benutzen.

Achso und immer brav Variablen initialisieren.

Außerdem find ich den Weg über die Memo eher unpraktisch, Array oder mit Objekten in ner Objektlist (Wenn auch ein bissle oversized) wäre denke ich besser.

grenzgaenger 28. Aug 2008 20:00

Re: Problem : rechnen mit arrays
 
so, bin jetzt unschlüssig wie ich dir antworten soll, auf das memo oder auf deinen titel, oder doch was anderes?

also erst mal durchsnitt mit einem array of doubles ausrechen

Delphi-Quellcode:
mydurchschnitt := mean(myArrayOfFloats);
aber wenn du die daten eingeben willst und noch 'n bischen bearbeiten, würd ich kein array nehmen sondern eine TObjectList .... und ein schönes objekt implementieren, das die daten bereitstellen und bearbeiten kann :-)

zum bearbeiten kannst ja ein stringgrid hernehmen, und hinter jeder zelle dein passendes objekt hängen... die verwaltung hierzu machst du am besten über eine objectlist :-)

die berechnung würd ich dann über ein kleines schleifchen über die objectlist machen :-)

dann kannst dir raussuchen welchen durchschnitt du auch gerne haben möchtest ... :-)


ps: @muffel, dein geschreibsel kann man ja kaum entziffern :pale:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 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