##### Corrige du Devoir Surveille du 5 novembre 2019 ###### Exercice 1 ========== observation (1) a=42, b=1 observation (2) a=43, b=1 observation (3) a=2, b=1 Exercice 2 ========== Q1. --- #define L 20 typedef struct { unsigned int base ; char nbre[L] ; } Rep1 ; typedef char Rep2[L+2] ; Q2. --- int chiffre (char c) { return c - '0' ; } unsigned int enDecimal(Rep1 n) { unsigned int res, i ; i = 0 ; res = 0 ; while (n.nbre[i] != '\0') { res = res*n.base + chiffre(n.nbre[i]) ; i=i+1 ; } ; return res ; } Q3. --- int estCorrecte (Rep1 n1) { int i ; int base ; base = n1.base ; i=0 ; while (n1.nbre[i] != '\0' && chiffre(n1.nbre[i]) >= 0 && chiffre(n1.nbre[i]) < base) i = i+1 ; return (n1.nbre[i] == '\0') ; } Q4. --- void enRep2 (Rep1 n1, Rep2 n2) { int i ; n2[0] = n1.base + '0' ; // reciproque de la fonction chiffre n2[1] = '#' ; i = 2 ; while (n1.nbre[i-2] != '\0') { n2[i] = n1.nbre[i-2] ; i = i+1 ; } ; n2[i] = '\0' ; } Q5. --- Rep1 enRep1 (Rep2 n2) { Rep1 n1 ; int i ; n1.base = chiffre(n2[0]) ; i=2 ; while (n2[i] != '\0') { n1.nbre[i-2] = n2[i] ; i = i+1 ; } ; n1.nbre[i-2] = '\0' ; return n1 ; } Q6. --- char *strrev(char *str) // renvoie l'image miroir de la chaine str { char *p1, *p2; char tmp ; for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2) { tmp = *p1 ; *p1 = *p2 ; *p2 = tmp ; } return str; } Rep1 enBase (unsigned int base, unsigned int n) { Rep1 res ; unsigned int i=0 ; res.base = base ; while (n != 0) { res.nbre[i] = (n % base) + '0' ; n = n / base ; i=i+1 ; } ; res.nbre[i] = '\0' ; strrev(res.nbre); return res ; }