![]() |
If-Then oder Case-else
Hallo ihr lieben :-D ich hab delphi gerade im info unterricht und bin kein experte, mir wurde follgende Aufgabe gestellt:
Drei miteinander verbundene Räume weden durch eine zweistufige Heizung versorgt. Sobalt in lediglich einem Raum die Temperatur unter 15°c sinkt, schaltet sich die Stufe I ein. Liegt in mindestens zwei Rämen die Temperatur unter 15°c, so schaltet sich die Stufe II ein. Nach Eingabe der drei Temperaturen soll die Schaltstufe der Heizungausgegeben werden. Mein Problem ist nun ich weis nicht sorichtig wie ich das nun im Qelltext schreiben soll. Ist das nun eine If-Then oder case-else oder was anderes? Und wenn ja wie genau mach ich das am besten? Also vom Qelltext her was genau schreibe ich zwischen "begin" und "end"? |
Re: If-Then oder Case-else
paar Infos brauchen wir. Wie wird die Temperatur übergeben? Hast du 3 Edit-Felder? Oder wie sieht das Ganze aus?
|
Re: If-Then oder Case-else
Also eine ganz "banale Lösung", jedoch denke ich mal für den Infounterricht gut nachzuvollziehen.
Du brauchst 3 Edits für die Temperaturen, 1 Label für das Ergebnis und 1 Button zum berechnen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; begin i:=0; if Edit1.Text<'15' then i:=i+1; if Edit2.Text<'15' then i:=i+1; if Edit3.Text<'15' then i:=i+1; if i=1 then Label1.Caption := 'Stufe 1'; if i>1 then Label1.Caption := 'Stufe 2'; end; |
Re: If-Then oder Case-else
Den fertigen Quelltext wird dir sicher niemand geben [Edit: ok doch :evil: und auchnoch imho mies formatiert und mit ifs wo ein case hingehört], aber du musst erst überlegen wie du die Sache angehen willst, im Wesentlichen hast du ja zwei Möglichkeiten.
1. Du überprüfst beginnend mit jedem Raum einzeln beginnend (also 3x), ob die Temperatur höher ist und prüfst falls ja, ob einer der beiden anderen Räume auch noch über 15°C liegt und reagierst entsprechend. 2. Du zählst erst in wie vielen Räumen die Temperatur höher liegt und überprüfst hinterher einmal auf die Anzahl. Version 1 führt zu ziemlichen Spaghetti-Code und ist unflexibler, falls es z.B. mehr Räume geben soll, deswegen dürfte die 2te schöner sein. |
Re: If-Then oder Case-else
ja ich sagte ja, so wird er es wenigstens verstehen, hoffe ich zumindestens...
|
Re: If-Then oder Case-else
Delphi-Quellcode:
Ungetestet, aber sollte gehen.
procedure TForm1.Button1Click(Sender: TObject);
var i, ii: Integer; begin i:=0; for ii := 1 to 3 do begin if strtoint(TEdit(FindComponent('Edit'+ IntToStr(ii))).text) < 15 then i:=i+1 end; if i=1 then Label1.Caption := 'Stufe 1' else if i>1 then Label1.Caption := 'Stufe 2'; end; |
Re: If-Then oder Case-else
b00gie und Frankfurtoder ihr beiden habt ihm gerade null komma nix geholfen.
Ihr habt ihn eher näher zu ner 5 bei der nächsten Arbeit gebracht. Totalen Anfängern sollte man tunlichst keinen fertigen Code vorsetzen, sondern sie Schritt für Schritt zum Ziel begleiten. Ich hoffe in Zukunft macht ihr das nicht, kurzfristige Hilfe in so einem Fall ist eher ein Langzeitgift, daß sich rächen wird. |
Re: If-Then oder Case-else
Hm, wenn du glänzen willst, würd könnte man es auch "etwas krank" aber interessant - so machen:
Delphi-Quellcode:
Sorry, aber mir war grade danach :bouncing4: Und ohne eine If-Abfrage zu benutzen!!! :thumb: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; //edit: code etwas besser kommentiert. |
Re: If-Then oder Case-else
Mich hats nur kurz in den Fingern gejuckt.
Zu b00gies Lösung: funktioniert dise überhaupt?
Delphi-Quellcode:
Immerhin ist das eine mathematische Operation mit strings.
Edit1.Text<'15'
|
Re: If-Then oder Case-else
Nein, da hier nicht wie in C dann der ASCII-Code verglichen wird. Aber du könntest
StrToInt(Edit1.text) < 15 testen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz