Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   If-Then oder Case-else (https://www.delphipraxis.net/131015-if-then-oder-case-else.html)

MatthiasxD 17. Mär 2009 14:32


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"?

b00gie 17. Mär 2009 14:36

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?

b00gie 17. Mär 2009 14:41

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;

Cyf 17. Mär 2009 14:41

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.

b00gie 17. Mär 2009 14:44

Re: If-Then oder Case-else
 
ja ich sagte ja, so wird er es wenigstens verstehen, hoffe ich zumindestens...

Frankfurtoder 17. Mär 2009 14:51

Re: If-Then oder Case-else
 
Delphi-Quellcode:
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;
Ungetestet, aber sollte gehen.

Tyrael Y. 17. Mär 2009 14:56

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.

alleinherrscher 17. Mär 2009 15:00

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:

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 :bouncing4: Und ohne eine If-Abfrage zu benutzen!!! :thumb:

//edit: code etwas besser kommentiert.

Frankfurtoder 17. Mär 2009 15:00

Re: If-Then oder Case-else
 
Mich hats nur kurz in den Fingern gejuckt.

Zu b00gies Lösung: funktioniert dise überhaupt?

Delphi-Quellcode:
Edit1.Text<'15'
Immerhin ist das eine mathematische Operation mit strings.

quendolineDD 17. Mär 2009 15:19

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 12:23 Uhr.
Seite 1 von 4  1 23     Letzte »    

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