Delphi: For-Schleifen und Timer

#1079683
Lesenswert?

Hallo Leute ich habe folgendes Problem:
Ich muss ein Programm in Delphi schreiben, um  mit dessen Hilfe
Mittel-,Min- und Maxwerte bei der Abgasmessung zu finden. Einmal sollen
min, max, mid innerhalb einer Minute gebildet werden und zweitens sollen
mid, min, max je halbe Minute berechnet werden.
Ich habe folgende Prozedur geschrieben:
Globalbe Variablen sind:
Messwerte_3 : array [0..29, 1..14] of Extended;        // 0-29 sek
 Messwerte_2  : array [0..11, 1..14] of Extended;        // min, max,
mid
Insgesamt habe ich 14 Messwerte(O2, NO2, NOx… usw.) in einer Messung

procedure TForm1.Timer2Timer(Sender: TObject);
var
   i: integer;
   j: integer;
   k: integer;
   temp : extended;
begin
Edit1.Text:= TimeToStr(now);
i:= StrToInt(copy(TimeToStr(now),7,2));
    // Stelle in der O2 angezeigt wird

 if tryStrToFloat (Form1.eO2.Text, temp) then
//wenn es gelingt eine Gleitkommazahl zu erstellen
//dann wird vom Form1.eO2.Text der Wert in temp gespeichert
   Messwerte_3[j, 1] := temp
   else
  //wenn nicht dann ist temp 0
   Messwerte_3[j, 1] := 0 ;

    if tryStrToFloat (Form1.eTGas.Text,temp) then
    Messwerte_3[j, 2] := temp
    else
    Messwerte_3[j, 2] := 0 ;
.
.
.
    if tryStrToFloat (Form1.eNOx_2.Text, temp)
    Messwerte_3[j, 14]:= temp
    else
    Messwerte_3[j, 14]:= 0;

if messung_ok_counter < 60 then
      inc (messung_ok_counter) ;
//Mit Hilfe dieser Anweisung  möchte ich, dass das Programm eine Minut
leerläuft
//damit die Messung ab 0 beginnt
 if messung_ok_counter = 60 then
      messwerte_ok := true ;

if (i = 0) and (messwerte_ok) then
  begin
    for j := 0 to 29 do
    for k := 1 to 14 do
    begin
      Messwerte_2 [0,k] := 0 ;
 //Stelle in der Gesamtsumme von  0 bis 29 sek gespeichert wird
      Messwerte_2 [6,k] := 0 ;
//Stelle in der Maximumwert von  0 bis 29 sek gespeichert wird
      Messwerte_2 [3,k] := 1000 ;
 //Stelle in der Minimumwert von  0 bis 29 sek gespeichert wird
    //Messwerte_2 [9,k]
  //Stelle in der Mittelwert  von  0 bis 29 sek gespeichert wird
          for j := 0 to 29 do
          begin
          if Messwerte_3[j,k]< Messwerte_2[3,k] then
          //Minimum von 0 bis 29 Sekunden
             Messwerte_2[3,k]:=Messwerte_3[j,k] ;
          if Messwerte_3[j,k]> Messwerte_2 [6,k] then
         //Maximum von 0 bis 29 Sekunden
             Messwerte_2[6,k]:=Messwerte_3 [j,k] ;
       //Gesamtsumme von 0 bis 29 Sekunden
             Messwerte_2[0,k]:=Messwerte_2[0,k] + Messwerte_3[j,k] ;
          end;
     //Mittelwert von 0 bis 29 Sekunden

          Messwerte_2[9, k]:=Messwerte_2[0,k]/30 ;
    end;
    WriteDatabase3;
end;

end;

Irgendwie funktioniert das hier nicht!!!
Wenn mir jemand helfen könnte, wäre es super!
Ich kenne Delphi erst seit 2 Monaten, d.h. die Kenntnisse gehen Richtung
0.
Wäre euch sehr dankbar

Tatjana
#1079738
Lesenswert?

das Programm soll bei der Abgasmessung jede Sek. Messwert einlesen und 
auswerten. Die ausgelesenen Werte werden gleichzeitig in Edit Fenstern 
angezeigt. Von diesen werden die Werte in Array gespeichert. Danach 
sollen von 0-29 sek, von 30-59 sek und von 0 bis 59 sek Mittelwerte 
gebildet werden und Minimum-/Maximumwert sollen angezeigt (bzw. in die 
Tabelle reingeschrieben) werden.
Ich habe genau die selbe Prozedur für die Auswertung von 0 bis 59 sek 
geschrieben, da funktioniert es hervorragend. In den anderen (also 0 bis 
29 und 30 bis 59) werden der erste und der letzte Wert miteinander 
verglichen und jeweils der größte als Maximum und der kleinere als 
Minimun eingetragen....Und die Werte dazwischen werden gar nicht 
beachtet
Gast #1080001
Lesenswert?

Hi

Für Mittelwert, Maximum und Minimum in Arrays gibt es fertige 
Funktionen:
'Mean','MaxValue' und 'MinValue'.

Allerdings ist da deine Array-Gestaltung ungünstig.

Besser : Messwerte_3 : array [0..13,0..29] of Extended;        // 0-29 
sek
und natürlich entsprechend Einlesen.

Dann könnte die Mittelwertbildung beispielsweise so aussehen:
      Mittelwert0:=Mean(Messwerte_3[0]);

Ein Stück von deinem Programm habe ich mal etwas 'umformatiert'. 
Wahrscheinlich wirst du dein Fehler selbst finde.

MfG Spess
Angehängte Dateien:
Gast #1086067
Lesenswert?

Hallo Tatjana,

da Du Delphi erst kurz kennst, solltest Du schnell auf eine andere 
Sprache wechseln. Delphi hat (leider) keine Zukunft.

Unabhängig davon - ich gehe davon aus, dass Du bereits unter 
Win-Programme geschrieben hast - empfiehlt es sich unter dem Stichwort 
"exception" in der Hilfe nachzuschlagen. Sonst könnte es sein, dass die 
Anwender nicht viel Spaß an Deinem Programm haben werden.

mfg Trank
Gast #1086690
Lesenswert?

Hallo Spess,

ich meine das von Borland, Inprise, Borland, CodeGear, Embarcadero, 
...?...

Unter Win wird man an .net zukünftig nicht vorbei kommen, ob man will 
oder nicht. Und eine Klassenbibliothek zur Abstraktion einer 
Klassenbibliothek macht nicht wirklich Sinn.

Ich nutze Delphi seit der ersten Version und bin davor mit TP5 
eingestiegen. Auch TV hat mich begeistert. Delphi: super Compiler mit 
klasse IDE aber in den letzten Jahren hat das RAD doch eheblich 
nachgelassen. Ich denke nur an die Online Hilfe.

Auf keine Fälle möchte ich das Produkt madig machen, aber wenn ich jetzt 
einsteigen würde, dann mit C#.

mfg Trank

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren