Forum: Compiler & IDEs Schleifen erklären?


von Maddin (Gast)


Lesenswert?

Ich habe das Tutorial AVR-GCC durchgearbeitet.
Hier ist keine konkrete Beschreibung zum Thema "Schleifen" enthalten.
Habe ich das übersehen?
Gibt es woanders ein deutsches Tutorial zu dem Thema?

von Pink S. (pinkshell)


Lesenswert?

Eine Schleife nutzt einen Rückwärtssprung im Programm, um Programmteile 
wiederholt auszuführen, etwas ungenau ausgedrückt.

Google "C tutorial deutsch" ergibt viele gute Links

von dito (Gast)


Lesenswert?


von Jo Kurt (Gast)


Lesenswert?

Du hast diesen Satz in der Überschrift des Tutorials gelesen?

>Vorausgesetzt werden Grundkenntnisse der Programmiersprache C.

von Stefan E. (sternst)


Lesenswert?

Maddin schrieb:
> Ich habe das Tutorial AVR-GCC durchgearbeitet.
> Hier ist keine konkrete Beschreibung zum Thema "Schleifen" enthalten.
> Habe ich das übersehen?

Ja, anscheinend den 2. und 3. Satz des Tutorials.

von Maddin (Gast)


Lesenswert?

Es werden doch aber auch z.B. Ganzzahlige Datentypen (Integer) erklärt. 
Das sind doch auch Grundlagen. Folglich ist es nicht völlig falsch hier 
auch nach einer Erklärung zum Thema "Schleifen" zu suchen.

Gibt es woanders ein deutsches Tutorial zu dem Thema?
Google findet viel zu ANSI-C, aber ist das auch immer zu AVR-GCC 
kompatibel? Welche Fallen lauern bei der AVR-Programmierung? Um den Code 
zu optimieren wollte ich mich mal intensiver mit dem Thema befassen. 
Auch der Programmierstil wir oft als Argument genannt.

Entschuldigt bitte meinen Wissensdurst :-)

von Falk B. (falk)


Lesenswert?

@  Maddin (Gast)

>Das sind doch auch Grundlagen. Folglich ist es nicht völlig falsch hier
>auch nach einer Erklärung zum Thema "Schleifen" zu suchen.

Doch.

>Gibt es woanders ein deutsches Tutorial zu dem Thema?

Mann O Mann, was haben die Leute nur in der Prä-Tutorial Zeit gemacht? 
Ein gutes Buch gelesen? GENAU!

>Google findet viel zu ANSI-C, aber ist das auch immer zu AVR-GCC
>kompatibel?

Ja.

> Welche Fallen lauern bei der AVR-Programmierung?

Nicht zu viele.

> Um den Code
>zu optimieren wollte ich mich mal intensiver mit dem Thema befassen.

Du bist noch lange nicht in der Lage, über das Thema Optimierung 
nachzudenken. Du musst erstmal die Grundlagen und Praxis GRÜNDLICH 
lernen. Dann kann man irgendwann mal was optimieren.

http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung

>Entschuldigt bitte meinen Wissensdurst :-)

Könnte schlimmer sein ;-)

von Maddin (Gast)


Lesenswert?

Danke für die Hinweise.

Mit "Optimierung" meine ich eigentlich was anderes.
Ich möchte den richtigen/günstigsten Schleifentyp für das zu lösende 
Problem einsetzen. Die Auswahl kann ich natürlich nur korrekt treffen 
wenn die Schleifen genau kenne und konfigurieren kann.

von Karl H. (kbuchegg)


Lesenswert?

Maddin schrieb:
> Es werden doch aber auch z.B. Ganzzahlige Datentypen (Integer) erklärt.

Nö. Es werden nur die Dinge ergänzt, die Standard-C bewusst offen lässt 
und es dem Compilerbauer bzw. der Architektuir überlässt da eine 
sinnvolle Definition festzulegen.

Wenn du denkst, das was du im AVR-GCC-Tutorial über Integer gelesen 
hast, sei alles was man über diesen Themenkreis und dem darüberliegenden 
Themenkreis 'Datentypen' wissen muss, dann hast du dich kräftig 
geschnitten.


Das AVR-GCC-Tutorial ist im übertragenen Sinne der Spezialkurs an 
der Vokshochschule "Business English". Dort lernst du extensiv, wie im 
englischen Sprachraum zb das Datum geschrieben wird, wie 
Geschäftskorrespondenz aussieht, welche Phrasen wofür benutzt werden, 
Anreden in Geschäftsbriefen, wie man firmenintern mit jemandem spricht, 
sich vorstellt etc. etc.

Wenn du dich aber zu diesem Kurs anmeldest und vom Vortragenden erst mal 
eine Einführung haben willst, wie das jetzt mit dem 'am', 'is', und 
'are' funktioniert und wann man "the" als "sä" aussprocht und wann als 
"si", dann wird dich der in den Kurs "Englisch I" schicken.
AVR-GCC-Tutorial ist der Spezialkurs: C auf dem AVR - welche 
Spezialitäten gibt es, was findet man so nicht oder nicht so ausführlich 
in  den üblichen C-Büchern, was muss man wissen, damit man mit seinem 
Basiswissen in C relativ problemlos in die AVR-Programmierung einsteigen 
kann.
Es ist aber kein C-Kurs! Und war auch nie als solcher gedacht.


> Die Auswahl kann ich natürlich nur korrekt treffen
> wenn die Schleifen genau kenne und konfigurieren kann.

Eun Grund mehr, sich einen K&R zu kaufen.

von fonsana (Gast)


Lesenswert?

Maddin schrieb:
> Gibt es woanders ein deutsches Tutorial zu dem Thema?

Und gleich noch einen drauf:
Fuer dieses Hobby brauchst Du zwingend Englischkenntnisse. Die 
Datenblaetter, ohne die Du nicht auskommen wirst, sind alle englisch.

Also, lern Englisch oder such Dir ein anderes Hobby.

fonsana

von Uwe (Gast)


Lesenswert?

> Ich möchte den richtigen/günstigsten Schleifentyp für das zu lösende
> Problem einsetzen.
Selbst sowas macht heutzutage der Compiler alleine ...
Und Englisch ist wirklich ZWINGEND notwendig.
Für die Grundkenntnisse zwar nicht, aber wenn du mit µC anfängst zu 
basteln, dann MUßT du das Datenblatt lesen (ca. 500 Seiten) und 
verstehen ( UND  ZWAR jeden Satz). Da gleiche für jedes zusätzliche IC, 
jedoch nur ca. 50 Seiten.
Und du wirst ständig darin Informationen suchen ...
Also Englisch lernen ...
und zwar kein normales Englisch.
Am besten du nimmst dir nen Datenblatt von nem µC z.B.
http://www.atmel.com/Images/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf

von Maddin (Gast)


Lesenswert?

Danke für die umfassende Erklärung. Jetzt habe ich zwar keine Antwort 
zum Thema Schleifen, aber den Tip ein Buch zu kaufen :-)
Englisch ist tatsächlich unverzichtbar, das habe ich auch schon oft beim 
Lesen der Datenblätter festgestellt. Allerdings lese ich eine deutsche 
Beschreibung deutlich lieber. Deshalb die Frage nach einer deutschen 
umfassenden Beschreibung.

O.K. ich suche noch weiter im Netz (es gibt alles im Netz <trotzig 
guck>) bzw. kaufe mir notfalls ein Buch.

von Sam P. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Eun Grund mehr, sich einen K&R zu kaufen.

Das ist vielleicht untergegangen, aber ist der wichtigste Buchtipp: "The 
C Programming Language" von Brian Kernighan und Dennis Ritchie, gerne 
als "K&R" bezeichnet.

https://de.wikipedia.org/wiki/The_C_Programming_Language

von Fred (Gast)


Lesenswert?

Suche jetzt bitte nicht nach auf deutsch übersetzte Datenblätter.
Da treffen Übersetzungsfehler auf alte Datenblatt-Versionen.

Das führt dann zu Fehlern die man sich nicht erklähren kann.


Zum Thema Schleifen:

Wenn ich eine Schleife mit einer bekannten Anzahl von Durchgängen 
durchlaufen will, verwende ich eine for-Schleife.

Wenn ich eine Schleife durchlaufen will bis ein gewisser Zustand 
eintritt, verwende ich eine while bzw. do / while Schleife.

Das kann aber jeder machen wie es ihm besser gefällt.

von Karl H. (kbuchegg)


Lesenswert?

Maddin schrieb:
> Danke für die umfassende Erklärung. Jetzt habe ich zwar keine Antwort
> zum Thema Schleifen,
1
  while( Ausdruck )
2
    Anweisung;
auf deutsch: Solange Ausdruck ein logisches 'Wahr' ergibt, führe 
"Anweisung" aus. Der Schleifenkörper "Anweisung" kann auch nie 
ausgeführt werden, wenn der Bedingungsausdruck von vorne herein schon 
falsch ergibt.
1
  do
2
    Anweisung;
3
  while( Ausdruck );

so ähnlich wie die erste Variante, nur dass die Prüfung der 
Wiederholbedingung am Ende der Schleife erfolgt. Diese Schleife wird 
also mindestens einmal ausgeführt, denn die erste Prüfung des Ausdrucks 
erfolgt erst am Ende des Schleifenkörpers.
1
   for( init; Ausdruck; Anweisung1 )
2
     Anweisung2;
der Fall ist ähnlich gelagert wie die erste while-Schleife, nur das hier 
die Möglichkeit besteht, einen Initialisierteil bzw. eine zur Schleife 
gehörende Anweisung an einer Stelle zusammenzufassen.

die for-Schleife ist identisch zu
1
   {
2
     init;
3
     while( Ausdruck )
4
     {
5
       Anweisung2;
6
       Anweisung1;
7
     }
8
   }
ihr häufigster Einsatzzweck ist eine sog. Zählschleife, bei der eine 
Variable beginnend von einem Startwert hochgezählt wird, bis ein Endwert 
erreicht ist. Zb bei der Programmierung von Arrays kommt sowas oft vor:
1
    for( i = 0; i < AnzahlElemente; i++ )
2
      mach_was_mit( Array[i] );
Die äquivalente Form als while Schleife wäre
1
   {
2
     i = 0;
3
     while( i < AnzahlElemente )
4
     {
5
       mach_was_mit( Array[i] );
6
       i++;
7
     }
8
   }


In allen Fällen gilt die übliche C-Konvention: ein arithmetischer 
Ausdruck, der das Ergebnis 0 hat, gilt als logisch Falsch, alles 
ungleich 0 gilt als logisch Wahr.

Auch wenn in der Syntax der Schleifenkörper  nur aus einer Anweisung 
besteht, so kann man selbstverständlich dort auch mehrere Anweisungen 
unterbringen, wenn man sich daran erinnert, dass eine Sequenz von 
Anweisungen, eingeschlossen in {-} Klammern, ein sog. 'Block' 
seinerseits als eine einzige Anweisung zählt.

Das war 'in a nutshell' das Wichtigste zum Thema Schleifen. Gleich nach 
dem allerersten Programm, welches ein Neuling traditionell schreibt
1
#include <stdio.h>
2
3
int main()
4
{
5
  printf( "Hallo world\n" );
6
}
ist sein zweites Programm traditionell ein Programm mit Schleifen. Zb 
ein Programm welches alle Zahlen von 1 bis 10 ausgibt, samt den 
zugehörigen Quadratzahlen
1
#include <stdio.h>
2
3
int main()
4
{
5
  int i;
6
7
  for( i = 1; i < 11; i++ )
8
    printf( "%d: %d\n", i, i*i );
9
}
Schon alleine daran, dass bereits das 2-te Programm eines Neulings eine 
for-Schleife enthält, kannst du erkennen, welche Bedeutung diese hat. 
Und du kannst vielleicht ermessen, was dir dein Buch auf den restlichen 
190 Seiten sonst noch so alles beibringen wird, von dem du bisher noch 
nicht die geringste Ahnung hast und warum daher das Zusammentragen von 
anlassbezogenem Achtelwissen durch Fragen in einem Forum nicht sinnvoll 
ist. Hier bewegst du dich in einem Bereich, in dem man systematisch 
Schritt für Schritt sein Grundlagenwissen aufbaut. Dass es dann 
selbstverständlich noch Detailfragen geben kann und auch wird - kein 
Thema. Da bist du dann im Forum gut aufgehoben.

von Peter D. (peda)


Lesenswert?

Eine Besonderheit der for-Schleife ist, ein leerer Ausdruck ist wahr.
Deshalb sieht man oft:
1
int main()
2
{
3
  for(;;){
4
    // mache was endlos
5
  }
6
}

von Maddin (Gast)


Lesenswert?

Danke Danke Danke besonders an Karl Heinz Buchegger und Peter Dannegger.
Genau diese Infos in komprimierter Form habe ich gesucht. Jetzt habe ich 
einen Überblick und verstehe (ein wenig) die Denkweise bei der 
C-Programmierung.
So ein erster Einstieg ist sehr wichtig um nicht die Motivation zu 
verlieren. Den Buchkauf werde ich mal überdenken.
Ihr habt einen C-Einsteiger glücklich gemacht, aber jetzt gehts ans 
Programmieren und Basteln :-)

von Bronco (Gast)


Lesenswert?

Tip:
Besorge Dir ein Buch über "Programmieren auf dem PC", das Dir eine 
(kostenlose) Entwicklungsumgebung für den PC (z.B. VisualStudio) 
mitliefert.
Es ist viel, viel einfacher, mit erklärten Beispielen auf den PC 
programmieren zu lernen, als es gleich mit einem µC zu versuchen.

von Udo S. (urschmitt)


Lesenswert?

Maddin schrieb:
> Den Buchkauf werde ich mal überdenken.
> Ihr habt einen C-Einsteiger glücklich gemacht, aber jetzt gehts ans
> Programmieren

Völlig falscher Weg.
Ist wie:
"ich habe mir ein Auto gekauft, jetzt fahre ich mal ein paar tausend 
Kilometer und überlege dann, ob ich einen Führerschein mache."

Karl Heinz sollte sich eigentlich in den Hintern beissen daß er sich 
soviel Mühe gemacht hat :-(

von Maddin (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Völlig falscher Weg.
> Ist wie:
> "ich habe mir ein Auto gekauft, jetzt fahre ich mal ein paar tausend
> Kilometer und überlege dann, ob ich einen Führerschein mache."
> Karl Heinz sollte sich eigentlich in den Hintern beissen daß er sich
> soviel Mühe gemacht hat :-(

Lieber Udo Schmitt
Ich kann dich beruhigen, der Karl Heinz muss sich nicht in den Hintern 
beissen. Im Gegensatz zu dir hat er einen sehr informativen, hilfreichen 
und interessanten Beitrag zu meiner Frage geschrieben. Diese 
Informationen haben mir so sehr geholfen, das ich bereits zwei kleine 
Projekte umsetzen konnte. Auch andere Leser dieses Forums profitieren 
möglicherweise von diesem Beitrag.
Dein Beitrag ist möglicherweise gut gemeint, bringt jedoch auch einen 
falschen Vergleich. Beim Programmieren kann man sorglos testen und dabei 
was lernen (das ist auch das Ziel). Beim Autofahren sind Menschenleben 
in Gefahr wenn man drauflos fährt.
Weiterhin ist in deinem Beitrag keine Information zur gestellten Frage 
zu finden.

Danke an alle hilfreichen Leser und Schreiber in diesem Forum.

Maddin

von F. F. (foldi)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Schon alleine daran, dass bereits das 2-te Programm eines Neulings eine
> for-Schleife enthält, kannst du erkennen, welche Bedeutung diese hat.

Ich musste irgendwas kopieren.

Wieder mal: Lieber Karl Heinz, schreib doch mal ein Buch!

Du kannst das alles immer so toll erklären.

Auch wenn mir das jetzt nichts neues sagt (das kann ich schon) und ich 
vermutlich dann kein Buch mehr brauche, würde ich es trotzdem kaufen. 
Aber in jedem Fall würdest du einer Menge Leuten damit helfen.

Liebe Grüße
Frank

von Marwin (Gast)


Lesenswert?

F. Fo schrieb:
> Wieder mal: Lieber Karl Heinz, schreib doch mal ein Buch!

Und das kaufen und lesen dann die Leute nicht, die schon jetzt lieber 
hier fragen statt ein Buch zu kaufen und zu lesen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Marwin schrieb:
> F. Fo schrieb:
>> Wieder mal: Lieber Karl Heinz, schreib doch mal ein Buch!
>
> Und das kaufen und lesen dann die Leute nicht, die schon jetzt lieber
> hier fragen statt ein Buch zu kaufen und zu lesen.

Ja, das hat der Karl Heinz ein kleines Problem: Mit seinen Programmier-
tipps hat er bei den Leuten sehr hohes Ansehen, nicht jedoch mit seinen
Buchtipps ;-)

So auch hier:

Karl Heinz Buchegger schrieb:
> Eun Grund mehr, sich einen K&R zu kaufen.

Von diesem Tipp hält wohl keiner sonderlich viel, obwohl es sich dabei
sogar um einen Megamultitipp handelt, der nicht nur ein einzelnes
Problem, sondern nahezu unendlich viele löst.

Aber vielleicht wissen die Leute von heute einfach nicht mehr, wie man
ein Buch bedient. Da fehlt ja auch die Maus :)

von Udo S. (urschmitt)


Lesenswert?

Yalu X. schrieb:
> Aber vielleicht wissen die Leute von heute einfach nicht mehr, wie man
> ein Buch bedient. Da fehlt ja auch die Maus :)

Aber man kann mit einem Finger umblättern, fast wie auf dem Ihh Fon oder 
Pät :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.