Ajouts et corrections diverses avant rentrée

This commit is contained in:
Alexis Fourmaux 2025-09-01 19:40:13 +02:00
parent 878b016119
commit b9456a4295
28 changed files with 652 additions and 559 deletions

View file

@ -7,6 +7,14 @@ transition: coverflow
footer: ''
math: katex
---
<style>
section {
font-size: 32px;
}
</style>
# Représentation des entiers naturels
---
@ -220,7 +228,7 @@ Exercice: Convertir en binaire
Exemple avec le nombre $53_{|10}$ qui s'écrit $110101_{|2}$ en binaire :
![divisions successives](../cours/CIEL1/02-reseau/cours/divisions_successives.jpg)
![divisions successives width:500px](../cours/CIEL1/02-reseau/cours/divisions_successives.svg)
---
<style scoped>
@ -309,3 +317,165 @@ Exercice : Convertir en binaire
- 0110 1110
- 0011 1100 1111
-->
---
### Conversion décimal vers hexadécimal
Deux méthodes possibles:
- On convertit en binaire puis en hexadécimal
- On utilise la méthode des divisions successives, mais en divisant par 16
---
Exemple avec $47_{|10}$.
|32|16|8|4|2|1|
|--|--|-|-|-|-|
| 1| 0|1|1|1|1|
$${\overbrace{0010}^{2_{|16}}\overbrace{1111}^{\mathrm{F}_{|16}}}_{|2} = \mathrm{2F}_{|16}$$
---
Exemple avec $47_{|10}$.
![divisions hexa width:500px](../cours/CIEL1/02-reseau/cours/divisions_hexa.svg)
On obtient donc $47_{|10} = \mathrm{2F}_{|16}$
---
# Opérateurs booléens
---
<style scoped>
section {
font-size: 28px;
}
</style>
- Algèbre de Boole ou calcul booléen :
- opérations logiques sur des bits
- Utile pour :
- En programmation pour valider des conditions
- En embarqué ou en réseau pour faire des calculs sur des nombres binaires
---
## Opérateur ET
---
<style scoped>
section {
font-size: 28px;
}
</style>
!!! success À retenir
L'opérateur ET ne renvoie 1 que si les deux arguments sont à 1. Sinon il renvoie 0.
**Si A ET B valent 1**
|A|B|A ET B|
|-|-|:-:|
|0|0|0|
|1|0|0|
|0|1|0|
|1|1|1|
En python :
- `and` lorsqu'on travaille avec des booléens
- `&` lorsqu'on veut travailler en bit à bit
!!!
---
![ET width:500px](../cours/CIEL1/02-reseau/cours/ET.svg)
---
## Opérateur OU
---
<style scoped>
section {
font-size: 28px;
}
</style>
!!! success À retenir
L'opérateur OU renvoie 1 si au moins l'un des deux arguments est à 1. Sinon il renvoie 0.
**Si A vaut 1 ou si B vaut 1 ou si les deux valent 1**
|A|B|A OU B|
|-|-|:-:|
|0|0|0|
|1|0|1|
|0|1|1|
|1|1|1|
En python:
- `or` lorsqu'on travaille avec des booléens
- `|` lorsqu'on veut travailler en bit à bit.
!!!
---
![OU width:500px](../cours/CIEL1/02-reseau/cours/OU.svg)
---
## Opérateur NON
---
<style scoped>
section {
font-size: 28px;
}
</style>
!!! success À retenir
L'opérateur NON inverse la valeur du bit auquel il est appliqué.
|A|NON A|
|-|:-:|
|0|1|
|1|0|
En python:
- `not` lorsqu'on travaille avec des booléens
- `~` pour l'inversion bit à bit.
!!!
---
![NON](../cours/CIEL1/02-reseau/cours/NOT.svg)
---
## Opérateur OU EXCLUSIF
---
<style scoped>
section {
font-size: 28px;
}
</style>
!!! success À retenir
OU EXCLUSIF renvoie 1 si seulement l'un des deux arguments est à 1. Sinon il renvoie 0.
**Si A seulement vaut 1 ou si B seulement vaut 1**
|A|B|A XOR B|
|-|-|:-:|
|0|0|0|
|1|0|1|
|0|1|1|
|1|1|0|
En python, il n'existe pas. Il est en pratique rarement utilisé.
!!!
---
![XOR](../cours/CIEL1/02-reseau/cours/XOR.svg)

View file

@ -1,302 +0,0 @@
---
marp: true
theme: catppuccin
paginate: true
size: 4:3
transition: coverflow
footer: ''
math: katex
---
<style>
section {
font-size: 28px;
}
</style>
# TD - Représentation des nombres et Python
---
## Représentation des nombres
---
1. Convertissez les nombres suivants en décimal
- $\mathrm{5B0F}_{|16}$
* $23311_{|10}$
- `0x1001`
* $4097_{|10}$
- $10011010_{|2}$
* $154_{|10}$
- `1001b`
* $9_{|10}$
---
2. Convertissez les nombres suivants en binaire
- $251_{|10}$ (utilisez les deux méthodes)
* 1111 1011b
- $3887_{|10}$ (utilisez les deux méthodes)
* 1111 0010 1111b
- $\mathrm{532}_{|16}$
* 0101 0011 0010b
- $\mathrm{5B0F}_{|16}$
* 0101 1011 0000 1111b
---
3. Convertissez les nombres suivants en hexadécimal
- $10011010_{|2}$
* 0x9A
- $100110101_{|2}$
* 0x135
- $111 1001 1100 1011 1101 0001_{|2}$
* 0x79CBD1
---
4. Combien de nombres un octet permet-il de représenter ? Justifier.
* 2⁸ = 256 -> 256 nombres
---
5.
1. En admettant qu'un nombre entier naturel soit codé sur 32 bits, quelle est la valeur maximale que peut avoir un entier naturel ?
* 2³² = 4 294967296
* Donc valeur max = 4 294967295 (Il ne faut pas oublier le zéro)
2. À votre avis, dans un système informatique, que se passe-t-il si on augmente de 1 la valeur maximale d'un entier ?
* Il repasse à zéro : on appelle ça un débordement (overflow en anglais). C'est une source de bugs courante. C'est pour cela qu'il faut être attentif à la valeur maximale qu'un nombre peut avoir dans vos programmes.
---
6. Mon ordinateur m'indique qu'un fichier fait 13 560 788 octets. Combien cela représente-t-il environ (1 chiffre après la virgule)
- en kio
* 13 560 788 / 2¹⁰ = 13243,0 kio
- en Mio
* 13 560 788 / 2²⁰ = 12,9 Mio
- en ko
* 13 560,8 ko
- en Mo
* 13,6 Mo
---
7. Quelle est la capacité d'un disque dur de 1To
- en Go
* 1000 Go
- en Mo
* 1 000 000 Mo
- en Gio
* 10¹² / 2³⁰ = 932,3 Gio
- en Mio
* 953 674,3 Mio
---
## Python
---
1. Écrire un programme qui demande à lutilisateurice dentrer le nom et lâge.
Il affichera ensuite la phrase :
`"Bonjour <nom>, vous aurez 30 ans en <année>"`
---
```python
nom = input("Entrer votre nom : ")
age = int(input("Entrer votre age : "))
print(f"Bonjour {nom}, vous aurez 30 ans en {30 - age + 2025}")
```
---
2. Écrire un programme qui demande à lutilisatrice dentrer la largeur et la longueur dun rectangle. Le programme calcule et affiche la surface et le périmètre.
*Utilisez des variables de type `float`*
---
```python
largeur = float(input("Largeur (m) : "))
longueur = float(input("Longueur (m) : "))
surface = largeur * longueur
perimetre = 2*(largeur + longueur)
print(f"Surface : {surface} m²")
print(f"Périmètre : {perimetre} m")
```
---
3. Écrire un programme qui demande à l'utilisatrice d'entrer un rayon et une hauteur de cône. Le programme calculera le volume du cône. Pour rappel, la formule de calcul du volume d'un cône est : $V = \frac{1}{3}.\pi.r^2.h$
---
```python
from math import pi
rayon = float(input("Rayon du cône (m) :"))
hauteur = float(input("Hauteur du cône (m) :"))
volume = (pi * hauteur * rayon ** 2) / 3.0
print("Volume du cône =", volume, "m3")
```
---
4. Écrire un programme qui demande à l'utilisateur de saisir 3 notes et d'en faire la moyenne. *Utilisez des variables de type `float`*
---
```python
note_1 = float(input("1ere note : "))
note_2 = float(input("2e note : "))
note_3 = float(input("3e note : "))
moyenne = (note_1 + note_2 + note_3)/3
print(f"Moyenne : {moyenne}")
```
---
5. Écrire un programme qui demande à l'utilisatrice de saisir deux nombres. Le programme comparera les deux nombres de façon à afficher une comparaison avec les symboles `<, > ou =`, comme dans l'exemple :
```
1er nombre : 14
2nd nombre : 12
14 > 12
```
---
```python
nombre_1 = float(input("1er nombre : "))
nombre_2 = float(input("2nd nombre : "))
if nombre_1 > nombre_2 :
print(f"{nombre_1} > {nombre_2}")
elif nombre_1 < nombre_2 :
print(f"{nombre_1} < {nombre_2}")
else:
print(f"{nombre_1} = {nombre_2}")
```
---
6. Écrire un programme indiquant si un nombre saisi par l'utilisateur est pair ou impair
---
```python
nombre = int(input("Nombre : "))
if nombre % 2:
print(f"{nombre} est impair")
else:
print(f"{nombre} est pair")
```
---
7. Écrire un programme qui demande à l'utilisatrice d'entrer un nombre. Le programme affichera les 10 nombres suivants **sur une seule ligne**. *Utilisez une boucle `for`*
---
```python
nombre = int(input("Entrez un nombre : "))
for i in range (1, 11):
print(nombre + i, end=" ")
```
---
8. Faire le même exercice mais avec une boucle `while` cette fois.
---
```python
nombre = int(input("Entrez un nombre : "))
nombre_affiche = nombre
while nombre_affiche != nombre + 10:
nombre_affiche += 1
print(nombre_affiche, end=" ")
```
---
9. Écrire un script python permettant de convertir en base 10 (décimal) un nombre écrit en binaire sous forme d'une chaîne de caractères. Vous demanderez à l'utilisateur ou l'utilisatrice le nombre à convertir, et vous afficherez le résultat.
---
```python
base = 2
nombre_binaire = input("Saisissez le nombre à convertir")
nombre_decimal = 0
puissance = len(nombre_binaire) - 1
for a in nombre_binaire:
nombre_decimal += int(a) * base ** puissance
puissance -= 1
print(f"{nombre_binaire}b = {nombre_decimal}")
```
---
10. Écrire un programme permettant d'afficher les 15 premiers termes de la suite de Fibonacci. Pour rappel, la suite de Fibonacci est une suite de nombres dont chaque nombre est la somme des deux précédents. Elle commence par 0 et 1.
---
```python
n0 = 0
n1 = 1
print(n0, n1, end=" ")
for i in range(0, 13):
n2 = n0 + n1
n0 = n1
n1 = n2
print(n2, end=" ")
```
---
11. Écrire un programme qui permet d'afficher le résultat de l'opération factorielle d'un nombre. Pour rappel, factorielle de $n$ s'écrit $n!$ et vaut le produit de tous les nombres entiers de 1 à n.
Par exemple : $5! = 1\times2\times3\times4\times5 = 120$
---
```python
nombre = int(input("Nombre : "))
resultat = 1
for i in range(1, nombre + 1):
resultat = resultat * i
print(f"{nombre}! = {resultat}")
```
---
12. Écrire un script python permettant de convertir en binaire un nombre entier écrit en base 10. Vous demanderez à l'utilisateur ou l'utilisatrice le nombre à convertir, et vous afficherez le résultat.
---
```python
nombre_decimal = input("Saisissez le nombre à convertir : ")
nombre_binaire = ""
quotient = int(nombre_decimal)
resultat = ""
while quotient != 0:
reste = quotient % 2
quotient = quotient // 2
resultat = str(reste) + resultat
print(resultat)
```

View file

@ -1,168 +0,0 @@
---
marp: true
theme: catppuccin
paginate: true
size: 4:3
transition: coverflow
footer: ''
math: katex
---
<style>
section {
font-size: 28px;
}
</style>
---
# TD2 - Fonctions
---
1. Donner une fonction qui renvoie `True` si un nombre est pair et `False` sinon.
---
```python
# Solution naïve :
def est_pair(nb):
if nb % 2 == 0:
return True
else:
return False
```
---
```python
# Meilleure façon de faire
def est_pair(nb):
return nb % 2 == 0
```
---
1. Donner une fonction qui compte et affiche le nombre de voyelles d'une chaîne de caractères. Les voyelles sont `a e i o u y`. Attention aux majuscules. La méthode `lower` permet de mettre une chaîne de caractères en minuscules (lowercase). On l'appelle comme suit : `chaine.lower()`
---
```python
def nombre_voyelles(chaine):
nb_voyelles = 0
for lettre in chaine.lower():
if lettre in "aeiouy":
nb_voyelles += 1
print(f"Il y a {nb_voyelles} voyelles dans {chaine}")
```
---
1. Donner une fonction qui renvoie l'aire d'un cercle à partir de son rayon. Pour rappel, l'aire d'un cercle est définie par la formule suivante : $\pi*R^2$ où $R$ est le rayon du cercle
---
```python
import math
def aire(rayon):
return math.pi * rayon ** 2
```
---
1. Donner une fonction qui renvoie le maximum parmi les trois nombres passés en paramètre
---
```python
def maximum(a, b, c):
if a >= b and a >= c:
return a
elif b >= a and b >= c:
return b
else:
return c
```
---
1. Donner une fonction qui prendra comme paramètre une chaîne de caractères. Il faudra renvoyer cette chaîne de caractères en remplaçant tous les espaces par des étoiles `*`
---
```python
def remplace(chaine):
nouvelle_chaine = ""
for caractere in chaine:
if caractere == " ":
nouvelle_chaine += "*"
else:
nouvelle_chaine += caractere
return nouvelle_chaine
```
---
1. Modifier la fonction précédente de façon à pouvoir passer en paramètre le caractère qu'on veut modifier et celui par lequel on veut le remplacer. Si on ne passe pas les paramètres, la fonction devra continuer de remplacer les espaces par des étoiles.
---
```python
def remplace(chaine, a_remplacer=" ", remplacement="*"):
nouvelle_chaine = ""
for caractere in chaine:
if caractere == a_remplacer:
nouvelle_chaine += remplacement
else:
nouvelle_chaine += caractere
return nouvelle_chaine
```
---
1. Un gardien de phare va aux toilettes cinq fois par jour. Or les WC sont au rez-de-chaussée. Écrire une procédure (fonction qui ne renvoie rien) qui reçoit deux paramètres : la hauteur d'une marche et le nombre de marches. Cette fonction devra afficher le nombre de mètres en hauteur parcourus chaque semaine par le gardien. La phrase affichée sera de la forme : `Pour x marches de y centimètres il parcourt z mètres par semaine`
Attention :
- Une semaine comporte 7 jours (pas de repos pour les gardiens de phare...)
- Une fois en bas le gardien doit remonter
- Les hauteurs de marches sont en centimètres, mais le résultat est à exprimer en mètres
---
```python
def hauteur_totale(hauteur_marche, nb_marches):
hauteur = hauteur_marche * nb_marches * 2 * 7 * 5 / 100
print(f"Pour {nb_marches} marches de {hauteur_marche} centimètres, il parcourt {hauteur} mètres par semaine")
```
---
## Exercices avancés
---
Donner une fonction permettant de calculer la factorielle d'un nombre (entier supérieur à 1) en utilisant une boucle. Pour rappel, factorielle de $n$ s'écrit $n!$ et vaut le produit de tous les nombres entiers de 1 à n.
Par exemple : $5! = 1\times2\times3\times4\times5 = 120$
---
```python
def factorielle(n):
resultat = 1
for i in range (1, n+1):
resultat = resultat * i
return resultat
```
---
b. Donner une fonction permettant de calculer la factorielle d'un nombre en utilisant une fonction récursive. Une fonction récursive est une fonction qui s'appelle elle-même.
---
```python
def factorielle(n):
if n != 1:
return n * factorielle(n-1)
return 1
```