Des puissances de 2 au code Andromède (2)

Correction des exercices Python
vendredi 2 novembre 2012
par  Nathalie CARRIÉ

Correction des exercices Python demandés dans l’article Des puissances de 2 au code Andromède.

La correction proposée est évidemment non-exhaustive.

Préliminaire : Les puissances de 2

Écrire les 11 premières puissances de 2.
Il serait judicieux de savoir reconnaître les 11 premières puissance de 2.
1024 = ?

>>>
>>> 2**10
1024
>>>
  • Écrire un programme qui affiche les puissances de 2 de 20 à 220.
    >>>
    >>> for i in range(0,21):
    ...     print 2**i
    ...
    1
    2
    4
    8
    16
    32
    64
    128
    256
    512
    1024
    2048
    4096
    8192
    16384
    32768
    65536
    131072
    262144
    524288
    >>>
  • Écrire un programme qui, connaissant une puissance de 2, renvoie l’exposant (pour m = 2n, l’entrée c’est m, la sortie c’est n).
 
# -*- coding: utf-8 -*-
 
m=int(input('Entrez une puissance de 2 inférieure à 2**50 (1125899906842624)\n'))
print(m)
i=0
while (2**i != m):
    i=i+1
print(' '+ str(m) + ' = ' + '2**' +str(i))

Sortie du code :

> python './PuissanceDe2VersExposant.py'
Entrez une puissance de 2 inférieure à 2**50 (1125899906842624)
2048
2048
 2048 = 2**11
>

Système binaire

  • écrire un programme qui affiche en binaire les entiers naturels de 1 à 20.
 
for i in range(0,21):
    print(str(i)+' = '+bin(i))
 

Sortie du code :

>>>
0 = 0b0
1 = 0b1
2 = 0b10
3 = 0b11
4 = 0b100
5 = 0b101
6 = 0b110
7 = 0b111
8 = 0b1000
9 = 0b1001
10 = 0b1010
11 = 0b1011
12 = 0b1100
13 = 0b1101
14 = 0b1110
15 = 0b1111
16 = 0b10000
17 = 0b10001
18 = 0b10010
19 = 0b10011
20 = 0b10100
>>>

Décimal vers binaire

  • écrire un programme qui convertit en binaire un entier naturel (sans utiliser la fonction bin()).
    On utilise les restes successifs de la division entière de l’entier par 2.
     
    # -*- coding: utf-8 -*-
     
    n=input('Entrez un entier naturel non-nul\n')
    m=int(n)
    s=''
    while m > 0:
        s+=str(m%2)
        m=m//2
        print(m,s)
    ch=''
    for i in range(0, len(s)):
        ch+=s[len(s)-1-i]
    print(n, 'en binaire est :',ch)

Résultat du programme avec vérification :

>>>
Entrez un entier naturel non-nul
576
288 0
144 00
72 000
36 0000
18 00000
9 000000
4 0000001
2 00000010
1 000000100
0 0000001001
576 en binaire est : 1001000000
>>> bin(576)
'0b1001000000'
>>>

Un mot sur l’hexadécimal

  • Ecrire un programme qui convertit en hexadécimal un entier naturel.
 
def renverse(s):
    ch=''
    for i in range(0, len(s)):
        ch+=s[len(s)-1-i]
    return ch
 
n=input('Entrez un entier naturel : \n')
m=int(n)
print('n = '+str(n))
s=''
hexa=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
while m > 0:
    s+=str(hexa[m%16])
    m=m//16
    print(m,s)
 
print('Résultat : \n'+n+' = '+renverse(s))
 

Résultat du programme avec vérification :

>>>
Entrez un entier naturel :
127
n = 127
7 F
0 F7
Résultat :
127 = 7F
>>> hex(127)
'0x7f'
>>>
  • Ecrire un programme qui convertit en hexadécimal un nombre en binaire.
# -*- coding: utf-8 -*-
 
def renverse(s):
    ch=''
    for i in range(0, len(s)):
        ch+=s[len(s)-1-i]
    return ch
 
def binaire_vers_entier(b): # b est une chaîne contenant l'entier en binaire
    somme=0
    i=0
    for a in b:
        somme+=int(a)*2**(len(b)-1-i)
        i=i+1
    return somme
 
n=input('Entrez un entier en binaire : (par exemple 1111111) \n')
m=binaire_vers_entier(n)
print('n = '+str(n))
s=''
hexa=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
while m > 0:
    s+=str(hexa[m%16])
    m=m//16
    print(m,s)
 
print('Résultat : \n'+n+' = '+renverse(s))

Résultat du programme avec vérification :

>>>
Entrez un entier en binaire : (par exemple 1111111)
1111111
n = 1111111
7 F
0 F7
Résultat :
1111111 = 7F
>>>

Codage d’un texte

Décoder en français la suite binaire suivante pour connaître le message envoyé du futur dans le film Le code Andromède (The Andromeda Strain, 2008 American science-fiction film),
basé sur une nouvelle de Michael Crichton (1969) (http://en.wikipedia.org/wiki/The_An...).

0110111 0110011 0111001 0110101 0110010 0111000
1000010 1000001 1000011 1001001 1001100 1001100
1010101 1010011 1001001 1001110 1000110 1000101
1010010 1001110 1010101 1010011

Voici le message décodé :

Récapitulatif : Mini-projet de conversion entre entiers, binaires et hexadécimaux

  • Ecrire un programme qui permet de convertir un entier en binaire, un binaire en entier, un entier en hexadécimal, un hexadécimal en entier, un hexadécimal en binaire et un binaire en hexadécimal.
# -*- coding: utf-8 -*-
def renverse(s):
    ch=''
    for i in range(0, len(s)):
        ch+=s[len(s)-1-i]
    return ch
 
def entier_vers_binaire(m):
    chbin=''
    while m > 0:
        chbin+=str(m%2)
        m=m//2
    return chbin
 
def binaire_vers_entier(b): # b est une chaîne contenant l'entier en binaire
    somme=0
    i=0
    for a in b:
        somme+=int(a)*2**(len(b)-1-i)
        i=i+1
    return somme
 
def entier_vers_hexadecimal(m):
    s=''
    hexa=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
    while m > 0:
        s+=str(hexa[m%16])
        m=m//16
    return s
 
def hexadecimal_vers_entier(h): # h est une chaîne contenant l'entier en hexadécimal
    hexa=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
    somme=0
    i=0
    for a in h:
        somme+=hexa.index(a)*16**(len(h)-1-i)
        i=i+1
    return somme
 
def hexadecimal_vers_binaire(h): # h est une chaîne contenant l'entier en hexadécimal
    chb=entier_vers_binaire(hexadecimal_vers_entier(h))
    return chb
 
def binaire_vers_hexadecimal(b): # b est une chaîne contenant l'entier en binaire
    chhex=entier_vers_hexadecimal(binaire_vers_entier(b))
    return chhex
     

Evidemment, ces fonctions jouent le rôle des fonctions Python : int(), bin() et hex().


Commentaires

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 3 mai 2017, 14h-18h, PTU, Saint-Denis, salle S23.6
- Mardi 13 juin 2017, 14h-18h, campus du Tampon
- Mercredi 14 juin 2017, 14h-18h, PTU, Saint-Denis, salle S23.6


Brèves

Décès de Raymond Smullyan

mercredi 15 mars

Le logicien Raymon Smullyan est décédé en février 2017, à l’âge respectable de 97 ans : Il avait eu Alonzo Church comme professeur ! Pour en savoir plus, voir cet article

Travailler à plusieurs

lundi 19 décembre 2016

Les enseignements d’exploration au lycée imposent aux enseignants de travailler ensemble. Chantal Tuffery-Rochdi a analysé dans sa thèse les pratiques des enseignants de MPS (méthodes et pratiques scientifiques). Elle répond aux questions des Cahiers pédagogiques.

Un document sur Eduscol

mardi 19 mai 2015

Un document clarifiant bien la façon dont les mêmes concepts vivent en mathématiques et dans les sciences « exactes » les utilisant, publié par Eduscol en octobre 2014. Citons-les :
« Le document proposé ci-dessous s’adresse aux professeurs de mathématiques, physique-chimie et sciences de l’ingénieur intervenant dans le segment [Bac-3 ; Bac+3]. Il vise à les informer des différences de présentation et d’interprétation qui sont faites de certains concepts mathématiques dans les autres disciplines. Ces éclaircissements peuvent contribuer à harmoniser et à clarifier l’utilisation de ces notions auprès des élèves. »

Histoire de la comptabilité

vendredi 28 décembre 2012

Sur ce site (en anglais) dédié à la comptabilité, on trouve des informations intéressantes sur l’histoire et les pratiques de ce domaine, qui peuvent être utiles aux professeurs enseignant des mathématiques financières (et aussi aux autres...).

La CGE et la réforme des lycées

lundi 16 janvier 2012

La Conférence des Grandes Écoles publie 19 préconisations pour la réforme du lycée.

Sur le Web : Les 19 préconisations

Pratique des mathématiques en série STD2A

lundi 16 janvier 2012

Le site de l’IGEN offre des recommandations et des ressources pour enseigner les mathématiques en série STD2A. Les thèmes abordés (couleurs et nuances de gris, arcs et architecture, jeux vidéos, photo et tableur, perspectives parallèles...) sont de nature à donner aussi des idées d’activités aux enseignants des autres séries !

En cheminant avec Kakeya

lundi 16 janvier 2012

Un livre (à télécharger) de Vincent Borelli et Jean-Luc Rullière qui présente le calcul intégral et la dérivation en s’appuyant sur la question de Kakeya. Pour les lycéens, les étudiants et tous les esprits curieux qui souhaitent voir les mathématiques sous un jour différent.

Sur le Web : Livre à télécharger

Bicentenaire Galois

lundi 12 septembre 2011

À l’occasion du bicentenaire de la naissance d’Évariste Galois (1811-2011), l’Institut Henri Poincaré et la Société mathématique de France organisent un ensemble de manifestations et proposent un site contenant diverses ressources documentaires susceptibles d’intéresser les enseignants.

Statistiques

Dernière mise à jour

vendredi 26 mai 2017

Publication

745 Articles
Aucun album photo
131 Brèves
11 Sites Web
127 Auteurs

Visites

545 aujourd'hui
614 hier
2024048 depuis le début
19 visiteurs actuellement connectés