For Schleife 5er Schritte?
Hey,
programmiere mit C und möchte in einer for Schleife Zahlen von 0-100 in 5er Schritte Ausgegeben bekommen. Habe es bereits in 2er Schritte geschafft aber noch nicht in 5er.
Wäre nett wenn mir jemand kurz schreibt wie ich das schreiben muss.
Danke im Voraus
5 Antworten
0-100?
for(unsigned byte b = 0; b <= 100; b = b + 5)
{
//do something
}
Warum ich keinen int bzw signed int vorschlage? Ganz einfach. Dein anspruch war der zahlenbereich von 0-100. Da reicht unsigned byte locker lustig. Int würde dir da mehr speicher fressen.
Wenn wir hier schon bei der Bitfummelei sind:
a) Ein unsigned byte frisst nur dann weniger Speicher, wenn du auf einem 8 Bit System arbeitest. Da es sich hier um eine lokale Variable handelt, wird die sowieso auf dem Stack angelegt und der Platz wird nach der Beendigung der Schleife wieder freigegeben. Was sind schon 3 Byte Unterschied bei RAM Größen von mehreren Milliarden Byte selbst bei einem Smartphone?
b) Ich glaube nicht, dass 20 Increments und 20 Multiplikationen billiger sind als 20 Additionen.
a) naja gut, da hast du schon recht mit der tatsache das die paar bytes nicht arg viel heraus reissen. ich meine aber man könnte das aber aus prinzip gleich richtig anwenden. b) okay wenn ichs nochmal genauer überdenke hast du wohl recht. :-D
Habe C länger nicht genutzt.
for(i=0; i<101; i=+5) {
printf("Zahl %d\n", i);
}
int i=1;
while(i <= 100) {
printf("Zahl %d\n", i);
i=+5;
}
das wird eine endlosschleife, weil 5 immer kleiner als 100 ist, und du i immer auf 5 setzt. es gehört i+=5; oder i=i+5;
Des Weiteren muss die While-Schleife natürlich bei 0 beginnen, wenn man denn diese Option wählt.
int i;
for(i=0;i<=100;i+=5) { /* ... */ }
das ist in der tat eine schlechte praktik das i so - nennen wir es mal global - zu definieren. das gibt bei gcc keinen fehler und unter windows mit visual studio (mir ist der name des compilers leider entfallen) im normalfall auch nicht wenn du die deklaration von i in die for packst.
ich hab mir codeblocks mit, ich glaube der compiler ist "mingw irgendwas", runtergeladen, da bekomme ich immer einen fehler wegen i :|
Im C89-Standard muss die Variable noch außerhalb der Schleife deklariert werden, ab C99 ist dies nicht mehr notwendig.
MinGW unterstützt allerdings nur C89, siehe dazu hier: http://www.mingw.org/wiki/c99
Ein anderer Compiler wäre von daher angemessen. Z.B. GCC (https://stackoverflow.com/questions/25566597/how-enable-c99-mode-in-gcc-with-terminal/25566648).
merkwürdig. eigentlich ist deine variante fehleranfälliger und eher nicht zu empfehlen. zudem verbraucht die variante natürlich "länger" unnötig speicher wegen dem erweitertem gültigkeitsbereich..
Dies ist eine Eigenheit von C, die historisch gewachsen ist. Damals war es üblich, Variablen am Anfang eines Blocks oder im Fall von Schleifen, diese vor dem Konstrukt zu deklarieren.
Wie hast du es denn mit Zweierschritten gemacht? Poste mal das Codebeispiel hier. Bei 5er Schritten musst du doch nur die 2, die die Zweierschritte erzeugt, durch eine 5 ersetzen.
Zähler = 0
for k = 0 bis 100
Zähler = Zähler + 1
(irgendwelchen Kram)
if Zähler = 5 then
Zähler = 0
Ausgabe
end if
end for
So etwa würde ich die Syntax umsetzen - in C umsetzen kannste das bestimmt selber.
du könntest den rechenaufwand natürlich noch minimieren + speicherverbrauch wenn du nur 20 schritte gehst und dein b mal 5 nimmst. das kann in manchen fällen besser sein. kommt aber drauf an.