Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wurzeln Wie schreibt man die (https://www.delphipraxis.net/80472-wurzeln-wie-schreibt-man-die.html)

Axxus 9. Nov 2006 13:14


Wurzeln Wie schreibt man die
 
Hi Delphianer

Ich hoffe das passt hier rein hab keine passendere Sparte gefunden

Und gesucht hab ich auch schon

Ich hab als hausaufgabe ein Programm auf das die pythagorätischen zahlen raussucht

Den Algorhitmus hab ich schon fast fertig allerdings brauch ich dafür Wurzeln

Nun Meine frage:

Wie kann ich delphi klarmachen das es aus ner Zahl die Wurzel ziehen will???

es gibt bestimmt ne Taste die find ich aber nicht

Bitte um schnelle hilfe

Axxus

dfried 9. Nov 2006 13:16

Re: Wurzeln Wie schreibt man die
 
Die Funktion dazu in Delphi heisst SQRT, alles weiter dazu in der OH.

Axxus 9. Nov 2006 15:28

Re: Wurzeln Wie schreibt man die
 
Ok das funzt schon ma
Aber wer pythagoräische zahlen in der Schule gehabt hat weiß, das es nur gillt wenn alles ganze zahlen sind
Beispiel:
3² + 4² = 5²
oder algemein
x² + y² = z²
So bei meinem prog geht der ne bestimmte anzahl an zahlen durch und setzt diese für a und b ein
die formel is bis jetzt so

Delphi-Quellcode:
z1 : integer
z2 : double;
z1 := x*x + y*y;
z2 := sqrt (z1);
so ich hat eigentlich gedacht das ich es mit ner try except Schleife mache also das ich die Wurzel aus z1 (also z2) als integer deklariere und wenn es ne Komma oder irrationale zahl wird dann soll er nichts machen und wenn es ne ganzzahl wird dann soll er sie in ne liste eintragen

Ich kann aber z2 nicht als integer eklarieren weil sonst ein Fehler auftrit. Deswegen

Wie kann ich feststellen ob eine zahl ne GAnzzahl ist???

bitte antwortet schnell ich will es bis morgen fertig haben


Danke im vorraus

Axxus

dfried 9. Nov 2006 15:38

Re: Wurzeln Wie schreibt man die
 
Zitat:

Zitat von Axxus
Ich kann aber z2 nicht als integer eklarieren weil sonst ein Fehler auftrit. Deswegen

Wie kann ich feststellen ob eine zahl ne GAnzzahl ist???

Na, dann drück doch mal auf deinem SQRT die F1 taste und hau dann mit der Maus unter "Kategorie" auf das grün hinterlegte "Arithmetik", dort wirst du bestimmt fündig.

Denn...

Zitat:

Zitat von Axxus
bitte antwortet schnell ich will es bis morgen fertig haben

...wir machen dir hier nicht deine Hausaufgaben fix und fertig :-)

Flare 9. Nov 2006 15:40

Re: Wurzeln Wie schreibt man die
 
Delphi-Quellcode:
if frac(z2)=0 then ...
Delphi-Quellcode:
if round(z2)=z2 then ...
...gibt noch mehr!

//Edit: Ich sende es trotzdem mal ab...


Flare

Axxus 9. Nov 2006 16:48

Re: Wurzeln Wie schreibt man die
 
Ich will auch gar nicht das ihr meine Hausaufgaben macht sonst macht es ja keinen Spass mehr wenn einer den Quelltext vorkaut :mrgreen: :mrgreen: :mrgreen:

Aber ich kenn nun mal den Syntax nicht :wall: :wall: :wall:

Axxus

3_of_8 9. Nov 2006 17:11

Re: Wurzeln Wie schreibt man die
 
Dein Lehrer wird dir keine solche Hausaufgabe geben, wenn du das nötige Wissen dafür noch nicht hast.

Balu der Bär 9. Nov 2006 17:15

Re: Wurzeln Wie schreibt man die
 
Zitat:

Zitat von 3_of_8
Dein Lehrer wird dir keine solche Hausaufgabe geben, wenn du das nötige Wissen dafür noch nicht hast.

Das ist erstmal völliger Quark, ich weiß zwar nicht was an der Schule so los ist aber es soll Schulen geben wo man Aufgaben bekommt und sich das nötige Wissen selbst erarbeiten darf (wirst du dann im Abi merken :zwinker: ).

3_of_8 9. Nov 2006 17:29

Re: Wurzeln Wie schreibt man die
 
Naja aber wenn man noch so in den Anfängen steckt, also die Grundlagen noch fehlen...

mr47 9. Nov 2006 19:07

Re: Wurzeln Wie schreibt man die
 
Zitat:

Zitat von 3_of_8
Naja aber wenn man noch so in den Anfängen steckt, also die Grundlagen noch fehlen...

... kann es sich immer noch um einen dummen Lehrer handeln :mrgreen:

DP-Maintenance 10. Nov 2006 05:37

DP-Maintenance
 
Dieses Thema wurde von "r_kerber" von "VCL / WinForms / Controls" nach "Object-Pascal / Delphi-Language" verschoben.
Da paßt es wohl eher hin, hat ja nichts mit VCL zu tun.

Thorben_K 10. Nov 2006 06:30

Re: Wurzeln Wie schreibt man die
 
arg sry lesen sollte man können...

Axxus 10. Nov 2006 13:26

Re: Wurzeln Wie schreibt man die
 
Das war auf freiwilliger basis da ich erst in der 9. bin und der einzige in meiner Klasse bin der sich en bisi damit auskennt

Ich hab mir mein ganzes wissen selbst angeeignet wir ham jetzt in der 9. also seit diesem jahr info und sind grad bei office^^

Ok danke leute ich runde das Programm ab und stell es dann hier zum runterladen hin um mir erst ma Kritik einzufahren dann poste ich es vll bei Freeware

So noch ein letztes Problem:

Das Programm funzt!!!!! *freu*

Aber ab ca 35000 zeigt der die Fehlermeldung ungültige Gleitkommaoperatoren an was is ein Gleitkommaoperator und woran liegt das???

Axxus

3_of_8 10. Nov 2006 13:29

Re: Wurzeln Wie schreibt man die
 
Bist du dir sicher, dass es Operator heißt und nicht Operation? Und wo genau tritt der Fehler auf?

Axxus 10. Nov 2006 13:38

Re: Wurzeln Wie schreibt man die
 
Ach verflucht
Tut mir ganz doll leit es heißt Operation :oops: :oops: :oops:
Ich hät besser gucken sollen

Wo der Fehler auftritt weiß ich nicht mitten im Programm zeigt er an Ungültige Gleitkommaoperation
Keine Ahnung was das bedeutet

In der Borland Hilfe steht zwar was bei E/A Fehler aber wenn ich auf ungültige Gleitkommaoperation gehe dann kann der die seite net laden

Axxus 10. Nov 2006 14:52

Re: Wurzeln Wie schreibt man die
 
mmh das keiner weiß poste ich ma den Hauptquelltext

Delphi-Quellcode:
If Fehler <> true Then
  begin
    For x := min_x to max_x do
    begin
      For y := min_y to max_y do
      begin
        If x < y Then
        begin
          z1 := x*x + y*y;
          z := sqrt (z1);
          if round(z)=z then
          begin
            Ausgabe := ( inttostr (x) +    '; ' +inttostr (y) + '; ' + FloattoStr (z));
            Memo.Lines.Add (Ausgabe);
            Liste.Add(Ausgabe);
            Counter := Counter + 1;

          end;
        end;
      end;
    end;
    Memo.Lines.Add(inttostr (counter) + ' Zahlentrippel');
    counter := 0;
   
  end;
Seht ma durch und schaut was das problem ist

Axxus

3_of_8 10. Nov 2006 15:29

Re: Wurzeln Wie schreibt man die
 
Setz mal ein paar Breakpoints und sag uns, in welcher zeile genau der fehler auftritt.

Axxus 10. Nov 2006 15:59

Re: Wurzeln Wie schreibt man die
 
Hab ich jetzt die Zeile ist:
Delphi-Quellcode:
z := sqrt (z1);
Kann es vll daran liegen das z (extendet) nicht so viele nachkommastellen berechenen kann
denn ich hab x = 30000 und y = 40000
Wenn ja wie kann ich runden hab zwar schon ma FormatFloat gefunden weiß aber net wies funzt

Axxus

3_of_8 10. Nov 2006 16:06

Re: Wurzeln Wie schreibt man die
 
LOOOOL

Ein Extended kann Nachkommastellen ausrechnen, da fliegen dir die Löffel weg.

Wenn du mich fragst, ist z1 negativ.

Axxus 10. Nov 2006 16:17

Re: Wurzeln Wie schreibt man die
 
z1 kann nicht negativ werden

Delphi-Quellcode:
z1 := x*x + y*y;
z := sqrt (z1);
sollte x oder y negativ sein wird es duch das multipliziern wieder positiv
außerdem nimmt x und yden wert von 1 bis 30000 an (bis dahin gehts)
also wenn x links ist und y rechts
1 1
1 2
1 3
.
.
.
1 30000
2 1
2 2
.
.
.
2 30000
3 1
.
.
.
deswegen muss es woanders dran liegen


deswegen hab ich kein plan woran das liegen könnte
x und y sind üprigesn integerwerte und z2 auch

Axxus

Axxus 10. Nov 2006 16:28

Re: Wurzeln Wie schreibt man die
 
Hä es ist mir unbegreiflich aber du hast recht z1 ist wirklich negativ :?: :?: :?: :?: :?: :?: :?: :?:
Aber wieso wirde der wert negativ weenn x und y positiv sind das ergibt keinen sinn

Hat einer dafür ne erklärung

zahor 10. Nov 2006 17:02

Re: Wurzeln Wie schreibt man die
 
na wenn du's positiv haben willst dann mach es mal mit der funktion (abs(x):
Delphi-Quellcode:
z := sqrt(abs(z1));
oder vielleicht geht es auch so, kann ja an delphi liegen:
Delphi-Quellcode:
z := sqrt(x*x + y*y);
musste mal probieren.

3_of_8 10. Nov 2006 17:04

Re: Wurzeln Wie schreibt man die
 
Setz mal nen Breakpoint auf die sqrt-Zuweisung und drück Strg+F7 und lass dir die Werte von x, y und z1 ausgeben.

zahor 10. Nov 2006 17:29

Re: Wurzeln Wie schreibt man die
 
oder geh auf "überwachte ausdrücke" (Menüpunkt ansicht o.ä.)
und füge x, y, z1 hinzu
und mach's dann mit f7 immer weiter

stz 10. Nov 2006 17:36

Re: Wurzeln Wie schreibt man die
 
Hallo zusammen,
36001600000000 = 30000*30000+40000*40000 = z1 ist deutlich außerhalb von -2147483648..2147483647 und das ist alles, was ein Integer verkraften kann. Wenn man die entsprechende Exception deaktiviert hat, überprüft Delphi nicht, ob sich alle Zahlen in einem Integer in diesem Bereich befinden. Gelangt man außerhalb dieses Bereiches, stehen im betroffenen Integer irgendwelche lustigen Zahlen. Meistens negative. :wink:

Gruß
Malte

3_of_8 10. Nov 2006 17:49

Re: Wurzeln Wie schreibt man die
 
Da hast du Recht.

Einfach die Deklaration von z1 in Extended ändern und du kannst da Zahlen reinspeichern wie bekloppt.

Achja: Bei einer Multiplikation dürften sich positiv-negativ so ziemlich die Waage halten.

Axxus 10. Nov 2006 17:56

Re: Wurzeln Wie schreibt man die
 
is das auch bei Extended so denn wenn ich z1 als solchen deklariere dann passiert es immer noch z1 is dann -179343562632 oder so^^
jedenfalls tritt der fehler bei Extended auch noch auf wenn das auch zu klein ist habt ihr dann nen typ der richtig große Zahlen verkraften kann ich will mit dem programm eig dem Benutzer ne unendlich große anzahl an pythagoräischen zahlen liefern können und wenn schon 1.000.000*1.000.000 + 1.000.000*1.000.000 = 2*10^12 ist was is es dann erst bei 1.000.000.000 ^^ ich frag mich wie lange der rechenr dafür bracueh wird^^ jedenfalls gibt es einen typ der groß genug ist :?: :?: :?:

stz 10. Nov 2006 18:02

Re: Wurzeln Wie schreibt man die
 
Laut OH kann Extended -3,6 x 10^4951 .. 1,1 x 10^4932 fassen bei einer Genauigkeit von 10 bis 20 Stellen. Das müsste also eigentlich langen...

Gruß
Malte

jfheins 10. Nov 2006 18:05

Re: Wurzeln Wie schreibt man die
 
Versuch erstmal, Int64 zu verwenden, der kann schonmal signifikant größere Zahlen verarbeiten, und noch größere Ganzzahlen werden sehr kompliziert ...

Hawkeye219 10. Nov 2006 18:10

Re: Wurzeln Wie schreibt man die
 
Delphi-Quellcode:
z1 := x * x + y * y;
Wenn x und y als Integer-Variablen vereinbart werden, wird die rechte Seite immer einen Integer-Wert liefern - unabhängig vom Typ der Variablen z1.

Gruß Hawkeye

mkinzler 10. Nov 2006 18:15

Re: Wurzeln Wie schreibt man die
 
Um beliebig große (Integer-)Zahlen speichern u können brauchst du einen sogennaten VLI (Very Long Integer)
http://www.lang-ib.de/Delphi-Ecke/Tr...s/vli/vli.html
http://www.gk-informatik.de/oop/vlint.html

3_of_8 10. Nov 2006 18:19

Re: Wurzeln Wie schreibt man die
 
Hmm, seltsam...

mkinzler 10. Nov 2006 18:21

Re: Wurzeln Wie schreibt man die
 
Zitat:

Zitat von 3_of_8
Sicher?

Wen meinst du jetzt?

3_of_8 10. Nov 2006 18:22

Re: Wurzeln Wie schreibt man die
 
Hawkeye. ;)

Hab aber rausgefunden, dass es tatsächlich so ist, wobei ich gedacht hätte, dass der Compiler intelligent genug ist, um das zu merken.

Schließlich führt er einen impliziten Cast aus und kann dann auch gleich mit Extended rechnen.

hoika 10. Nov 2006 18:25

Re: Wurzeln Wie schreibt man die
 
Hallo 9. Klasse (undeutlich erinner ;))

ungültige Gleitkommaoperation.
Deine Zahlen sind zu gross vom Wertebereich her.
Oder zu ziehst eine Wurzel aus einer negativen Zahl.

Byte kann z.B. nur 256 Zahlen.
Was hast du denn für einen Variablentyp ? Double ?

Tipp mal in der Hilfe Extended ein,
dann siehst, wie gross die jeweiligen Zahlen werdne dürfen.

In deinem Fall würde ich direkt Extended statt Double probieren.


Heiko

inherited 10. Nov 2006 18:32

Re: Wurzeln Wie schreibt man die
 
Zitat:

Zitat von hoika
Hallo 9. Klasse (undeutlich erinner ;))

ungültige Gleitkommaoperation.
Deine Zahlen sind zu gross vom Wertebereich her.
Oder zu ziehst eine Wurzel aus einer negativen Zahl.

Byte kann z.B. nur 256 Zahlen.
Was hast du denn für einen Variablentyp ? Double ?

Tipp mal in der Hilfe Extended ein,
dann siehst, wie gross die jeweiligen Zahlen werdne dürfen.

In deinem Fall würde ich direkt Extended statt Double probieren.


Heiko

Schon mal was von dem Wort "lesen" gehört? Das wurde alles schon gesagt ~.~^^

Cöster 10. Nov 2006 19:48

Re: Wurzeln Wie schreibt man die
 
Delphi-Quellcode:
z1 := x*x + y*y;
z := sqrt (z1);
Das ließe sich optimieren:

Delphi-Quellcode:
z := Hypot(x, y);
Unit Math einbinden nicht vergessen.

rayman 10. Nov 2006 20:11

Re: Wurzeln Wie schreibt man die
 
Ich glaube du kommst da mit einem anderen Ansatz besser:

Die Tripel kann man nämlich auch ausrechnen!

Du suchst dir einfach beliebige Zahlen a und b, wobei b immer kleiner sein sollte als a. Dann kannst du dir die 3 Zahlen ausrechnen:
x := a*a - b*b;
y := 2 * a*b;
z := a*a + b*b;

für a=2 und b=1 kriegst du z.B.
x=3, y=4 und z=5

Also nimm zwei Schleifen ineinander (so wie du's jetzt auch hast) für a und b und dann rechnest du die tripel alle nacheinander aus. Da brauchst du keine Wurzeln und es dürfte wesentlich schneller gehen.

gruß raYman

Axxus 10. Nov 2006 21:08

Re: Wurzeln Wie schreibt man die
 
ich kann x und y aber nur als integer vereinbarren da ich eine for do Schleife hab und die Variable muss von ordinarem wert sein (ich weiß zwar net (mehr) was ordinar ist aber ich glaub das es ne ganzzahl sien muss oder?) jedenfalls geht das net
mmh was mach ich

3_of_8 10. Nov 2006 21:24

Re: Wurzeln Wie schreibt man die
 
Ordinal heißt das, und das bedeutet, es muss ein ordinaler Typ sein. Ordinaltypen sind zum Beispiel Ganzzahlen außer Int64 und Aufzählungstypen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz