AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

If-Then oder Case-else

Ein Thema von MatthiasxD · begonnen am 17. Mär 2009 · letzter Beitrag vom 30. Mär 2009
Antwort Antwort
Seite 2 von 4     12 34   
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: If-Then oder Case-else

  Alt 17. Mär 2009, 16:27
Zitat von alleinherrscher:
Hm, wenn du glänzen willst, würd könnte man es auch "etwas krank" aber interessant - so machen:

Delphi-Quellcode:

var
 temp_raum1, temp_raum2, temp_raum3:integer;
 diff_raum1, diff_raum2, diff_raum3:integer;
 referenz_temp:integer;
 summe,stufe:integer;
begin

//[zuvor noch temp_raum1 bis temp_raum3 einlesen...]

referenz_temp:=15;

diff_raum1:=int((temp_raum1-referenz_temp)/abs(temp_raum1-referenz_temp));
// =1, falls temp_raum1 > referenz_temp,sonst -1

diff_raum2:=int((temp_raum2-referenz_temp)/abs(temp_raum2-referenz_temp));
// =1, falls temp_raum2 > referenz_temp,sonst -1

diff_raum3:=int((temp_raum3-referenz_temp)/abs(temp_raum3-referenz_temp));
// =1, falls temp_raum3 > referenz_temp,sonst -1

summe:=int((diff_raum1+abs(diff_raum1)) / 2) //addiert 1, falls diff_raum1=1 und addiert sonst 0
      +int((diff_raum2+abs(diff_raum2)) / 2) //addiert 1, falls diff_raum2=1 und addiert sonst 0
      +int((diff_raum3+abs(diff_raum3)) / 2): //addiert 1, falls diff_raum3=1 und addiert sonst 0

// summe gibt an, in wievielen Räumen die Temperatur GRÖSSER als die Referenztemperatur ist.

Stufe:=(3-summe) - (3-summe) div 3;


//Mal überprüfen, obs überhaupt stimmt:
// Falls summe=0 => Stufe=2
// Falls summe=1 => Stufe=2
// Falls summe=2 => Stufe=1
// Falls summe=3 => Stufe=0

end;
Sorry, aber mir war grade danach Und ohne eine If-Abfrage zu benutzen!!!

//edit: code etwas besser kommentiert.
Die Lösung sieht ziemlich gut aus, du solltest aber eins noch abfangen, nämlich dass temp_raumX-referenz_temp = 0 ist. Ne Division durch 0 sollte zu einer Exception führen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: If-Then oder Case-else

  Alt 17. Mär 2009, 16:36
Dazu braucht er aber wieder eine If-Abfrage
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: If-Then oder Case-else

  Alt 17. Mär 2009, 16:38
Zitat von DeddyH:
Dazu braucht er aber wieder eine If-Abfrage
Stimmt
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#14

Re: If-Then oder Case-else

  Alt 17. Mär 2009, 16:43
Zitat von BAMatze:

Die Lösung sieht ziemlich gut aus, du solltest aber eins noch abfangen, nämlich dass temp_raumX-referenz_temp = 0 ist. Ne Division durch 0 sollte zu einer Exception führen.
Vollkommen richtig, das hab ich wohl vergessen und danke für das Lob!

Das müsste man irgendwie abfangen. Ich frag mich grade, wie man das am besten ohne eine If Abfrage zu verwenden.

//edit: Was passiert denn, wenn ich im Nenner sagen wir mal 0,1 addiere und am schluss runde anstatt INT zu verwenden...irgendwas kann man da sicher dran machen, sodass der nenner >0 bleibt...*grübel*
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#15

Re: If-Then oder Case-else

  Alt 17. Mär 2009, 16:47
Zitat von alleinherrscher:
Das müsste man irgendwie abfangen. Ich frag mich grade, wie man das am besten ohne eine If Abfrage zu verwenden.
Delphi-Quellcode:
try
   [...]
except
   [...]
end;
assert([...] = 0);
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#16

Re: If-Then oder Case-else

  Alt 17. Mär 2009, 16:47
Zitat von Win32.API:
Zitat von alleinherrscher:
Das müsste man irgendwie abfangen. Ich frag mich grade, wie man das am besten ohne eine If Abfrage zu verwenden.
Delphi-Quellcode:
try
   [...]
except
   [...]
end;
assert([...] = 0);
Neee, das ist "unschön"
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#17

Re: If-Then oder Case-else

  Alt 17. Mär 2009, 16:51
diff_raum1:=round((temp_raum1-referenz_temp)/(abs(temp_raum1-referenz_temp)+0.1); 1. temp_raum1=13 => round((13-15)/(abs(13-15)+0.1))=round(-2/2.1) = -1
2. temp_raum1=14 => round((14-15)/(abs(14-15)+0.1))=round(-1/1.1) = -1
3. temp_raum1=15 => round((15-15)/(abs(15-15)+0.1))=round(0) = 0 diese null macht aber nix kaputt
4. temp_raum1=16 => round((16-15)/(abs(16-15)+0.1))=round(1/1.1) = 1
usw...

Falls nämlich temp_raum1=15 ist, ist die Temperatur insgesamt noch hoch genug, und es muss nichts zu summe addiert werden
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: If-Then oder Case-else

  Alt 17. Mär 2009, 16:52
Zitat:
diff_raum1:=int((temp_raum1-referenz_temp)/abs(temp_raum1-referenz_temp));
Das müsste doch dasselbe sein wie diff_raum1 := Sign(temp_raum1-referenz_temp);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#19

Re: If-Then oder Case-else

  Alt 17. Mär 2009, 16:53
Jo richtig...ups...diese funktion kannte ich nicht

Dann hier die shortversion:


Delphi-Quellcode:
var
summe,stufe:integer;
begin

summe:=int((Sign(temp_raum1-referenz_temp)+abs(Sign(temp_raum1-referenz_temp))) / 2)
      + int((Sign(temp_raum2-referenz_temp)+abs(Sign(temp_raum2-referenz_temp))) / 2)
      + int((Sign(temp_raum3-referenz_temp)+abs(Sign(temp_raum3-referenz_temp))) / 2)

// summe gibt an, in wievielen Räumen die Temperatur GRÖSSER als die Referenztemperatur ist.

Stufe:=(3-summe) - (3-summe) div 3;
end;

Yeah, das nenn ich mal Code-Optimierung:
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#20

Re: If-Then oder Case-else

  Alt 17. Mär 2009, 17:33
Da das hier eh schon nur noch Offtopic ist, isses jetzt auch egal.

Nein Sign darfst du nicht nehmen, dann hast du wieder ein if drin.
Bei abs war das zumindest noch hinter cdq versteckt (statt nem Sprung), aber so geht's einfach nicht.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:44 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