Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Schleifen-for-while

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.07.2010, 19:52 Uhr
TechnoBrain



Hallo leute, bin neu im Forum also bitte nicht rumnörgeln wenn ich irgendwas falsch mache oder verstanden habe... .
Ich verstehe einfach nicht was Schleifen sind und was sie für einen Sinn haben.
Ich weiss das es Endlosschleifen gibt was sie bewirken aber leider nicht.
Könnt ihr mir all das mal erklären?
Ich wäre euch sehr Dankbar
lG TechnoBrain
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.07.2010, 21:07 Uhr
0xdeadbeef
Gott
(Operator)


Endlosschleifen sind halt endlose Schleifen. Sie laufen ewig - Beispiel:

C++:
while(true) {
  do_something();
}


Meistens ist sowas ein Programmierfehler, es kann aber vorkommen, dass eine Aufgabe bis in alle Ewigkeit erfüllt werden soll (wobei die relevante Definition von "Ewigkeit" die Laufzeit des Programms ist). Beispielsweise könnte man init, welches nach dem Systemstart auf UNIX-Systemen eigentlich nicht viel mehr macht, als Prozessleichen einzusammeln, mit einem Thread der Form

C++:
while(true) {
  wait(NULL);
}


implementieren (natürlich stark vereinfacht).

Ansonsten wird der Begriff manchmal auch für Schleifen verwendet, die nicht wirklich endlos sind, deren Abbruchsbedingung aber nie eintritt. Hier wird dann an anderer Stelle aus der Schleife ausgetreten:

C++:
while(true) {
  int err = do_something();

  if(err) {
    break;
  }

  do_something_else();
}


Ich würde das nicht als Endlosschleife bezeichnen, aber die Meinungen darüber gehen auseinander. Ich halte solche Konstrukte auch für ziemlich schlechten Stil, aber darüber gehen die Meinungen auch auseinander.

Oh, und natürlich: Wenn etwas in der Schleife Exceptions schmeißt, kann sie dadurch auch beendet werden.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 18.07.2010 um 21:09 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.07.2010, 01:14 Uhr
Hans
Library Walker
(Operator)


Hi,

nach diesen Ausführungen über Endlosschleifen, noch mal zum einfacheren Teil:
Schleifen sind einfach ein Sprachkonstrukt für Widerholungen. Nehmen wir an, Du willst ein paar 100 Datensätze nach irgendwas durchsuchen. Dann besteht die uneffektive Lösung darin, den Code zum Durchsuchen für jeden Datensatz extra zu schreiben. Bei genau 100 Datensätzen wäre es 100 mal der selbe Code. Wenn es mehr Datensätze sind entsprechend noch mal der Code, eben für jeden Datensatz. - Und wenn Du jetzt fragst, ob das nicht auch einfacher geht, dann heisst die Antwort: Ja, mit Schleifen. Dann schreibst Du den Code genau einmal, und wiederholst ihn solange, bis Du gefunden hast, was Du suchst. Dann hörst Du auf. Diese Konstruktion nennt man Schleife. Das ganze lässt sich auch für andere Dinge verwenden, beispielsweise um Speicher mit bestimmten Werten zu belegen, sehr beliebt ist dabei der Wert Null. Ein Beispiel, hier in C:

C++:
#include <stdio.h>
#include <stdlib.h>

int main()
{
  int i,         // Schleifenzähler
      data[100]; /* Array mit 100 Elementen, in diesem Fall ein Speicher-
                    bereich für 100 ganze Zahlen */


  for (i=0; i<100; i++)     // Schleife, die 100 mal durchläuft und dabei
      data[i] = 0;          // alle Elemente auf 0 setzt

  for (i=0; i<100; i++)     // Schleife, die 100 mal durchläuft und dabei
      data[i] = rand();     // jedem Element einen zufälligen Wert zuweist

  for (i=1; i<=100; i++)     // Schleife, die 100 mal durchläuft und dabei
    { printf("%d, ", data[i] ); // den Wert ausgibt
      if ((i%10)==0)  // Wenn i ohne Rest durch 10 teilbar ist, d.h. wenn
                      // 10 Zahlen ausgegeben wurden, dann zusätzlich
         printf ("\n");  // einen Zeilenumbruch ausgeben
    } // Schleifenende

  return 0;  // "Programm erfolgreich abgeschlossen" ans Betriebssystem melden
} // main



Und noch mal das gleiche in C++

C++:
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
  int i,         // Schleifenzähler
      data[100]; /* Array mit 100 Elementen, in diesem Fall ein Speicher-
                    bereich für 100 ganze Zahlen */


  for (i=0; i<100; i++)     // Schleife, die 100 mal durchläuft und dabei
      data[i] = 0;          // alle Elemente auf 0 setzt

  for (i=0; i<100; i++)     // Schleife, die 100 mal durchläuft und dabei
      data[i] = rand();     // jedem Element einen zufälligen Wert zuweist

  for (i=1; i<=100; i++)     // Schleife, die 100 mal durchläuft und dabei
    { cout << data[i] << ", " ; // den Wert ausgibt
      if ((i%10)==0)  // Wenn i ohne Rest durch 10 teilbar ist, d.h. wenn
                      // 10 Zahlen ausgegeben wurden, dann zusätzlich
         cout << endl ;  // einen Zeilenumbruch ausgeben
    } // Schleifenende

  return 0;  // "Programm erfolgreich abgeschlossen" ans Betriebssystem melden
} // main



Die Unterschliede liegen abgesehen von der using-Zeile nur bei den #Include-Dateien und den Anweisungen zur Ausgabe der Zahlen.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: