je travail sur un programme mais je n'arrive pas la fin, voici l'énoncé:
L'objectif de cet exercice est de codifier des caractères en une base texte, appelé "z-aire", c'est-à-dire en utilisant uniquement des symboles z. Le principe de ce codage est le suivant : • le programme travaille sur un caractère en entrée et construit en sortie une suite de blocs de symboles z, séparés par des espaces, • deux blocs consécutifs servent à coder une série de bits de même valeur (une suite de 1 ou une suite de 0) : o premier bloc : il vaut z si la série contient des 1 ou zz si elle contient des 0, o deuxième bloc : le nombre de z dans ce bloc correspond au nombre de bits dans la série
Exemple • C en binaire vaut 1000011, la traduction en unaire est donc z z zz zzzz z zz o z z (la première série composée d'un seul 1) o zz zzzz (la deuxième série composée de quatre 0) o z zz (la troisième série composée de deux 1) • z vaut 1111010, la traduction en unaire est donc z zzzz zz z z z zz z
Construire un programme C permettant de saisir un caractère quelconque et d'en donner sa traduction en z-aire. Le résultat devra être affiché en binaire, en décimal et sous la forme d’un caractère.
d'accord, j'ai vu que j'avais oublié beaucoup de points virgules ";" mais ça ne m'a emmené vers rien du coup j'ai changé de méthodes, je cherche à mettre le binaire dans une seule variable.
Pour ensuite appliquer la division et les modulos pour résoudre mon probleme.
Comment pourrais-je rentrer mon binaire dans une variable?
j'ai changé mon programme, voilà à quoi elle ressemble:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char **argv)
{
char caractere;
int nbdecimal;
long long Binary;
int i;
int tmp=0;
int rt0=0;
int rt1=0;
int rt2=0;
int rt3=0;
int rt4=0;
int rt5=0;
int rt6=0;
int rt7=0;
int rt8=0;
int rt9=0;
int rt10=0;
int rt11=0;
int rt12=0;
int rt13=0;
int rt14=0;
int rt15=0;
printf("Saisir un caractere: ");
scanf("%c", &caractere);
nbdecimal=(int)caractere; // pour transformer le caractere en valeur decimal grace au tableau ascii
printf("Caractere: %c \n", caractere);
printf("nombre decimal: %d \n", caractere);
do{
rt0=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt1=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt2=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt3=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt4=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt5=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt6=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt7=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt8=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt9=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt10=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt11=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt12=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt13=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt14=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt15=nbdecimal%2;
}while(nbdecimal!=0);
Binary= rt0+(rt1*pow(10,1))+(rt2*pow(10,2))+(rt3*pow(10,3))+(rt4*pow(10,4))+(rt5*pow(10,5))+(rt6*pow(10,6))+(rt7*pow(10,7))+(rt8*pow(10,8))+(rt9*pow(10,9))+(rt10*pow(10,10))+(rt11*pow(10,11))+(rt12*pow(10,12))+(rt13*pow(10,13))+(rt14*pow(10,14))+(rt15*pow(10,15));
printf("Binaire: %lld\n", Binary);
tmp=Binary;
for(i=0; Binary==0; i++){
Binary= (Binary/10)%1;
i++;
}
printf("%d", i);
return 0;
}
ouiii j'ai trouvé, merci à tout ceux qui m'ont aidé, voici le programme pour ceux qui le veulent :):
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char **argv)
{
char caractere;
int nbdecimal;
long long Binary;
long long tmp=0;
int i=0;
int j=6;
int rt0=0;
int rt1=0;
int rt2=0;
int rt3=0;
int rt4=0;
int rt5=0;
int rt6=0;
int rt7=0;
int rt8=0;
printf("Saisir un caractere: ");
scanf("%c", &caractere);
nbdecimal=(int)caractere; // pour transformer le caractere en valeur decimal grace au tableau ascii
printf("Caractere: %c \n", caractere);
printf("nombre decimal: %d \n", caractere);
do{
rt0=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt1=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt2=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt3=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt4=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt5=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt6=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt7=nbdecimal%2;
nbdecimal=(nbdecimal/2);
rt8=nbdecimal%2;
nbdecimal=(nbdecimal/2);
}while(nbdecimal!=0);
Binary= rt0+(rt1*pow(10,1))+(rt2*pow(10,2))+(rt3*pow(10,3))+(rt4*pow(10,4))+(rt5*pow(10,5))+(rt6*pow(10,6))+(rt7*pow(10,7))+(rt8*pow(10,8));
printf("Binaire: %lld\n", Binary);
/*tmp=Binary/pow(10,j-1);*/
do{
tmp=Binary/pow(10,j);
printf("z ");
while(tmp%10==1){
printf("z");
i++;
j--;
tmp=Binary/pow(10,j);
}
if(i<7){ /*par exemple le c, ça maffiche 2 fois zz*/
printf(" zz ");
}
while(tmp%10==0){
printf("z");
i++;
j--;
tmp=Binary/pow(10,j);
}
printf(" ");
}while(i<7);
return 0;
}
- Edité par sneekid 30 octobre 2019 à 21:42:32
programme Z-aire
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le crayon la gomme et le papier sont les meilleurs outils du programmeur !