Programme en c : transformer de decimal au binair

DevGl Messages postés 151 Statut Membre -  
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,
je suis une studiante 1°ére année génie informatique , et je voulais ecrire un programme concernant transformation d'un nombre décimal au binair , je l'ai esseyé mais sans résultat , lors de la compilation il ne m'affiche aucun problemes, mais dans l'éxécution,je ne obtient aucun résulats,
voila le programme en language C :


#include<stdio.h>
#include<stdlib.h>
int conver(int[],int [],int);
int choisir(int);
main(){
       int A,t1[10],t2[10],m;
       printf("entrer le nombre \n");
       choisir(A);
       printf("voila le nombre que vous avez choisis en binair  %d  ",conver(t1,t2,m));
       system("pause");
       }
       int choisir(int x){
           scanf("%d",&x);}
       int conver(int j[],int k[],int b){
           int i;
           int A= choisir(A);
       j[0]=A/2;
       k[0]=A%2;
       for(i=0;i<=10;i++){
                          j[i+1]=j[i]/2;
                          k[i+1]=j[i]%2;
                          if(j[i]<2){
                                      break;}
                                      return k[i];}}




est que vous pouvez m'aider a retrouver les fautes que j'ai commis ??? s'il vous plaaaaaaaait !!
et merci d'avance :)

3 réponses

Templier Nocturne Messages postés 9989 Statut Membre 1 107
 
Il pique les yeux ton code, il faut l'indenter :(
0
Templier Nocturne Messages postés 9989 Statut Membre 1 107
 
tien, après indentation correcte du code, et sans même l'avoir lu, voilà ce que je trouve :

#include<stdio.h>
#include<stdlib.h>

int conver(int[],int [],int);
int choisir(int);

main(){
	int A,t1[10],t2[10],m;
	printf("entrer le nombre \n");
	choisir(A);
	printf("voila le nombre que vous avez choisis en binair %d ",conver(t1,t2,m));
	system("pause");
}

int choisir(int x)
{
	scanf("%d",&x);
}

int conver(int j[],int k[],int b)
{
	int i;
	int A = choisir(A);

	j[0] = A / 2;
	k[0] = A % 2;
	for(i=0; i <= 10; i++)
	{
		j[i+1] = j[i] / 2;
		k[i+1] = j[i] % 2;
		if(j[i]<2)
		{
			break;
		}
	return k[i]; // ici, tu retournes dans ton for, tu ne fais ta boucle qu'une seule fois
	}
}
0
evilfalcon
 
il ne manque pas de return dans ta fonction choisir?
Et c'est normal que tu utilises deux fois la fonction choisir? tu demandes 2 fois la valeur de A?

j'ai pas de compilateur sous la main, mais je pense qu'un truck comme ça fonctionnerait peut être.

void conver(int A)
{
A=A%2;
int binair = A;
int i = 1; 


do
{
A=A%2;
binair = binair + 10*i*A;
i++;
}while (A>2);

printf("voila le nombre que vous avez choisis en binair %d ",binair);

}
0
ellana29460 Messages postés 805 Statut Membre 172
 
ou faire du

int nombre;
scanf("%d",&nombre);
printf("Voila %d en binaire %b",nombre,nombre);
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
%b, ça n'existe pas...
0
ellana29460 Messages postés 805 Statut Membre 172
 
tant pis, alors. (j'essayais %b en me disant "apres tout, %x existe)
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
main(){
Le bon prototype du main() sans argument est : int main(void) {
Et n'oublie pas de mettre un return 0; en fin pour dire que tout s'est bien passé.

choisir(A);
Tu passes en paramètre la valeur, donc aucune chance que A soit modifié. Il faudrait plutôt faire : choisir(&A);
Et donc redéfinir la fonction saisir() :
void saisir(int *A) {
     scanf("%d",A); /*pas de & car A est un pointeur*/
}

J'ai mis "void" au lieu de "int" car elle ne renvoie rien. Ou alors faut mettre un return.

int A = choisir(A);
Il faut savoir. Soit choisir() te renvoie la valeur choisie par l'utilisateur, soit cela change la valeur passée en paramètre. Si tu choisis le dernier cas : choisir(&A);

for(i=0; i <= 10; i++)
Les tableaux ont 10 éléments. Donc, il faut aller jusqu'à 9 => i<10;
Mais ici, il faut mettre i<9 (vu que tu accèdes à j[i+1]

Dans ta fonction conver(), il faut t'assurer qu'elle renvoie (return) une valeur dans tous les cas, ce qui ne semble pas être le cas ici.

Voilà pour la correction des fautes. Il en reste peut-être d'autres et l'algorithmique me semble également à revoir.

N'hésite pas à reposter ton code en prenant compte de ses remarques en l'indentant correctement.

Cdlt,
0