Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie lang dürfen verschachtelte FOR-Schleifen sein? (https://www.delphipraxis.net/67926-wie-lang-duerfen-verschachtelte-schleifen-sein.html)

kleiner Unwissender 21. Apr 2006 22:47


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]

MrKnogge 21. Apr 2006 22:48

Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
 
Das sollte eigentlich schon funtkionieren, was machst du denn in dieser Schleife ?

Daniel G 21. Apr 2006 22:49

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]

mkinzler 21. Apr 2006 22:50

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!

gsh 21. Apr 2006 22:52

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:
Application.ProcessMessages;
damit wird die GUI neugezeichnet und auch andere Aktion (z.b. Drück auf Abbrechen Button) werden verarbeitet

kleiner Unwissender 21. Apr 2006 22:53

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?

3_of_8 21. Apr 2006 22:54

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.

Daniel G 21. Apr 2006 22:54

Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
 
Zitat:

Zitat von kleiner Unwissender
ich teste ne gleichung mit verschiedenen Werten.

*AusDerNaseZieh'*

Was für eine Gleichung? Und wie testest du sie?

kleiner Unwissender 21. Apr 2006 22:56

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:
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;
//Edit: hier der Quelltext

BenjaminH 21. Apr 2006 22:59

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.(Wikipedia)

kleiner Unwissender 21. Apr 2006 23:05

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"?

MrKnogge 21. Apr 2006 23:08

Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
 
Das dein Programm keine Messages an Windows mehr sendet.

Delphi-Quellcode:
Application.ProcessMessages;
in der Schleife, sollte da abhilfe schaffen.

gruss

Daniel G 21. Apr 2006 23:09

Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
 
Zitat:

Zitat von kleiner Unwissender
Was heißt in diesem Zusammenhang eigentlich "keine Rückmeldung"?

Das Programm reagiert nicht auf Benutzereingaben.

Ein

Delphi-Quellcode:
Application.ProcessMessages;
in deiner innersten Schleife sollte dir helfen.

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]

sakura 21. Apr 2006 23:09

Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
 
Zitat:

Zitat von kleiner Unwissender
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)

`Das Programm läuft noch, reagiert aber nicht auf Nachrichten oder Useraktionen.
Zitat:

Zitat von kleiner Unwissender
Was heißt in diesem Zusammenhang eigentlich "keine Rückmeldung"?

Das es keine Systemnachrichten verarbeitet. Entweder es ist "tot" oder, wie ín Deinem Falle, einfach zu beschäftigt ;)

...:cat:...

sakura 21. Apr 2006 23:11

Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
 
Zitat:

Zitat von MrKnogge
Das dein Programm keine Messages an Windows mehr sendet.

Muss es auch nicht, aber es sollte eingehende verarbeiten ;)
Zitat:

Zitat von MrKnogge
Delphi-Quellcode:
Application.ProcessMessages;
in der Schleife, sollte da abhilfe schaffen.

Aber nicht unbedingt in die innerste Schleife, das es auch sehr viel Performancenachteile mit sich bringt, generell aber es das die einfachste Lösung und reicht für den Fall auch aus.

...:cat:...

kleiner Unwissender 21. Apr 2006 23:11

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?

Nikolas 21. Apr 2006 23:41

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.

kleiner Unwissender 21. Apr 2006 23:50

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

Nikolas 21. Apr 2006 23:59

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);

kleiner Unwissender 22. Apr 2006 00:03

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

Peter Mössinger 22. Apr 2006 00:06

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.

Nikolas 22. Apr 2006 00:08

Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
 
Bei solchen Fragen wird immer wieder auf Hagen verwiesen. Luckie bietet eine DownloadmöglichkeitVon Hagens DEC an. (Unten in der Signatur) Darin gibt es den Datentyp IInteger oder so, der meines Wissens nach auf Strings basiert und beliebig große Integer bearbeiten kann.

kleiner Unwissender 22. Apr 2006 00:14

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?

Sharky 25. Apr 2006 13:45

Re: Wie lang dürfen verschachtelte FOR-Scleifen sein?
 
Ich habe mal, hoffentlich an der richtigen Stelle, diesen Thread aufgeteilt und einen neuen Erzeugt.

Hier geht es zu dem Thread


Diese hier mache ich mal zu.


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