Langage C// erreur de segmentation
cedji
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
voila je dois écrire un programme calculant le codage binaire d'un nombre entier; le problème c'est que quand je simule, il apparait une erreur de segmentation; je pense que cela est dû au nombre "n" qui correspond à la taille du tableau t; je l'ai défini comme un pointeur car il n'est pas fixé
voila les lignes de code
/*Changement de base de numérisation*/
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void CalculBinaire (int a, int*t, int*n)
{
int b;
*n=0;
while (a>=2)
{
b=a/2;
if(a%2==0)
{
t[*n]=0;
*n++;
}
else
{
t[*n]=1;
*n++;
}
a=b;
}
}
void Afficher (int*t,int*n)
{
int i;
printf("\n En codage binaire, on a:\n");
for(i=0;i<=*n;i++)
{
printf("%d",t[i]);
}
}
int main (void)
{
int a;
int*t;
int*n;
printf("Veuillez saisir le nombre que vous voulez afficher en codage binaire:");
scanf("%d",&a);
t=(int*)malloc(n*sizeof(int));
CalculBinaire(a,t,n);
Afficher(t,n);
return 0;
}
merci de votre aide
voila je dois écrire un programme calculant le codage binaire d'un nombre entier; le problème c'est que quand je simule, il apparait une erreur de segmentation; je pense que cela est dû au nombre "n" qui correspond à la taille du tableau t; je l'ai défini comme un pointeur car il n'est pas fixé
voila les lignes de code
/*Changement de base de numérisation*/
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void CalculBinaire (int a, int*t, int*n)
{
int b;
*n=0;
while (a>=2)
{
b=a/2;
if(a%2==0)
{
t[*n]=0;
*n++;
}
else
{
t[*n]=1;
*n++;
}
a=b;
}
}
void Afficher (int*t,int*n)
{
int i;
printf("\n En codage binaire, on a:\n");
for(i=0;i<=*n;i++)
{
printf("%d",t[i]);
}
}
int main (void)
{
int a;
int*t;
int*n;
printf("Veuillez saisir le nombre que vous voulez afficher en codage binaire:");
scanf("%d",&a);
t=(int*)malloc(n*sizeof(int));
CalculBinaire(a,t,n);
Afficher(t,n);
return 0;
}
merci de votre aide
Configuration: Windows XP Firefox 3.0.5
4 réponses
-
Salut,
je comprends pas pourquoi tu mets le dans la fonction void CalculBinaire (int a, int*t, int*n) un argument int *n....
et en effet cet affectation te retournera un segment fault...
t=(int*)malloc(n*sizeof(int)); (Que vaut n???)
Voici le code qui devrait fonctionner...
J'espere ca pourras t'aider!!!
@+#include<stdio.h> #include<math.h> #include<stdlib.h> int CalculBinaire (int a, int*t) { int b; int nb=0; while (a>0) { b=a/2; if(a%2==0) { t[nb]=0; nb++; } else { t[nb]=1; nb++; } a=b; } return nb; } void Afficher (int*t,int n) { printf("\n En codage binaire, on a:\n"); while(n>=0) { printf("%d",t[n]); n--; } } int main () { int a; int t[255]; int n; printf("Veuillez saisir le nombre que vous voulez afficher en codage binaire:"); scanf("%d",&a); n=CalculBinaire(a,t); Afficher(t,n); getchar(); return 0; } -
Salut,
C'est dommage aussi d'utiliser un tableau d'int alors qu'un tableau de char ferait largement l'affaire. -
Salut,
C'est vrai.....avec un truc dans ce genre, plus besoin de tableau et tout le tralala....void CalculBinaire (int a) { printf("\n En codage binaire, on a:\n"); int b; int nb=8; while (nb>0) { b=a&0xFF; b=b>>7; printf("%d",b); a=a<<1; nb--; } }
@+ -
Salut,
Autre versionvoid dec2bin(char *bin,int nb){ int i,j,k,tmp; for(i=0;nb != 0;nb >>= 1){ if(nb & 01) bin[i++] = '1'; else bin[i++] = '0'; } bin[i]='\0'; for(j=0,k=i-1;j<k;++j,--k){ tmp=bin[j]; bin[j]=bin[k]; bin[k]=tmp; } }
et pour conversion binaire vers décimalunsigned bin2dec(char *bin){ int i,j; unsigned dec; for(i=0;bin[i] != '\0';++i) ; for(j=0,dec=0;j<i;++j) dec = dec + ((bin[j] - '0') << (i-j-1)); return dec; }