Je dois créer des programmes pour une soutenance en novembre. Je bloque sur un bout d'un programme.J'ai fait un algo qui me donne avec un caractère tapé en binaire sur la table ascii sans fonction. J'ai un problème après il y a un autre bout qui fonctionne mais prend le bit de point faible alors qu'il devrait prendre le bit de point fort.
Y aurait il une technique pour inverser un nombre en binaire.
Exemple 1000011 donne 1100001
Quelqu'un peut me m'aider a trouver sachant L'utilisation de tableaux et/ou de fonctions est interdite dans ce PROJET.
int main(int argc,char**argv){
char alphabet;
int letter;
int binarie=0;
int square0=0;
int square1=0;
int square2=0;
int square3=0;
int square4=0;
int square5=0;
int square6=0;
int number=1000000;
int i=0;
int null=0;
int one=0;
printf("Tapez un caractere:\n");
scanf("%c",&alphabet);
printf("%d\n",alphabet);
letter=alphabet;
while(letter!=0){
if (letter>=64){
letter=letter-64;
binarie=binarie+1000000;
square6=1;
}else if(letter>=32){
letter=letter-32;
binarie=binarie+100000;
square5=1;
}else if(letter>=16){
letter=letter-16;
binarie=binarie+10000;
square4=1;
}else if(letter>=8){
letter=letter-8;
binarie=binarie+1000;
square3=1;
}else if(letter>=4){
letter=letter-4;
binarie=binarie+100;
square2=1;
}else if(letter>=2){
letter=letter-2;
binarie=binarie+10;
square1=1;
}else if(letter>=1){
letter=letter-1;
binarie=binarie+1;
square0=1;
}
}
printf("%d\n",binarie);
printf("%d%d%d%d%d%d%d\n",square6,square5,square4,square3,square2,square1,square0);
return 0;
}
Tenez le code que j'ai fait.
J'ai fait de deux façon le résultat. Le résultat dans une variable et l'autre chaque bit dans une variable.
En fait, c'est tellement tout con que tu as probablement trouvé la méthode la plus compliquée et non-automatisée au possible. Tu t'y prendrais comment avec un binaire de 64 bits ?
int main(void)
{
char letter;
scanf("%c", &letter);
int produit = 1,
revBin = 0;
for(int i = CHAR_BIT-1; i>=0; i--)
{
revBin += (letter & (1<<i))? produit : 0;
produit *= 10;
}
printf("%d\n", revBin);
return 0;
}
Si tu as 16 bits tu changes "CHAR_BIT-1" par 15, par 31 si tu as 32 bits etc... Changer le type des variables de stockage pour qu'elles soient assez grandes.
Mais globalement c'est un peu plus automatisé que de se taper 3 lignes par bit.
Avertissement : Avoir une solution, c'est bien, mais montrer à un jury qu'on comprend ce qui est écrit, qu'on est capable d'expliquer pourquoi on fait comme ça, et de faire en live un exercice du même genre, c'est une autre affaire.
J'ai testé le premier code de mon lien (Reverse bits the obvious way), cela fonctionne
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
unsigned reverse(unsigned int v) {
unsigned int r = v; // r will be reversed bits of v; first get LSB of v
int s = sizeof(v) * CHAR_BIT - 1; // extra shift needed at end
for (v >>= 1; v; v >>= 1) {
r <<= 1;
r |= v & 1;
s--;
}
r <<= s; // shift when v's highest bits are zero
return(r);
}
int main(int argc,char *argv[]) {
if(argc>1)
printf("rev %s = %u\n",argv[1],reverse(atoi(argv[1])));
return(0);
}
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
C'est vrai que mon code n'est pas optimisée mais il ne dépassera pas 128 comme nombre. Mais j'ai une consigne en plus pour cette exercice en particulier .Remarques : • l'utilisation d'opérateurs de manipulation binaire est interdite, • Remarques : •• le résultat doit être affiché en binaire et en décimal.
Sinon merci pour toute votre aide. POur ceux qui pense qu'on peut faire mieux je rappelle pas le droit tableau et fonction et opérateur de manipulation binaire
Sinon merci pour toute votre aide. POur ceux qui pense qu'on peut faire mieux je rappelle pas le droit tableau et fonction et opérateur de manipulation binaire
Pour les opérateurs binaires, fallait le dire plus tôt. Mais quelle connerie ! C'est comme si je demandais à quelqu'un de percer un trou dans un mur, en lui disant: "'t'as pas droit à la perceuse à percussion, mais voilà une chignole" !
- Edité par edgarjacobs 16 octobre 2019 à 20:08:27
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Surtout que pour les décalages on fait des multiplications divisions par 2, et le reste de la division pour avoir le bit de droite. Contrainte sans intérêt.
J'ai réussi. Mon programme marche tout le temps tenez l'énoncé
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.
l'utilisation d'opérateurs de manipulation binaire est interdite, • le résultat doit être affiché en binaire et en décimal.
L'utilisation de tableaux et/ou de fonctions est interdite dans ce PROJET.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
Bonhomme !! | Jeu de plateforme : Prototype.
Le Tout est souvent plus grand que la somme de ses parties.
Bonhomme !! | Jeu de plateforme : Prototype.
Le Tout est souvent plus grand que la somme de ses parties.
Bonhomme !! | Jeu de plateforme : Prototype.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.