Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hilfe beim Programmieren von einer Gleichung (https://www.delphipraxis.net/57913-hilfe-beim-programmieren-von-einer-gleichung.html)

eisbar 28. Nov 2005 17:06


Hilfe beim Programmieren von einer Gleichung
 
Hallo hat jemand Lust mir zu helfen für a^n+b^n+c^n=d^n ein Programm zu schreiben welches für ein n Alle ganzzahligen möglichkeiten ausgibt bzw die Lösung für die 5. Variable ausgibt, wenn man 4 Variable hat. Wäre super wenn sich da jemand findet. :coder2:

Nikolas 28. Nov 2005 17:09

Re: Hilfe beim Programmieren von einer Gleichung
 
Ich wette, du wirst hier viele finden, die dir bei einem konkreten Problem helfen werden, nur deine Anfrage klingt fast schon so, als sollte dir jemand alles schreiben...

ichbins 28. Nov 2005 17:18

Re: Hilfe beim Programmieren von einer Gleichung
 
Wie willst du das machen? per brute-forcing?

Delphi-Quellcode:
uses
  math;

[...]

var
  a:integer=3;
  b:integer=4;
  c:integer=5;
  d:integer=18;
  i:integer;
begin
  for i:=-1000 to 1000 do
    if power(a,i)+power(b,i)+power(c,i)=power(d,i) then
      showmessage('Lösung für n: '+inttostr(i));
  showmessage('Alle Lösungen zwischen -1000 und 1000 probiert.');
end;

eisbar 28. Nov 2005 17:31

Hilfe beim Programmieren von einer Gleichung
 
Schonmal danke für deine Hilfe, aber wie arbeitet man mit showmessage? Habe das noch nie benutzt.

ichbins 28. Nov 2005 17:38

Re: Hilfe beim Programmieren von einer Gleichung
 
showmessage zeigt eine Meldung an.

Delphi-Quellcode:
  showmessage('Hallo. Ich bin ein sinnloser Text');
zeigt diese Meldung an:
http://www.michaelensslin.kilu.de/messagedlg.jpg

Nikolas 28. Nov 2005 17:57

Re: Hilfe beim Programmieren von einer Gleichung
 
Bist du sicher, dass es da überhaupt Lösungen gibt? Soviel ich weiss gibts für Ausdrücke wie a^x+b^x=c^x für x>3 keine Lösungen mehr in N. (Ich glaub Fermat hat das mal behauptet). Wies bei 4 Variablen aussieht, weiss ich nicht, nur kann ich mir gut vorstellen, dass es da ähnlich aussieht.

eisbar 28. Nov 2005 19:21

Re: Hilfe beim Programmieren von einer Gleichung
 
Ich weiß das es dort Lösungen gibt da ich mich mit Fermat momentan beschäftige und auch mit der obrigen Gleichung und ich schreibe ein Programm um dies zu veranschaulichen.

Nikolas 28. Nov 2005 19:25

Re: Hilfe beim Programmieren von einer Gleichung
 
Was soll denn dein Programm können und wie willst du das Problem lösen? Numerik wird dir bei Lösungen aus N nicht groß weiterhelfen und Brute-Force ist sicher auch nicht so schön.

Kroko1999 29. Nov 2005 06:28

Re: Hilfe beim Programmieren von einer Gleichung
 
etwa so :?:
Delphi-Quellcode:
var
  A,B,C,D,N: Integer;
  A1,B1,C1,D1: Extended;

begin
  for N := 2 to 9 do
    for A := 1 to 100 do
    begin
      A1 := Power (A,N);
      for B := 1 to 100 do
      begin
        B1 := Power (B,N);
        for C := 1 to 100 do
        begin
          C1 := Power (C,N);
          for D := 1 to 100 do
          begin
            D1 := Power (D,N);
            if A1+B1+C1=D1 then
              begin
                Memo1.Lines.Add ('A='+IntToStr (A)+' , B='+IntToStr(B)+' , C='+IntToStr(C)+' , D='+IntToStr(D)+' N='+IntTostr(N));
              end;
          end;

        end;
      end;
    end;
end;

eisbar 29. Nov 2005 19:29

Re: Hilfe beim Programmieren von einer Gleichung
 
Hey danke für deine Hilfe das ist eine super Idee dies so zu schreiben.

Binärbaum 30. Nov 2005 15:42

Re: Hilfe beim Programmieren von einer Gleichung
 
Zitat:

Zitat von eisbar
Hey danke für deine Hilfe das ist eine super Idee dies so zu schreiben.

Naja, es funktioniert immerhin. Allerdings ist es eben der Brute-Force-Ansatz, bei dem alle Möglichkeiten in einem gewissen Bereich getestet werden, und damit wird das Programm wohl auch lange brauchen. Außerdem wolltest du doch alle ganzzahligen Möglichkeiten ermitteln, und der Code liefert dir nur die Möglichkeiten, wo die Zahlen a,b,c,d im Bereich von 1 bis 100 liegen.
Allerdings ist die Menge der natürlichen Zahlen nicht beschränkt, sodass man in endlicher Zeit nicht alle Möglichkeiten testen kann. Selbst wenn man "nur" alle mit einem vorzeichenlosen 32-Bit-Integer darstellbaren Zahlen überprüft, würden die Indizes der For-Schleifen von 1 bis 2^32-1 (ca. 4 Milliarden) laufen. Bei vier verschachtelten Schleifen macht das immerhin 2^32*2^32*2^32*2^32=2^128 Durchläufe (also rund 3,4*10^38 Durchläufe). Selbst wenn dein PC pro Sekunde eine Milliarde Schleifendurchläfe schaffen würde (was bei dem heutigen Stand der Technik noch etwas unwahrscheinlich ist), würde das Programm ca. 10^22 Jahre laufen, um alle diese Möglichkeiten zu testen. Und das nur für ein einziges n. Für jeden weiteren Exponenten beginnt die Sache von vorn. ;)
Aber sicherlich kommt schon vor dem Ende des Programms ein Bereichsüberlauf, weil die Summe aus den vier Integern schon vorher den maximal darstellbaren Wert überschreitet.

Was ich damit sagen will, ist folgendes: der Code mag zwar gut funktionieren, solange man nur in einen kleinen Abschnitt der natürlichen Zahlen nach Lösungen sucht und der Exponent n nicht zu groß ist. Wenn man aber "alle" Lösungen, d.h. in dem Fall alle mit dem 32-Bit-Integer-Zahlenformat darstellbaren Lösungen, sucht muss man sich etwas besseres einfallen lassen.

MfG
Binärbaum

shmia 30. Nov 2005 16:20

Re: Hilfe beim Programmieren von einer Gleichung
 
Zitat:

Zitat von eisbar
... für a^n+b^n+c^n=d^n ein Programm zu schreiben welches für ein n Alle ganzzahligen möglichkeiten ausgibt bzw die Lösung für die 5. Variable ausgibt, wenn man 4 Variable hat.

Als erstes muss man die Formel umschreiben:
a^n+b^n+c^n-d^n = 0
Dann benötigt man nur noch ein Programm zur Nullstellensuche.
Ein einfaches Verfahren ist z.B. Regula Falsi oder das Newton-Verfahren.
Da man mit diesen Verfahren evtl. nicht alle Nullstellen findet, sollte man sich obige Funktion einfach als Funktionsgraph zeichnen lassen.
Das menschliche Auge sieht die Nullstellen sehr leicht und kann helfen Startwerte für die Nullstellensuche zu finden.
ganzzahligen möglichkeiten: gefundene Nullstellen runden und prüfweise in die orginal Formel einsetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05: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