[c][Resolu]Passage d'un tableau à une fonction

Passage d'un tableau à une fonction [c][Resolu] - C - Programmation

Marsh Posté le 18-05-2004 à 14:04:14    

bon voilou je sais plus trop comment on fais et je n'ai malheuresement pas vu de post traiter de ca  
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. convert (int dec, int bits, char **binaire)
  4. {
  5. int i=0,j;
  6. if ( dec != 1)
  7. {
  8.  do
  9.  {
  10.   *(binaire+i) = dec %2;  <==== probleme
  11.   dec /= 2;
  12.   i++;
  13.  }
  14.  while (dec /2 != 0);
  15.  printf("\n i = %d",i);
  16. }
  17. *binaire [i] = 1;               <==== probleme
  18. for (j=i+1;j<bits;j++)
  19.  *binaire [j] = 0        <===== probleme
  20. for (j=0;j<bits;j++)
  21.  printf("\n *bianiare[%d] %d",j,*binaire[j]);   <======probleme
  22. }
  23. main ()
  24. {
  25. //Declaration
  26. int nb, bits = 10;
  27. char *binaire;
  28. binaire = malloc (10 * sizeof (int));
  29. printf("\nSaisir votre nombre :" );
  30. scanf("%d",&nb);
  31. convert (nb,bits,&binaire);  <====== probleme
  32. }


Message édité par weed le 18-05-2004 à 16:12:21
Reply

Marsh Posté le 18-05-2004 à 14:04:14   

Reply

Marsh Posté le 18-05-2004 à 14:10:56    

voilai j'aimerais ce qu'il faut mettre en parametre quand on appelle la fonction  
 
convert (nb,bits,&binaire);  
 
 
 
je suis presque sur du prototype puisque l'on fais passer l'adresse d'un tableau  
convert (int dec, int bits, char **binaire)  
 
 
pour l'affectation dans la fonction que faut il mettre ?
*(binaire+i) = dec %2;
 
et l'affichage je pense que c'est la meme chose  
printf("\n *bianiare[%d] %d",j,*binaire[j]);
 
 
pour moi on affecte ce qui est pointer de  
ptr => ptr1 => valeur  
donc **ptr
 
enfin bon gcc, mon compilo, n'a pas l'air d'apprecier

Reply

Marsh Posté le 18-05-2004 à 14:30:14    

Reply

Marsh Posté le 18-05-2004 à 14:36:02    

(char *) malloc (10 * sizeof (int))
 
c'est moi ou ...

Reply

Marsh Posté le 18-05-2004 à 14:56:28    

Non ce n'est pas toi...
 
Comment dire...
Weed, que doit faire ton programme?
Deja ton malloc est mauvais, ensuite tu confonds char et int dans tout le reste de ton programme (et je suppose que ce n'est pas l'effet voulu)

Reply

Marsh Posté le 18-05-2004 à 15:07:03    

le but de ma fonction est convertir des nombre en decimal en binaire ...
j'ai utilisé une chaine de caractère pour stocker mes 0 et 1
 

Code :
  1. convert (int dec, int bits, char **binaire)


dec => le nombre decimal
bits => sur combien de bits
binaire => le nombre binaire, c'est une chaine de caractère
 
ex :  
conversion de 7 en binaire  
dec = 7
bits = 6 (sur 6 bits)
binaire = 111 000 (je rajoute des 0)
 
 
 
le malloc, il est pas bon ?
je ne l'ai pas bien caster ?  
sinon je pense que c'est  
binaire = ....
car on on alloue au niveau du pointeur meme et non pas sur ce qui est pointé


Message édité par weed le 18-05-2004 à 15:11:16
Reply

Marsh Posté le 18-05-2004 à 15:11:02    

Faut pas caster les malloc...

Reply

Marsh Posté le 18-05-2004 à 15:20:48    

oki, j'ai modifié  
dans le premier posts,  

Code :
  1. binaire = malloc (10 * sizeof (int));


 
mais ce qui m'ennuie le plus, c'est  

Code :
  1. scanf("%d",&nb);

=> dans le main
 
et l'affectation/affichage des données du tableau dans la fonction :

Code :
  1. *(binaire+i) = dec %2


 
Bien entendu, j'aimerais bien recuperais la valeur binaire, le passage par adresse est donc obligatoire ...


Message édité par weed le 18-05-2004 à 15:26:43
Reply

Marsh Posté le 18-05-2004 à 15:29:43    

déjà :

Code :
  1. binaire = malloc (10 * sizeof(char));


ensuite :

Code :
  1. convert (int dec, int bits, char *binaire)
  2.   {
  3.      int i=0,j;
  4.      if ( dec != 1)
  5.      { 
  6.         do
  7.         {
  8.            binaire[i] = dec %2;
  9.            dec /= 2;
  10.            i++;
  11.         }
  12.         while (dec /2 != 0);
  13.         printf("\n i = %d",i);
  14.      }
  15.      binaire[i] = 1;
  16.        
  17.      for (j=i+1;j<bits;j++)
  18.       binaire [j] = 0;        <===== probleme
  19.      
  20.      for (j=0;j<bits;j++)
  21.       printf("\n bianiare[%d] %d",j, binaire[j]);
  22.   }


et :

Code :
  1. convert (nb, bits, binaire);


Reply

Marsh Posté le 18-05-2004 à 15:30:09    

Ca  " *(binaire+i) = " tu remplaces par "binaire[i] = "
Ensuite, dans le main, binaire est déja un pointeur. Pas la peine de prendre son addresse.
De plus, pourquoi fais tu un malloc avec un sizeof(int) a l'intérieur? Combien de cases tu veux qu'elle ait, ta zone mémoire?

Reply

Marsh Posté le 18-05-2004 à 15:30:09   

Reply

Marsh Posté le 18-05-2004 à 15:39:48    

ca enffet, je me serait pas embeter soit j'aurais creer mis le malloc dans la fonction soit j'aurais declarrement un tableau dans la fonction ....
 
mais la je ne sais pas à l'avance sur combien de bits. Je souhaite integrer cette fonction dans un programme. J'ai mis 10 pour pas m'enbeter au debut car c'est juste pour programmer une fonction.
 
De plus comme cette fonction fera parti d'un programme je dois pouvoir recuperer ma variable binaire ....
 

Code :
  1. convert (nb,bits,&binaire);
  2. prinft ("%s",binaire);

 <=== par exemple
 
 

Reply

Marsh Posté le 18-05-2004 à 15:43:26    

Donc ma question est comment fais ton pour l'affectation/affichage des valeurs d'un tableau, simple dimension, que l'on a transmis à une fonction par adresse ..
 
affectation/affichage dans la fonction bien sur.
 
*(binaire+i) = dec %2; ?


Message édité par weed le 18-05-2004 à 15:44:40
Reply

Marsh Posté le 18-05-2004 à 15:49:51    

On  a déjà répondu, corrigé ton truc, je ne vois pas ce que tu cherches de plus ..

Reply

Marsh Posté le 18-05-2004 à 16:11:59    

oui  
en fait ca marche
merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed