Vergleich von Variablen

qmb

Mitglied
Thread Starter
Dabei seit
18.05.2006
Beiträge
21
Reaktionspunkte
0
Hallo,

ich arbeite an einer App ( xCode 4.5.1), welche den Sauerstofgehalt im Wasser berechnen soll. Dafür müssen werte verglichen werden.

... // Sättigungsmaximum
if (Eingabe2 == 0.0) {Eingabe4 = 14.64;}
if (Eingabe2 == 0.1) {Eingabe4 = 14.60;}
if (Eingabe2 == 0.2) {Eingabe4 = 14.55;}
if (Eingabe2 == 0.3) {Eingabe4 = 14.51;}...

wenn eingabe2 gleich 0.0 ist, soll eingabe4 dem wert von 14.64 entsprechen. die 0.0 ist die Wassertemperatur. Ich habe die Werte bis zu einer
Temperatur von 30.0 wie oben dargestellt eingegeben. Es werden keine Fehler angezeigt, aber egal welche temp ich einstelle ich erhalte als eingabe4 wert immer den ersten (14.64) . Es währe schön, wenn jemand von denen die schon erfahrener sind als ich, einen Tipp hätten.

Gruss marko
 
ich habe zar keine xCode-Kenntnisse, aber das System bleibt dasselbe.

du musst ab dem zweiten if mit "else if" arbeiten.

Aber in solchen Fällen arbeitet man mit einem "switch" - das gibts sicher auch? bleibt übersichtlich und lässt sich einfacher erweitern.

EDIT: Nach meinem Verständnis sollte zwar auch NUR bei 0.0 der erste Wert erscheinen... sorry.
 
Naja, if / if else sollte hier keinen Unterschied machen, das kommt auf's gleiche raus.

Punkt 1, über den ich mir Gedanken machen würde, wäre, ob's da nicht eine chice Formel zum Umrechnen gibt. Da jetzt 300 mal if erscheint mir jetzt eher umständlich.

Punkt 2: Fließkommazahlen und Vergleiche. Ich habe jetzt einfach mal den ersten Treffer bei Google rausgesucht: http://www.michael-puff.de/Programmierung/Artikel/Fliesskomma.shtml
 
Vielleicht versehentlich Eingabe2 als int oder long deklariert ?
 
Variable Eingabe2 ist als "double" deklariert.

gruss marko
 
Eben mal folgenden Code in XCode laufen lassen:

Code:
double Eingabe2 = 0.0;
double Eingabe4 = 0.0;
        
if (Eingabe2 == 0.0) {Eingabe4 = 14.64;}
if (Eingabe2 == 0.1) {Eingabe4 = 14.60;}
if (Eingabe2 == 0.2) {Eingabe4 = 14.55;}
NSLog(@"Eingabe4: %f", Eingabe4);

Eingabe2 = 0.1;
if (Eingabe2 == 0.0) {Eingabe4 = 14.64;}
if (Eingabe2 == 0.1) {Eingabe4 = 14.60;}
if (Eingabe2 == 0.2) {Eingabe4 = 14.55;}
NSLog(@"Eingabe4: %f", Eingabe4);
        
Eingabe2 = 0.2;
if (Eingabe2 == 0.0) {Eingabe4 = 14.64;}
if (Eingabe2 == 0.1) {Eingabe4 = 14.60;}
if (Eingabe2 == 0.2) {Eingabe4 = 14.55;}
NSLog(@"Eingabe4: %f", Eingabe4);

Mit dem Ergebnis:

2012-10-13 16:36:41.093 Test[4258:303] Eingabe4: 14.640000
2012-10-13 16:36:41.099 Test[4258:303] Eingabe4: 14.600000
2012-10-13 16:36:41.101 Test[4258:303] Eingabe4: 14.550000

Sieht für mich mal korrekt aus.
Irgendwo ist bei Dir als noch der Wurm drin. Ich vermute mal, das Eingabe2 nicht wirklich die Werte hat, die du erwartest.
Was sagt denn der Debugger?
 
Hallo,

die Prüfungen sind in ihrer Antwort gar nicht logisch und sinnvoll.
Der oben gezeigte Code prüft für jeden Wert unnötigerweise drei Mal.
Besser ist ein if-else-Konstrukt oder switch-case.

Code:
    NSInteger x = 2;
    NSInteger y = 0;
    
    if(x == 1)
    {
    
        y = 1;
    
    }
    else if(x == 2)
    {
            
        y = 2;
            
    }
    else if(x == 3)
    {
        
        y = 3;
        
    }
    else
    {
    
        y = -1;
    
    }
    
    NSLog(@"%ld", y);


Noch kurz muss ich neunmalklug dazu geben:

… xCode … XCode …

Xcode

Viele Grüße
 
Ich habe die Werte bis zu einer Temperatur von 30.0 wie oben dargestellt eingegeben.
D.h. Du hast 30 Mal ein if-Konstruktur geschrieben?

Grundsatz: Wenn Du bei der Prpogrammierung etwas doppelt schreibst, dann machst Du meist etwas falsch.

Das Zeugs hat doch sicherlich eine Abhängigkeit, oder?
Warum stellst Du das nicht einfach in einer Formel da?

So etwas wie: schnick = schnack - Konstante …

Viele Grüße
 
Vom Grundsatz stimme ich dem hier ja zu, dass das mit den 300 if Konstrukten ein wenig ungewöhnlich ist.
Allerdings gehe ich mal davon aus, dass wenn Du dieses Konstrukt durch eine Formel ablöst, diese mit irgendwelchen Parametern (bei Dir Eingabe2?) gefüttert werden muss. Und ich vermute mal, dass bevor Dein if-Konstrukt loslegt, schon etwas mit Eingabe2 nicht korrekt ist.

Da wäre mal ein Breakpoint an der Stelle ratsam um sich den Zustand der Variabeln anzuschauen.
 
Hallo,

habe versucht die Formel wie folgt einzuarbeiten, funzt aber nicht.

....
double A1 = -173.4292;
double A2 = 249.6339;
double A3 = 143.3483;
double A4 = -21.8492;
double B1 = -0.033096;
double B2 = 0.014259;
double B3 = -0.001700;

- (IBAction)Berechnung:(id)sender{



double D = A1;
double E = A2*(100/Eingabe4);
double F = A3*(Eingabe4/100);
double G = A4*(Eingabe4/100);
double H = B1+(B2*(Eingabe4/100))+(B3*(Eingabe4/100));


double Z = D+E+F+G+(H*2);
Wert1.text = [NSString stringWithFormat:mad:"%.02f",Z];
......

gruss marko
 
Hallo,

ich bekomme statt einem Zahlenwert eine buchstabenkombination angezeigt, wenn ich einzelne Werte (z.B. nur double F) an "wert1.txt" übergebe , bekomme ich eine Zahl.

Mit dem Debugger habe ich mich bis jetzt noch nicht so beschäftigt.

Gruss Marko
 
Dann solltest Du mal dringend damit anfangen, den Debugger zu erforschen. Andernfalls geht hier die Sucherei mit der Glaskugel weiter.
Denn laut den Codestücken, die Du hier postest sieht es für mich erst mal richtig aus. Zeigt ja auch mein erster Code, wo ich Deinen einfach per Copy & Paste übernommen habe. D.h., dass wenn auch komische If-Konstrukt funktioniert. Ich sehe da nach wie vor Probleme bei den Werten, welche verarbeitet werden sollen.

Mach doch mal folgende das kleine Minitestprogramm von hier:

https://www.macuser.de/forum/f147/vergleich-variablen-656049/#post7632938

Dann kannst Du mal ein paar Breakpoints setzen, indem Du einfach auf den linken Balken neben dem Code klickst (1). Mit dem Button (2) in Xcode kann man alle Breakpoints deaktivieren und wieder aktivieren.

[url]http://www.abload.de/img/debugger1zrud6.png[/url]

Wenn Du Dein Projekt nun startest, dann hält er die Ausführung am ersten aktiven Breakpoint an und man kann dann schön die Werte der Variablen anschauen und sogar auch an der Stelle ändern (3). Mit den Buttons (1) kann man dann Schritt für Schritt im Code weiter gehen. Der Status (2) zeigt dann genau an, wo der Ablauf gerade ist. In (4) sieht man dann was die eigentliche Ausgabe des Programms ist.

[url]http://www.abload.de/img/debugger2s7oqz.png[/url]

Ich hoffe, dass Du damit ein Stück weiter kommst.
 
Zuletzt bearbeitet:
Hallo,

vielen Dank fuer die Tipps und Eure Meinungen!



gruss Marko
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben Unten