Forum: PC-Programmierung Ansi C: Modulo zählen von 1 bis 16


von Programmierer (Gast)


Lesenswert?

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
von James (Gast)


Lesenswert?

Wenn du mit 0 bis 15 klarkommst einfach das untere Nibble z.B eines 
chars verwenden. Das bricht ja automatisch um.

mfG

von Helmut -. (dc3yc)


Lesenswert?

Indem man eine Variable nimmt, die immer von Null bis fünfzehn zählt 
(mod 16) und dann eins dazu addiert.

von Horst H. (horha)


Lesenswert?

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

von Udo S. (urschmitt)


Lesenswert?

Such mal in deinem C Buch nach dem Modulo Operator.
Und dann so wie Horst es gesagt hat.

von Uwe (Gast)


Lesenswert?

y=((x & 0x0F)+1)
bzw.

unsigned int func(unsigned int x)
{
return ((x&0x0F)+1)
}

von Udo S. (urschmitt)


Lesenswert?

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.

von Sven (Gast)


Lesenswert?

Da muss ich Udo leider Recht geben. Schon die Formulierung der Frage 
zeigt, dass es sich eindeutig um eine Hausaufgabe handelt.

von Programmierer (Gast)


Lesenswert?

Hallo an alle,

vielen Dank für Eure Hilfe.

Bye

von ARMleuchter (Gast)


Lesenswert?

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.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.