Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   programm fehler (pq-formel) - numerische datentypen (https://www.delphipraxis.net/42215-programm-fehler-pq-formel-numerische-datentypen.html)

pete_knightde 15. Mär 2005 20:56


programm fehler (pq-formel) - numerische datentypen
 
hi, muss für die schule ein programm machen, womit ich durch hilfe der pq-formel auf die lösung komme
jedoch habe ich folgende fehlermeldung (bei dem berechnungsteil): "Zeigertyp erwartet"


procedure TForm1.BtBerechnenClick(Sender: TObject);
//Deklaration
var p, q, x1, x2 : real;

begin
//Umwandlung der Eingaben
p:=strtofloat (Edp.text);
q:=strtofloat (Edq.text);

//Berechnungsteil
x1 := -1*p / 2 + sqrt(p^2/4-q);
x2 := -1*p / 2 - sqrt(p^2/4-q);

if sqrt((p^2/4)-q)<0
then begin
EdKommentar.text:='Keine Lösung';
end
else if sqrt((p^2/4)-q)=0
then begin
EdKommentar.text:='Nur Eine Lösung';
end else begin
EdKommentar.text:='Zwei verschiedene Lösungen';

//Formatierung
Edx1.text:=floatt ostrF(x1,ffgeneral,10,3);
Edx2.text:=floattostrF(x2,ffgeneral,10,3 );
end;

wenn ich die aufgabe streiche p zu quadrieren, dann klappt zwar das programm, aber stürzt mit einer fehlermeldung bei 2 positiven zahlen ab ("ungültige gleitkommaoperation")
und wenn p negativ ist klappt es auch nicht
woran liegt das??

ich kann zwar statt p^2, p*p eingeben, aber ich würde es gerne anders machen


wäre nett, wenn ihr helfen würdet, ich benutze delphi 5 von borland, falls das hilft

Ultimator 15. Mär 2005 21:03

Re: programm fehler (pq-formel) - numerische datentypen
 
Delphi-Quellcode:
if sqrt((p^2/4)-q)=0
Dieses --> ^ Zeichen wird in Delphi im Zusammenhang mit Zeigern verwendet.
Binde die Unit Math ein und nutze die Funktuon Power ;-)

[edit] Ups, hab ich übersehn: Herzlich Willkommen ;-) [/edit]

BenjaminH 15. Mär 2005 21:10

Re: programm fehler (pq-formel) - numerische datentypen
 
Erstmal
:party: :hello: :party: Herzlich Wilkommen in der DP :party: :hello: :party:
Du kannst in Delphi nicht einfach ein ^ eingeben, das ist dort für Zeiger reserviert.
Stattdessen kannst du Sqr zum quadrieren eines Wertes verwenden.
Also so:
Delphi-Quellcode:
x1 := -1*p / 2 + sqrt(Sqr(p)/4-q);
x2 := -1*p / 2 - sqrt(Sqr(p)/4-q);
P.S: Bitte verwende das nächste mal auch solche Delphi Tags für deinen Code

pete_knightde 15. Mär 2005 21:17

Re: programm fehler (pq-formel) - numerische datentypen
 
aber es gibt immernoch das problem mit der ungültigen gleitkommaoperation
es klappt nur wenn p positiv und q negativ ist

aber sonst nicht

???

Ultimator 15. Mär 2005 21:20

Re: programm fehler (pq-formel) - numerische datentypen
 
Naja, nicht unbedingt.
Du muss halt aufpassen, dass der Term unter der Wurzel >=0 ist ;-)

pete_knightde 15. Mär 2005 21:34

Re: programm fehler (pq-formel) - numerische datentypen
 
if sqrt(sqr(p)/4-q)<0
then begin
EdKommentar.text:='Keine Lösung';

das habe ich doch berücksichtigt

gordon freeman 15. Mär 2005 21:38

Re: programm fehler (pq-formel) - numerische datentypen
 
Zitat:

Zitat von pete_knightde
if sqrt((p^2/4)-q)<0
then begin
EdKommentar.text:='Keine Lösung';

das habe ich doch berücksichtigt

An dieser Stelle rechnest du ja bereits mit der Wurzel. Vorher müsste so etwas stehen:

Delphi-Quellcode:
if (sqr(p)/4-q) >= 0 then
//Rechnung
else
//keine Rechnung

pete_knightde 15. Mär 2005 21:46

Re: programm fehler (pq-formel) - numerische datentypen
 
ich habs es nochmal ausprobiert
aber es klappt trotzdem nicht

liegt es vielleicht an der deklaration??

gordon freeman 15. Mär 2005 21:51

Re: programm fehler (pq-formel) - numerische datentypen
 
Wenn du alle Variablen als REAL deklariert hast sollte es keine Probleme seitens der Variablen geben. Zeig doch noch mal den Code-Teil, in dem der Fehler auftritt und sag nochmal genau, welcher Fehler es jetzt ist, dann können wir dir auch eher helfen :wink:

gordon freeman 15. Mär 2005 21:54

Re: programm fehler (pq-formel) - numerische datentypen
 
Außerdem ist mir noch ein kleiner Logikfehler aufgefallen:

Zitat:

Zitat von pete_knightde
Delphi-Quellcode:
//Berechnungsteil
x1 := -1*p / 2 + sqrt(p^2/4-q);
x2 := -1*p / 2 - sqrt(p^2/4-q);

if sqrt((p^2/4)-q)<0
then begin
EdKommentar.text:='Keine Lösung';
end
else if sqrt((p^2/4)-q)=0
then begin
EdKommentar.text:='Nur Eine Lösung';
end else begin
EdKommentar.text:='Zwei verschiedene Lösungen';

Du berechnest erst die Werte und checkst dann ab, ob diese Berechnung möglich ist. Das wird wahrscheinlich dein Fehler sein! Check erst, ob die Berechnung möglich ist und Rechne dann innerhalb des
Delphi-Quellcode:
if (...) then
  begin
   (...)
  end;
die Werte aus.

//Edit1: Da hab ich doch glatt selber die Delphi-Tags vergessen :mrgreen:

pete_knightde 15. Mär 2005 22:01

Re: programm fehler (pq-formel) - numerische datentypen
 
wenn ich die datei compiliere
und für p=2 und q=3 eingebe, als beispiel

dann kommt folgende fehlermeldung

Im Projekt Projekt1.exe ist eine Exception der Klasse EInvalidOp aufgetreten. Meldung: 'Ungültige Gleitkommaoperation'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortfahren.


danach ist folgender bereich blau markiert
Delphi-Quellcode:
if sqrt(Sqr(p)/4-q)<0

mirage228 15. Mär 2005 22:03

Re: programm fehler (pq-formel) - numerische datentypen
 
Du musst vorher prüfen, ob der Ausdruck unter Wurzel bzw. in sqrt() kleiner als Null ist.

Delphi-Quellcode:
var
  Num: Real;
begin
  Num := Sqr(P)/4 - q;´
  if Num >= 0 then
  begin
    // jetzt mit sqrt() weitermachen.
  end;
end;
mfG
mirage228

pete_knightde 15. Mär 2005 22:04

Re: programm fehler (pq-formel) - numerische datentypen
 
ich hab mal die komplette datei geuppt, damit sich das einige angucken können
http://home.arcor.de/pkde/pq%20aufgabe.zip

gordon freeman 15. Mär 2005 22:10

Re: programm fehler (pq-formel) - numerische datentypen
 
Zitat:

Zitat von pete_knightde
wenn ich die datei compiliere
und für p=2 und q=3 eingebe, als beispiel(...)
Delphi-Quellcode:
if sqrt(Sqr(p)/4-q)<0

Wenn du nachrechnest wirst du feststellen, dass Delhi das auch nicht errechnen kann, denn

((2^2)/4)-3 = (4/4)-3 = 1-3 = -2

und daraus kann man nun mal keine Wurzel ziehen!

Hier nochmal die Reihenfolge, in der du prüfen musst:
  • 1. Ist der Term sqr(p)/4-q größer oder gleich 0?
    • Nein - Gleichung hat keine Lösungen
    • Ja - Weitermachen
  • 2. Ist der Term sqrt((p^2/4)-q) gleich 0?
    • Ja - Gleichung hat eine Lösung => Die Lösung ausrechnen!
    • Nein - Die Gleichung hat 2 Lösungen => beide Lösungen ausrechnen

Danach kannste das ganze entsprechend ausgeben.

read you, gordon :cheers:

pete_knightde 15. Mär 2005 22:13

Re: programm fehler (pq-formel) - numerische datentypen
 
Zitat:

Zitat von gordon freeman
Zitat:

Zitat von pete_knightde
wenn ich die datei compiliere
und für p=2 und q=3 eingebe, als beispiel(...)
Delphi-Quellcode:
if sqrt(Sqr(p)/4-q)<0

Wenn du nachrechnest wirst du feststellen, dass Delhi das auch nicht errechnen kann, denn

((2^2)/4)-3 = (4/4)-3 = 1-3 = -2

und daraus kann man nun mal keine Wurzel ziehen!

Hier nochmal die Reihenfolge, in der du prüfen musst:
  • 1. Ist der Term sqr(p)/4-q größer oder gleich 0?
    • Nein - Gleichung hat keine Lösungen
    • Ja - Weitermachen
  • 2. Ist der Term sqrt((p^2/4)-q) gleich 0?
    • Ja - Gleichung hat eine Lösung => Die Lösung ausrechnen!
    • Nein - Die Gleichung hat 2 Lösungen => beide Lösungen ausrechnen

Danach kannste das ganze entsprechend ausgeben.

read you, gordon :cheers:

wenn ich das mache, dann kommt z.b. bei p=2, q=-3 "keine lösung"
das stimmt ja überhaupt nicht

gordon freeman 15. Mär 2005 22:19

Re: programm fehler (pq-formel) - numerische datentypen
 
Zitat:

Zitat von pete_knightde
wenn ich das mache, dann kommt z.b. bei p=2, q=-3 "keine lösung"
das stimmt ja überhaupt nicht

Wieso? WEnn man nach meinem Algo geht musst du als erstes den Term sqr(p)/4-q test, ob er größer 0 ist:

Mit deinen Beispielen (übertriebene Klammersetzung):

((sqr(2))/4)-(-3) = (4/4) -(-3) = 1 + 3 = 4

und somit ist der Term positiv und die Wurzel ist nicht Null, also erhält man 2 Lösungen :wink:

pete_knightde 15. Mär 2005 22:25

Re: programm fehler (pq-formel) - numerische datentypen
 
kann mal jemand das programm ausprobieren
ist alles notwendige dabei

http://home.arcor.de/pkde/pq%20aufgabe.zip

gordon freeman 15. Mär 2005 22:29

Re: programm fehler (pq-formel) - numerische datentypen
 
Zitat:

Zitat von pete_knightde
kann mal jemand das programm ausprobieren
ist alles notwendige dabei

http://home.arcor.de/pkde/pq%20aufgabe.zip

Sollte es denn jetzt das ganze korrekt berechnen oder funktioniert irgendetwas immer noch nicht?
Hab's mir mal geladen und guck's mir mal eben an!

gordon freeman 15. Mär 2005 22:37

Re: programm fehler (pq-formel) - numerische datentypen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Okay, dein Fehler liegt darin, dass du die Berechnungen von X1 und X2 außerhalb des If-Then Blocks durchführst. Diese Berechnungen können ja teilweise gar nicht durchgeführt werden!
Also gehören die Berechnungen in den If-Block!
Außerdem fragt deine 1. Abfrage immer noch direkt die Wurzel ab, dabei sollte zuerst gefragt werden, ob der Term unter der Wurzel < 0 ist!! hab das ganze mal berichtigt und angehängt.



//Edit1: Außerdem möchte ich noch folgendes sagen: Die DP ist kein Hausaufgabe-Hilfe-Forum, in dem jeder seine Hausaufgaben postet und gemacht bekommt. Es wird gewisse Kooperation seitens dessen erwartet, der die Aufgabe lösen soll. Ich habe heute nur viel Geduld, weil ich weiß, wie es ist im Info-Unterricht zu sitzen, bei einem total inkompetenten Lehrer und dann auch noch Homeworks machen zu müssen :wink:

pete_knightde 15. Mär 2005 22:52

Re: programm fehler (pq-formel) - numerische datentypen
 
ja, das klappt
danke für eure hilfe
auf euch ist verlass


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:44 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 by Thomas Breitkreuz