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 :

trouver un chiffre entier en base 16


Sujet :

C

  1. #1
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut trouver un chiffre entier en base 16
    Bonjour à tous.

    Je dois créer un code pour trouver la valeur d'un entier en base16
    dans l'immédiat pour y arriver je pars sur l'exemple de mon exercice.
    Avec le chiffre 13, je dois obtenir 1101 ------>(13)10=(1101)2

    donc je fais un simple code juste pour déjà faire correctement mes division :

    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
     
    #include <stdio.h>
     
     
     
    int main(void)
    {
    int base=13;
    int reste;
    int modulo;
     
     
    reste=base/2;
    modulo=base%2;
    printf("le reste est %d\n",reste);
    printf("le modulo est %d\n",modulo);
     
    do
    {
     reste=reste/2;
    modulo=reste%2;
    printf("le reste est %d\n",reste);
    printf("le modulo est %d\n",modulo);
     
    } while (reste =0);
    printf("le reste est %d\n",reste);
    printf("le modulo est %d\n",modulo);
     
    return 0;
    }
    ceci me donne
    le reste est 6
    le modulo est 1
    le reste est 3
    le modulo est 1
    le reste est 0
    le modulo est 1


    et je cherche à obtenir
    le reste est 6
    le modulo est 1
    le reste est 3
    le modulo est 0
    le reste est 1
    le modulo est 1
    le reste est 0

    quel est mon erreur ?

  2. #2
    Membre averti
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Points : 411
    Points
    411
    Par défaut
    Salut bosk1000,

    Je n'ai pas regardé l'algorithme, mais en revanche cette ligne :

    devrait être

    afin qu'elle réalise bien une comparaison et non pas une affectation.


    Eks

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tu calcules le modulo sur le reste suivant.
    Dans la boucle, inverse le calcul du modulo et du reste.
    Et comme déjà dit, ton test de sortie de boucle n'est pas bon.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 50
    Points
    50
    Par défaut trouver un chiffre en base 2
    Bonjour,

    Je trouve que l'affichage du reste dans ton calcule porte a confusion, tu ne devrait afficher que le nombre qui t’intéresse soit le modulo pendant ton calcule.
    ensuite, comme l'a dit dinobogan, ton calcule modulo/reste est inversé.
    Ta condition de sorti devrait être
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    while (reste>(base-1))
    tant que ton reste est supérieure au dernier nombre admissible par ta base soit N-1.
    A la sortie de ta boucle, tu affiche le reste qui peut être pertinent.
    Après libre a toi d'afficher tout les reste au fur et a mesure.
    Attention a ton titre, trouver un chiffre en base 16, tu converti en base 2.

  5. #5
    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
    Bonjour,

    en plus des remarques précédentes, je me permets d'ajouter que ton vocabulaire est pour le moins flou et mal maîtrisé. Dans le code que tu soumets tu appelles base le nombre à convertir ce qui est mal venu pour une personne cherchant à comprendre ce que tu essaies de faire. De plus dans une division ce que tu appelles reste n'est pas le reste mais le quotient, le reste étant le résultat du modulo. Par exemple pour la division 123/45, 123 est le dividende et 45 le diviseur. Cette division lorsqu'elle est effectuée donnera un quotient de 2 et un reste de 33 : 123 = 2*45+33.

    Quand tu regardes ce que tu fais à la main ça donne :

    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
    nombre=13
    base=2
    résultat=""
     
    1. nombre=13 
        comme nombre>=base : dividende=13 diviseur=base => quotient=6 reste=1
                             résultat="1" (on ajoute le reste au début résultat qui au départ est vide)
     
    2. nombre=6 (l'ancien quotient)
        comme nombre>=base : dividende=6 diviseur=base => quotient=3 reste=0
                             résultat="01" (l'ancien résultat avec le reste devant)
     
    3. nombre=3 (l'ancien quotient)
        comme nombre>=base : dividende=3  diviseur=base =>quotient=1 reste=1
                             résultat="101" (on rajoute toujours le reste devant)
     
    4. nombre=1 (l'ancien quotient)
        comme nombre<base    : resultat="1101" (on rajoute nombre devant)
                               c'est fini on arrête, résultat contient la réponse.
    De là tu peux créer un algorithme de changement de la base 10 vers n'importe quelle autre base.
    Attention à ne pas confondre chiffre et nombre. Les chiffres sont les caractères que tu utilises pour écrire un nombre. Cela semble être du pinaillage mais je t'assure que non.

  6. #6
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    Merci à tous pour vos intervention

    effectivement picodev, j'ai été très léger sur les définition.

    je repars avec vos éléments pour poursuivre
    je vous dit ce qu'il en est ce soir

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bosk1000 Voir le message
    Je dois créer un code pour trouver la valeur d'un entier en base16
    dans l'immédiat pour y arriver je pars sur l'exemple de mon exercice.
    Avec le chiffre 13, je dois obtenir 1101 ------>(13)10=(1101)2
    Bonjour

    Tu n'es pas obligé de passer par la base 2 pour arriver à la base 16. Certes la transformation "base 2 => base 16" en est facilitée par le fait que 16=2^4 donc suffit de découper le nombre à convertir depuis la base 2 par groupe de 4 chiffres (ex 10111010(2) = 1011(2) puis 1010(2) soit B(16) puis A(16) soit BA(16)) mais tu peux aussi utiliser la méthode traditionnelle des divisions du nombre initial (resté en base 10) par la base à atteindre...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    mon énoncé me demande de faire les division successive

    ma grosse erreur fut de passer par "do... while", alors que par "while", j'ai du progrès

    pour plus de compréhension j'ai corrigé le nom de mes variables comme picodev me la conseiller

    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
     
     
    #include <stdio.h>
     
    int main(void)
    {
     
    int nombre=13;
    int quotient;
    int reste;
     
    quotient=nombre/2;
    reste=nombre%2;
    printf("le quotient est %d\n",quotient);
    printf("le reste est %d\n\n",reste);
     
    while (quotient!=0)
      {
        reste=quotient%2;
        quotient=quotient/2;
        printf("le quotient est %d\n",quotient);
        printf("le reste est %d\n\n)",reste);
    }
     
    return 0;
    }
    j'obtiens bien

    le quotient est 6
    le reste est 1

    le quotient est 3
    le reste est 0

    le quotient est 1
    le reste est 1

    le quotient est 0
    le reste est 1


    maintenant il faut que je cherche comment conserver tous les résultats obtenu dans les "reste" successif et les afficher dans l'ordre inverse
    soit dans ce cas 1011

    est-ce que les conserver dans un tableau est une bonne solutions ou avez-vous une autre méthode pour un novice à me conseiller ?

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bosk1000 Voir le message
    mon énoncé me demande de faire les division successive
    Ce qui n'explique pas pourquoi tu as parlé de "trouver un nombre en base 16" alors que tu programmes la recherche du nombre en base 2

    Citation Envoyé par bosk1000 Voir le message
    maintenant il faut que je cherche comment conserver tous les résultats obtenu dans les "reste" successif et les afficher dans l'ordre inverse
    soit dans ce cas 1011

    est-ce que les conserver dans un tableau est une bonne solutions ou avez-vous une autre méthode pour un novice à me conseiller ?
    Alors déjà l'ordre inverse ce n'est pas "1011" (soit 11, qui ne peut pas donner un quotient de 6 à la première itération) mais "1101" (13).
    Sinon effectivement un tableau de char est une très bonne idée. Surtout que si tu rajoutes un flag -1 après le dernier caractère tu pourras alors facilement trouver la fin pour ensuite remonter vers le début.

    Et pour info, la taille de ton tableau final (que tu ne connais "à priori" pas à l'avance) est donnée par la formule "nombre de chiffres en base 2" = log(nombre initial) / log(2) + 1 (+ 1 pour le "-1").
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ce qui n'explique pas pourquoi tu as parlé de "trouver un nombre en base 16" alors que tu programmes la recherche du nombre en base 2
    la base 2 est la première étape de mon exo



    Citation Envoyé par Sve@r Voir le message
    Alors déjà l'ordre inverse ce n'est pas "1011" mais "1101".
    je m'exprime mal ce que j'ai appeler ordre inversé est due au faite que je pensais à la valeur de reste en mémoire qui modifie à chaque passage de la boucle


    Citation Envoyé par Sve@r Voir le message
    Sinon effectivement un tableau de char est une très bonne idée. Surtout que si tu rajoutes un flag -1 après le dernier caractère tu pourras alors facilement trouver la fin pour ensuite remonter vers le début.
    pourquoi faire un tableau en char et non en int puisque je veux stocker des valeur int ?

    Citation Envoyé par Sve@r Voir le message
    Et pour info, la taille de ton tableau final (que tu ne connais "à priori" pas à l'avance) est donnée par la formule "nombre de chiffres en base 2" = log(nombre initial) / log(2) + 1 (+ 1 pour le "-1").
    eux....la sur le calcul j'ai pas tout suivie :
    nombre de chiffres en base 2" = log(nombre initial) / log(2) + 1 (+ 1 pour le "-1")
    log ? que veux dire par log
    nombre initial : le nombre que je saisie ( 13 pour mon exemple)
    (+ 1 pour le "-1") ? je ne comprend pas non plus

  11. #11
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    je suis partie sur un tableau en int ne sachant pas comment gérer les char avec des valeur int.

    toujours sur mon exemple avec 13, j'ai un code qui fait buguer le programme
    ça doit venir du premier "i++"

    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
    41
    42
    43
    44
    45
    46
     
    #include <stdio.h>
     
    int main(void)
    {
    /*declaration des variables*/
    int nombre=13;
    int quotient;
    int reste;
    int i=0;
    double tableau [i];
     
    /*calcul du premier quotient et du premier reste*/
    quotient=nombre/2;
    reste=nombre%2;
    printf("le quotient est %d\n",quotient);
    printf("le reste est %d\n",reste);
     tableau[1]=reste;
      printf("la valeur %d du tableau est %d\n\n",i,tableau [i]);
    i++;
        printf("la valeur de i est %d\n",i);
     
     
    /*boucle pour la succession de division et pour remplir le tableau*/    
     
       while (quotient!=0)
       {
        reste=quotient%2;
        quotient=quotient/2;
        printf("le quotient est %d\n",quotient);
        printf("le reste est %d\n)",reste);
        tableau[i]=reste;
     
        printf("la valeur %d du tableau est %d\n\n",i,tableau [i]);
        i++;
        }
     
    /*affichage du tableau*/
    i=0;
    for(i=0;i<5;i++)
    {
        printf("la valeur %d du tableau est %d\n",i,tableau [i]);
    }
     
    return 0;
    }

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bosk1000 Voir le message
    pourquoi faire un tableau en char et non en int puisque je veux stocker des valeur int ?
    Parce qu'un char est un nombre codé sur 8 bits. Sa plage de valeurs va de -128 à +127 donc largement capable de stocker la valeur 0 ou 1...

    Citation Envoyé par bosk1000 Voir le message
    eux....la sur le calcul j'ai pas tout suivie :
    nombre de chiffres en base 2" = log(nombre initial) / log(2) + 1 (+ 1 pour le "-1")
    log ? que veux dire par log
    nombre initial : le nombre que je saisie ( 13 pour mon exemple)
    (+ 1 pour le "-1") ? je ne comprend pas non plus
    "log" signifie "logarithme" (ici décimal). Il s'agit d'une fonction étudiée en première scientifique qui, pour tout nombre "x", donne un nombre "y" tel que 10^y=x.
    Cela permet de transformer les multiplications en additions (log(xy)=log(x)+log(y)) et les puissances en multiplications (log(x^y)=y * log(x))

    Cette fonction est issue de la fonction de base "ln" qui est le logarithme népérien. C'est le même principe mais ln(x)=y tel que e^y=x (le nombre "e" étant la base de ln et valant approximativement 2.71828). D'ailleurs on peut étendre ce principe à n'importe quelle base "B" en disant alors que logB(X) = Y tel que B^Y=X. Et logB(X)=ln(X)/ln(B).

    Ces deux fonctions sont disponibles sur les calculatrices scientifiques et aussi dans la bibliothèque mathématique du C. Or il se trouve que par le jeu des mathématiques, log(nombreX)/log(base) (en division entière) donne le nombre de caractères nécessaires pour écrire le nombreX dans la base en question (à 1 près dû à la troncature décimale). D'ailleurs t'as qu'à essayer: log(421)/log(10)=2,62 et en rajoutant 1 à la partie entière (2) cela donne 3 (précisément le nombre de caractères nécessaires pour écrire "421".
    Donc si tu veux stocker "421" dans un tableau de chars il te faudra un tableau de 3 éléments pour stocker le "4", le "2" et le "1". Si en plus tu veux rajouter le flag "-1" il t'en faudra un 4°...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    j'ai trouvé le bug, la declaration du tableau j'avais mis double en copiant une info d'un ancien code
    je regarde ce que tu m'as dit pour char

  14. #14
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    Citation Envoyé par Sve@r Voir le message

    Ces deux fonctions sont disponibles sur les calculatrices scientifiques et aussi dans la bibliothèque mathématique du C. Or il se trouve que par le jeu des mathématiques, log(nombreX)/log(base) (en division entière) donne le nombre de caractères nécessaires pour écrire le nombreX dans la base en question (à 1 près dû à la troncature décimale). D'ailleurs t'as qu'à essayer: log(421)/log(10)=2,62 et en rajoutant 1 à la partie entière (2) cela donne 3 (précisément le nombre de caractères nécessaires pour écrire "421".
    Donc si tu veux stocker "421" dans un tableau de chars il te faudra un tableau de 3 éléments pour stocker le "4", le "2" et le "1". Si en plus tu veux rajouter le flag "-1" il t'en faudra un 4°...
    Misère, avec mon pauvre bac compta décrocher en 1993, je suis pas apte à assimiler tout ça en claquant des doigts....
    déjà ma fille qui est en bac s, qui hallucinait que j'apprenne le C sans connaitre les base2, base10 et base16...

    d’ail leur garce à elle, j'ai pue comprendre ce que tu m'a expliqué
    "elle me demande si t'es pas prof de S I"
    du coût je cherche comment faire le calcul de logarithme en c
    merci

  15. #15
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    j'ai reussi la taille du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int tailletableau;
     
    /*definition de la taille du tableau*/
     tailletableau =  log(nombre)/ log(2)+1;
    printf("la taille du tableau est %d\n",tailletableau);
    mais le code complet plante, je dois me tromper dans des définitions de variable


    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
     
    #include <stdio.h>
    #include <math.h>
    #include <errno.h>
     
    int main(void)
    {
    /*declaration des variables*/
    int nombre=13;
    int quotient;
    int reste;
    int tailletableau;
    int i=0;
    int tableau [tailletableau];
     
    /*definition de la taille du tableau*/
     tailletableau =  log(nombre)/ log(2)+1;
    printf("la taille du tableau est %d\n",tailletableau);
     
     
    /*calcul du premier quotient et du premier reste*/
    quotient=nombre/2;
    reste=nombre%2;
    printf("le quotient est %d\n",quotient);
    printf("le reste est %d\n",reste);
    tableau[1]=reste;
    printf("la valeur %d du tableau est %d\n\n",i,tableau [i]);
    i++;
    printf("la valeur de i est %d\n",i);
     
     
    /*boucle pour la succession de division et pour remplir le tableau*/
     
       while (quotient!=0)
       {
        reste=quotient%2;
        quotient=quotient/2;
        printf("le quotient est %d\n",quotient);
        printf("le reste est %d\n)",reste);
        tableau[i]=reste;
     
        printf("la valeur %d du tableau est %d\n\n",i,tableau [i]);
        i++;
        }
     
    /*affichage du tableau*/
    i=0;
    for(i=0;i<tailletableau;i++)
    {
        printf("la valeur %d du tableau est %d\n",i,tableau [i]);
    }
     
    return 0;
    }
    si quelqu'un vois ce qui est source de bug,
    merci

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bosk1000 Voir le message
    je suis partie sur un tableau en int ne sachant pas comment gérer les char avec des valeur int.
    Exactement de la même façon: char toto=123; printf("%d, %d, %d\n", toto, toto-1, toto+1)...

    Citation Envoyé par bosk1000 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i=0;
    /*calcul du premier quotient et du premier reste*/
    quotient=nombre/2;
    reste=nombre%2;
    tableau[1]=reste;
    printf("la valeur %d du tableau est %d\n\n",i,tableau [i]);
    si quelqu'un vois ce qui est source de bug,
    Ben c'est assez évident non ??? Tu remplis tableau[1] puis tu vas afficher tableau[0].
    Accessoirement je ne comprends pas pourquoi tu as mis le "premier" calcul à part. Si je veux convertir 13 en binaire, et que j'écris
    • 13/2=6, reste 1
    • 6/2=3, reste 0
    • 3/2=1, reste 1
    • 1/2=0, reste 1

    Les 4 lignes ayant exactement la même forme, je ne vois pas pourquoi j'irai programmer la première dans un endroit différent des 3 autres...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  17. #17
    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
    Bonjour,

    ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    int tailletableau;
    ...
    int tableau [tailletableau];
     
    /*definition de la taille du tableau*/
     tailletableau =  log(nombre)/ log(2)+1;
    Ce que tu fais n'est pas correct, il faut revoir les déclarations de tableaux en C et ne pas oublier que log(0) posera des problèmes.

    Je pense que le plus simple pour toi serait de déclarer un tableau de taille fixe. Un tableau de longueur 65 sera suffisant (vois-tu pourquoi 65 est suffisant ?) :
    L'appeler avec un nom plus significatif (comme resultat ou nombre_converti) serait le bienvenu.

    Les char c'est bien aussi car tu pourras stocker directement dans ce tableau le résultat sous forme de chaîne de caractères affichable. Par exemple pour 13 en base 2 tu stockerais la chaîne "1101" et non les entiers (1,1,0,1).
    Cela t'évitera d'avoir à manipuler ton tableau pour l'afficher lorsque tu convertiras vers des bases b>10 ...
    Enfin tout dépend aussi de l'énoncé de ton exercice.

  18. #18
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par picodev Voir le message
    Les char c'est bien aussi car tu pourras stocker directement dans ce tableau le résultat sous forme de chaîne de caractères affichable. Par exemple pour 13 en base 2 tu stockerais la chaîne "1101" et non les entiers (1,1,0,1).
    Cela t'évitera d'avoir à manipuler ton tableau pour l'afficher lorsque tu convertiras vers des bases b>10 ...
    Là je ne suis pas trop d'accord. J'y avais pensé aussi au début mais ensuite je me suis dit qu'il y aurait sûrement une phase "recalcul inverse". Et je me suis dit alors que lui faire faire '1' - '0' pour trouver la valeur 1 serait au-delà de ses connaissances.

    Donc j'ai préféré privilégier "exactitude des valeurs du tableau" en laissant le problème de l'affichage rester un problème mineur...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  19. #19
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    en suivant vos conseil j'ai réussi cette première etape

    j'ai mis un tableau en int 65, mais je ne sais pas pourquoi je dois suivre ce chiffre,
    j'ai effectivement tout mis dans la boucle et supprimer la première partie

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #include <stdio.h>
     
    int main(void)
    {
    /*declaration des variables*/
    int quotient=0;
    int base2=0;
    int reste;
    int i=0;
    int tableau[65];
    int compteur_tableau=0;
     
    printf ("veuiller saisir un nombre entier :\n");
    scanf("%d",&base2);
     
    quotient=base2;
     
    /*boucle pour la succession de division et pour remplir le tableau*/
     
       while (quotient!=0)
       {
        reste=quotient%2;
        quotient=quotient/2;
        printf("le quotient est %d\n",quotient);
        printf("le reste est %d\n)",reste);
        tableau[i]=reste;
     
        printf("la valeur %d du tableau est %d\n\n",i,tableau [i]);
        i++;
       compteur_tableau++;
        }
     
    /*affichage du tableau*/
    i=0;
    /*for(i=0;i<tailletableau;i++)*/
    for(i=0;i<compteur_tableau;i++)
    {
        printf("la valeur %d du tableau est %d\n",i,tableau [i]);
        }
     
    printf("la base2 du chiffre %d est ",base2);
            for(i=0;i<compteur_tableau;i++)
    {
        printf("%d",tableau [i]);
    }
    printf("\n");
     
    return 0;
    }
    heureusement que vous êtes la, car les cours educatel c'est pas la joie... Voir plutôt ces cours C.
    j'en suis maintenant à essayer de comprendre la suite de l'enoncé :
    Généraliser le programme de façon à entre le nombre n à traduire et la base b dans laquelle on veut le traduire.
    On pourra mettre une instruction pour s'assurer que la base entrée est bien inférieure à10.


    n c'est le chiffre que j'entre au clavier. mais après je saisie pas ce que l'énoncé demande.
    Si quelqu'un comprend ça m'arrange, sinon je bloque et faut que j'arrive à avoir le prof au téléphone.

  20. #20
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    il s'agit de demander n et b, et d'écrire n.

    Ca doit être la meme chose sauf qu'au lieu de 2 dans le code, il faut avoir "base".
    Je t'encourage à faire une fonction dédiée.

    J'espère que ca ne te coute pas trop cher, ces cours
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Erreur 523: impossible de trouver la dll de la base de donnees
    Par franck SEFIC dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 17/04/2008, 14h25
  2. Obtenir la valeur d'un bit of un chiffre entier
    Par Xavier dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/08/2007, 11h44
  3. litéral entier en base binaire
    Par Nico57 dans le forum Langage
    Réponses: 12
    Dernier message: 14/09/2006, 01h53
  4. Ou trouver les composants de data base ( DBGO )
    Par Nadirov dans le forum Delphi
    Réponses: 2
    Dernier message: 14/08/2006, 14h15
  5. Trouver les tables d'une base de données access
    Par boss_gama dans le forum ASP
    Réponses: 2
    Dernier message: 22/06/2006, 11h56

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