Vous êtes sur la page 1sur 5

MPSI/PCSI Devoir Surveillé N° 1 – Premier Trimestre

Mercredi 09 Novembre 2022

NB : Les documents, les calculettes et les téléphones mobiles ne sont pas autorisés

Partie I : Codage de l’information


Exercice 1 : (4 pts)
1 Donner le codage binaire sur 8 bits des nombres : 25 ; 100 ; -60 et 300
25 : 00011001
100 : 01100100
-60 : 11000100
300 : Ne peut pas être codé sur 8 bits
2 Combien de bits faut-il au minimum pour représenter tous les entiers dont l’écriture
décimale comporte n chiffres, justifier votre réponse.

Les entiers positifs de n chiffre ont 10n valeur dans [0, 10n-1].
Avec x bits on peut coder 2x valeurs, on cherche donc x tel que : 2x=10n
x log(2) = n log(10)
x = n log2(10)
x est un entier donc : x = E( n log2(10) ) +1

3 Quel est le nombre à virgule ayant la représentation suivante sur 32 bits en IEEE 754
1 10010111 11101000011101010000000

-1,1110100001110101 2151-127

4 Déduire une méthode rapide pour multiplier ou diviser par 2k un nombre binaire.

D’après la première question :

Le code de 25 est 11001 ; le code de 50 est 110010 et le code 100 est : 1100100

On remarque que la représentation binaire de 50 est obtenue à partir de celle de 25 en rajoutant un bit de

poids faible à 0. On appelle cette opération un décalage à gauche.

De manière générale, en rajoutant k bits de poids faible à 0 on multiplie le nombre par 2 k.

Exercice 2 : (4 pts)

1
On imagine dans cet exercice un robot utilisé pour explorer et photographier une surface plane
quelconque qu'on représente par une grille. Il est piloté à distance par un utilisateur humain
qui peut lui envoyer différentes instructions :
- AV : avancer d'une case
- TG : se tourner 90° vers la gauche
- TD : se terminer 90° vers la droite
- LT : Lever la tête
- BT : Baisser la tête
- PP : Prendre une photo

1. Quel est le nombre minimal de bits nécessaires pour coder les instructions ?

Il y a 6 instructions à coder. 2 bits ne sont pas suffisants mais 3 suffisent : 4=2 2 < 6 < 23=8

2. Proposer un schéma de codage binaire des instructions


AV : 000
TG : 001
TD : 010
LT : 011
BT : 100
PP : 101

3. Notez bien qu'il reste encore deux codes non utilisés. Lesquelles ?

110
111

4. Donner dans ce schéma, la séquence binaire correspondant à la séquence d'instructions


suivante : AV ( 4x ) ; TG; LT; PP

000 000 000 000 001 011 101

5. Ce schéma n'est adapté pour les cas où le robot doit parcourir de longues distances en
lignes droites. Pourquoi ?

Car dans ce cas, l'utilisateur humain devra envoyer de longues séquences de 000.

6. Proposer un nouveau schéma de codage binaire qui résolve le problème. On pourra


utiliser un nombre variable de bits selon l'instruction codé.

On peut utiliser la combinaison binaire 110 qui n'était pas utilisée dans notre schéma de codage
pour coder l'instruction :
- AP = avancer de plusieurs cases
Comme cette instruction ne précise pas le nombre de cases sur lequel le robot doit avancer, on
fait suivre sa représentation binaire d'un certain nombre de bits, par exemple 4, qui indique le
nombre de cases sur lequel on souhaite faire avancer le robot. L'instruction AP est donc codée
2
sur 7 bits : les 3 premiers bits valent 110 et les 4 suivants indiquent le nombre de cases sur
lequel on fait avancer le robot.

7. Donner dans ce nouveau schéma la nouvelle séquence binaire correspondant à la même


séquence d'instructions : AV ( 4x ) ; TG; LT; PP

110 0100 001 011 101

Les sept premiers bits indiquent que l'on fait avancer le robot sur 4 cases : 110 pour l'instruction AP et 0100
pour demander 4 cases. Le reste de la séquence est inchangé.

Exercice 3 : (4 pts)

Environ 25000 étudiants sont inscrits à l'université Hassan II. On peut estimer à 5000 le nombre
de nouveaux étudiants à inscrire chaque année. Un numéro est attribué à chaque étudiant. Bien
évidemment, deux étudiants différents ne doivent pas voir le même numéro
1 Combien de bits sont nécessaires pour coder un de ces numéros (pour que chacun des
25000 étudiants ait un numéro distinct) ?
E(Log2(25000)) + 1 = 15 bits
2 Les logiciels utilisés ont l'octet comme unité de mémoire. Combien d'octets sont
nécessaires pour coder un numéro d'étudiant ?
2 octets
3 Pour chaque étudiant, on mémorise en plus de son numéro, son nom, son prénom, sa
date de naissance, son adresse, et divers renseignements concernant sa scolarité. En
supposant qu'au total un kilo-octet doit être réservé pour chaque étudiant, pourra-t-on
stocker l'ensemble de ces enseignements (pour tous les étudiants) sur un CD-ROM ? en
mémoire vive (RAM) d’un ordinateur ordinaire ? sur un disque dur de capacité
standard ?

Quelques ordres de grandeur :


Clés USB : entre 1 et 8 Go, jusqu’à 128 ou 56 Go
CD-Rom : 650Mo.
DVD-Rom : 8,5Go.
DVD-R (simple couche) : 4,7 Go.
Disques durs : 150, 250 ou 500 Go, jusqu’à 1 To.
On a besoin d’une capacité de 25000 ko ≈ 24.5 Mo Donc les périphériques sont suffisants

Partie II : Algorithmique
Exercice 1 : Calcul du salaire d'un employé ( 3 pts )

L'utilisateur saisit le nombre d'heures travaillées, le salaire horaire et l'ancienneté de l'employé.

Les retenues de sécurité sociale sont calculées à partir du salaire brut multiplié par le taux de
retenue de la sécurité sociale qui est une constante valant 0.19.
3
L'employé bénéficie d'une prime d'ancienneté qui équivaut à 2% du salaire brut pour + de 10
ans et -20 ans d'ancienneté et 5% du salaire brut pour + 20 ans d'ancienneté.

Écrire un programme PYTHON qui demande à l’utilisateur les informations nécessaires, et


ensuite afficher le salaire net.

print("Donner le nombre d'heures travaillés :")

N = int( input())

print("Votre salaire horaire brut : ")

S = float(input())

print("Votre ancienneté (ans) : ")

A = int(input())

if A>=10 and A<=20 :

S = S* 1.02

if A>20 :

S = S*1.05

sNet = N*S*(1-0.19)

print("Le salaire net est ", sNet)

Exercice 2 : Intégration numérique : (5 pts)

L’objectif de cet exercice est d’écrire un programme Python permettant de calculer une valeur
approchée d’une intégrale.

Si f est une fonction continue sur un intervalle [a,b], bien souvent on ne sait pas calculer une
𝑏
primitive de f. Ainsi, si l'on désire obtenir la valeur de ∫𝑎 𝑓(𝑡)𝑑𝑡 , il faut parfois se contenter
d'obtenir une valeur approchée à l'aide d'une méthode d'intégration numérique.

La plupart des méthodes d'intégration numérique fonctionnent sur le même principe. On


commence par couper le gros intervalle [a,b] en N plus petits intervalles [ai , ai+1] (maille),
𝑎
avec a1=a et aN+1=b. Puis, pour chaque intervalle [ai , ai+1], on essaie d'approcher ∫𝑎 𝑖+1 𝑓(𝑡)𝑑𝑡 .
𝑖

a 𝑓(𝑎𝑖 )+𝑓(𝑎𝑖+1 )
La méthode des trapèzes : on approche ∫a i+1 f(t)dt par (𝑎𝑖+1 − 𝑎𝑖 ) 2
.
i

4
Géométriquement, cela signifie qu'on approche l'intégrale de f par l'aire des trapèzes :

Considérez l’intégrale définie suivante,

Ecrire un programme qui calcul une valeur approchée de l’intégrale I avec un nombre de
points de maille N = 100.

From math import sqrt


N=100
a=0
b=3
h = (b-a)/N
s=0
i=0
while i< N :
xi=a+h*i
xis=xi+h
fxi = 3*xi / (2*sqrt(xi+1))
fxis = 3*xis / (2*sqrt(xis+1))
s=s+ h*( fxi + fxis )/2
i=i+1
print("La valeur de I est : ", s)

Vous aimerez peut-être aussi