For Schleife 5er Schritte?

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.


Kieselsaeure  07.01.2018, 13:56

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.

1
Schachpapa  07.01.2018, 18:22
@Kieselsaeure

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.

1
Kieselsaeure  07.01.2018, 19:06

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

0

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;
}

pixelino  07.01.2018, 12:03

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;

0
regex9  08.01.2018, 16:50

Des Weiteren muss die While-Schleife natürlich bei 0 beginnen, wenn man denn diese Option wählt.

0

int i;
for(i=0;i<=100;i+=5) { /* ... */ }


silverelite31  07.01.2018, 12:41

Das "int i" mit in die for Schleife rein. ansonsten gut.

0
silverelite31  07.01.2018, 12:43

Das "int i" mit in die for Schleife rein. ansonsten gut.

0
pixelino  07.01.2018, 13:47

das gibt einen error in C. In java gehts aber...

0
Kieselsaeure  07.01.2018, 13:50

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.

0
Kieselsaeure  07.01.2018, 13:56

deklarieren* tut mir leid.

0
pixelino  07.01.2018, 14:29

ich hab mir codeblocks mit, ich glaube der compiler ist "mingw irgendwas", runtergeladen, da bekomme ich immer einen fehler wegen i :|

0
Kieselsaeure  07.01.2018, 19:08

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..

0
regex9  08.01.2018, 16:43
@Kieselsaeure

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.

0

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.