![]() |
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] |
Re: Hilfe Luftdruckrechner
Und wo liegt jetzt das Problem, Du hast doch die Werte und brauchst doch nur die Formel umstellen. :wink:
|
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) |
Re: Hilfe Luftdruckrechner
:hi:
meinte gäbe eine Formel der Art Zitat:
mfg Tobias |
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 |
Re: Hilfe Luftdruckrechner
Zitat:
Das, was du meinst hab ich hinbekommen. (Höhe eingeben und Luftdruck wird ausgeben) |
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.
|
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 |
Re: Hilfe Luftdruckrechner
Zitat:
|
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 ]
|
Re: Hilfe Luftdruckrechner
Zitat:
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;
|
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)
|
Re: Hilfe Luftdruckrechner
log(4)3 = lg(4) / lg(3)
wenn ich mich nicht irre .. |
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:
Bei einem Druck von z.B.: 933hpa müssten 500 Meter herauskommen.p:=0.013869/100; luft:=strtofloat(edit4.Text); h2:=ln(1000*(1-p))/ln(luft); edit3.text:=floattostrf(h2,fffixed,10,2); |
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) |
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. |
Re: Hilfe Luftdruckrechner
Zitat:
Delphi-Quellcode:
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)
luft:=luft/1000;
h2:=ln(luft)/ln(1-p); Also mir ist dieser bekannt (funktioniert aber nicht):
Delphi-Quellcode:
Gibts da noch ne andere Möglichkeit? Zum Beispiel mit "if Buchstabe do begin"?
try
h:=strtoint(edit1.text); except MessageDlg ('Bitte nur Zahlen eingeben!', mtwarning,[mbOK],0); edit1.setfocus; exit; end; |
Re: Hilfe Luftdruckrechner
Zitat:
Frank :coder: PS.: Int(S,Error); // Sowas? |
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.
|
Re: Hilfe Luftdruckrechner
Zitat:
|
Re: Hilfe Luftdruckrechner
Zitat:
hab zwar in der libary gesucht aber nicht gefunden. |
Re: Hilfe Luftdruckrechner
Delphi-Quellcode:
Hilft nicht gegen c&p, aber sonst bei jeder Eingabe.
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; |
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