Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prüfen ob Zahl irrational ist (https://www.delphipraxis.net/88460-pruefen-ob-zahl-irrational-ist.html)

Axxus 15. Mär 2007 17:43


Prüfen ob Zahl irrational ist
 
HI Delphianer :hi:

Wie kann ich abfragen ob eine Zahl irrational ist

Soll eine bedingung werden also so

Delphi-Quellcode:
If Zahl <> irrational Then
begin
...
end;
Wie lautet der Befehl???

DAnke im vorraus

Axxus

JasonDX 15. Mär 2007 17:46

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Axxus
Wie kann ich abfragen ob eine Zahl irrational ist

Im Rechner können nur rationale Zahlen dargestellt werden, das macht eine Abfrage auf irrational hinfällig. ;)

greetz
Mike

fwsp 15. Mär 2007 17:47

Re: Prüfen ob Zahl irrational ist
 
ich glaube, du wirst schon daran scheitern, dass der computer keine irrationale zahlen darstellen kann. ansonsten wird es dafür keinen einzelnen befehl geben.

sirius 15. Mär 2007 17:47

Re: Prüfen ob Zahl irrational ist
 
[1. Teil gelöscht wegen rotem Kasten]
Möglich ist es natürlich trotzdem. Dann kannst du aber für dein Programm nicht die Standardfließkommatypen nehmen.

Also besser gesagt: Was ist bei dir "Zahl"?
Und reicht es dir auf Periodizität zu prüfen, wenn du nur 20 Stellen hast (inkl. Vorkommastellen)?

Axxus 15. Mär 2007 17:53

Re: Prüfen ob Zahl irrational ist
 
Ok also folgendes:

Ich denke wer in der 9. KLasse Gimy ist (war) wird die Formel der Höhe eines gleichseitigen Dreiecks in Abhängigkeit von der Seitenlänge kennen

Formel:

h = sqrt(s²-(s/2)²)

So Jetzt brauch ich ein Dreieck, bei dem Weder die Seitenlänge, noch die Höhe irrational ist :???:

Und dass wollt ich mit einer Zählschleife berechnen.

Aber wie kann ich jetzt prüfen, ob die Höhe rational oder irrational ist unabhängig davon ob der PC die irrationale Zahl anzeigen kann :wall:

Axxus

sirius 15. Mär 2007 17:59

Re: Prüfen ob Zahl irrational ist
 
Er kann sie nicht nur nicht anzeigen. Er kann sie auch nicht speichern. Wie denn auch?

Wieso darf die Seite denn nur rational sein?

Edit: Und was ist denn das für eine formel?

3_of_8 15. Mär 2007 18:03

Re: Prüfen ob Zahl irrational ist
 
Was das für eine Formel ist? Das ist die Formel für die Höhe im gleichseitigen Dreieck. So nebenbei, du müsstest eigentlich nur auf Quadratzahlen testen.

Khabarakh 15. Mär 2007 18:05

Re: Prüfen ob Zahl irrational ist
 
@Axxus: Das ist nicht dein Ernst, oder? Es ist ja nicht so, dass schon allein die rationalen Zahlen unendlich dicht wären... :stupid: .
h = sqrt(3)/2 * a
Aus der Formel wird ersichtlich, dass der 3-Exponent von h um 0,5 größer ist als der von a. Damit können aber nicht beide gleichzeitig ganz sein -> mindestens eine Variable irrational.
Zitat:

Zitat von Axxus
Gimy

Kann man das essen :mrgreen: ?

@sirius: Die Form kommt mir auch etwas unnütz vor, aber im Kern ist die Formel schon richtig.
@3_of_8: Was nicht funktioniert, muss erst gar nicht getestet werden.

IngoD7 15. Mär 2007 18:14

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Axxus
So Jetzt brauch ich ein Dreieck, bei dem Weder die Seitenlänge, noch die Höhe irrational ist :???:

:shock: Wer stellt denn bitte eine solche seltsame Anforderung???

Einen Wert (eine Zahl) als irrational zu bestätigen erfordert den Beweis, dass die Nachkommastellen dieses Wertes bei Dezimaldarstellung tatsächlich nie abbrechen und nicht periodisch sind. Welche Computerformel sollte das können?

Wann immer du in deinem Dreieck einen Dezimalwert hast, der nicht freiwillig nach x Nachkommastellen abbricht (oder periodisch geworden ist), kannst du dir nicht mehr sicher sein, dass genau dieser Wert vielleicht nicht doch irrational ist.

Nikolas 15. Mär 2007 19:03

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Aber wie kann ich jetzt prüfen, ob die Höhe rational oder irrational ist unabhängig davon ob der PC die irrationale Zahl anzeigen kann
Ich würde vorschlagen, indem du selbst denkst.

Du suchst zwei rationale Zahlen p und q, so dass p=sqrt(3)*q
Dann kannst du p als a/b und q als c/d (Elemente aus Z/{0}) darstellen.
Damit hast du dann sqrt(3)=(cb)/(da), womit dann sqrt(3) rational wäre. Da das nicht der Fall ist, kannst du dein rationales Dreieck vergessen. (ausser natürlich der triviale Fall mit einem entarteten Dreieck a=c=0 :-D )

Zitat:

h = sqrt(3)/2 * a
Aus der Formel wird ersichtlich, dass der 3-Exponent von h um 0,5 größer ist als der von a. Damit können aber nicht beide gleichzeitig ganz sein -> mindestens eine Variable irrational.
Was meinst du mit '3-Exponent'?

Khabarakh 15. Mär 2007 19:05

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Nikolas
Was meinst du mit '3-Exponent'?

Hmpf, den Link wollte ich doch eigentlich noch einfügen...
http://de.wikipedia.org/wiki/Primfaktor

Nikolas 15. Mär 2007 19:18

Re: Prüfen ob Zahl irrational ist
 
Zitat:

h = sqrt(3)/2 * a
Aus der Formel wird ersichtlich, dass der 3-Exponent von h um 0,5 größer ist als der von a. Damit können aber nicht beide gleichzeitig ganz sein -> mindestens eine Variable irrational.
Zitat:

Wikipedia:
Die in der Primfaktorzerlegung einer Zahl auftretenden Primzahlen nennt man die Primfaktoren dieser Zahl. Zum Beispiel hat 6936 die Primfaktoren 2, 3 und 17. Den Exponenten des jeweiligen Primfaktors p nennt man die p-Bewertung oder den p-Exponenten der Zahl. Unser Beispiel 6936 hat den 2-Exponenten 3, den 3-Exponenten 1 und den 17-Exponenten 2. Alle anderen p-Exponenten sind gleich 0.
Wie kommst du hier auf Primfaktorzerlegung wenn es hier nicht um ganze Zahlen geht? Und 1/2 als 3-exponent? Diese Exponenten sollten nach Definition doch ganz sein... Wenn a=4*sqrt(3) wäre, hätte h plötzlich den 3-exponent Null. Deine Argumentation verstehe ich so nicht ganz.

IngoD7 15. Mär 2007 19:40

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Khabarakh
Damit können aber nicht beide gleichzeitig ganz sein -> mindestens eine Variable irrational.

Eine Zahl ist nicht automatisch irrational, nur weil sie nicht ganzzahlig ist. :cyclops:

3_of_8 15. Mär 2007 19:45

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Khabarakh
@3_of_8: Was nicht funktioniert, muss erst gar nicht getestet werden.

Naja, die Menge der rationalen Zahlen ist nunmal (AFAIK) semi-entscheidbar, die der irrationalen Zahlen unentscheidbar. Das wirst du wohl gemeint haben und das ist mir auch geraden eingefallen. Eigentlich ist der ganze Ansatz schon irgendwie... seltsam. Erstens ist die Forderung zumindest ungewöhnlich und zweitens wäre es einfacher, sich eine Funktion zu schreiben, die zufällige Quadratzahlten als Seitenlängen generiert als zufällige Zahlen zu generieren und dann deren Wurzel auf Rationalität zu testen.

Khabarakh 15. Mär 2007 19:54

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Nikolas
Wie kommst du hier auf Primfaktorzerlegung wenn es hier nicht um ganze Zahlen geht?

Jeder rationalen Zahl lässt sich doch wohl eine eindeutige Primfaktorzerlegung mit ganzen Exponenten zuordnen (wie es afaik z.B. CAS machen). Aber der eben ganze 3-Exponent kann bei der Multiplikation mit Sqrt(3) schlecht ganz bleiben.
Zitat:

Wenn a=4*sqrt(3) wäre, hätte h plötzlich den 3-exponent Null.
:gruebel: . a = 2² * 3^.5
h = a * sqrt(3) / 2 = 2^1 * 3^1

Auch egal, nehmen wir einfach deinen Beweis :mrgreen: .

Nikolas 15. Mär 2007 19:57

Re: Prüfen ob Zahl irrational ist
 
Zitat:

h = a * sqrt(3) / 2 = 2^1 * 3^1
Ich wollte natürlich durch sqrt(3) teilen :wall:

Zitat:

Jeder rationalen Zahl lässt sich doch wohl eine eindeutige Primfaktorzerlegung mit ganzen Exponenten zuordnen
Meinst du vielleicht ganze Zahlen?

Kedariodakon 15. Mär 2007 19:59

Re: Prüfen ob Zahl irrational ist
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm sind nicht alle Wurzeln aus Zahlen, bei dennen nicht eine ganze Zahl rauskommt irrational?

Bye Christan

Edit: hab mal ein wenig rumumgestellt =p

Khabarakh 15. Mär 2007 20:27

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Nikolas
Zitat:

Jeder rationalen Zahl lässt sich doch wohl eine eindeutige Primfaktorzerlegung mit ganzen Exponenten zuordnen
Meinst du vielleicht ganze Zahlen?

Nicht dass ich wüsste ;) .

Zitat:

Zitat von Kedariodakon
Hmm sind nicht alle Wurzeln aus Zahlen, bei dennen nicht eine ganze Zahl rauskommt irrational?

Sqrt(1/4)?

Nikolas 15. Mär 2007 20:35

Re: Prüfen ob Zahl irrational ist
 
- Wie sieht denn dann die Primfaktorzerlegung von 4/5 aus?

- Ich glaube er meint natürliche Zahlen.

IngoD7 15. Mär 2007 21:06

Re: Prüfen ob Zahl irrational ist
 
Was für'n durcheinander.

==> http://de.wikipedia.org/wiki/Irrationale_Zahl

Axxus 15. Mär 2007 21:21

Re: Prüfen ob Zahl irrational ist
 
Erst ma sollte es für den PC kein Problem sein zumindest zu prüfen ob ein Wurzelausdruck irrational ist und Zwar so:

1. Gehen wir von einer Summe aus:
sqrt(367+91*2)
2. So nun Formen wir die Wurzel so um, dass aus der Summe ein Produkt wird (dieser Schritt gilt nur zur verdeutlichung, dass man ein Produkt benötigt)

3. Nun Haben wir:
sqrt(549)

4. Nun zerlegen wir das ganze in Primzahlen
sqrt(183*3)
sqrt(61*3*3)
So geht nicht weiter
Jetzt radizieren wir teilweise:
sqrt(61)*3
So da die Wurzel von Primzahlen immer irrational ist wisssen wir, das die Endzahl auch irrational ist

Ich dachte es gäbe eine Function in Delphi di sowas drauf hat gibts aber anscheinend nicht

(wäre interessant sowas ma selbst zu programieren)

Das jetzt erst mal unabhängig zum Dreieck

Im bezug auf das dreieck gibt es glaub ich keins das die anforderungen erfüllt :(

Man wasn mist

Naja egal

DAnke

Axxus

Khabarakh 15. Mär 2007 21:39

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Nikolas
- Wie sieht denn dann die Primfaktorzerlegung von 4/5 aus?

2² * 5^-1
@Axxus: Das ist genau meine Vorgehensweise - Primfaktorzerlegung mit nicht-ganzen (halben *g* ?) Exponenten =>[1] Irrationalität.

[1]Schön, wenn's auch anderherum ginge...

HannosG 15. Mär 2007 22:42

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Axxus
Erst ma sollte es für den PC kein Problem sein zumindest zu prüfen ob ein Wurzelausdruck irrational ist und Zwar so:
...
wäre interessant sowas ma selbst zu programieren

Dem stimme ich zu. :wink:

Delphi-Quellcode:
function IsSqrtIrrational(Zahl: Integer): boolean;
var
I,Z: Integer;
begin
Result:=false;
For I:=2 to Zahl Do
  begin
  Z:=0;
  While Zahl/I = Zahl div I Do
    begin
    Zahl:=Zahl div I;
    Inc(Z);
    end;
  If Z/2<>Z div 2 then
    begin
    Result:=true;
    exit;
    end;
  end;
end;

omata 16. Mär 2007 00:14

Re: Prüfen ob Zahl irrational ist
 
Hier nochmal eine Version ohne exit...

Delphi-Quellcode:
function IsSqrtIrrational(Zahl: integer): boolean;
var i, z: integer;
begin
  Result:=false;
  i:=2;
  while (i <= Zahl) and not Result do
  begin
    z:=0;
    while Zahl/i = Zahl div i do
    begin
      Zahl:=Zahl div i;
      inc(z);
    end;
    Result:=(z/2 <> z div 2);
    inc(i);
  end;
end;
Gruss
Thorsten

IngoD7 16. Mär 2007 08:21

Re: Prüfen ob Zahl irrational ist
 
Die beiden Funktionen sagen auf geniale - wenn auch umständliche - Art und Weise aus, wann das Ergebnis vom Radizieren der zu untersuchenden Zahl nicht ganzzahlig ist. (Also False bei 0, 1, 4, 9, 16, 25, 36 ... etc. pp.). Toll. Etwas weit vom Thema ab, aber ansonsten toll. :???: :wink:

Im Ernst: Was soll das bringen?

Cöster 16. Mär 2007 10:21

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Delphi-Quellcode:
Zahl/i = Zahl div i
{...}
z/2 <> z div 2;

:gruebel: Wofür wurde eigentlich mod erfunden. . .

Zitat:

Zitat von IngoD7
Die beiden Funktionen sagen auf geniale - wenn auch umständliche - Art und Weise aus, wann das Ergebnis vom Radizieren der zu untersuchenden Zahl nicht ganzzahlig ist. (Also False bei 0, 1, 4, 9, 16, 25, 36 ... etc. pp.)

Richtig, und in allen anderen Fällen ist das Ergebnis irrational.

Zitat:

Zitat von IngoD7
Etwas weit vom Thema ab

Axxus hat in Beitrag #21 von so einer Funktion gesprochen, HannosG hat sie implementiert. Das dumme ist nur, dass die Funktion nur mit ganzzahligen Parametern funzt.


Wenn man eine Funktion schreiben wollte, die als Parameter eine Kommazahl enthält und von dieser wissen will, ob sie irrational ist, müsste man sich ein neues Zahlenformat ausdenken, da die vorhandenen reellen Typen alle irrationalen Zahlen auf rationale Zahlen rundet (wie ja schon gesagt wurde). Dieses neue Format müsste noch ein paar zusätzliche Bits für mögliche Wurzeln haben.

IngoD7 16. Mär 2007 10:53

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Cöster
Richtig, und in allen anderen Fällen ist das Ergebnis irrational.

Wo steht das denn geschrieben?

//Nachtrag:
Ich bin schon ganz kirre und habe wahrscheinlich den Faden verloren.
Nur dass wir uns nicht missverstehen:
Ein nicht ganzzahliges Ergebnis vom Wurzelziehen aus einer Ganzzahl ist irrational.

Aber den Bezug zum eigentlichen Problem dieses Threads habe ich irgendwie verloren. :?

Cöster 16. Mär 2007 12:05

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von IngoD7
Zitat:

Zitat von Cöster
Richtig, und in allen anderen Fällen ist das Ergebnis irrational.

Wo steht das denn geschrieben?

Nenn mir ein Gegenbeispiel: Eine ganze Zahl, dessen Wurzel weder ganzzahlig noch irrational ist.

IngoD7 16. Mär 2007 12:10

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Cöster
Zitat:

Zitat von IngoD7
Zitat:

Zitat von Cöster
Richtig, und in allen anderen Fällen ist das Ergebnis irrational.

Wo steht das denn geschrieben?

Nenn mir ein Gegenbeispiel: Eine ganze Zahl, dessen Wurzel weder ganzzahlig noch irrational ist.

Das ist zwar nicht die Antwort auf meine Frage :wink: , aber ist auch wurscht --> siehe mein Nachtrag im Vorposting (hat sich überschnitten).

Cöster 16. Mär 2007 12:38

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von IngoD7
Aber den Bezug zum eigentlichen Problem dieses Threads habe ich irgendwie verloren. :?

Was ist deiner Meinung nach das eigentliche Problem des Threads? Die Frage nach dem gleicheseitigen Dreieck, dessen Höhe und Seitenlänge beide rationale Zahlen sind, wurde ja schon längst geklärt.

Für die Frage, wie man prüfen kann, ob eine Zahl rational ist oder nicht (wie es auch in der Überschrift steht), könnte man die Prozedur "IsSqrtIrrational" gut gebrauchen. Die Zahl müsste nur in einem anderen Format gespeichert sein, z.B. so:
Code:
2^23*0,9375*Sqrt(44)
Eine Zahl in solch einem Format könnte man - im Gegensatz zu Extended o.ä. - einer Funktion "IsIrrational" übergeben. In dieser Funktion müsste dann "IsSqrtIrrational" aufgerufen werden.

IngoD7 16. Mär 2007 14:01

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von Cöster
Zitat:

Zitat von IngoD7
Aber den Bezug zum eigentlichen Problem dieses Threads habe ich irgendwie verloren. :?

Was ist deiner Meinung nach das eigentliche Problem des Threads?

Vielleicht habe ich ja nur irgendwann den Faden verloren ...

Zitat:

Zitat von Cöster
Die Frage nach dem gleicheseitigen Dreieck, dessen Höhe und Seitenlänge beide rationale Zahlen sind, wurde ja schon längst geklärt

Wenn wir hier vom Thread reden, so darf ich wohl sagen: Die Frage kam nicht als erstes. Als erstes wurde nach einem Delphibefehl zum Überprüfen auf Irrationalität einer Zahl gefragt.

In mehreren Postings wurde daraufhin irgendwie erklärt, dass man ja eine irrationale Zahl nicht einmal in den Computer eingeben könne und sich daher ihre Überprüfung auf Irrationalität von selbst verbietet. Das hat auch jetzt noch Bestand. Und das eigentliche Thema wäre damit beendet gewesen.
Dass aber in Wirklichkeit keine Zahl, sondern ein Ausdruck überprüft werden soll (wie beispielswiese sqrt(2)), das kam erst später. In weiterem Threadverlauf wurde dann immer wieder "Zahl" mit "Ausdruck" oder "Formel" verwechselt.

Zuletzt gerade hier wieder:
Zitat:

Zitat von Cöster
Für die Frage, wie man prüfen kann, ob eine Zahl rational ist oder nicht (wie es auch in der Überschrift steht), könnte man die Prozedur "IsSqrtIrrational" gut gebrauchen. Die Zahl müsste nur in einem anderen Format gespeichert sein, z.B. so:
Code:
2^23*0,9375*Sqrt(44)

Ich sehe hier nicht eine Zahl. Ich sehe hier eine Formel mit 4 Zahlen.

Wir müssen uns jetzt nicht daran aufhängen, aber mich hat das im Threadverlauf verwirrt.

In eben diesem Thread wurde dann also irgendwann gesagt, dass es um ein gleichseitiges Dreieck ginge, indem weder Seitenlänge noch Höhe irrational sein dürften. Ab da ging ein wildes "Getummel" los, dem ich nicht folgen konnte. Es wurde Primfaktorisierung ins Spiel gebracht etc. pp. Wozu?

Eigentlich hätte doch die auch im Thread bereits genannte Formel für die Höhe h=sqrt(3)/2*a ausreichen müssen, um den Thread entgültig zu beenden. sqrt(3) ist irrational. Jedes Produkt aus einer irrationalen und einer rationalen Zahl ist auch wieder irrational. Die Höhe ist also immer irrational, es sei denn a ist irrational. Nur dann - bei "passenden" irrationalen a - hätte man eine Chance auf eine rationale Höhe. Wie man's aber auch dreht: Irgendeiner von beiden ist immer irrational in einem gleichseitigen Dreieck.

Der Thread war damit aber nicht zuende, sondern irgendwie kam er auf die Irrationalität von Wurzelausdrücken. Das wurde dann auf Ganzzahlen beschränkt und so weit verfeinert, dass es in einer Funktion gipfelte, die feststellen kann, ob Quadratwurzeln aus Ganzzahlen irrational sind oder nicht. Real (also programmtechnisch) stellt das Ding lediglich fest, ob das Ergebnis des Radizierens einer Ganzzahl wieder eine Ganzzahl ergibt oder nicht (wenn nicht --> irrational, okay).

Und da wunderst du dich, wenn ich frage, was das alles mit der eigentlichen Fragestellung zu tun hat? Also mit der Frage, die prinzipiell sogar schon lange vorher beantwortet war (oder hätte sein müssen). :wink:

Ich gebe zu, ich habe diesen Zusammenhang weiterhin gesucht. Das dürfte auch "mein Problem" mit diesem Thread ausgemacht haben. :)

Cöster 16. Mär 2007 20:19

Re: Prüfen ob Zahl irrational ist
 
Zitat:

Zitat von IngoD7
Zitat:

Zitat von Cöster
Die Zahl müsste nur in einem anderen Format gespeichert sein, z.B. so:
Code:
2^23*0,9375*Sqrt(44)

Ich sehe hier nicht eine Zahl. Ich sehe hier eine Formel mit 4 Zahlen.

Dann siehst du wahrscheinlich bei jedem reellen Typen keine Zahl. Die 1000000 wird in einem Extended z.B. so dargestellt (hier ins Dezimalsystem umgeschrieben):
Code:
(-1)^0 * 2^(16402 - 16383) * 1.9073486328125

Zitat:

Zitat von IngoD7
Es wurde Primfaktorisierung ins Spiel gebracht etc. pp. Wozu?

Dadurch wurde die Unmöglichkeit eines solchen Dreiecks auf einer allgemeingültigen Ebene bewiesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 Uhr.

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