DM NSI

Identification

Infoforall

1 - DM NSI Binaire, test, boucle et while


Vous pouvez le rendre en markdown sur le site ou en version papier.

Attention, le soin est noté et les codes markdown identiques seront sanctionnés à moins de noter clairement que vous avez travaillé avec un autre élève de la classe.

1 - Binaire

✎ 01° Donnez les poids respectifs des 8 bits d'un octet. Vous commencerez par le bit de poids fort.

Bit n°n°7(fort)n°6n°5n°4n°3n°2n°1n°0(faible)
Les bits codent ????????

✎ 02° Donnez en le justifiant la valeur en base 10 du nombre nombre exprimé en base 2 :

N = 0001 1100 2.

✎ 03° Donnez en le justifiant la valeur en base 10 du nombre nombre exprimé en base 2 :

N = 1111 1111 2.

✎ 04° Combien de cas différents peut-on encoder avec 8 bits ? Est-ce cohérent avec la réponse à la question 03 ?

✎ 05° On considère un nombre entier naturel encodé sur deux octets. On utilise le Big endian ou gros boutisme.

On lit ceci en mémoire :

N = 0001 0001 1111 1110 2.

Calculer la valeur de l'octet de gauche et la valeur de l'octet de droite.

En déduire la valeur de l'entier encodé.

✎ 06° Reprendre l'exercice précédent mais retrouver la valeur simplement en utilisant le principe du poids des bits : 1-2-4-8-16-32 ...

✎ 07° Calculer la valeur entière maximale NMAX qu'on puisse encoder avec 4 octets.

2 - Instruction conditionnelle

✎ 08° Compléter la condition ci-dessous pour que le programme inverse les variables grand et petit lorsque grand est plus petit que petit.

1 2 3 4 5 6 7 8 9 10
grand = input("Donnez votre premier nombre entier : ") grand = int(grand) petit = input("Donnez un deuxième nombre entier plus petit :") petit = int(petit) if CONDITION : tempo = grand grand = petit petit = tempo print(f"Le plus grand nombre est {grand}") print(f"Le plus petit nombre est {petit}")

Le programme de NSI se veut généraliste en terme de langage. C'est pour cela qu'on n'utilisera pas ceci

grand, petit = petit, grand.

✎ 09° Créer un court programme qui :

  • Demande l'année de naissance de l'utilisateur et stocke la valeur transformée en int dans la variable annee
  • Calcule l'age de la personne en utilisant une variable annee_actuelle initialisée à l'année actuelle.
  • Si la date de naissance est supérieure à l'année actuelle : affiche 'impossible'
  • Sinon si la personne a strictement moins de 14 ans : affiche 'enfant'
  • Sinon si la personne a strictement moins de 19 ans : affiche 'ado'
  • Sinon : affiche 'adulte'

Si vous voulez, on peut obtenir l'année actuelle à partir du code lui-même. Cela évite de devoir mettre le code à jour tous les ans !

1 2
import datetime annee_actuelle = datetime.datetime.now().year

3 - Boucle bornée FOR

✎ 10° Expliquer pourquoi la distance affichée au final est de 7 m. Soyez bien attentif, il y a une sorte de mini-piège.

1 2 3 4
distance = 4 for deplacement in range(3): distance = distance + deplacement print(f"Au final, nous sommes à une distance de {distance} m")

✎ 11° Quel aurait été le résultat si on avait utilisé range(4) ?

4 - Boucle non bornée WHILE

✎ 12° Compléter la condition du programme ci-dessous : il génére en boucle le lancé de 3 dés à 6 faces. Vous devez faire relancer tant que la somme des trois dés n'est pas supérieure ou égale à 13.

1 2 3 4 5 6 7 8 9 10 11
import random somme = 0 while CONDITION : de1 = random.randint(1,6) de2 = random.randint(1,6) de3 = random.randint(1,6) somme = de1 + de2 + de3 print(f"Les dés donnent {de1} - {de2} - {de3} pour un total de {somme}")

Activité publiée le 30 09 2019
Dernière modification : 15 09 2020
Auteur : ows. h.