1 Corrigés chapitre 1 1.1 Exercice 1.1
1) 4 bits : 15, 8 bits : 255, 16 bits : 65535, 32 bits : 4294967295, N bits : 2N-1.
2) 1101101 = 109.
3) 19 = 10011, 45 = 101101, 63 = 111111.
4) CA57.
5) 10A4 = 1000010100100 = 4260, CF8E = 1100111110001110 = 53134, 9742 = 1001011101000010 = 38722.
1.2 Exercice 1.2
man : /usr/local/man, man ou ./man Yves : /home/Yves, ../../home/Yves etc : /etc, ../../etc
1.3 Exercice 1.3
essai.txt : fichier, appartient à l’utilisateur dut et au groupe dut, taille 18 octets, droit (prop : rw, group : r, others : r), dernière modification (ou création) 9 octobre de l’année en cours à 9h26.
toto : fichier exécutable (voir *), appartient à l’utilisateur dut et au groupe dut, taille 0 octets, droit (prop : rwx, group : r, others : r), dernière modification (ou création) 9 octobre de l’année en cours à 13h53.
tmp : répertoire, appartient à l’utilisateur dut et au groupe dut, taille 4096 octets (sans grande signification pour vous), droit (prop : rwx, group : -, others : -), création 9 octobre de l’année en cours à 9h48.
1.4 Exercice 1.4 1)
c↵
o↵
u↵ c↵
o↵ u↵
2) 43 0D 0A 4F 0D 0A 55 0D 0A 43 0D 0A 4F 0D 0A 55 0D 0A
2 Corrigés chapitre 2 2.1 Exercice 2.1
Trouver la solution à la main sans se poser de question « informatique ».
1 + 2 + 3 + 4 ...
+ N
= somme
On calcule des sommes intermédiaires (SI). 1→SI, puis SI+2 = 3→SI, puis SI+3=6→SI, puis SI+4=10→SI, puis... donc :
⇒ on prend le premier nombre et on le mémorise,
⇒ on lui ajoute le nombre suivant (accumulation) et on mémorise le résultat,
⇒ on recommence cette opération jusqu’à ce que le nombre à additionner atteigne N.
Mettons nous à la place de l’ordinateur (qui est stupide). Pour mémoriser chaque valeur, il faut une variable associée.
Détermination des variables nécessaires. Il va falloir une variable pour stocker N, une variable pour stocker la somme, une variable pour stocker un compteur (qui compte 1, 2, 3, ..., N).
ATTENTION à l’initialisation (somme = 0, compteur = 1, N = N).
Détection des répétitions conditionnelles. Tant que le compteur n’a pas atteint N, il faut calculer les affectations :
⇒ Nouvelle valeur de la somme = ancienne valeur de la somme + compteur
⇒ Nouvelle valeur du compteur = ancien valeur du compteur + 1
Détection des tests conditionnels dans les boucles ou en dehors des boucles. Ici, il n’y en a pas.
Exprimer l’algorithme :
• en utilisant un langage algorithmique plus ou moins précis.
Entier compteur, somme, N
Début
N = LireEntier()
compteur = 1 somme = 0
Tant que compteur <= N
somme = somme + compteur compteur = compteur + 1
afficher somme
fin
Expliquer l’indentation (les instructions décalées à droite appartiennent au temps que). Les tableaux sont inconnus, il faut rentrer une note à chaque tour. Evolution des variables à chaque tour (N = 5) :
somme compteur test compteur <= 5 avant la boucle 0 1 vrai => exec tour 1
fin tour 1 1 2 vrai => exec tour 2
fin tour 2 3 3 vrai => exec tour 3
fin tour 3 6 4 vrai => exec tour 4
fin tour 4 10 5 vrai => exec tour 5
fin tour 5 15 6 faux => sortie
• En utilisant un ordinogramme.
oui
non compteur=1
somme=0
somme = somme + i
compteur = compteur + 1
Afficher somme début
fin Déclaration nombre entier :
compteur, somme, N
N = LireEntier ()
compteur<=N
2.2 Exercice 2.2
Trouver la solution à la main sans se poser de question « informatique ».
Note1 + Note2 + Note3 + ...
+ NoteN
= somme Puis moyenne = somme / N.
On calcule des sommes intermédiaires (SI). Note1→SI, puis SI+ Note2→SI, puis SI+
Note3→SI, puis SI+Note4→SI, puis... donc :
⇒ on prend la première note et on la mémorise,
⇒ on lui ajoute la note suivante (accumulation) et on mémorise le résultat,
⇒ on recommence cette opération jusqu’à ce que le nombre de notes à additionner atteigne N.
Mettons nous à la place de l’ordinateur (qui est stupide). Pour mémoriser chaque valeur, il faut une variable associée (et un type).
Détermination des variables nécessaires et de leur type. Il va falloir une variable entière pour stocker N, une variable entière pour stocker la somme, une variable entière pour stocker un compteur (qui compte 1, 2, 3, ..., N), une variable entière pour stocker la note qui vient d’être saisie. Il va falloir une variable réelle pour stocker la moyenne. ATTENTION à l’initialisation (somme = 0, compteur = 1, N = N).
Détection des répétitions conditionnelles. Tant que le compteur n’a pas atteint N, il faut calculer les affectations :
⇒ nouvelle valeur de la somme = ancienne valeur de la somme + note
⇒ nouvelle valeur du compteur = ancien valeur du compteur + 1
Détection des tests conditionnels dans les boucles ou en dehors des boucles. Ici, il n’y en a pas.
Exprimer l’algorithme :
• en utilisant un langage algorithmique plus ou moins précis.
Entier i, somme, note, N Réel moyenne
Début
N = LireEntier()
i=0 somme=0
Tant que i < N
Note = LireEntier() somme = somme + note i = i + 1
si N > 0
moyenne = somme / N sinon
moyenne = 0
afficher moyenne
fin
En gras, pour corriger le cas où N = 0 (division par 0).
• En utilisant un ordinogramme.
oui
non i=0
somme=0
i<N
note = LireEntier()
somme = somme + note
i = i +1
moyenne = somme / N Afficher moyenne début
fin Déclaration nombre entier :
i, somme, N, note Déclaration nombre réel :
moyenne
N = LireEntier()
3 Corrigés chapitre 3 3.1 Exercice 3.1
instructions a b commentaire
déclaration - -
a = 5 ; 5 -
b = a + 4; 5 9 a = a + 1; 6 9 b = a - 4; 6 2
instructions n1 n2 commentaire
déclaration - -
n1 = 5 ; 5 - n2 = 7 ; 5 7
n1 = n2; 7 7
n2 = n1; 7 7
instructions n1 n2 commentaire
déclaration - -
n1 = 5 ; 5 - n2 = 7 ; 5 7
n2 = n1; 5 5
n1 = n2; 5 5
3.2 Exercice 3.2
main() {
int a = 1, b = 2, c = 3, tmp;
tmp = c;
c = b;
b = a;
a = tmp;
printf("a = %d, b = %d, c = %d\n ", a, b, c);
}
3.3 Exercice 3.3 resultat = 8
resultat = 10 resultat = 2 resultat = 21 resultat = 11 resultat = 11 resultat = 22 resultat = 1
3.4 Exercice 3.4 flottant : 5.5 flottant : 3.5 flottant : 1.78571 flottant : 50.0 entier : 1 flottant : 1.1
3.5 Exercice 3.5 resultat = 3.000000 resultat = 3.750000 resultat = 3.000000
3.6 Exercice 3.6 main()
{
char a = 'A', b = 'B', c = 'C', tmp;
tmp = c;
c = b;
b = a;
a = tmp;
printf("a = %c, b = %c, c = %c\n ", a, b, c);
}
3.7 Exercice 3.7
printf("%d articles %c, de la catégorie %c", qte, art, cat);
on obtient : 50 articles
, de la catégorie B
3.8 Exercice 3.8 main()
{
int nb_art = 15;
float prix_unitaire_HT = 10.51;
float prix_total_TTC;
prix_total_TTC = prix_unitaire_HT * nb_art * 1.196;
printf("nombre d\'articles : %d\n", nb_art);
printf("prix unitaire HT : %6.2f\n", prix_unitaire_HT);
printf("prix total TTC : %5.2f\n", prix_total_TTC);
}
3.9 Exercice 3.9 main()
{
int nb_art;
float prix_unitaire_HT;
float prix_total_TTC;
printf("Donnez le nombre d\'articles ainsi et leur prix unitaire HT\n");
scanf("%d%f", &nb_art, &prix_unitaire_HT);
prix_total_TTC = prix_unitaire_HT * nb_art * 1.196;
printf("nombre d\'articles : %d\n", nb_art);
printf("prix unitaire HT : %6.2f\n", prix_unitaire_HT);
printf("prix total TTC : %5.2f\n", prix_total_TTC);
}
3.10 Exercice 3.10 main()
{
int qte=50;
char cat='B';
char art='S';
printf("Article : ");
scanf("%c", &art);
printf("Categorie : ");
/* attention au blanc avant le
%c à cause du return précédent */
scanf(" %c", &cat);
printf("Quantité : ");
scanf("%d", &qte);
printf("%d articles %c, de la catégorie %c", qte, art, cat);
}
3.11 Exercice 3.11 main()
{
float x, y;
char rep;
printf("donnez deux nombres : ");
scanf("%f%f", &x, &y);
printf("ordre croissant (O/N) ? ");
fflush(stdin);
scanf("%c", &rep);
if (rep == 'O') if (x < y)
printf("%f %f\n", x, y);
else
printf("%f %f\n", y, x);
else
if (x > y)
printf("%f %f\n", x, y);
else
printf("%f %f\n", y, x);
}
ATTENTION AUX TESTS
3.12 Exercice 3.12
if (rep == 'O' || rep == 'o')
3.13 Exercice 3.13 main()
{
float prix_brut;
printf("donnez le prix brut : ");
scanf("%f", &prix_brut);
if (prix_brut < 1000.0)
printf("prix net = %f", prix_brut);
else if (prix_brut < 5000.0)
printf("prix net = %f", prix_brut*0.9);
else
printf("prix net = %f", prix_brut*0.8);
}
3.14 Exercice 3.14
Donnez un nombre entier : 0 nul
un
au revoir
3.15 Exercice 3.15 main()
{
int i, stop;
printf("Donnez le nombre de tours : ");
scanf("%d", &stop);
for (i = 0; i < stop; i++) {
printf("Voici un nombre entier : %d\n", i);
printf("Voici son carré : %d\n", i*i);
}
printf("Fin du programme\n ");
}
i-- ; le programme boucle infiniment sur la première itération.
3.16 Exercice 3.16
{
int i, debut, nb;
printf("donnez la valeur de départ et le nombre d\'entiers : ");
scanf("%d%d", &debut, &nb);
for (i = debut; i < debut + nb; i++) { printf("%d\n", i);
}
printf("Fin du programme\n ");
}