mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu while Schleife


Autor: Peter Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin !
Kurze Frage zu einer while schleife?

Kann man so einen Vergleich ausführen?

int size, x ;

while(size == x)
{ ... x und size werden hier unterschiedlich erhöht, bis diese gleich 
sind }

und danach soll die Schleife verlassen werden?

Geht so was überhaupt?

Autor: The Devil (devil_86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also theoretisch würd ich ja sagen; er steigt halt nur in die Schleife 
ein, solange size gleich x ist.

Autor: Peter Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahhh, da ist mein Fehler..Ich suche die Lösung, das er in die Schleife 
einsteigt und sie verläßt wenn die beiden Parameter gleich sind!

Autor: The Devil (devil_86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na das mit dem Verlassen ist so ne Sache....du kannst es eben nur so 
programmieren, dass er in die Schleife einsteigt, wenn sie ungleich 
sind, und falls sie irgendwann gleich werden, steigt er eben erst gar 
nicht mehr in die Schleife ein....
Ich weiß nicht, ob das 'Rausspringen' so geht!! Bis jetzt hab ich 
while-Schleifen nur als Endlosschleifen gebraucht [also while(1)].

Autor: Miu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while(1)
{
if (x == size)
   {
   break;
   }
}

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie von Miu geschrieben: 'Break' dannnn verlässt er die Schleife sofort 
oder mit 'continue' springt er wieder zum Schleifenanfang und prüft 
nochmal die Bedingung.

Autor: The Devil (devil_86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, wieder was gelernt :-)

Autor: T.v.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while( x==size){
   //mach was
}
--> Abbruch bei x!=size


while( x !=size){
   //mach was
}
--> Abbruch bei x==size

Alles klar? ;-)

Gruß T.v.B.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
break und continue sind zwar legitime C Anweisungen sollten aber wenn 
möglich nur in Ausnahmefällen benutzt werden. Da es in der 
Programmierung immer mehr als nur einen Lösungsweg gibt, sollte über 
eine Lösung ohne break bzw. continue nachgedacht werden. Es wäre 
"sauberer" und später besser wartbar, da ein plötzlicher 
Schleifenabbruch in einem komplexen System z.T. sehr schwer 
nachvollziehbar ist. Es stellt sich dann meist die Frage : WAS HAT SICH 
DER PROGRAMMIERER NUR DABEI GEDACHT ???? .
Mein genereller RAT : Nur in Ausnahmefällen (kurze Testprogramme!!!) 
Quick and dirty programmieren ansonsten lieber ein wenig Zeit in die 
Programmstruktur investieren. Man wird spätestes beim Debuggen danken.

Autor: Miu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
evtl. auch möglich je nachdem wann du die Überprüfung haben willst:

do
{
//auszuführender Code
}
while(rest != x);

Autor: Miu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Break und Continue erachte ich als sehr "Sauber"!!!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, da unterscheiden sich unsere Erfahrungen. Bei Schleifen mit 3 
Anweisungen im Schleifenkörper ist das sicher nicht der Rede wert. Aber 
bei größeren, komplexeren Bedingungen schon.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann schau Dir mal eine komplexe Software an, bei der aufgrund von 
Timing und anderer Dinge Prozesse aufgesplittet wurden und dieses 
mittels break und continue realisiert wurde. Dann wirst Du schnell 
feststellen das dies als Mittel zum Zweck geschah aber aber sehr 
schlecht wartbar/erweiterbar ist. Daher kommt kommt für mich nur das 
break in einer Switch/Case Struktur in Frage, alles andere ist erstmal 
Tabu, es gibt immer einen anderen Weg.

Autor: Michael Waiblinger (wiebel42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde mich Miu's Vorschlag anschliessen. Eine Fussgesteuerte 
Schleife ist genau, dass was gefragt ist, es wird in jedem fall einmal 
ausgeführt und danach getestet.
Von wengen Break <-> While, ich will da nichts bewerten, beides hat 
seine Vor- und Nachteile aber wenn man schon mit Breaks arbeitet könnte 
man evtl. gleich ganz auf goto umsatteln, das hätte auch den grossen 
Vorteil das mit Sicherheit jeder Comiler aus einem goto ohne grosses 
Federlesen ein rjmp erzeugt, was natürlich schon performanter ist als 
denkbare Konstrukte die für ein while nötig sein dürften. Wobei ich auch 
nicht genau weiss was gcc aus while(1) macht. Nur so ein Gedanke. 
-wiebel

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein guter Compiler erzeugt bei gleicher Semantik den gleichen Code. Da 
ist es egal, ob man while, do, oder break/continue/goto benutzt hat.
Obwohl, beim GCC hätte ich da auch meine Zweifel.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Waiblinger wrote:
> Wobei ich auch
> nicht genau weiss was gcc aus while(1) macht. Nur so ein Gedanke.

Ernst gemeint? ;)

-O0 (keine Optimierung):
  while(1)
    ;
  aa:  ff cf         rjmp  .-2        ; 0xaa <main+0x1c>

Autor: Michael Waiblinger (wiebel42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nagut, war ich wohl zu pessimistisch. ;)

Autor: Netbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Gast hat Recht, das Stichwort heißt "Strukturiertes Programmieren".

Wichtig ist, dass ein Algorithmus mit einigen wenigen vernünftigen 
Kontrollstukturen auskommt, dazu gehören auch WHILE "Bedingung wahr" ... 
End While und REPEAT ... UNTIL Bedingung wahr (hier 
programmiersprachen-unabhängig formuliert, wie es bei der Entwicklung 
von Programmabläufen auch zunächst selbstverständlich ist.)
Mehrfach geschachtelte Konstrukte werden durch Benutzung strukturierter 
Elemente vernünftig lesbar, GOTOs, Breaks u.ä. sind dagegen mehr oder 
weniger strikt verboten, da sie NICHT-strukturiert sind.
In der Programm- Dokumentation gibt es für die Strukturen 
"Nassi-Shneiderman- Diagramme".
Was ein Compiler macht, ist unerheblich, denn für Entwicklung und 
Wartung von Algorithmen ist die Struktur wichtig!. Googelt mal unter den 
obigen Stichworten, dann stoßt Ihr allenhalben auf Informatik-Links, die 
diese Sachverhalte behandeln.

Fußnote: Es war schon zu Zeiten des Commodore C64 mit seinem unsäglichen 
(weil unstrukturiertem) BASIC möglich und dringend empfohlen, einen 
Algorithmus strukturiert zu entwerfen und beim Kodieren diese Elemente 
ersatzweise mit IF und GOTO- Konstruktionen zu  realisieren. Der Vorteil 
liegt darin, dass bei einem Wechsel der Programmiersprache der 
Algorithmus praktisch keine Veränderungen erforderte, nur die 
Übersetzung in die Sprachelemente der neuen Sprache war notwendig! Ein 
vernünftig entwickelter Algorithmus ist und bleibt verstehbar und 
überdauert einige "Sprachmoden" ...
MfG

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mehrfach geschachtelte Konstrukte werden durch Benutzung strukturierter
> Elemente vernünftig lesbar, GOTOs, Breaks u.ä. sind dagegen mehr oder
> weniger strikt verboten, da sie NICHT-strukturiert sind.

http://pplab.snu.ac.kr/courses/adv_pl05/papers/p26...

Autor: nico26plus1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man kann breaks durch returns ersetzen, wenn man die Abbruchbedingung 
bzw. die Schleife in ein Unterprogramm packt. Wenn man es geschickt 
macht, bleibt der Code dadurch auch gut lesbar.

und bei verschachtelten schleifen dient goto und co sogar der sauberen 
programmierung, da ansonsten der code durch Merker und deren Abfragen 
aufgebläht wird und so unübersichtlich wird.

dass man nicht wild im code hin- und herspringt sollte klar sein. aber 
daraus abzuleiten, sprünge generell zu verbieten, ist lachhaft...

Autor: Miu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jup, die Merker Setzerei find ich auch sehr sehr schwierig zum 
Nachvollziehen!!!
Und stimme dir voll zu, dass gegen einen sinnvollen Einsatz von Sprüngen 
nichts spricht...

Autor: Michael Waiblinger (wiebel42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Netbird wrote:
> ... GOTOs, Breaks u.ä. sind dagegen mehr oder
> weniger strikt verboten, da sie NICHT-strukturiert sind.

Diese Aussage geht meines Wissens nach auf einen sehr alten Artikel der 
Probleme mit Pascal behandelt zurück und hat dem armen unschuldigen GOTO 
einen echten Imageschaden zugefügt. Ich schliesse mich nico26plus1 und 
Miu an. Man sollte alle Möglichkeiten die einem eine Programmiersprache 
gibt auch nutzen, sicher sollte man mit einigen Dingen aufpassen und ja 
mit GOTO kann man grosse Verheerungen anrichten, aber mit Verstand 
eingestzt ist das alles was Gutes. -wiebel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.