Hallo, ich möchte, dass eine char Variable "Seq" vom Wert 1 bis 16 nur den Wert 1 bis 16 annehmen kann. Diese Variable ist in einer Funktion enthalten. Über einen Paramter wird der Wert der Variable "Seq" zugewiesen. Das hochzählen geschieht von außen. Wenn zum Beispiel der Paramter 17 ist, dann soll die Variable "Seq" wieder von von 1 beginnen hochzuzählen. Wie könnte man dies implementieren ?
:
Gesperrt durch Moderator
Wenn du mit 0 bis 15 klarkommst einfach das untere Nibble z.B eines chars verwenden. Das bricht ja automatisch um. mfG
Indem man eine Variable nimmt, die immer von Null bis fünfzehn zählt (mod 16) und dann eins dazu addiert.
Hallo, wie wäre es mit seq = ((Parameter-1) modulo 16) + 1 http://de.wikibooks.org/wiki/C-Programmierung:_Ausdrücke_und_Operatoren#Modulo_.25
Such mal in deinem C Buch nach dem Modulo Operator. Und dann so wie Horst es gesagt hat.
y=((x & 0x0F)+1) bzw. unsigned int func(unsigned int x) { return ((x&0x0F)+1) }
Super Uwe, was denkst du warum die anderen Poster die Lösung nicht gleich geschrieben haben? Nein sie waren nicht zu blöd dazu, sondern sie wollten dem TO die Hausaufgaben nicht machen sondern ihm nur Hilfestellung geben daß er selbst darauf kommt. Guttenbergen ist hier nicht erwünscht.
Da muss ich Udo leider Recht geben. Schon die Formulierung der Frage zeigt, dass es sich eindeutig um eine Hausaufgabe handelt.
Ist zwar schon Jahre her, aber die Lösung von Uwe ist aus meiner Sicht falsch da hier in der Funktion hochgezählt wird und nicht außerhalb.
ARMleuchter schrieb: > aber die Lösung von Uwe ist aus meiner Sicht falsch Die ist vollkommen korrekt:
1 | #include <stdio.h> |
2 | |
3 | unsigned int func(unsigned int x) |
4 | {
|
5 | return ((x&0x0F)+1); |
6 | }
|
7 | |
8 | int main () |
9 | {
|
10 | unsigned int i = 0; |
11 | |
12 | while (1) |
13 | {
|
14 | i = func (i); |
15 | printf ("%u\n", i); |
16 | }
|
17 | return 0; |
18 | }
|
Ausgabe:
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
10 | 10 |
11 | 11 |
12 | 12 |
13 | 13 |
14 | 14 |
15 | 15 |
16 | 16 |
17 | 1 |
18 | 2 |
19 | 3 |
20 | 4 |
21 | .... |
Und damit schließe ich den Thread wegen Leichenfledderei.
:
Bearbeitet durch Moderator