![]() |
Wie lang dürfen verschachtelte FOR-Schleifen sein?
Hallo ich bin grad am Programmieren mit Delphi 6 und mein Programm hängt sich ständig auf.
Das liegt wohl an den FOR-Schleifen. denn wenn ich die Werte runtersetze funktioniert es. Jetzt würde mich interessieren, wie lang soe eine verschachtelung sein darf. (4 ineinanderliegende Schleifen von 1-100 gehen nicht (3 übrigens auch nicht)) [edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit] |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Das sollte eigentlich schon funtkionieren, was machst du denn in dieser Schleife ?
|
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Ähh.. könnte es nicht auch einfach nur daran liegen, dass es halt etwas länger läuft? Immerhin sind 100 * 100 * 100 * 100 bzw. 100 * 100 * 100 'ne Menge Durchläufe. Was machst du denn in den Schleifen?
[Edit1]Ja, genau.. :mrgreen: [/Edit] [Edit2]Hey, noch einer... :mrgreen: [/Edit] |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Es ist die Frage, ob sie nicht gehen oder ob es so aussieht das sie nicht gehen. ;-)
Überlege was es bedeutet 4 verschachelte Schleifen mit je 100 Durchläufe zu haben das bedeutet das der innerste Schleifenkörper 100000000 Mal augeführt wird! |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
ja das kann leicht sein das das etwas länger dauert
schon mal an
Delphi-Quellcode:
damit wird die GUI neugezeichnet und auch andere Aktion (z.b. Drück auf Abbrechen Button) werden verarbeitet
Application.ProcessMessages;
|
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
ich teste ne gleichung mit verschiedenen Werten. es passiert im hintergrund quasi nix dolles. nur eine rechnung am ende der schleifen, dann rennen die einen weiter und die gleiche rechnung nochmal.
wenn die Schleifen Werte von 1-5 oder so haben funktioniert das auch ohne probleme, ansonsten gibt das prog keine Rückmeldung und delphi ist nach dem beenden des Progs auch in den ewigen Jagdgründen //EDIT: es gibt kein Abbrechen Button. Das is ein ganz einfaches Prog nur, das kann auch seine Nacht oder so laufen, nur sollte es doch ne Rückmeldung geben oder nich? |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Also 3 dürften eigentlich kein Problem sein. 100*100*100=1000000
1 Mio. Schleifendurchgänge dürften kein allzugroßes Problem für einen heutigen 2 GHz Prozessor sein. |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Zitat:
Was für eine Gleichung? Und wie testest du sie? |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
a^n+b^n=c^n
kumpel hat gesagt ich soll mal gucken ob ich Natürliche Werte finde für a,b,c wenn n>2. Ich denke es gibt wohl keine Lösung, aber ich wollte es halt mal probieren, wozu hat man schließlich nen Rechner?^^
Code:
//Edit: hier der Quelltext
procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,l:integer; begin for i:=3 to 100 do begin n:=i; for j:=1 to 100 do begin a:=j; for k:=1 to 100 do begin b:=k; for l:=1 to 100 do begin c:=l; Ergebnis1:=(exp (n*ln(a))+(exp (n*ln(b)))); Ergebnis2:=exp (n*ln(c)); Endergebnis:=Ergebnis2-Ergebnis1; if Endergebnis=0 then begin Edit1.text:=inttostr(a); Edit2.text:=inttostr(b); Edit3.text:=inttostr(c); Edit4.text:=inttostr(n); end else begin Edit1.text:='a'; Edit2.text:='b'; Edit3.text:='c'; Edit4.text:='n'; end; end; end; end; end; showmessage('Fertig!'); end; |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Es gibt keine Lösung, hat Fermat seiner Meinung nach mal bewiesen, der Beweis wurde aber nie so einfach gefunden, wie er es behauptet hat.
Erst 1993 (publiziert 1995 mit einem Beitrag von Richard Taylor) gelang es dem britischen Mathematiker Andrew Wiles, die Fermatsche Vermutung zu beweisen. Daher wird diese auch als Satz von Fermat–Wiles oder Satz von Wiles–Taylor bezeichnet.( ![]() |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
es geht nir auch weniger um das Beweisen, sondern darum das ich es ausprobieren will und es meinem Kumpel dann sagen will, dass ich wirklich alles probiert hab^^
könnte das Problem auch einfach damit zusamenhängen, dass er zwar anzeigt "keine Rückmeldung" das Programm aber trotzalledem noch arbeitet? denn ich hab ne Prozessorauslastung von 100% (is ja zu erwarten, wenn es richtig läuft) Was heißt in diesem Zusammenhang eigentlich "keine Rückmeldung"? |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Das dein Programm keine Messages an Windows mehr sendet.
Delphi-Quellcode:
in der Schleife, sollte da abhilfe schaffen.
Application.ProcessMessages;
gruss |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Zitat:
Ein
Delphi-Quellcode:
in deiner innersten Schleife sollte dir helfen.
Application.ProcessMessages;
Und wenn es dich beruhigt: Dein Programm rechnet. Es dauert halt nur. Bau doch einfach mal eine ProgressBar ein... [Edit]Da war kein Kasten... Echt nicht![/Edit] |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Zitat:
Zitat:
...:cat:... |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Zitat:
Zitat:
...:cat:... |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Vielen Dank!
Funktioniert! //Edit: Funktioniert fast: ich bekomme 100erte von Ergebnissen, die darauf zurückzuführen sind, das Delphi Augenscheinlich rundet. Ab wieviel Stellen rundet Delphi denn und kann man das irgendwo einstellen? |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Zeig doch mal solche Ergebnisse. Bei Integern sollten Rundungsfehler eigentlich nicht vorkommen. Für das Potenzieren kannst du auch Power benutzen, das dürfte schneller sein, als erst einen Log und dann ein Exp zu berechnen.
|
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Ich hab das jetzt mal geändert auf Power.
ich denke die Rundungsfehler kamen durch das logarithmiren zustande mal schaun ich mach grad nen Testlauf. //EDIT: hilft auch nicht Ergebnisse sind: a=1 b=100 c=100 n=9,10,11... also im Prinzip alles wo a und c oder b und c gleich sind der andere Wert 1 und n>7 |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Das Problem liegt hier eher in der Größe von Integer. Schau dir mal 100^9 mit dem Windowsrechner an und dann high(Integer);
|
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
das is ja das wass ich mein!
gibt es gar keine Möglichkeit die Variablen zu ändern? Der Windowsrechner kann ja schließlich auch mit ewighohen Exponenten rechenen |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Hallo,
die ganze Sache ist noch ein wenig komplizierter als bisher diskutiert, denn 100^100 ist eine Zahl mit 200 Nullen und diese Zahl läßt sich in den üblichen Zahlenformaten von Delphi nicht darstellen. Wenn man die numerische Gleichheit wirklich testen wollte, so reicht es nicht die ersten 10 oder 16 Stellen auf Gleichheit abzufragen. Daher kann man für eine solche numerische Prüfung auch Funktionen wie exp oder log nicht benutzen, denn sie können immer eine minimale Ungenauigkeit mitbringen. Also ganz wichtig: Alle Stellen müssen dargestellt werden und genau rechnen und das bedeutet, dass man nicht exp(n*ln(c)) schreiben kann, sondern man muss wirklich c n-mal mit sich multiplizieren (was in jedem Schleifendurchlauf - wenn es geschickt gemacht ist - einer Multiplikation mit c entspricht). Dies alles ist der Grund, warum es z.B. so schwierig ist bei großen Zahlen zu testen, ob sie Primzahlen sind und richtig schwierig wird es dann bei Monstern mit hunderttausend oder Millionen von Stellen. Es gibt aber Libraries, die solche Zahlen darstellen und mit ihnen rechnen können. |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Bei solchen Fragen wird immer wieder auf Hagen verwiesen.
![]() |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
ich hab eben auch schon drann gedacht, meinen alten algo rauszuholen den ich vor urzeiten mal für nen Taschenrechner benutzt habe (da kannte ich Power und exp (n*ln(x) noch nicht) da hab ich das mit ner schleife gemacht und hab x einfach n mal mit sich selbst multipliziert. ABER dann is mir aufgefallen das das ja genausowenig bringt, da ja nacher die Fehler entstehen also beim hohen rechnen. Oder teusch ich mich?
Ich brächte doch auf jeden fall sonne Komponente mit der ich ewig hohe Zahlen noch rechnen kann. //EDIT: ich schau mal in die DEC rein, mal schauen wie weit ich komm, aber bis hierhin schonmal danke! ihr seid ne große Hilfe! //EDIT2: So ich hab die DEC runtergeladen, schau da aber wie ein Schwein ins Uhrwerk! Was mus ich denn jetzt da machen um IInteger nutzen zu können? |
Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
Ich habe mal, hoffentlich an der richtigen Stelle, diesen Thread aufgeteilt und einen neuen Erzeugt.
![]() Diese hier mache ich mal zu. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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