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
> Irgendwie funktioniert das hier nicht!!!
Was soll das Programm machen und was macht es stattdessen?
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
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
cool...danke! hab gar nicht gewusst, dass es eine fertig Funktion dafür gibt. Werd mal ausprobieren
Und fuer das Timing gibt es Timer. So eine Delayloop ist eher unguenstig.
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
Hi
>Delphi hat (leider) keine Zukunft.
Unwissen ist auch eine Art von Wissen. Welches Delphi meinst du
eigentlich.
MfG Spess
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.