![]() |
Werte aus Spalten berechnen
Hallo,
ich möchte aus einer Datei mit Spalten (s0,s1,...) Minimum, Maximum und Mittelwert der Spalte berechnen. Die Werte kommen aus dem StringArray[s,z]. Mini habe ich zu Beginn auf 1000000 gesetzt und temp auf 0. Nun dachte ich mir folgendes :
Delphi-Quellcode:
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12 : string;
Delphi-Quellcode:
Das Problem, im Moment vergleicht er alle Werte und nicht nur die Spaltenwerte miteinander und ich weiß nicht, wie ich das ummodeln kann. Ich kann/muss doch nicht für jede case Anweisung Minimum, MAximum und Mittelwert Code einfügen?!
procedure TMomFiles.WerteBerechnen;
var temp1 : real; i : integer; begin begin temp1 := StrToFloat(StringArray[s,z]); //Minimum while (temp1 < Mini) do Mini := temp1; //Maximum while (temp1 > Maxi) do Maxi := temp1; //Mittelwert testtemp := testtemp+temp1; Avr := (testtemp)/(z+1); case s of 0 : s0 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 1 : s1 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 2 : s2 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 3 : s3 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 4 : s4 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 5 : s5 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 6 : s6 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 7 : s7 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 8 : s8 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 9 : s9 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 10 : s10 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 11 : s11 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); 12 : s12 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr); end; end; end; |
Re: Werte aus Spalten berechnen
Im Moment sehe ich da gar keinen Zugriff auf die anderen Werte, du greifst da doch nur auf eine Zelle (StringArray[s, z]) zu. Und deine while-Schleifen können ja nur einmal durchlaufen, machen aber gar nix, da darin nur eine Zuweisung ausgeführt wird, die sofort die while-Bedingung falsch werden lässt. :gruebel:
Was du machen müsstest ist doch eigentlich in einer for-Schleife jeweils deine Spalte durchzugehen und die Werte jeweils mit den aktuellen Min-/Max-Werten zu vergleichen und ggf. zuzuweisen. Ja, und eben den Mittelwert zu berechnen, wie du es ja auch schon drin hast. Oder hast du da die Schleife selbst weggelassen (begin..end wäre ja da...)? |
Re: Werte aus Spalten berechnen
Die Schleife kommt aus ner anderen Prozedur
Delphi-Quellcode:
z := Zeilenanzahl-1;
begin; for s := 0 to Spaltenanzahl-2 do begin StringArray[s,z] := ZwSpeicher.Strings[s+2]; WerteBerechnen; Temp := (StringArray[s,z]) + ';'; TestDatei.Write(PChar(Temp)^,Length(Temp)); end; StringArray[Spaltenanzahl-1,z] := ZwSpeicher.Strings[ZwSpeicher.Count-1]; WerteBerechnen; Temp := (StringArray[Spaltenanzahl-1,z]) + #13#10; TestDatei.Write(PChar(Temp)^,Length(Temp)); end; |
Re: Werte aus Spalten berechnen
Also wenn du die Berechnung mit Hilfe von globalen Variablen (s, z, ...) so verteilst, dann wundert mich das überhaupt nicht, dass du da Probleme bekommst...
Wie soll man da den Überblick behalten? :shock: Statt der while-Schleifen aus dem ersten Quelltext kannst du dann einfach if-Abfragen benutzen. Wofür eigentlich die ganzen Stringvariablen s0 bis s12? Wie wäre es z.B. mit einem Array? Und was da (falsch) läuft, müsstest du eigentlich im Debugger sehen, das ist von außen viel schwerer nachzuvollziehen... Was komisch ist: Du hast eine for-Schleife mit s, gleichzeitig verwendest du s aber in WerteBerechnen. for-Schleifenvariablen müssen aber lokale Variablen sein... Kann es sein, dass du s zweimal deklariert hast? Einmal lokal und einmal global? So dass das s in WerteBerechnen gar nicht die Werte hat, die du erwartest? Es wäre vielleicht am sinnvollsten das Projekt einmal anzuhängen wie es jetzt ist, denn so ist es ziemlich schwer zu sehen was da wie abläuft. :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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 by Thomas Breitkreuz