Exercice 1 ========== Q1. typedef struct {unsigned int racine ; unsigned int exposant ; } Puissance ; Q2. Puissance produitPuiss (Puissance n1 ; Puissance n2) { // pre-condition : n1 et n2 ont meme racine Puissance resultat ; resultat.racine = n1.racine ; resultat.exposant = n1.exposant + n2.exposant ; return resultat ; } Puissance expPuiss (Puissance n1 ; int p2) { Puissance resultat ; resultat.racine = n1.racine ; resultat.exposant = n1.exposant * p2 ; return resultat ; } Q3. int valeurpuiss (Puissance n) { int resultat = 1 ; unsigned int i ; for (i=0; isuiv = NULL ; mqueue = mtete ; i=0 ; do { fscanf("%c", &c) ; // lecture du caractere courant if (i==0) { // allocation d'un nouveau bloc et mise a jour de mpred et mqueue mqueue->suiv = (Message) malloc (sizeof cellule) ; mpred = mqueue ; mqueue = mqueue -> suiv ; mqueue->suiv = NULL ; mqueue->(b[i]) = c ; // stockage du caractere lu i=i+1 ; if (i == 255) { // on termine le bloc courant en lui ajoutant son checksum mqueue->(b[255]) = checksum(mqueue->b) ; // checksum i=0 ; // on remet i a 0 pour le prochain bloc ... } ; } while (c != '\0') ; // on renvoie la liste sans le fictif returm mfictif->suiv ; } Q7. int checkMsg (Message m) { Message mcour ; // acces au bloc courant mcour = m ; while ((mcour != NULL) && checkBlock(mcour)) { mcour = mcour->suiv ; } ; return (mcour == NULL) ; } Q8. void suppIncBlock (Message *m) { Message mcour, mfictif, mpred ; mfictif = (Message) malloc (sizeof cellule) ; // allocation d'un fictif mfictif->suiv = *m ; mcour = *m ; mpred = mfictif ; while (mcour != NULL) { if (checksum(mcour->b) != mcour->(b[255])) { // mcour est un bloc incorrect, il faut le supprimer mpred->suiv = mcour->suiv ; free(mcour) ; mcour=mpred->suiv ; } else { mpred = mcour ; mcour = mcour->suiv ; } } // on affecte a m la liste privee de son fictif *m = mfictif->suiv ; }