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 :

Questions d'ordre général et sur un problème [Débutant(e)]


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut Questions d'ordre général et sur un problème
    Bonsoir, j'ai quelque questions à vous poser.
    Tout d'abord, je voudrais savoir si une fonction qui prends en paramètre un int et retourne son nombre de digits existe.
    La raison de cette question est que je souhaite créer une fonction soustraire(int a, int b) et ce sans utiliser l'opérateur '-'. Pour se faire, je dois utiliser la méthode dite du 10 (ou du 9) complément. Je vous fournis un lien avec une explication de la méthode.
    http://en.wikipedia.org/wiki/Ten%27s_complement
    Pour réaliser cette fonction , je ne sais pas trop par où commencer:
    1. connaitre le nbr de digit de a
    2. créer le complement
    3. trouver le résultat
    Pouvez vous me donner des indices sur comment réaliser ces étapes?

    2eme question :
    si je lis un entier de cette maniere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main(int argc, char *argv[])
    {    
            char *pend1 = NULL;
            int nbr1 = (int) strtol(argv[1], &pend1, 10);
                if (*pend1 != 0)
                {
                    fprintf(stderr, "ERROR : you have to put natural numbers as parameters\n");
                    return 1;
                }
    }
    le problème est que si je met un nombre relatif, celui-ci est accepté. Pour refusé les nombres relatifs, comment dois-je m'y prendre? Dois-je créer un test du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(strchr(argv[1],'-'))
    {
           fprintf(stderr, "ERROR : you have to put natural numbers as parameters\n");
    }
    ou y a t il un moyen plus simpatique (comme quelquechose à faire sur strtol par exemple).
    Merci d'avance,
    Jo

  2. #2
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Je ne sais pas si une fonction qui retourne le nombre de "digits" d'un nombre existe dans la lib standard. Si tu ne trouves pas, il est possible d'utiliser la librairie math.h et le log().

    Ca fait un peu lourd je trouve, tu peux aussi utiliser des divisions successives par 10.

    Si ya d'autres solution...

  3. #3
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    je sais pas s'il existe une fonction pareil dans la librarie standard, mais je te propose celle ci que je viens de coder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int nbr_chiffre(int n)
    {
        if(n<10) return 1;
        int result;
        result = 1+nbr_chiffre(n/10);
        return result;
    }

  4. #4
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut
    Un autre problème en fait (pardon pour cet oublie), c'est que je me servirai de la fonction soustraire pour créer une fonction diviser. Ainsi, je ne peux utiliser l'opérateur '/' dans une opération. Le seul que je puisse utiliser est le '+'

  5. #5
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Citation Envoyé par jocelyn54 Voir le message
    Un autre problème en fait (pardon pour cet oublie), c'est que je me servirai de la fonction soustraire pour créer une fonction diviser. Ainsi, je ne peux utiliser l'opérateur '/' dans une opération. Le seul que je puisse utiliser est le '+'
    si c'est de l'utilisation du / dans mon code que vous parlez, je vois pas l'inconvenient vu que ca n'a rien a voir avec le complement que vous voulez creer, d'ailleur vous savez pas ce qui se trouve derriere les autres fonctions du librerie standard .
    ca vous servira juste a savoir le nombre de chiffres, c'est tout, et c est indisponsable.
    sinon , pour le complement a 9, j'ai deja fait du complement a 2, y a une astuce qui s agit de commence de droite a gauche, on garde le premier chiffre non null, et on change tout ce qui suit a son opposé et ca nous donne le complement en 2. peut etre que ca existe une version pour les autres bases, ca t aidera beacoup a simplifier l algorithme

  6. #6
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut
    Citation Envoyé par siegfried64 Voir le message
    sinon , pour le complement a 9, j'ai deja fait du complement a 2, y a une astuce qui s agit de commence de droite a gauche, on garde le premier chiffre non null, et on change tout ce qui suit a son opposé et ca nous donne le complement en 2. peut etre que ca existe une version pour les autres bases, ca t aidera beacoup a simplifier l algorithme
    si tu as encore la version avec la base 2, je la voudrais bien en exemple si possible.

Discussions similaires

  1. Question d'ordre général sur les parseurs
    Par myzu69 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 04/09/2010, 15h00
  2. Réponses: 0
    Dernier message: 13/08/2010, 16h53
  3. Question d'ordre général sur les macros sur excel
    Par tzehani dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 29/08/2007, 05h16
  4. [Portlet] Questions d'ordre général sur les portlets
    Par Chabin dans le forum Portails
    Réponses: 1
    Dernier message: 25/06/2007, 23h20
  5. Trier des chaînes et questions d'ordre général sur l'algorithmique
    Par katrena99 dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 19/03/2007, 10h00

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