Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

21

21.02.2013, 23:26

Das Problem mit dieser Interpretation ist aber eben, dass "zählen" nicht voraussetzt, dass die Anzahl der Elemente vorher bekannt ist, im Gegenteil, das geht gewissermaßen sogar gegen die eigentliche Bedeutung des Wortes ;). Wenn du z.B. durch eine verlinkte Liste iterieren willst, dann weißt du davor auch noch nicht, wie oft die Schleife durchlaufen werden wird und trotzdem entspricht das imo genau der Semantik einer for-Schleife...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (21.02.2013, 23:32)


H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

22

21.02.2013, 23:35

Ok, da habe ich mich eventuell blöde ausgedrückt. Ich kann nichts Zählen was nicht eine Gewisse Größe hat. So wie ich das meine, war die Aussage auf „Bekannt“ darauf bezogen das sich die Anzahl der Listenelement nicht in dem Schleifen block ändert. Und somit „Bekannt ist“. Sprich man kann sie zählen. Sein Geld in der Tasche könnte man ja auch nicht zählen wenn es sich ständig dabei ändern würde. Für andere Fälle wären ja Bedingungen wichtig, sprich Bedingungsschleifen.

Edit:
Also ich hab jetzt noch mal etwas überlegt wie ich meinen Gedanken Formulieren kann…
Eine While-Schleife kann totale Korrektheit gelten, für eine For-Schleife „muss“ totale Korrektheit gelten. Sprich eine While-Schleife kann terminieren, eine For-Schleife muss terminieren. Diese Bedingung kann nur sicher erfüllt werden wenn der Zähler nicht im Schleifenblock verändert wird.
Ist jetzt nicht ganz richtig ausgedrückt, aber wenn ich an Hoare denke bekomm ich Kopfschmerzen ;)
:love: := Go;

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »H5::« (22.02.2013, 02:02)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

23

22.02.2013, 06:47

Wenn du z.B. durch eine verlinkte Liste iterieren willst, dann weißt du davor auch noch nicht, wie oft die Schleife durchlaufen werden wird und trotzdem entspricht das imo genau der Semantik einer for-Schleife...

Genau genommen entspricht das eigentlich der Semantik einer foreach-Schleife ;)

Ok, da habe ich mich eventuell blöde ausgedrückt. Ich kann nichts Zählen was nicht eine Gewisse Größe hat. So wie ich das meine, war die Aussage auf „Bekannt“ darauf bezogen das sich die Anzahl der Listenelement nicht in dem Schleifen block ändert. Und somit „Bekannt ist“. Sprich man kann sie zählen. Sein Geld in der Tasche könnte man ja auch nicht zählen wenn es sich ständig dabei ändern würde.

Das stimmt nicht. Natürlich kann ich mein Geld zählen und dabei alle 1-Cent-Stücke aussortieren. Genau das kann eine for-Schleife auch und es ist sogar oft sehr wichtig, dass sie dies kann, sonst bräuchte man nämlich 2 Iterationen über die Liste, wo man erst alle 1-Cent Münzen in eine andere Liste sammelt und danach alle aus dem Portmonee wirft. Stattdessen kann man in C++ mit einer For-Schleife sehr gut eine Liste komplett durchwandern und sie mittendrin einfach ändern. Das kotzt mich bei Java z.B. immer wieder an, dass das nicht geht. Schlechtes Beispiel, sorry.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

24

22.02.2013, 07:18

Es gibt diverse Sprachen, in denen die For-Schleife wirklich nur als Zählschleife und ggf. noch zum iterieren genutzt werden kann. In den meisten anderen mir bekannten Sprachen (C, C++, Java, C#, JavaScript und evtl. auch Perl) hat man eine wesentlich höhere Freiheit darin, was man mit dieser machen kann, weil die Syntax aber auch eine ganz andere ist.
In Python wiederum gibt es nur eine ForEach-Schleife (mit for als Schlüsselwort). Möchte man nun eine Schleife n-Mal ausführen, muss man for i in range(n): verwenden, wobei n die Anzahl der Durchläufe darstellt. (Mit range kann man noch ein wenig mehr machen, aber das nur am Rande erwähnt.)


Das kotzt mich bei Java z.B. immer wieder an, dass das nicht geht.

Bei der ForEach-Schleife geht das nicht, aber ja, das geht nicht ganz so angenehm. Allerdings ist das meines Wissens auch in C# so und über andere Sprachen kann ich gerade nichts mit Sicherheit sagen.
Wenn ich in Java mehrere Elemente aus eine Liste entfernen will, gehe ich die Liste rückwärts durch, lösche die zu löschenden Elemente und könnte auch noch weitere Aktionen durchführen. Aber das ist auch nicht das gleiche, wie eine ForEach-Schleife...
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

25

22.02.2013, 10:21

Wenn du z.B. durch eine verlinkte Liste iterieren willst, dann weißt du davor auch noch nicht, wie oft die Schleife durchlaufen werden wird und trotzdem entspricht das imo genau der Semantik einer for-Schleife...

Genau genommen entspricht das eigentlich der Semantik einer foreach-Schleife ;)

Nur wenn man über alle Elemente der Liste iteriert... ;)

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

26

22.02.2013, 10:30

Ich glaube einfach wir reden nur etwas an einander vorbei. Bitte verstehe meine Aussage nicht, man darf sie so wie du beschrieben hast nicht benutzen. Wie du schon beschreibst kann es auch von der Effektivität her durchaus mal Sinn machen denke ich.

Es geht um die Beweisführung, dass eine Aussage vor und nach der Schleife Korrekt ist und sie terminiert! Was, soweit ich weiß die Idee hinter der For-Schleife ist. Genau genommen ist deine Aussage nur „Partiell Korrekt“, beweise das es wirklich >Alle< 1 Cent Stücke sind und! die schleife terminiert, was die Bedingung der totalen Korrektheit eines Algorithmus ist.
Ich weiß nicht ob es effektiver ist nicht 2 Iterationen zu machen oder in der For-Schleife den Zahler und/oder die Liste zu ändern und sicher zu gehen, dass die schleife auch wirklich Terminiert und nicht in bestimmten Situationen endlos läuft.

Ich wollte nur Ausdrücken was die eigentliche Idee hinter der For-Schleife ist, nicht das man sie nur so benutzen soll!
:love: := Go;

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

27

22.02.2013, 10:42

Bitte was? Wenn ich alle Münzen in meinem Portmonee zählen und die 1-Cent-Münzen raussortieren will, dann terminiert das, solange die Anzahl der Münzen endlich ist und dabei ist es völlig egal, was ich mit den 1-Cent-Münzen danach veranstalte.

Und nein, erst über alle Elemente von A zu iterieren, eine neue Liste B zu erstellen und dann über diese Liste B zu iterieren, um deren Elemente aus A zu entfernen, ist ganz offensichtlich nicht effektiver. Solange ich die Reihenfolge der Elemente nicht ändere und immer die Iteration der Reihe nach fortsetze ohne einen Schritt zurück zu machen, muss sie terminieren, wenn die Anzahl der Elemente endlich ist.

Was soll der ganze Unfug jetzt eigentlich? Schleifen sind äquivalent. Das ist eben so. Man *kann* damit verschiedene Semantiken zum Ausdruck bringen und manche Sprachen erzwingen das sogar. Es gilt dennoch nicht generell und lässt sich für verschiedene Zwecke verwenden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Mastermind

unregistriert

28

22.02.2013, 10:43

Die Antwort auf die ursprüngliche Frage ist eigentlich dieser Thread: Verschachtelte Schleifen

(Zufälle gibts)

Falls es nicht offensichtlich sein sollte, die Moral der Geschichte ist: Wer anfängt zu tricksen macht Fehler.

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

29

22.02.2013, 13:31

Meine Aussagen bezogen sich auf den unten genannten Link und, dass meiner Meinung nach! Dies die Grundlage hinter der Idee einer For-Schleife ist, und sie deswegen ein Spezialfall der Whil-Schleife darstellt. Als solche Implementiert wird, aber zusätzliche Semantik mit sich führt. Für Unsinn halte ich es nicht.

Ob das Beispiel mit den Münzen jetzt daneben war von mir, sei mal dahin gestellt. Ich interpretiere Die Aussage als solche, dass wenn ich die Münzen zähle, sollte Das Ergebnis der Tatsache am Ende entsprechen ({P} S {Q}), was nur in besonderen Situationen wahr ist wenn ich die Elementanzahl/ den Zähler verändere. Übrigens ist die Veränderung der Reihenfolge indem Fall nicht widersprüchlich.

Und nochmal mir ist es total egal wie man die Schleife verwendet, ich wollte nur auf die Frage Antworten warum sie so aufgebaut ist wie sie es ist. Ob es jetzt Sinnvoll ist ob man sie nur so benutzt ist ja was ganz anderes und das sollte jeder für sich entscheiden. Es spiegelt alles auch nur mein Verständnis wieder, und das muss nicht richtig sein.

Totale Korrektheit von While-Schleifen
:love: := Go;

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »H5::« (22.02.2013, 14:27)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

30

22.02.2013, 16:25

Ja, ja, mach mal. In der Praxis beweist übrigens niemand die Korrektheit seiner Schleifen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige