Forum: PC-Programmierung Delphi: For-Schleifen und Timer


von Tatjana E. (tatjanazwilling)


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

von Chris (Gast)


Lesenswert?

> Irgendwie funktioniert das hier nicht!!!

Was soll das Programm machen und was macht es stattdessen?

von Tatjana E. (tatjanazwilling)


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

von spess53 (Gast)


Angehängte Dateien:

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

von Tatjana E. (tatjanazwilling)


Lesenswert?

cool...danke!

hab gar nicht gewusst, dass es eine fertig Funktion dafür gibt.
Werd mal ausprobieren

von neeeee (Gast)


Lesenswert?

Und fuer das Timing gibt es Timer. So eine Delayloop ist eher 
unguenstig.

von Trank (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

>Delphi hat (leider) keine Zukunft.

Unwissen ist auch eine Art von Wissen. Welches Delphi meinst du 
eigentlich.

MfG Spess

von Trank (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.