Langage C// erreur de segmentation
cedji
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 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
A voir également:
- Langage C// erreur de segmentation
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
- Comment recuperer whatsapp supprimé par erreur - Guide
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!!!
@+
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.
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....
@+
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 version
et pour conversion binaire vers décimal
Autre version
void 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écimal
unsigned 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; }