AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi MeanValue(Mittelwert)Bereich Überprüfen
Thema durchsuchen
Ansicht
Themen-Optionen

MeanValue(Mittelwert)Bereich Überprüfen

Ein Thema von DJAYS · begonnen am 25. Sep 2005 · letzter Beitrag vom 26. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2      
DJAYS

Registriert seit: 13. Sep 2005
Ort: Nürnberg
28 Beiträge
 
Delphi 5 Standard
 
#1

MeanValue(Mittelwert)Bereich Überprüfen

  Alt 25. Sep 2005, 22:02
Hallo nette Leute,
ich hätte noch eine Frage zum Mittelwert.Ich schreibe ein Programm,dass elektronishe Messwerte von einer Leiterplatte messen soll, dabei soll die Mittelwerte Low und High berechnen werden,die habe ich schon,aber diese MittelWerte muss ich überprüfen,ob sie in einem bestimmten Bereich liegen.Also MeanValue(LOW) soll im Bereich sagen wir 400H+-80H(also 400H plus-minus 80H) und MeanValue(HIGH) soll im Bereich sagen wir B00H+-80H(also B00H plus-minus 80H) liegen müssen,sonst Fehlermeldung "Out of Range".Der Abstand zwischen B00H plus-minus 80H und 400H plus-minus 80H soll die Toleranz 80 nicht überschreiten,sonst ERROR.Siehe skizze unten:

MeanHi:------------ B00H+- 80
|
| Toleranz 80
|
MeanLo:----------- 400H+-80

wie schreibt man eigentlich plus-minus zeichen im Delphi?Kann JEMAND mir helfen?es ist wirklich dringend für mich und bin Anfänger hier.
thx im Voraus
DJAYS
I like Programing, but it hates me!wat am I gonna do?
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: MeanValue(Mittelwert)Bereich Überprüfen

  Alt 25. Sep 2005, 22:21
Wenn Du meinst schreiben im Sinne einer if abfrage im Quellcode würd ich mal sagen gar nicht. Da musst du zwei if abfragen kombinieren in etwa so

Delphi-Quellcode:
  
  lToleranz := 80;
  lMin := 100;
  lMax := 200;

  lResult := 0;
 
  if ( (lValue - lToleranz) < lMin)
     or ((lValue + lToleranz) > lMax) ) then
     lResult := 1; //Out of Range

  if ((lMax - lMin) < lToleranz) then
     lResult := 2; //Error

  case lResult of
     0: //kein Fehler
     1: //out of Range
     2: //Error
  end;
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: MeanValue(Mittelwert)Bereich Überprüfen

  Alt 25. Sep 2005, 22:40
Hi,

mit Toleranz ist wohl die Kopplung der Abweichungen gemeint:

Delphi-Quellcode:
function CheckDelta(hiMean, hiNorm, loMean, loNorm, delta: cardinal): boolean;
var
  hiDev, loDev: integer;
begin
  hiDev := hiMean - hiNorm;
  loDev := loMean - loNorm;
  Result := (Abs(hiDev) <= delta) and (Abs(loDev) <= delta) and (Abs(hiDev - loDev) <= delta);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: MeanValue(Mittelwert)Bereich Überprüfen

  Alt 25. Sep 2005, 22:45
Ich sag auch nochmal kurz was dazu ...


Delphi selber kennt kein Plus/Minus.

Also,
A in B±C
entsprich dann
(A >= B - C) or (a <= B + C)

, vorausgesetzt C ist im positiven Bereich, oder 0,

oder man sorgt dafür, daß C immer Positiv ist (z.B. mit ABS).




Nun aber zu deinem Problem:
Delphi-Quellcode:
Var MeanValue, lHigh, lLow, lToleranz: Irgendwas;

If (MeanValue >= lLow - ABS(lToleranz))
  and (MeanValue <= lLow + ABS(lToleranz)) Then
  // MeanValue ist im Low-Bereich

If (MeanValue >= lHigh - ABS(lToleranz))
  and (MeanValue <= lHigh + ABS(lToleranz)) Then
  // MeanValue ist im High-Bereich

If (lHigh - ABS(lToleranz))
  - (lLow + ABS(lToleranz) <= lToleranz Then
  // High/Low-Abstand kleiner/gleich lToleranz
und zusammen ergibt das dann
Delphi-Quellcode:
If (lLow < lHigh)
  and (((MeanValue >= lLow - ABS(lToleranz))
  and (MeanValue <= lLow + ABS(lToleranz)))
  or ((MeanValue >= lHigh - ABS(lToleranz))
  and (MeanValue <= lHigh + ABS(lToleranz))))
  and (lHigh - lLow <= 3 * ABS(lToleranz)) Then
  // alles OK
"(lLow < lHigh) and" kannst du auch weglassen ... ist ja nur da, um sicherzugehen, das High auch wirklich größer als Low ist ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
DJAYS

Registriert seit: 13. Sep 2005
Ort: Nürnberg
28 Beiträge
 
Delphi 5 Standard
 
#5

Re: MeanValue(Mittelwert)Bereich Überprüfen

  Alt 25. Sep 2005, 23:10
hallo leute,
danke,so sieht meine Fkt zum berechnen vom Mittelwert aus:

[code]function CalcMeanValue (aData: Array of Word; // Type muss mit Deklaration übereinstimmen
uiArraySize: Integer; // Anzahl der Elemente des Arrays
uiStartIdx: Integer; // Startindex der Berechnung
uiEndIdx : Integer): Word ; // Endindex der Berechnung

var i,a : Integer; // Index
uiMeanVal : Word; // Zwischenergebnis MeanWert,ui=unsigned integer
sum : DWord;
begin
sum := 0;
a := 0;

uiMeanVal := $000 ; // entspricht 16bit meanwert

for i := uiStartIdx to uiEndIdx do
begin
inc(a);
sum := sum + aData[i];// Messwerte aufaddieren
end;
if a > 1 then uiMeanVal := Round(sum/a)
else uiMeanVal := 0; // Mittelwert;
result := uiMeanVal; // entspricht return(uiMeanVal)

end;

kann ich diese Quellcodes,die ihr mich anbietet,in dieser Funktion einbinden?oder andere Fkt schreiben?Was bedeutet diese lMin,lToleranz oder l,Norm,Delta?ist Dev StdDev?
I like Programing, but it hates me!wat am I gonna do?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: MeanValue(Mittelwert)Bereich Überprüfen

  Alt 25. Sep 2005, 23:38
Hi,

ich konnte deine Funktion so schlecht lesen, da habe ich sie nochmal bei mir eingetippt - das kam dabei raus:

Delphi-Quellcode:
function CalcMeanValue(aData: Array of Word): Word;
var
  i: Integer;
  sum: DWord;
begin
  sum := 0;

  // Messwerte aufaddieren
  for i := Low(aData) to High(aData) do
    sum := sum + aData[i];

  // Mittelwert berechnen
  if Length(aData) = 0
    then Result := 0
    else Result := Round(sum / Length(aData));
end;
dev steht bei mir für deviation ($80) und nicht für standard deviation. hiMean und loMean sind die Werte, die du mit deiner Funktion errechnest. hiNorm ist $B00 und loNorm ist $400. Meine Funktion CheckDelta() kannst du schlecht in deine CalcMeanValue() einbauen, sie baut doch auf deiner Funktion auf:

Delphi-Quellcode:
var
  hiMean, loMean: Word;
begin
  hiMean := CalcMeanValue(aHighValues);
  loMean := CalcMeanValue(aLowValues);
  if CheckDelta(hiMean, $B00, loMean, $400, $80)
    then ShowMessage('hooray')
    else ShowMessage('sob');
end;
marabu
  Mit Zitat antworten Zitat
DJAYS

Registriert seit: 13. Sep 2005
Ort: Nürnberg
28 Beiträge
 
Delphi 5 Standard
 
#7

Re: MeanValue(Mittelwert)Bereich Überprüfen

  Alt 26. Sep 2005, 00:30
hi Marabu,danke für die Verbesserung meine fkt.was bedeutet diese delta oder wofür ist es in deiner Fkt CheckDelta?
thx
I like Programing, but it hates me!wat am I gonna do?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: MeanValue(Mittelwert)Bereich Überprüfen

  Alt 26. Sep 2005, 06:40
Hi DJAYS,

der Parameter delta ist in meinem Beispielaufruf mit $80 angegeben. Erkennst du denn deine maximal erlaubte Abweichung nicht wieder?

marabu
  Mit Zitat antworten Zitat
DJAYS

Registriert seit: 13. Sep 2005
Ort: Nürnberg
28 Beiträge
 
Delphi 5 Standard
 
#9

Re: MeanValue(Mittelwert)Bereich Überprüfen

  Alt 26. Sep 2005, 10:11
Hi Marabu,
danke.d.h Dev und delta bei dir sind gleich?
I like Programing, but it hates me!wat am I gonna do?
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#10

Re: MeanValue(Mittelwert)Bereich Überprüfen

  Alt 26. Sep 2005, 10:49
Hi,
zum berechnen des Mittelwertes kann ich dir zu der Funktion Mean (Unit Math denke ich) raten. Erwartet ein Array of Double und gibt dir ein Extended zurück. Musst du zwar entsprechend das Ergebnis wieder casten aber die Funktion nutzt echt gut die ALU und ist damit verdammt schnell (auch bei sehr großen Arrays).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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