Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hilfe Luftdruckrechner (https://www.delphipraxis.net/87264-hilfe-luftdruckrechner.html)

Y-Fritz 26. Feb 2007 09:10


Hilfe Luftdruckrechner
 
Hallo,
ich bin noch neu hier.
Ich habe folgendes Problem ich möchte gern einen Luftdruckrechner erstellen.
Dabei soll man die Höhe eingeben und der Luftdruck wird ausgegeben. (das funktioniert)

Und anders herum soll der Luftdruck eingegeben werden und die höhe ausgegeben. (wobei ich hier überhaupt keinen Plan habe)


Bis jetzt hab ich folgenden Quell Code.
Delphi-Quellcode:
h:=strtoint(edit1.text);
luft:=strtoint(edit4.Text);

l:=1000;              -> Luftdruck bei 0 Metern
p:=0.013869/100;      -> Prozentuale Abnahme des Luftdruckes mit der Höhe

for i:=1 to h do begin
d:=l*p;
l:=l-d;
end;

bis hier hin funktioniert es, aber wie kann ich jetzt die Höhe aus dem Luftdruck berechnen :?:

Wäre für jede Antwort dankbar.

[edit=Phoenix]Delphi-Codetags eingefügt. Das nächste mal bitte selber machen. Mfg, Phoenix[/edit]

Blackheart 26. Feb 2007 09:33

Re: Hilfe Luftdruckrechner
 
Und wo liegt jetzt das Problem, Du hast doch die Werte und brauchst doch nur die Formel umstellen. :wink:

Y-Fritz 26. Feb 2007 09:38

Re: Hilfe Luftdruckrechner
 
Das Problem ist, das ich dann immer einen Konflikt mit integer und real bekomme.

Und soll ich dann am besten den eingeben 1000 bis den eingegeben zählen lassen und dabei immer die höhe um 1 erhöhen?

Ich find einfach keinen Ansatz dafür. (vielleicht bin ich auch nur gerade aufm Holzweg)

Mirilin 26. Feb 2007 09:46

Re: Hilfe Luftdruckrechner
 
:hi:

meinte gäbe eine Formel der Art
Zitat:

p = r g h

mfg Tobias

Nikolas 26. Feb 2007 09:51

Re: Hilfe Luftdruckrechner
 
Du willst doch eigentlich nur den Luftdruck in einer bestimmten Höhe wissen, oder?
Bei einem Meter also P(1m)=P0(1+p), wobei P0 dein Druck bei 0m ist. Insgesamt gilt doch P(xm)=P0(1-p)^x (einfach für die ersten Meter ausprobieren und dann eine vollständige Induktion drüber laufen lassen. Dann brauchst du keine Schleife, sondern einfach nur den Potenzbefehl Power aus der Unit math.
Beim Rückweg erinnerst du dich an die Logarithmengesetze aus der 10. Klasse und kannst so an die Höhe kommen.

@ Mirilin: Du meinst statt r ein rho, das für die Dichte steht. Mit deiner Gleichung kannst du den Druck berechnen, den eine Flussigkeitssäule der Höhe h auf die Unterlage ausübt. Das kann man hier nicht anwenden, da die Dichte der Luft nicht konstant ist und du nicht genau weisst, wie hoch sie ist.

// '+' in '-' verbessert

Y-Fritz 26. Feb 2007 10:01

Re: Hilfe Luftdruckrechner
 
Zitat:

Zitat von Nikolas
Du willst doch eigentlich nur den Luftdruck in einer bestimmten Höhe wissen, oder?
Bei einem Meter also P(1m)=P0(1+p), wobei P0 dein Druck bei 0m ist. Insgesamt gilt doch P(xm)=P0(1+p)^x (einfach für die ersten Meter ausprobieren und dann eine vollständige Induktion drüber laufen lassen. Dann brauchst du keine Schleife, sondern einfach nur den Potenzbefehl Power aus der Unit math.

Ich möchte den Luftdruck eingeben und dann soll die Höhe ausgegeben werden, wo dieser Luftdruck herrscht.

Das, was du meinst hab ich hinbekommen. (Höhe eingeben und Luftdruck wird ausgeben)

Nikolas 26. Feb 2007 10:17

Re: Hilfe Luftdruckrechner
 
Ich hab meinen Beitrag eben noch erweitert. Die gegebene Form für den Druck kannst du mit den Log-Gesetzen recht schnell und ohne Schleifen einzusetzen, nach x auflösen.

matashen 26. Feb 2007 10:26

Re: Hilfe Luftdruckrechner
 
wenn du streß mit real und integerkonflikten hast, wandle das ganze doch gleich nach real statt zu integer um, dann hast du lauter gleiche Typen. Wenn dus Später in einer anderen Form benötigst kannst dus ja wieder umwandeln

Siehe real:=strtofloat(string);
Siehe integer:=round(real);
Siehe Str(zahl, string);

Gruß Matthias

Y-Fritz 26. Feb 2007 10:46

Re: Hilfe Luftdruckrechner
 
Zitat:

Zitat von Nikolas
P(xm)=P0(1-p)^x

Nochmal ne kurze Frage, welcher Wert soll den das ^x darstellen?

Nikolas 26. Feb 2007 10:53

Re: Hilfe Luftdruckrechner
 
Das x steht für die Meter und das ^ ist das Zeichen für Potenzierung also die Höhe auf 1000m ist dann P(1000m)=P0*[ (1-p) hoch 1000 ]

Y-Fritz 26. Feb 2007 12:33

Re: Hilfe Luftdruckrechner
 
Zitat:

Zitat von Nikolas
Das x steht für die Meter und das ^ ist das Zeichen für Potenzierung also die Höhe auf 1000m ist dann P(1000m)=P0*[ (1-p) hoch 1000 ]

Danke,:thumb:
nur wie bekomme ich den Logarithmus in Delphi hin. Weil ich kenne nur den Befehl für den natürlichen Logarithmus. :gruebel:

Delphi-Quellcode:
h2:=ln(1000 *(1-p))*luft;

Nikolas 26. Feb 2007 14:36

Re: Hilfe Luftdruckrechner
 
Der reicht auch völlig. Such mal nach Log-Gesetzen, da wirst du ein Gesetz finden, wie du so einen Ausdruck auch mit dem ln berechnen kannst. (Besser gesagt, mit Log-Funktionen zu beliebiger Basis)

Zacherl 26. Feb 2007 14:46

Re: Hilfe Luftdruckrechner
 
log(4)3 = lg(4) / lg(3)

wenn ich mich nicht irre ..

Y-Fritz 26. Feb 2007 16:07

Re: Hilfe Luftdruckrechner
 
Hab das mal versucht so zu programmieren, aber die Werte stimmen noch nicht.

Wenn jemand sich nochmal den Quelltext anschauen könnte?

Delphi-Quellcode:

p:=0.013869/100;
luft:=strtofloat(edit4.Text);
h2:=ln(1000*(1-p))/ln(luft);
edit3.text:=floattostrf(h2,fffixed,10,2);
Bei einem Druck von z.B.: 933hpa müssten 500 Meter herauskommen.

Y-Fritz 26. Feb 2007 18:38

Re: Hilfe Luftdruckrechner
 
Danke euch allen, jetzt klapts.
Zu Vollständigkeit noch:

933=1000(1-0,00013869)500 /:1000
0,993=(1-0,00013869)500
log(1-0,00013869)0,933=500
500=ln(0,933)/ln(1-0,00013869)

Nikolas 27. Feb 2007 07:56

Re: Hilfe Luftdruckrechner
 
Deine Schreibweise ist recht unverständlich, aber es sieht so aus, als hättest du es verstanden. :mrgreen: Falls es sich um eine Hausaufgabe handelt, solltest du bei der Abgabe natürlich erklären können, wie du auf die Formel gekommen bist.
Auf jeden Fall sieht diese Lösung doch deutlich eleganter aus, als deine Schleife, die einmal recht lange dauert und in der du bei den ganzen Operationen mit Rundungsfehlern rechnen musst.

Y-Fritz 27. Feb 2007 09:32

Re: Hilfe Luftdruckrechner
 
Zitat:

Zitat von Nikolas
Deine Schreibweise ist recht unverständlich, aber es sieht so aus, als hättest du es verstanden. :mrgreen: Falls es sich um eine Hausaufgabe handelt, solltest du bei der Abgabe natürlich erklären können, wie du auf die Formel gekommen bist.
Auf jeden Fall sieht diese Lösung doch deutlich eleganter aus, als deine Schleife, die einmal recht lange dauert und in der du bei den ganzen Operationen mit Rundungsfehlern rechnen musst.

Das war nur das umstellen der Formel, der Quelcode war dann dieser:
Delphi-Quellcode:
luft:=luft/1000;
h2:=ln(luft)/ln(1-p);
Ach kennt jemand zufällig noch nein Algorithmus zum Absichern? Sprich das wenn man in ein edit Feld z.b.: einen Buchstaben eingibt, eine Warnung ausgegeben wird? (um zu verhindern, dass das Programm abstürtzt)

Also mir ist dieser bekannt (funktioniert aber nicht):

Delphi-Quellcode:
try
 h:=strtoint(edit1.text);
except
 MessageDlg ('Bitte nur Zahlen eingeben!', mtwarning,[mbOK],0);
 edit1.setfocus;
 exit;
end;
Gibts da noch ne andere Möglichkeit? Zum Beispiel mit "if Buchstabe do begin"?

Mavarik 27. Feb 2007 09:42

Re: Hilfe Luftdruckrechner
 
Zitat:

Zitat von Y-Fritz
Also mir ist dieser bekannt (funktioniert aber nicht):

Delphi-Quellcode:
try
 h:=strtoint(edit1.text);
except
 MessageDlg ('Bitte nur Zahlen eingeben!', mtwarning,[mbOK],0);
 edit1.setfocus;
 exit;
end;

Hast Du das in der IDE getestet? Da geht es nicht, da die IDE die Exception vorher abfängt. (Kann man auch einstellen)

Frank :coder:

PS.: Int(S,Error); // Sowas?

Nikolas 27. Feb 2007 10:52

Re: Hilfe Luftdruckrechner
 
Ich habe mal den Code für ein Editfeld, dass nur korrekt eingegebene Zahlen zulässt in der Codelibrary veröffentlicht, den kannst du für deine Zwecke anpassen.

ibp 27. Feb 2007 11:07

Re: Hilfe Luftdruckrechner
 
Zitat:

Zitat von Y-Fritz
Delphi-Quellcode:
try
 h:=strtoint(edit1.text);
except
 MessageDlg ('Bitte nur Zahlen eingeben!', mtwarning,[mbOK],0);
 edit1.setfocus;
 exit;
end;
Gibts da noch ne andere Möglichkeit? Zum Beispiel mit "if Buchstabe do begin"?

schau mal nach trystrtoint oder du musst die eingabe direkt abfangen!

Y-Fritz 27. Feb 2007 11:37

Re: Hilfe Luftdruckrechner
 
Zitat:

Zitat von Nikolas
Ich habe mal den Code für ein Editfeld, dass nur korrekt eingegebene Zahlen zulässt in der Codelibrary veröffentlicht, den kannst du für deine Zwecke anpassen.

Hättest du vielleicht auch noch den Link,
hab zwar in der libary gesucht aber nicht gefunden.

Nikolas 27. Feb 2007 12:14

Re: Hilfe Luftdruckrechner
 
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
string1: string;
begin
string1:=edit1.text;

//allgemeine Sperrung von allen Zeichen ausser
//backspace, (-) , (,) und Zahlen
if not (key in[#8{,#44,#45,}#48..#57]) then key:=#0;

{// das Minus darf nur am Anfang benutzt werden
if (edit1.selstart <> 0) and( key=#45) then key:=#0;

// nur ein Komma
if (pos(#44,string1)>0) and (key=#44) then key:=#0;

// kein Komma am Anfang
if (edit1.SelStart=0) and (key= #44) then key:=#0;

// Kein -,xxx
if     (edit1.selstart=1) and
        (string1[1]='-')  and
        (key=#44)         then
         key:=#0; }
end;
Hilft nicht gegen c&p, aber sonst bei jeder Eingabe.

Y-Fritz 27. Feb 2007 14:24

Re: Hilfe Luftdruckrechner
 
Jo, danke klappt wunderbar! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 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