Forum: Compiler & IDEs for Schleife (C)


von Thomas G. (htlpinkafeld)


Lesenswert?

Hallo,

heute begann das 2te Ausbildungsjahr in der HTL für mich, Schwerpunkt: 
Elektronik, sowie Programmieren... in der 1. Klasse hatte ich einen 
Professor der uns in einem Jahr die while und die do- while Schleife 
beibrachte, da unsere Klasse geteilt war, hatte die andere Gruppe einen 
"richtigen Programmierer" als Lehrer und kamen daher viel weiter als 
wir...Dieses Jahr haben wir "IHN".. darum will ich mein Wissen 
erweitern.

Daher meine Fragen:

Wie funktioniert eine for- Schleife in C?

Welche Möglichkeiten gibt es für eine Programmwiederholung???

Wie kann man einen "Zufallsgenerator" programmieren?

Welche Aufgabe(n) haben Compiler, Debugger, Linker... und was es da 
sonst noch gibt??

Was ist char, int, long in, float, also Zahlenbereiche.. wie weit gehen 
diese.

So, das wären mal die ersten Fragen. Danke schon mal im Voraus

PS: Bitte, ich hatte gerade mal 1 Jahr AINF, also bitte nicht ZU 
kompliziert beantworten.

von Dennis (Gast)


Lesenswert?


von Thomas G. (htlpinkafeld)


Lesenswert?

haha,....

danke jedenfalls, falls ich was nicht verstehe oder so, schreibe ich 
hier ma wieder was

lG:Thomas

von Patrick (Gast)


Lesenswert?


von Chris (Gast)


Lesenswert?

> Was ist char, int, long in, float, also Zahlenbereiche.. wie weit gehen
> diese.

Das ist leider eine ganz fiese Frage, denn die minimal verlangten 
Zahlenbereiche sind im Standard sehr kompliziert festgelegt. Die 
tatsächlichen Zahlenbereiche sind auf jedem System anders.

Nur als Beispiel, ein int auf einem AVR-Mikrocontroller geht bis 32767. 
Auf üblichen 32-Bit-PCs wäre die Obergrenze aber 2147483647.

Präzise Grenzen kann man immer nur für ein bestimmtes System angeben, 
also eine bestimmte Architektur mit einem bestimmten Compiler.

von daniel (Gast)


Lesenswert?

interessante Fragen ..
hmm, schon mal einen compiler in echt gesehen?

von Axel S. (lpinguin)


Lesenswert?

Hallo,
Die sprach C liefert in seinen Bibliotheken,welche Du über den Befehl 
include einbinden kannst, eine Methode sizeof, mit der Du die größe des 
Datentypen anzeigen lassen kannst. Es ist korrekt, dass auf die größe 
der Datentypen auf verschiedenen Rechnersystemen bzw. Compiler 
unterschiedlich ist.

Entscheident für den Anfang ist aber dass Du die Funktionsweise der 
Elemente verstanden hast.

Was die for-Schleife angeht, ist diese schnell erklährt.
Sie ist wie folgt aufgebaut:

for(int i = 0; i < 10 ; i++)
{

}
Hier kommt es au den Kopf ("for(...)") an.
- int i = 0 bedeutet, dass eine Zählervariable initiallisiert wird. 
Diese hat
            nun beim eintritt in die Schleife den Wert 1.
- i <10     Nun wird die Abbruchbedingung geprüft - hier wird nun 
geschaut,
            ob die Bedingung i < 10 auf Wahrheit geprüft. Ist diese Wahr
            läuft die Schleife weiter.
- i++       der Schleifenzähler (die Variable i) wird um den 1 erhöht.

- {...}     Dies solltest Du schon aus den while und do - while 
Schleifen
            kennen, ist der Schleifen Block in dem Du die zu 
wiederholende
            Aktion rein schreibst.

Wenn i den Wert 10 erreicht hat, bricht die Schleife ab. Das Abbrechen, 
kannst Du auch vorher mit dem Befehl "break" verursachen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Axel S. wrote:

> Die sprach C liefert in seinen Bibliotheken,welche Du über den Befehl
> include einbinden kannst,

Falsch.  #include zieht den Inhalt einer anderen Datei (die
typischerweise als sogenannte Header-Datei für Definitionen
benutzt wird) an der entsprechenden Stelle in die aktuelle
Übersetzung ("translation unit") als 1:1-Kopie mit hinein.

Es bindet keine Bibliotheken ein.  Das macht der Linker.

> eine Methode sizeof,

sizeof gehört zu keiner Bibliothek, sondern ist ein Operator des
Compilers.  Als solcher muss er nicht extra deklariert werden,
sondern ist jederzeit verfügbar.

Übrigens gilt per definitionem, dass sizeof(char) gleich 1 ist --
egal, wie viele Bits zur Implementierung des Typs char benutzt
werden.  Das sind zwar meistens 8, das ist aber keinesfalls
zwangsläufig so.  Dem Hörensagen nach gibt es auch Umgebungen, bei
denen selbst char ein 32-bit-Typ ist.  Bei denen gilt dann
sizeof(char) == sizeof(int) == sizeof(short) == sizeof(long) = 1.

Allerdings ist das zugegebener Maßen ein eher exotischer Fall.

von Thomas G. (Gast)


Lesenswert?

Hallo,

@Axel S.: ich habe mal gelesen das bei der for Schleife, das Erweitern 
der jezeiligen zahl erst nach einem Durchlauf geschieht....

for(y=1;f<=5;a++) geht das????????

eine Frage:
#include... usw erspare ich mir...

while(x<=10)
{
     if(x<=5)
     {
      break;
     }
}

das ist jetzt kein sinvolles Programm aber meine Frage:

wird nur die if Abfrage oder die if- Abfrage und die while-Schleife 
durch das break vorzeitig abgebrochen????

@Jörg Wunsch:

das mit dem sizeof(z.B:int) habe ich schon gelesen aber wie geht das das 
man sich die Zahlenbereiche ausgeben lassen kann??

#include<?????>

.
.
.
.
printf("%d und %d", INT_MIN, INT_MAX);

welches include file braucht man da???
und wie geht das bei float, double,.......?????

es gibt ein Programm, das die ASCII Tabelle ausgibt..???? wie sieht das 
aus???????????




@alle: inzwischen kann ich folgendes:     eingabe ausgabe( printf.....) 
if, bedingter Ausdruck, switch case, while, do while, for, && und || und 
! Operatoren, #define kenn ich schon, \a, \n... kenn ich alle, wie 
zahlen ausgegeben werden können( ich meine %d, %x, %f...);

funktioniert z.B

.
.
.
.
HALLO : .......
.
.
.
.
.
.
.
goto HALLO;
.
.
.

geht..also das es dann wieder rauf springt falls es zum goto Befehl 
kommt???

continue... beendet den aktuellen Schleifendurchlauf
exit.......beendet das programm
break.. beendet schleife und if oder??????????????
return??????????????

return0??... ende des Programms?????????????
Dann hab ich schon mal ein Grund wissen.. oder?
schaut mal welche Fragen ihr mir beantworten könntet...


lG:Thomas

von Matthias L. (Gast)


Lesenswert?

>wird nur die if Abfrage oder die if- Abfrage und die while-Schleife
>durch das break vorzeitig abgebrochen????
IF ist keine Schleife. break bricht nur Schleifen ab!
1
while(x<=10)
2
{
3
     if(x<=5)
4
     {
5
      break;
6
     }
7
}
Das ist übrigens eine Endlosschleife. Da x nirgend verändert wird.

>das mit dem sizeof(z.B:int) habe ich schon gelesen aber wie geht das das
>man sich die Zahlenbereiche ausgeben lassen kann??
Garnicht. Die solltest du wissen. 0..(2^N)-1 für unsignd, und 
-(2^N)..+(2^N)-1 für signed. N ist die Anzahl der Bits des Datentypes.

>ASCII Tabelle ausgibt..????
ASCII ist nur eine andere Interpretation des Inhalts eines 
(unsigned)char-arrays (u8).

>goto Befehl
Du solltest dir angewöhnen, ohne goto auszukommen. Das (wilde 
Rumgespringe) erzeugt nur Spaghetticode.

>return
beendet das aktuelle Unterprogramm (vorzeitig). Ein Wert/Variable hinter 
return ist dann ein Rückgabewert.

>exit
siehe oben. exit beendet nur die innerste Schleife, mehr nicht!

von Simon K. (simon) Benutzerseite


Lesenswert?

Jörg Wunsch wrote:
> Dem Hörensagen nach gibt es auch Umgebungen, bei
> denen selbst char ein 32-bit-Typ ist.  Bei denen gilt dann
> sizeof(char) == sizeof(int) == sizeof(short) == sizeof(long) = 1.

Huh? Du meinst doch sicher

sizeof(char) == sizeof(int) == sizeof(short) == sizeof(long) = 4

von Simon K. (simon) Benutzerseite


Lesenswert?

Chris wrote:
> Nur als Beispiel, ein int auf einem AVR-Mikrocontroller geht bis 32767.
> Auf üblichen 32-Bit-PCs wäre die Obergrenze aber 2147483647.

Beim GCC (bei anderen Compilern sicher auch) kann man sogar noch 
festlegen ob signed oder unsigned als default verwendet wird (Wenn keine 
signedness angegeben wird).
Unter Umständen kann der int auf dem AVR mit dem GCC und der avr-libc 
dann bis zu 65535 zählen.

EDIT: Nein, das stimmt auch nicht, was ich erzählt habe. Ich glaube der 
C-Standard schreibt signed als default vor, außer beim char. Da lässt 
es sich aber per Kommandozeilenparameter einstellen.

von Gast (Gast)


Lesenswert?

>for(y=1;f<=5;a++) geht das????????
Sollte ueberall gehen, macht aber kein Mensch so.

Was manchmal Sinn macht ist sowas wie
for(int i=0, int j=0; i < 10, data[i] != 0; i++, j+=2)
Oder so...nur als Beispiel. Man kann also mehrere Definitionen
fuer Start, Abbruch, Inkrement angeben. Ich weiss aber jetzt
nicht, ob das alle C Compiler koennen oder nur manche bzw.
nur C++.

while(x<=10)
{
     if(x<=5)
     {
      break;
     }
}
<- mit dem Programm gehts nach break hier weiter.

>printf("%d und %d", INT_MIN, INT_MAX);

>welches include file braucht man da???
>und wie geht das bei float, double,.......?????
Schau doch mal in ein C-Buch oder in die links, die
oben bereits genannt sind. Das ist normalerweise
der erste Befehl den man lernt. Und dann
printf anschauen.
>http://info.baeumle.com/ansic.html
Das sieht mir ganz gut fuer den Anfang aus. Linke
Seite durcharbeiten.

>es gibt ein Programm, das die ASCII Tabelle ausgibt
www.google.de -> ascii

Und der Rest...nachlesen! Und nicht nur lesen sondern
auch kompilieren und testen. Dann lernst Du es am
schnellsten. GCC z.B. gibts umsonst.

Heb Dir Deine ersten Versuche auf indem
Du Dein Programm succesive erweiterst. Das kannst
Du dann spaeter als Referenz nehmen.

von Chris (Gast)


Lesenswert?

> Huh? Du meinst doch sicher
>
> sizeof(char) == sizeof(int) == sizeof(short) == sizeof(long) = 4

Nein, Jörg hat Recht, sizeof(char) ist per Definition immer 1. Nur was 
das System unter "1 Byte" versteht, variiert. Es gibt wohl Systeme, bei 
denen "1 Byte" volle 32 Bits hat. Dann wäre es durchaus sinnvoll, wenn 
char, int, short und long alle genau 1 "Byte" groß sind, weil das eben 
32 Bit sind.

von Thomas G. (Gast)


Lesenswert?

hallo,

@ lippy das mit dem 2^n... das man z.B mit 2 Byte=16 bit= 2^16 
Zustände....erreichen kann ist mir schon klar. Das das eine 
Endlosschleife ist weiß icch schon, wolte nur nichts anderes 
reinschreiben weil ich nur wegen des breaks fragen wollte

break ist also gleich wie exit, oder???? und return, beendet in meinem 
beispiel ,mit while und if ,also nur die if Abfrage(abgesehen dsa das 
eine Endlosschleife ist...), oder???

Was is ein Rückgabewert?? sorry

lG:Thomas

von Thomas G. (Gast)


Lesenswert?

oh, noch was: http://info.baeumle.com/ansic.html
hab ich bis einschließlich Kapitel 6 durchgelesen, habe aber jetzt ein 
anderes "Tutorial" gefunden, das wie ich glaube nicht so detailliert 
ist.

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

Datentypen in C
Aus Kernighan/Ritchie, Programmieren in C



Beschribungen zur for-Schleife findet man milionenfach im Netz

von daniel (Gast)


Lesenswert?

>Was manchmal Sinn macht ist sowas wie
>for(int i=0, int j=0; i < 10, data[i] != 0; i++, j+=2)

das ist unfug ...
i < 10, data[i] != 0

i<10 wird nicht beachtet!

i < 10 && data[i] != 0

so ja

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Was manchmal Sinn macht ist sowas wie
> for(int i=0, int j=0; i < 10, data[i] != 0; i++, j+=2)
Der Komma-Operator hat in der Bedingung einer Schleife nichts zu suchen.
Mit solchen "Unschönheiten" verdienen Leute, die Tools zu "statischen 
Codeanalyse" schreiben, ihr Geld. Wer einmal einen solchen Fehler 
gemacht und 1 Woche später gefunden hat, findet es dann echt toll, dass 
es Firmen wie z.B. Coverity diese Schludrigkeiten automatisch finden.

Was macht z.B. dieser Code:
1
   int z = 0;
2
   float i;
3
   for( i=0,0; i < 10,0; i+=1,23 ) {
4
     z += (int)i;
5
   }
Welchen Wert hat z am Programmende?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lothar Miller wrote:

> Welchen Wert hat z am Programmende?

0, die Schleife wird nie abgearbeitet.

von Thomas G. (Gast)


Lesenswert?

Hi,


ich möchte nicht unhöflich sein aber bitte... könntet ihr die Fragen von 
meinem letzten Beitrag beantworten???

lG:Thomas

von Werner A. (homebrew)


Lesenswert?

in deinem letzten beitrag waren doch gar keine fragen...

http://www.google.de/search?&q=r%C3%BCckgabewert

von Thomas G. (Gast)


Lesenswert?

hi,

sry, beim Vorletzten

lG:Thomas

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas G. wrote:
>break ist also gleich wie exit, oder????
Nein, mit break wird die aktuelle Schleife abgebrochen und das Programm 
nach der Schleife weiter ausgeführt. Exit beendet das Programm.
> und return, beendet in meinem
Return beendet die aktuelle Unterroutine. Wenn das return in main() 
steht, wird das Programm beendet.

> Was is ein Rückgabewert?? sorry
Bei
return(56);
ist 56 der Rückgabewert, bei
return(i);
ist der Wert von i der Rückgabewert usw. usf.


> ich möchte nicht unhöflich sein aber bitte... könntet ihr die Fragen von
> meinem letzten Beitrag beantworten???
Den haben Kernighan und Ritchie in ihrem Standardwerk
"Programmieren in C" (ISBN 3-446-15497-3) schon recht ausführlich 
beantwortet. Dieses Buch solltest du dir unbedingt zulegen, da sind 
deine Fragen beantwortet.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lothar Miller wrote:

Nur als Randbemerkung:

> Bei
> return(56);
> ist 56 der Rückgabewert, bei
> return(i);
> ist der Wert von i der Rückgabewert usw. usf.

return ist kein Funktionsaufruf.  Manche Leute mögen die Klammer-
schreibweise zwar, aber man kann genauso gut auch schreiben:
1
    return 56;
2
...
3
    return 2 * i * i;

von Pedda (Gast)


Lesenswert?

alter Schwede, ihr helft hier auch echt den Faulsten unter den Faulen...

von Thomas G. (Gast)


Lesenswert?

hallo,

warum soll ich faul sein????
ich weiß worums geht, aber Einzelheiten und Spezialfälle kann man 
nirgends nachlesen.

lG:Thomas

@Pedda: Wer bist du, kenn ich dich???

von Pedda (Gast)


Lesenswert?

> ...Einzelheiten und Spezialfälle kann man nirgends nachlesen...

waahaaahaha!!! Schon klar, ein Rückgabewert is ein Spezialfall. Und 
darüber gibts auch nirgends was geschrieben :D

Du bist echt lustig ;)

von Peter (Gast)


Lesenswert?

@thomas g. (Gast)

>heute begann das 2te Ausbildungsjahr in der HTL für mich, Schwerpunkt:
>Elektronik, sowie Programmieren... in der 1. Klasse hatte ich einen
>Professor der uns in einem Jahr die while und die do- while Schleife
>beibrachte...

Ein ganzes Jahr für "while" und "do while" Schlaufen? Weit bist Du da 
wirklich nicht gekommen, das ist der Stoff für 2..4 Lektionen. Aber noch 
vor den Schlaufen sind etliche Grundlagenkentnisse wie Synthax, 
Datentypen, Grundoperationen, Zuweisungen, Vergleiche etc... unbedingt 
erforderlich, hier scheinst Du nicht viel mitgekriegt zu haben. Ob's am 
Prof. oder an Dir liegt sei dahingestellt, aber ich frage mich trotzdem: 
Was ist das für ein HTL?

Gruäss Peter

von Peter (Gast)


Lesenswert?

>ich weiß worums geht,

Da habe ich aber schwere Bedenken...  ;o))

von Stefan E. (sternst)


Lesenswert?

thomas g. wrote:

> ich weiß worums geht, aber Einzelheiten und Spezialfälle kann man
> nirgends nachlesen.

Also das ist nun aber wirklich lachhaft.
Erstens betreffen deine Fragen keine "Einzelheiten und Spezialfälle", 
das sind Grundlagen. Zweitens kann man das nun wirklich überall 
nachlesen.

von 900ss (900ss)


Lesenswert?

Jörg Wunsch wrote:
>
> Übrigens gilt per definitionem, dass sizeof(char) gleich 1 ist --
> egal, wie viele Bits zur Implementierung des Typs char benutzt
> werden.  Das sind zwar meistens 8, das ist aber keinesfalls
> zwangsläufig so.  Dem Hörensagen nach gibt es auch Umgebungen, bei
> denen selbst char ein 32-bit-Typ ist.  Bei denen gilt dann
> sizeof(char) == sizeof(int) == sizeof(short) == sizeof(long) = 1.
>

Das ist korrekt so. Auf 32-bit breiten DSPs (z.B. TMS320C31, ADSP21020, 
zugegeben sehr alt, aber in der Raumfahrt sehr beliebt da strahlungsfest 
verfügbar) ist das der Fall. Die kleinste Einheit, die diese adressieren 
können, ist ein 32-bit Wort. D.h. ein Adressinkrement um 1 erhöht um 
32-bit im Speicher. Das ist dann auch bei char pointern so. Ein Zeichen 
belegt dort 32 bit.

> Allerdings ist das zugegebener Maßen ein eher exotischer Fall.

Ein TMS320C3x war nicht soo exotisch. Hast Du dann eher wenig mit zu tun 
gehabt. :-)

von Thomas G. (Gast)


Lesenswert?

hallo,

also wisst ihr: wenn man gerade mal 10 Monate pro Woche nicht mal 1,5 
Std ainf hat, und von diesen 10 Monaten gerade mal 4 zum programmieren 
verwendet hat, und man vorher noch nichts programmiert hat....
nachlesen kann man ALLES, aber wenn einem die Frage von wem beantwortet 
wird ist das 10 Mal besser

lG:Thomas

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

@ thomas g.
> wenn man gerade mal 10 Monate pro Woche nicht mal 1,5 Std...
Nein, die Rechnung ist falsch.
Ein Tag hat 24 Stunden, und nur einen Bruchteil davon gehst du in die 
Schule. Entwicklungsumgebungen gibts für lau, und Bücher in der 
Bibliothek genauso. Viele lernen etwas, indem sie es einfach tun z.B. 
auch nach Schulschluss/Feierabend.
So solltest du das sehen, das bringt dich weiter ;-)

> wenn einem die Frage von wem beantwortet wird ist das 10 Mal besser...
Aber nur, wenn man sich vorher schon selber ein klein wenig den Kopf 
darüber zerbrochen und ein paar Sackgassen ausprobiert hat.

von Thomas G. (Gast)


Lesenswert?

Hallo,

das ist sicherlich richtig was du sagst, ich habe auch zuhause geübt, 
aber weißt du, wenn man andere Fächer auch noch hat findet man keine 
Zeit, ich will nicht sagen dass man keine Zeit hat, aber was soll man 
programmieren? 5- Zeilen programme mit 1 if Abfrage????? mit der Zeit, 
wenn man einiges kann dann kann man auch was anfangen mit seinen 
Programmierkenntnissen..

Ich lese auch Tutorials zu C und sowas, aber um wirklich das 
Programmieren zu vertiefen fehlen mir noch die Kenntnisse, und um diese 
über Skryten usw. zu bekommen, das ist doch dann schon sehr mühsam.

lG:Thomas

von Thomas G. (Gast)


Lesenswert?

Hallo,

bin zufällig hier druaf gestoßen und wollte nur mitteilen das ich auch 
dieses Schuljahr mit links geschaffft habe und sich meine 
Programmierkenntnisse erheblich verbessert haben! Danke für die Hilfe, 
sehe gerade das ich euch nie dafür gedankt habe.

MfG: Gerbi

PS: Thema kann gerne gelöscht werden!

von Klaus W. (mfgkw)


Lesenswert?

Peter schrieb:
> ...
> vor den Schlaufen sind etliche Grundlagenkentnisse wie Synthax,
> ...

"Schlaufen" ist auch schön, gleich mal merken.
Jeder Thread hat doch auch seine guten Seiten!

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.