Exercices – Lire et écrire de petits algorithmes
BTS SIO SISR 1re année – Mathématiques pour l'informatique – S03
Note
Comment travailler. Cherche d'abord sur papier, avec la méthode du cours : écris les étapes, pas seulement le résultat. Ouvre ensuite « Voir la réponse » pour te corriger. À l'épreuve, aucune réponse sans justification n'est complète.
Exercice 1 – Types
Donner le type Python (int, float, bool, str) de chaque valeur : 42, 4.0, "42", True, "True", 10 > 3, 7 // 2, 7 / 2.
Voir la réponse
| Valeur | Type | Explication |
|---|---|---|
42 |
int |
entier |
4.0 |
float |
réel (présence d'un point) |
"42" |
str |
chaîne (guillemets) |
True |
bool |
booléen |
"True" |
str |
chaîne : c'est du texte |
10 > 3 |
bool |
booléen : résultat d'une comparaison |
7 // 2 |
int |
entier : quotient |
7 / 2 |
float |
réel : la division / donne toujours un réel |
Exercice 2 – Évaluer des expressions
Donner la valeur de chaque expression Python.
29 // 6,29 % 6,2 ** 5,-13 // 4,-13 % 4.(10 % 3 == 1) and (4 > 5),(10 % 3 == 1) or (4 > 5),not (3 == 3.0).12 & 10,12 | 10,12 ^ 10,1 << 5,100 >> 2.
Voir la réponse
| Expression | Valeur |
|---|---|
29 // 6 |
4 |
29 % 6 |
5 |
2 ** 5 |
32 |
-13 // 4 |
-4 |
-13 % 4 |
3 |
(10 % 3 == 1) and (4 > 5) |
False |
(10 % 3 == 1) or (4 > 5) |
True |
not (3 == 3.0) |
False |
12 & 10 |
8 |
12 | 10 |
14 |
12 ^ 10 |
6 |
1 << 5 |
32 |
100 >> 2 |
25 |
Contrôle des divisions : \(29 = 6 \times 4 + 5\) et \(-13 = 4 \times (-4) + 3\).
Exercice 3 – Masques et droits
Les droits sont codés lecture = 4, écriture = 2, exécution = 1. Un fichier a les droits \(5\).
- Quels droits possède-t-il (écrire en binaire sur 3 bits) ?
- Quelle expression ajoute l'écriture ? Quelle est la nouvelle valeur ?
- Quelle expression retire ensuite la lecture ? Quelle est la valeur obtenue ?
- Quelle expression teste si l'exécution est accordée aux droits \(6\) ? Que vaut-elle ?
Voir la réponse
- \(5 = (101)_2\) : lecture (4) et exécution (1), pas d'écriture.
5 | 2vaut 7 (111).7 & ~4vaut 3 (011) : écriture et exécution.(6 & 1) != 0vaut False : \(6 = (110)_2\), le bit d'exécution est à 0.
Exercice 4 – Trace
On considère l'algorithme suivant.
ALGORITHME classer
ENTRÉE : n (entier)
SORTIE : un texte
DÉBUT
SI n mod 15 = 0 ALORS
RETOURNER "tous"
SINON SI n mod 3 = 0 ALORS
RETOURNER "trois"
SINON SI n mod 5 = 0 ALORS
RETOURNER "cinq"
SINON
RETOURNER "aucun"
FIN SI
FIN
- Donner le résultat pour \(n = 30\), \(9\), \(10\), \(7\).
- Que se passerait-il pour \(n = 30\) si on inversait l'ordre des deux premiers tests ?
Voir la réponse
| n | Résultat |
|---|---|
| 30 | tous |
| 9 | trois |
| 10 | cinq |
| 7 | aucun |
- Si le test
n mod 3 = 0venait en premier, \(30\) (divisible par 3) donnerait"trois": le cas"tous"ne serait jamais atteint. Le test le plus particulier doit précéder les plus généraux.
Exercice 5 – Pseudo-code et Python
- Traduire en pseudo-code (avec en-tête) la fonction Python :
- Traduire en Python :
ALGORITHME niveau
ENTRÉE : note (réel)
SORTIE : un texte
DÉBUT
SI note < 8 ALORS RETOURNER "insuffisant"
SINON SI note < 12 ALORS RETOURNER "passable"
SINON RETOURNER "bon"
FIN SI
FIN
Voir la réponse
1.
ALGORITHME est_majeur
RÔLE : dire si une personne est majeure
ENTRÉE : age (entier)
SORTIE : un booléen
DÉBUT
RETOURNER age ≥ 18
FIN
2.
def niveau(note):
if note < 8:
return "insuffisant"
elif note < 12:
return "passable"
else:
return "bon"
Dans le second algorithme, le deuxième test n'a pas besoin de vérifier note >= 8 : on n'y arrive que si le premier test est faux.
Exercice 6 – Adresses privées
Une adresse IPv4 est privée si elle appartient à l'une des plages suivantes : 10.0.0.0 à 10.255.255.255 ; 172.16.0.0 à 172.31.255.255 ; 192.168.0.0 à 192.168.255.255.
- Écrire la condition portant sur le premier octet \(a\) et le deuxième octet \(b\).
- Dire si chaque adresse est privée :
10.4.5.6,172.32.0.1,172.20.1.1,192.168.0.1,192.169.0.1,8.8.8.8.
Voir la réponse
a == 10 or (a == 172 and 16 <= b <= 31) or (a == 192 and b == 168). 2.
| Adresse | Privée ? |
|---|---|
10.4.5.6 |
oui |
172.32.0.1 |
non |
172.20.1.1 |
oui |
192.168.0.1 |
oui |
192.169.0.1 |
non |
8.8.8.8 |
non |
Exercice 7 – Adresse de réseau
Calculer l'adresse de réseau (ET bit à bit octet par octet) de 192.168.5.77 avec le masque 255.255.255.192, puis de 172.16.37.200 avec le masque 255.255.240.0. Justifier les octets qui changent en binaire.
Voir la réponse
- Premier cas : seul le dernier octet change : \(77 = (01001101)_2\), \(192 = (11000000)_2\), \(77 \,\&\, 192 = (01000000)_2 = 64\). Adresse de réseau :
192.168.5.64. - Second cas : \(37 = (00100101)_2\), \(240 = (11110000)_2\), \(37 \,\&\, 240 = (00100000)_2 = 32\) ; \(200 \,\&\, 0 = 0\). Adresse de réseau :
172.16.32.0.
Exercice 8 – Trouver les erreurs
Chaque ligne contient une erreur. Laquelle ? Corriger.
Voir la réponse
=est l'affectation ; la comparaison s'écrit==:if x == 5:.inputrenvoie une chaîne ; comparer une chaîne à un entier provoque une erreur. Il faut convertir :age = int(input("Âge ? ")).- Le second test n'est jamais atteint : si
note >= 16, alorsnote >= 10est déjà vrai. Il faut tester le cas le plus exigeant d'abord :if note >= 16: ... elif note >= 10: ....
Je sais faire
Coche honnêtement ; ce que tu ne coches pas se reprend avant la séance suivante.
- Écrire l'en-tête d'un algorithme ;
- Choisir un type de donnée adapté ;
- Évaluer une expression avec
//,%,and,or,not,&,|,^,<<,>>; - Écrire une conditionnelle imbriquée en pseudo-code et en Python ;
- Dérouler un algorithme sur un jeu d'essai.
Ce que je dois reprendre : ______________________
Ma question à poser à l'enseignant : ______________________