#include "stdio.h"
#include "malloc.h"

/*************/ 
/* Exercice1 */ 
/*************/
 
/* Le type Liste Simplement Chaînée (LSC) */ 
typedef int objet;
typedef struct elt {
    objet info;
    struct elt *suiv;
} ELT, *LSC;

/*
 *  Question1 :
 */
LSC avancer(LSC a, int n)
{
    int i;
    if (a != NULL) {
	for (i = 1; i <= n; i++)
	    a = a->suiv;
    }
    return a;
}

/*
 *  Question2 :
 */
void tournee(LSC a)
{
    if (a != NULL) {
	while (a->info != 0) {
	    printf("%d ", a->info);
	    a->info--;
	    a = a->suiv;
	}
	putchar('\n');
    }
}

/*
 *  Fonctions non demandées. Données ici pour tester le reste.
 */

/* Construction d'un anneau simpelemnt chaîné */

LSC construire()
{
    LSC p, A = NULL;
    objet x;
    scanf("%d", &x);
    while (x) {
	p = (LSC) malloc(sizeof(ELT));
	p->info = x;
	if (A == NULL) {
	    p->suiv = p; A = p;
	}
	else {	/* A non vide */
	    p->suiv = A->suiv;
	    A->suiv = p;
	}
	scanf("%d", &x);
    }
    return A;
}

/* Affichage d'un anneau simpelemnt chaîné */

void afficher(LSC A) {
  LSC p = A;
  if (A) {
    printf("%d ", A->info);
    p = A->suiv;
    while (p != A) {
      printf("%d ", p->info);
      p = p->suiv;
    }
    putchar('\n');
  }
}

int main() {
  LSC A = construire();
  printf("\nAnneau construit : "); afficher(A);
  printf("\nAnneau avancé de 3 positions"); A=avancer(A, 3);
  printf("\nAnneau en tournée : \n"); tournee(A);
}


