Inscription / Connexion Nouveau Sujet
Niveau école ingénieur
Partager :

Informatique

Posté par
jeffrey95140
29-10-19 à 21:11

Bonsoir,

je ne sais pas si c'est le bon forum pour poster, je m'exuse d'avance.

je bloque sur un petit problème dans le langage C, par exemple on a le nombre binaire 1001011101, l'énoncé me dit de convertir en z-aire, c'est à dire  que z=1 et zz=0 dans un premier bloc et dans un deuxieme bloc  indique le nombre de bits, ça s'affiche pour chaque changement de valeurs. Par exemple, 1000011 donne :

z z zz zzzz z zz

mais je n'arrive pas à faire le programme permettant de différencier le premier et le deuzième bloc.

Pourriez vous m'aider s'il vous plaît, merci d'avance

Posté par
trapangle
re : Informatique 29-10-19 à 21:23

Bonsoir,

Donc si j'ai bien compris, pour 1001011101 ça donnerait z z zz zz z z zz z z zzz zz z z z ?

Tu peux itérer sur les bits à lire, tant qu'ils sont pareils tu incrémentes un compteur. Quand ils deviennent différents, le premier bloc c'est la valeur du bit précédent et le deuxième bloc, c'est autant de z qu'il y a dans le compteur.

Posté par
jeffrey95140
re : Informatique 29-10-19 à 21:53

oui c'est ça,

alors justement, c'est le premier réflexe que j'ai eu, pour pouvoir mettre mon z et zz au bon endroit, j'ai voulu faire un compteur pour savoir combien de chiffres était composé mon binaire, j'ai donc rediger ce bout de code :

do{
        Binary=Binary/10;
        i++;
      }while(Binary!=0);
      printf("%d\n", i);

cela m'a permis de connaître de combien de chiffres mon binaire était composé.

Ensuite, une fois le compteur fait, j'ai pensé à étudier chaque chiffre de gauche à droite, j'ai donc rentré mon binaire dans une varaible "tmp".

J'ai donc rédigé ce bout de code:

if(tmp=tmp/pow(10,i)==1){
        printf("z ");
      }else if(tmp=tmp/pow(10,i)==0){
          printf("zz ");
          printf("%d", tmp);
      }

or c'est là le problème, ça m'affiche faux, mais je ne vois pas ou est le problème.


Est ce que je devrais vous envoyer mon programme en entier?

Posté par
trapangle
re : Informatique 29-10-19 à 22:10

Mon C est trop rouillé, je ne peux pas t'aider pour la syntaxe exacte en C.

J'ai essayé en python, ça fonctionne avec ce code-ci :

def zStr(prevBit, count):
    outStr = "z " if prevBit==1 else "zz "
    outStr += "z" * count
    outStr += " "
    return outStr;
def binToZ(bits):
    prevBit = bits[0]
    count = 0
    outStr = ""
    for curBit in bits:
        if (curBit == prevBit):
            count = count+1
        else:
            outStr += zStr(prevBit, count)
            prevBit = curBit
            count = 1
    outStr += zStr(prevBit, count)
    return outStr;
print(binToZ([1,0,0,1,0,1,1,1,0,1]))

Posté par
jeffrey95140
re : Informatique 29-10-19 à 22:14

oh je vois ce n'est pas grave , malheureusement je n'ai pas encore appris en python hehe ^^

c'est pas évident



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

Inscription gratuite

Fiches en rapport

parmi 1736 fiches de maths

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 !