Inscription / Connexion Nouveau Sujet
Niveau Science du Numérique
Partager :

Exercice code

Posté par
Adrya
10-03-21 à 19:05

Bonjour aux personnes qui verront ça j'espère trouver de l'aide ici
Je me retrouve face à un sujet de code et je vous avouerais que je bloque pas mal dessus.
L'énoncé est le suivant :

Coder des fonctions qui donnent à la suite les résultats suivants
Chaine à coder : NSI
#Entrer ce code donnera donc premièrement le résultat en binaire suivant :
Chaine en binaire : 010011100101001101001001
#Il faut ensuite séparer la chaîne en groupes de 4 dans une autre fonction.
=> "0100", "1110", "0101", "0011", "0100", "1001"
#Pour la prochaine fonction, il faut rajouter pour chaque groupe de 4 à gauche '01' et à droite '10' (si ce n'est pas clair j'expliquerai plus en détail) Cela donne le résultat suivant :
=> "01010010", "01111010", "01010110", "01001110", "01010010", "01100110"
Puis pour terminer dans la dernière fonction, il faudra mettre les quatre premiers bits à droite et les quatre derniers bits à gauche pour chaque groupes de bits. Cela va donner le résultat suivant :
=> "00100101", "10100111", "01100101", "11100100", "00100101", "01100110"
Une fois ce résultat, on va reconvertir chaque bit en un caractère ce qui donnera le codage suivant :  
=>Le codage de votre chaîne est : %§eä%f

J'ai déjà écrit une partie du code, mais je vais avoir besoin d'aide. Je vous met en dessous ce que j'ai déjà écrit.

Je récupère d'abord la chaîne de caractère qui ici doit être NSI et la convertit en binaire avec le procédé suivant
#Convertir un texte en binaire
#1 - Récupérer le texte suivant.
#2 - Le convertir en valeurs ASCII.
#3 - Diviser chaque nombre par 2 et garder le reste jusqu'à avoir une valeur de zéro.
#4 - Prendre votre séquence de restes de chaque division.
#5 - Inverser les séquences. (Remonter du dernier résultat vers le premier, puisque cela m'est donné à l'envers avec la technique que nous avons. (J'ai déjà ce qui me permet de renverser ceci, là n'est pas le problème)

def Binaire(Chaine):
    ListeASCII = []
    for k in Chaine:
        New = [str(ord(k))]
        ListeASCII += New
    print(ListeASCII)
    BinList = []
    for i in range (len(ListeASCII)):
        nombre = (int(ListeASCII[i]))
        print (nombre)
        for k in range (0, 8):
            juy = int(nombre)
            hak = juy%2
            BinList.append(hak)
        print (BinList)

Pour commencer, je ne comprend pas pourquoi ici le résultat de juy n'est pas compris en tant qu'entier pourriez vous m'indiquer ou est le problème et comment le résoudre ?

Posté par
mathafou Moderateur
re : Exercice code 10-03-21 à 20:13

Bonjour,

dans la conversion de "nombre" en binaire :
il faudrait peut être bien diviser effectivement nombre par 2 dans la boucle et pas seulement calculer 8 fois le même reste de la valeur initiale de nombre !

(sans préjuger de la complication excessive de cette fonction, mais bon , c'est toi qui choisit la méthode ...)

Posté par
Adrya
re : Exercice code 10-03-21 à 20:18

Il me semble avoir déjà essayé en convertissant nombre mais je crois que cela me donnait le même résultat, il n'était pas compté comme un nombre entier mais come un chaîne de caractères.

Posté par
mathafou Moderateur
re : Exercice code 10-03-21 à 20:26

nombre est bien un entier
et tu insistes même pour le reconvertir en entier de façon répétée, il l'est deja et int(d'un entier) ne fait rien

par exemple si nombre = 78
tu calcules 8 fois le reste de la division de 78 par 2 qui est 8 fois toujours le même : 0 puisque 78 est immuablement pair

il faut obligatoirement dans la boule ajouter : nombre = nombre//2 (division entière effective)
en plus de juy=nombre%2

Posté par
Adrya
re : Exercice code 10-03-21 à 20:46

Là  se pose un problème puisque je dois récupérer le reste pour savoir si c'est 0 ou 1, je ne comprend donc pas comment je peut les trouver

Posté par
mathafou Moderateur
re : Exercice code 10-03-21 à 21:08

toi tu fais :
1) 78 reste 0
2) 78 reste 0
3) 78 reste 0
4) 78 reste 0
5) 78 reste 0
6) 78 reste 0
7) 78 reste 0
8) 78 reste 0

pour convertir nombre en binaire c'est ça :
1) 78 reste 0
78//2 = 39
2) 39 reste 1
39//2 = 19
3) 19 reste 1
19//2 = 9
4) 9 reste 1
9//2 = 4
5) 4 reste 0
4//2 = 2
6) 2 reste 0
2//2 = 1
7) 1 reste 1
1//2 =0
8) 0 reste 0
0//2 = 0 (inutilisé, c'est fini)

resultat lu à l'envers : 01001110 qui est bien 78 en binaire.


    ...
    for i in range (len(ListeASCII)):
        nombre = (int(ListeASCII[i]))
        print (nombre)
        for k in range (0, 8):
            hak = nombre%2
            nombre=nombre//2
            BinList.append(hak)
        print (BinList)


>>> Binaire("NSI")
['78', '83', '73']
78
[0, 1, 1, 1, 0, 0, 1, 0]
83
[0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0]
73
[0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0]
>>>

Posté par
Adrya
re : Exercice code 10-03-21 à 22:13

Ah d'accord je comprend mieux ! Je vais intégrer à ce que j'avais fait et mettre en page tout ça merci beaucoup !



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !