IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Fonction pour convertir base 10 en Base 2, j'ai fini mais


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Fonction pour convertir base 10 en Base 2, j'ai fini mais
    Bonjour

    Notre prof' nous a donné un DM où on doit écrire une fonction C qui va convertir des nombre donnés en décimal, en binaire

    j'ai fini mais je voudrais savoir si vous aviez des suggestions ou autre parce qu'elle est super pointilleuse

    ah et on doit l'écrire en récursif : c'est bien du récursif que j'ai fait non ? enfin j'ai un while ou quoi mais on peut dire que c'est fait en récursif là ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include <stdio.h>
     
    int convert (int n, int result, int i){
     
    	int e = n/2; // quotient
    	int count = 0; // compteur
    	int resteadd = n%2;
    	while (count < i){ // pour pouvoir ajouter le 1 au nombre, on regarde à quel rang l'ajouter avec 'i'
    		resteadd = resteadd*10;
    		//printf("\nRESTEADD : %d\n",resteadd); DEBUG
    		count++;
    	}
    	result = result + resteadd; // on ajoute le chiffre au reste
    	i++; // on idente les tours
    	//printf("n/2 = %d\n",e); DEBUG
    	//printf ("reste = %d\n", n%2); DEBUG
     
    	if (e != 0)
    		convert(e,result,i); // on recommence si le quotient n'est toujours pas égal à 0
    	/*if (e == 0)
    		return result; // si le quotient = 0, on retourne la valeur*/
    	if (e == 0)
    		printf("\nRESULTAT : %d\n", result);
     
    }
     
     
    int main (int argc, char** argv){
     
    	int result = 0;
    	int tab2[10];
    	int verif;
    	int nombre;
    	printf("Quel nombre voulez-vous convertir en binaire ?");
    	scanf("%d", &nombre);
    	convert(nombre, result, 0);
     
    	//printf("\n RESULTAT : %d \n",verif);
    	return 0;
    }
    en gros je veux être sûr que ce code fait strictement ce qui est demandé ? (j'affiche le résultat avec la fonction blabla)

    Merci de votre aide !

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    c'est bien récursif (terminal), par contre pour que ce soit une fonction il faut rajouter (décommenter) le return

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    salut,

    c'est bien récursif (terminal), par contre pour que ce soit une fonction il faut rajouter (décommenter) le return


    Ah hh oui mais pardon j'ai oublié en fait, j'ai même pas mis le sujet, regarde :

    Nom : Screenshot - 19092015 - 04:00:57.png
Affichages : 4196
Taille : 27,5 Ko


    dans la phrase, on nous dit bien que c'est la fonction qui doit afficher, pas renvoyer, du coup j'me suis dit on va faire pile comme c'est écrit (faut que j'essaye d'avoir vraiment 20/20 à ce truc parce que la suite du semestre est difficile)

  4. #4
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Il y a plus simple. Avec n le nombre à convertir, si n=0 ou 1 alors tu affiches n, si n>1 tu commences par afficher en binaire n/2 puis suivant la parité de n un 0 ou un 1. Ce qui donne un code tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void printb(int n) {
      if (n>1) printb(n/2);
      printf("%d", n%2);
    }
    Bien sûr, ce code ne contient aucune vérification du genre n est positif, …

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par picodev Voir le message
    Il y a plus simple. Avec n le nombre à convertir, si n=0 ou 1 alors tu affiches n, si n>1 tu commences par afficher en binaire n/2 puis suivant la parité de n un 0 ou un 1. Ce qui donne un code tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void printb(int n) {
      if (n>1) printb(n/2);
      printf("%d", n%2);
    }
    Bien sûr, ce code ne contient aucune vérification du genre n est positif, …

    omggg j'me suis cassé la tête de fou pour rien quand même
    c'est énorme
    en fait c'est vrai que quand j'y pense j'avais pas réaliser qu'on devait simplement faire une fonction qui "affiche" l'entier et pas une fonction qui le "construit"
    je vais m'inspirer un peu de ce code pour éliminer qq variables dans mon code, merci ! (j'rends pas ton truc parce que ça me ferait mal de rendre un truc que j'ai pas fait ahah)

    mais merci ça m'a beaucoup aidé !

Discussions similaires

  1. fonction pour convertir une valeur en decimal
    Par zaki_1982 dans le forum VBScript
    Réponses: 6
    Dernier message: 16/02/2009, 13h12
  2. [Galerie] Fonction pour convertir une image en noir et blanc
    Par piotrr dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 10/02/2009, 12h23
  3. Fonction pour convertir un fichier IDX en binaire ?
    Par Marie.B dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 17/12/2008, 14h08
  4. cherche code pour convertir un décimal en base 35
    Par coufcouf dans le forum Langage
    Réponses: 2
    Dernier message: 05/03/2007, 15h44
  5. [C#] Fonction pour convertir string[] vers ArrayList
    Par luimême dans le forum Windows Forms
    Réponses: 6
    Dernier message: 07/04/2005, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo