![]() |
delphi probleme....pq
so ich soll für die schule die pq-formel als prog schreiben...hab jetzt auch was gemacht aber das funzt nicht wirklich^^
kann mir mal jemand helfen denn ich weiß absolut nicht mehr weiter
Delphi-Quellcode:
procedure TForm1.startClick(Sender: TObject);
var p,q,x1,x2,wurzel,z : extended ; begin if sqrt(p*p/4-q) < 0 then keine.Visible := True else begin if sqrt(p*p/4-q) = 0 then begin wurzel := sqrt(p*p/4-q); z := p/2*-1; x1loesung.Visible := True; x1loesung.Caption := floattostrf(z,ffFixed,2,2); end else if sqrt(p*p/4-q) >0 then begin x1:= z+wurzel; x2:= z-wurzel; x1loesung.Visible := True; x1loesung.Caption := floattostrf(x1,ffFixed,2,2); x2loesung.Visible := True; x2loesung.Caption := floattostrf(x2,ffFixed,2,2); end end; end; [edit=Matze][delphi]-Tags gesetzt. Zukünftig bitte selbst einfügen. MfG, Matze[/edit] |
Re: delphi probleme....pq
Standardfrage: Was funktioniert denn nicht so wie gedacht? Weil "funktioniert nicht so richtig" ist keine Fehlerbeschreibung. Es es ein mathematisches oder ein Sprachproblem?
Und du kannst nicht erwarten, dass hier jemand deinen Code nimmt, kopiert und ihn dir korrigiert wieder hierreinstellt. Wenn es doch jemand macht, hast du Glück gehabt. Gelernt hast du dabei aber nix. |
Re: delphi probleme....pq
alsoooo...erstmal kommen unten die hinweise von delphi dass
[Hint] Unit1.pas(53): Value assigned to 'wurzel' never used und dann noch die meldungen dass die variablen q,p,z,wurzel nicht initialisiert wurden das programm lässt sich jedoch dennoch starten und ich kann die gewünschten zahlen eingeben, wenn ich jedoch dann auf den start button klicke kommt eine fehlermeldung, die lautet: procejt1.exe raised exceptionclass EinvalidOpwith message "ibvalid floating point operation" dann wennman auf ok klickt öffnet sich der debugger doch wenn ich bei dem einen schritt vorwärst gehe geht er zum ende und dann kommt die fehlermeldung:invalid floating point operation |
Re: delphi probleme....pq
Delphi-Quellcode:
procedure TForm1.startClick(Sender: TObject);
var p,q,x1,x2,wurzel,z : extended ; begin //p und q sind nicht initialisiert, reiner Zufall, was hier rauskommt if sqrt(p*p/4-q) < 0 then keine.Visible := True else begin if sqrt(p*p/4-q) = 0 then begin wurzel := sqrt(p*p/4-q); //Berechnung von Wurzel wird nicht verwendet z := p/2*-1; x1loesung.Visible := True; //Und wo bleibt hier die Wurzel? Umsonst gerechnet, s.o. x1loesung.Caption := floattostrf(z,ffFixed,2,2); end else if sqrt(p*p/4-q) >0 //Abfrage unnötig, da die anderen beiden Fälle bereits behandelt wurden then begin x1:= z+wurzel; //wurzel hat einen undefinierten Wert x2:= z-wurzel; //dto. x1loesung.Visible := True; x1loesung.Caption := floattostrf(x1,ffFixed,2,2); x2loesung.Visible := True; x2loesung.Caption := floattostrf(x2,ffFixed,2,2); end end; end; |
Re: delphi probleme....pq
a) Du musst die Variablen initialisieren
b) Für welche Zahl x soll denn bitte sqrt(x) kleiner als Null sein? Willst du vielleicht testen, ob das Argument kleiner als Null ist, bevor du die Wurzel ziehst? // Ach ja: 'Delphi Problem' ist in einem Delphi Forum nicht wirklch hilfreich :wall: |
Re: delphi probleme....pq
Ah, das sah auf die ersten zwei Blicke so aus, als ob p, q, ... mit als Funktionsparameter gehörten.
Die ganzen Variablen da musst du natürlich zuweisen. Wie Deddy schon geschrieben hat: Woher soll Delphi wissen was p, q, ... ist, wenn du die Werte aus der Eingabe nicht zuweist? Schau dir mal strtoint bzw. strtofloat an. Oder TryStrToInt, TryStrToFloat, ... |
Re: delphi probleme....pq
se vieeeeeeelen dank an euch alle...nach euren tipps funktioniert das hier endlich zumindest fast^^
das einzigste was jetzt noch nicht funktioniert ist dass delphi anzeigt wenn es keine lösung gibt...dann kommt immer diese fehlermeldung hat vll noch jemand eine idee? |
Re: delphi probleme....pq
Welche Fehlermeldung?
|
Re: delphi probleme....pq
die die ich oben schon einmal hingeschrieben habe in einem beitrag von mir...die mit invalid floating point operation
|
Re: delphi probleme....pq
Hallo wuschi,
Delphi-Quellcode:
Hier (oder danach) tritt der Fehler auf, oder?
wurzel := sqrt(p*p/4-q);
Wenn die Formel keine Lösung besitzt, ist p*p/4-q negativ. Wie groß ist die Wurzel aus -1 :mrgreen: Du musst also den Fall abfangen, das p*p/4-q < 0 ist und in diesem Fall die weitere Verarbeitung abbrechen und "keine Lösungen" ausgeben. MfG, Bug |
Re: delphi probleme....pq
also eigtl sollte ja das programm wenn die wurzel negativ ist nach then aufhören da das andere ja nur bedingungen sind falls die wurzel positiv ist
Delphi-Quellcode:
if
sqrt(p*p/4-q) < 0 then keine.Visible := True else begin |
Re: delphi probleme....pq
Wie kann denn eine Wurzel negativ werden?
|
Re: delphi probleme....pq
naja bei der pqformel kann das eben sein und wenn das so ist dann gibt es keine lösung
|
Re: delphi probleme....pq
Der Wert unter der Wurzel darf nicht negativ werden, Wuzteln sind im Bereich der Realzahlen nur für positive werte deklariert!
Delphi-Quellcode:
if (p*p/4-q) < 0
|
Re: delphi probleme....pq
Delphi-Quellcode:
var Zahl: extended;
... if q <> 4 then Zahl := p*p/4-q //wenn q = 4 gibt es eine Division durch 0 else Zahl := -1; if Zahl < 0 then keine.Visible := True else ...//ab hier mit sqrt(Zahl) weitermachen |
Re: delphi probleme....pq
das versteh ich leider nicht was du da mit q=4 meinst
delphi soll ja nur erkennen obs negativ ist oder nicht |
Re: delphi probleme....pq
*Oops*, sry hast Recht, ich habe Punkt-vor-Strichrechnung nicht beachtet.
|
Re: delphi probleme....pq
Zitat:
|
Re: delphi probleme....pq
Zitat:
Die Bedingung (a < b) gehört in die selbe zeile wie das if. Das then auch. Nach jedem then kommt ein begin..end. Usw. ohje ohje, ich hab's wieder getan. Hab wieder versucht meinen Styleguide unter die Leute zu bringen. Asche auf mein Haupt. :???: |
Re: delphi probleme....pq
Der Threadtitel wurde ja immer noch nicht angepasst. :?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 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