Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 11, 2025 04:04

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Jul 05, 2009 17:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 19, 2007 21:36
Beiträge: 46
Hi,

ich habe ein Problem und fühle mich damit gerade ein wenig überfordert :)

Ich habe in meinem aktuellen Projekt eine Stelle, an der vier Schleifen ineinander geschachtelt sind. Die beiden äußeren sind for-schleifen die inneren zwei while-schleifen.

Diese konstellation scheint sich irgendwie abnormal zu verhalten. Ich bekomme einfach nicht das gewünschte Ergebnis, obwohl ich keinen Fehler feststellen kann.

Jetz zu meiner Frage: Ist es ein Problem, wenn man vier Schleifen ineinander packt oder sollte das Delphi eigentlich schaffen?

mfg Strecker


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 05, 2009 18:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 19, 2007 21:36
Beiträge: 46
verdammt, zu schnell gepostet. der fehler lag doch bei mir :oops:

aber für alle die es wissen wollen: vier schleifen ineinander sind kein problem :)

entschuldigt die störung


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 05, 2009 18:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Die Anzahl der möglichen ineinander verschachtelten Schleifen ist theoretisch unendlich. Der Fehler wird leider woanders liegen.

LG Ziz

Edit: Oh, man sollte einen Thread nicht ne halbe Stunde "rumliegen" lassen eh man antwortet... :oops:

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 06, 2009 09:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich kann Ziz nur zustimmen. Die Anzahl der Schleifen ist lediglich durch den Haupspeicher begrenzt. Also wenn du keinen Platz für Schleifenvariablen mehr hast.

Allerdings eine kleine Anmerkung. 4 direkt ineinander verschachtelte Schleifen habe ich bisher noch nie gebraucht. Weil was du nicht vergessen darfst. Der letzendliche Schleifenkern wird sehr sehr häufig aufgerufen. Was bei ungünstigen Konstelationen ein ziemlich krasses Ausmaß annehmen kann. Ich für meinen Teil bevorzuge eher flachere Strukturen. Ob das in deinem Fall möglich wäre kann ich natürlich nicht sagen. Nur solltest du überlegen ob diese Struktur Risiken birgt und wenn ja ob es nicht vielleicht einfacher geht. Also mit anderen Worten. Wenn du das machst solltest du dir darüber bewusst sein was da passiert/passieren kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 06, 2009 10:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Um Lossy Ex' Darstellungen näher zu erläutern:
Eine Schleife z.B. von 0 bis 99 sind nur 100 Zyklen - klar.
Aber vier solche Schleifen ineinander sind dann 100 hoch 4 Zyklen, also 100.000.000 Zyklen und das KANN dauern, wenn du ne Menge innerhalb der innerste Schleife machst. ;-)

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 06, 2009 10:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Allerdings eine kleine Anmerkung. 4 direkt ineinander verschachtelte Schleifen habe ich bisher noch nie gebraucht

Also eine vierfach Schleife kann durchaus Sinn machen. Beispiel wäre z.B. ein Terrain welches in Blöcke eingeteilt ist. Die beiden äußeren Schleifen iterieren über diese Blöcke. Die beiden inneren Schleifen iterieren über jeweils einen Block, wo dann die Normalen berechnet werden, etc.

Zitat:
Ich für meinen Teil bevorzuge eher flachere Strukturen.

Ja, das sollte man auch. Insbesondere break und continue können dabei helfen die Strukturen flach uns lesbar zu halten und unnötige if-Verschachtelungen zu vermeiden. Leider wird den Leuten immer eingetrichtert das Jumps evil wären...dabei können die, richtig eingesetzt, die Lesbarkeit extrem erhöhen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 06, 2009 10:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Coolcat hat geschrieben:
Also eine vierfach Schleife kann durchaus Sinn machen. Beispiel wäre z.B. ein Terrain welches in Blöcke eingeteilt ist. Die beiden äußeren Schleifen iterieren über diese Blöcke. Die beiden inneren Schleifen iterieren über jeweils einen Block, wo dann die Normalen berechnet werden, etc.

Hab ja nicht, dass es keinen Sinn macht. Nur wenn man so etwas benutzt dann muss man sich bewusst sein was man da tut und wo gefahren lauern können.

Coolcat hat geschrieben:
Ja, das sollte man auch. Insbesondere break und continue können dabei helfen die Strukturen flach uns lesbar zu halten und unnötige if-Verschachtelungen zu vermeiden. Leider wird den Leuten immer eingetrichtert das Jumps evil wären...dabei können die, richtig eingesetzt, die Lesbarkeit extrem erhöhen.

Ich denke du verwechselst da was. Break und Continue sind fundamental wichtig. Break benutze ich sogar wirklich häufig. Continue prinzipbedingt seltener, weil man es seltener braucht. Labels und Gotos sind böse. Damit kann man sehr schnell dafür sorgen, dass der Code unleserlich wird. Und die Sachen kann man fast immer mit normalen Schleifen/Bedingungen erledigen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 08, 2009 02:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 19, 2007 21:36
Beiträge: 46
Zitat:
Also eine vierfach Schleife kann durchaus Sinn machen. Beispiel wäre z.B. ein Terrain welches in Blöcke eingeteilt ist. Die beiden äußeren Schleifen iterieren über diese Blöcke. Die beiden inneren Schleifen iterieren über jeweils einen Block, wo dann die Normalen berechnet werden, etc.


Genau dafür verwende ich es. Mein Terrain wird in 16x16 Blöcke eingeteilt. Für jeden Block wird geprüft, ob er im Frustum liegt und dann evtl. gerendert. Funktioniert mittlerweile wunderbar und hat mir einen enormen Performancegewinn gebracht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 08, 2009 06:40 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
im Fall von terrain würde ich eher auf einen oct-/quadtree zurückgreifen. Diese stellen dir eine Funktion zurverfügen, die nur die Felder zeichnet, die im Frustum liegen. Dadurch, dass es eine Baumstruktur ist, erspart man sich viele Tests, was sehr performant ist. Nimmt man einen Quadtree als Beispiel, so hängen am ersten Node 4 gleichgroße Bereiche des Terrains. Nach dem ersten Test kann man evtl schon 3/4 des terrains vernachlässigen und prüft nur noch innerhalb des letzten Virtels usw. . Lohnen tut sich das natürlich erst ab größeren Szenen, die nahezu statisch sind, aber man kann ja trotzdem mal reinschauen.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 08, 2009 23:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 19, 2007 21:36
Beiträge: 46
das hatte ich auch schon vor, mich mal mit octtrees auseinanderzusetzen, bin bisher nur noch nicht dazu gekommen. Klingt aber vielversprechend^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 20, 2009 06:59 
Offline
DGL Member

Registriert: Mo Jun 30, 2008 12:47
Beiträge: 69
Nur mal aus Spaß:

Code:
  1.  
  2. function CreatePascalLoops( N: Cardinal ): String;
  3. const
  4.   Container: String = (
  5.     'procedure TestLoop(); {%d Loops}'#13#10 +
  6.     'var'#13#10 +
  7.     '%s: Integer'#13#10 +                    
  8.     'begin'#13#10 +
  9.     '%s'#13#10 +                                
  10.     'end;'
  11.   );
  12. var
  13.   i: Integer;
  14.   V, C: String;
  15. begin
  16.   V := '  x,'#13#10'  ';
  17.   for i := 0 to N - 1 do
  18.   begin
  19.     V := V + 'i' + inttostr(i+1);
  20.     if not ( i = N - 1 ) then
  21.     begin
  22.       V := V + ', ';
  23.       if (i+1) mod 2 = 0 then
  24.         V := V + #13#10'  ';
  25.     end;
  26.     C := C + '  for i' + inttostr(i+1) + ' := 0 to 0 do'#13#10;
  27.   end;
  28.   C := C + '    x := x + 1';
  29.   Result := Format( Container, [N, V, C] );
  30. end;
  31.  


Führe die Function mit dem Parameter 65536 aus und versuche die neu erstellte Routine
in Delphi einzufügen und auszuführen --> beim Einfügen kratzt bei mir Delphi (Turbo Delphi Explorer) ab :D

MfG

_________________
...GOD is wearing black...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 20, 2009 07:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich wusste es: Früh oder später probiert das einer aus... ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]