Autor Beitrag
wacker
Hält's aus hier
Beiträge: 14

win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
BeitragVerfasst: Mo 24.09.07 18:36 
so hier bin ich wieder^^
also: ich habe folgende aufgabe bei der ich nicht mal weiß wie ich rangehen soll

das wasser im wasserkocher ist 95°C heiß, die zimmertemperatur beträgt 19°C
pro minute wird das wasser um 15 prozent der zimmertemperatur kühler
ich soll nun die verstrichene zeit und die jeweilige temperatur ausgeben mithilfe delphis


ich hab mir überlegt eine while-schleife einzusetzen so nach dem muster
ausblenden Delphi-Quelltext
1:
2:
while x>z do
x-z;

aber es hat nicht geklappt
hat jemand eine idee?


Zuletzt bearbeitet von wacker am Mo 24.09.07 18:43, insgesamt 1-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 24.09.07 18:40 
Hallo wacker,

bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät - Hilfe braucht hier eigentlich fast jeder. ;) Hier der entsprechende Absatz aus den Richtlinien:

1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]


Einfach oben bei Deinem ersten Beitrag auf user defined image oder user defined image klicken und den Titel ändern. Danke Dir!

Viele Grüße,
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
wacker Threadstarter
Hält's aus hier
Beiträge: 14

win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
BeitragVerfasst: Mo 24.09.07 18:48 
habs geändert
sorry wenns immernoch nicht passt oder mein problem nicht beschreibt aber mir fällt nix anderes ein
aber b2t: hat jemand einen vorschlag (oder die lösung:))?
TheAxeEffect
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mo 24.09.07 19:02 
also.
das wasser ist 95grad heiß und wird pro minute um 15% der ZIMMERTEMPERATUR kühler. dh es wird pro minute um.
2.85 grad kühler.
was willst du jetzt:
ne liste wie:
minute 0: 95grad
minute 1 : 92.25grad
....
das würde dann so in etwa gehen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
while aquatemp>19.5 do begin
aquatemp:=aquatemp-2.85;
memo1.lines.append('minute'+inttostr(zählervariable)+' :'+ inttostr(aquatemp);
inc(zählervariable); // inc=increase
end;

lg,
simon
ps: was ich allerdings bezweifle ist die sinnhaftigkeit deines beispiels. warum sollte wasser auf sone art abkühlen? das is mathematisch gesehen vollkommener schwachsinn, da ne temperatur NIEMALS linear absinken wird. ich denk, du hast dich da be ider angabe des beispiels verlesen
wacker Threadstarter
Hält's aus hier
Beiträge: 14

win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
BeitragVerfasst: Mo 24.09.07 19:17 
ja so wie du es beschrieben hast wollt ich das haben, aber dein bespiel funktioniert irgendwie nicht: der debugger gibt ne fehlermeldung: der linken seite kann nichts zugewiesen werden. das ist dort wo das inc steht

ich hab jetzt die aufgaben bekommen, und du hast recht: ich habe mich falsch erinnert^^

Zitat:
Eine Suppe, frisch vom Herd auf den Tisch gebracht, habe eine Temperatur von 92 °C, die Zimmertemperatur betrage 19 °C. In jeder Minute verringert sich die Suppentemperatur um 10 % der Differenz zur Zimmertemperatur. Stellen Sie den Algorithmus in einem Struktogramm dar und schreiben Sie für den Abkühlungsprozess ein Delphi-Programm, das die verstrichene Zeit und die jeweilige Temperatur anzeigt! Überlegen Sie sich eine geeignete Abbruchbedingung.


so sieht die aufgabe aus...
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 24.09.07 19:23 
Moin und :welcome: im Forum!

Und, welche Überlegungen zur Lösung dieser Aufgabe hast du dir schon gemacht? Vielleicht auch schon ein bischen Code, den du uns zeigen könntest? ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
wacker Threadstarter
Hält's aus hier
Beiträge: 14

win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
BeitragVerfasst: Mo 24.09.07 19:31 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button1Click(Sender: TObject);
var i,x,y,z:Double;
begin
  x := 92;
  y :=1.9;
  z :=19.8;
  i := 0;

  while x > z do
    begin
         x:= x-y; 
    memo1.lines.append('minute'+floattostr(i)+' :'+ floattostr(x));
    // inc(i) ;
    end;
end;

soweit bin ich... das problem ist die zähler variabe
das ist das einzige was mich noch stört
ob das nun linear abnimmt oder nicht ist ja grundsätzlich egal
den code kann man ja dann an die neue formel anpassen
TheAxeEffect
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mo 24.09.07 19:32 
BINGO!
es wird um 10% der DIFFERENZ zw. suppen und zimmertemp. kühler.
das heißt nicht, dass es um 10% der ZIMMERTEMP kühler wird^^
es wird am anfang schneller, und später fast garnichtmehr kühler. müsste ne exponentielle kurve sein, wenn man sie zeichnet.
das problem: bis die suppentemp die zimmertemp erreicht hat, würde es EWIG DAUERN. es geht recht schnell, die suppe auf fast zimmertemüp runterzukühlen, aber genau auf zimmertemp, dauerts ewig.
du musst dir erstmal überlegen, wie du eine funktion für sowas machen kannst.
mein vorschlag: temp:=temp-((temp-19)/10)
der code also:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
while aquatemp>19.5 do begin
aquatemp:=aquatemp-((aquatemp-19)/10);
memo1.lines.append('minute'+inttostr(zählervariable)+' :'+ inttostr(aquatemp);
inc(zählervariable); // inc=increase
end;

dann: warum schreib ich da 19.5?
weil sich die suppentemp der zimmertemp nur ANNÄHERN wird, aber sie nie ganz erreichen!. da sie den wert 19.5 aber sehrwohl erreich wird(sie wird sogar 19.0000000000001 mal erreichen), erzeuge ich hiermit keine endlos-schleife.
dann: poste bitte deinen GESAMTEN code.

schau mal her:
in delphi sind "//" ein zeichen, für eine ANMERKUNG: alles was hinter "//" steht, wird vom compiler ignoriert!
du musst schreiben inc(i) und nicht //inc(i), da das programm das sonst ignoriert.

mfg,
simon

Moderiert von user profile iconNarses: Beiträge zusammengefasst.
wacker Threadstarter
Hält's aus hier
Beiträge: 14

win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
BeitragVerfasst: Mo 24.09.07 19:43 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,x,y,z:Double;
begin
  x := 92;
  y :=19;
  z :=19.5;
  i := 0;

  while x > z do
    begin
         x:= x-((x-y)/10);
    memo1.lines.append('minute'+floattostr(i)+' :'+ floattostr(x));
    inc(i) ;
    end;
end;

end.


den kommentar vor dem inc hab ich eingebaut gerade WEIL der compiler mir ne fehlermeldung ausgibt wie ichs sie oben geposted habe

aber ein großes THX an deine beteiligung
dass es solche netten menschen noch gibt :)
TheAxeEffect
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mo 24.09.07 19:47 
mit i:=i+1 gehts.
achja: du musst die while bedingung so machen:
while x>z+0.5(also z+irgendwas kleines, da das sonst ewig dauert).

wenn du die 2 sachen machst, gehts.
mfg,
simon
ps: willste wissen, warum das mit inc nich geht?
weil du i als DOUBLE definiert hast, was in diesem beispiel unfug is^^
gewöhn dir das bitte ab, da "inc" ne zahl um den kleinstmöglichen wert erhöht...erhöh mal ne reele zahl um den kleinstmöglichen wert^^ das geht nich, weils sowas in reelen zahlen nich gibt. die liegen nämlich dicht. (es gibt immer etwas, das noch kleiner ist...).
wenn du die als INTEGER(abk. int) deklariert hättest, wäre es so gegangen.
verwende real, double etc. nur wenn dus brauchst.
pps: das mit dem z+irgendwas kannst vergessen, hab nicht gesehen, dass du das bereits als 19.5 deklariert hast.
es wär auch nicht schlecht, wenn du dir sowas auch abgewähnen würdest^^ der leserlichkeit etc. willen. verwend variablen nur wenn du sie brauchst^^
also wenn ne variable um nen fixen wert, nen faktor oder sonstwas größer is, brauchste nich gleich ne neue machen^^.
schreib einfach var+irgendwas oder var*irgendwas.....


Zuletzt bearbeitet von TheAxeEffect am Mo 24.09.07 19:54, insgesamt 1-mal bearbeitet
wacker Threadstarter
Hält's aus hier
Beiträge: 14

win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
BeitragVerfasst: Mo 24.09.07 19:53 
vielen dank
klappt alles super!
ps: und danke für den tipp mein mentor ;)