01. Es. svolto: sequenza ciclica

Traccia:

Punto 1:

Stampare a video 100 numeri riproducendo ciclicamente la sequenza

0 1 2 3 4 5 6

Punto 2:

Stampare una ulteriore sequenza di 120 numeri riproducendo ciclicamente la sequenza

1 2 3 4 5

Strategia:

L'aritmetica modulare consente di ottenere le sequenze richieste in modo molto semplice.

Punto 1:

Siccome nella prima sequenza sono presenti 7 cifre differenti (da 0 a 6), occorre applicare l'operatore modulo 7.

Osserviamo infatti che:

0 % 7 vale 0

1 % 7 vale 1

2 % 7 vale 2

3 % 7 vale 3

4 % 7 vale 4

5 % 7 vale 5

6 % 7 vale 6

7 % 7 vale 0

8 % 7 vale 1

9 % 7 vale 2

10 % 7 vale 3

11 % 7 vale 4

12 % 7 vale 5

13 % 7 vale 6

14 % 7 vale 0

15 % 7 vale 1

...

Punto 2:

Siccome nella seconda sequenza sono presenti 5 cifre differenti (da 1 a 5), occorre applicare l'operatore modulo 5. La sequenza che potremo ottenere in questo modo sarà del tipo

0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 ...

Per essere coerenti con quanto richiesto nella traccia sarà necessario aumentare di 1 il risultato.

Osserviamo infatti che:

(0 % 5) + 1 vale 1

(1 % 5) + 1 vale 2

(2 % 5) + 1 vale 3

(3 % 5) + 1 vale 4

(4 % 5) + 1 vale 5

(5 % 5) + 1 vale 1

(6 % 5) + 1 vale 2

(7 % 5) + 1 vale 3

(8 % 5) + 1 vale 4

(9 % 5) + 1 vale 5

(10 % 5) + 1 vale 1

(11 % 5) + 1 vale 2

(12 % 5) + 1 vale 3

(13 % 5) + 1 vale 4

(14 % 5) + 1 vale 5

(15 % 5) + 1 vale 1

...

Svolgimento:


#include <stdio.h>

int main()

{

int i, val;

printf("Sequenza N. 1.\n\n");

i=0;

while (i<100){

val = i % 7;

printf("%d ", val);

i++;

}

printf("\n\n\nSequenza N. 2.\n\n");

i=0;

while (i<120){

val = (i % 5) + 1;

printf("%d ", val);

i++;

}

return 0;

}