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 :

Multiplication d'arguments entrés


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut Multiplication d'arguments entrés
    Bonsoir,
    Voila j'ai eut ce petite exercice lors d'un examen mais je ne voie absolument pas comment faire
    le voici: Créez un programme qui multiplie tout les arguments qui lui sont fournis, ceux-ci étant suposés être des entiers positifs. le produit des arguments sera envoyer sur stdout. Vous utiliserez la fonction atoi contenue dans le bibliotéque stdlib.h , qui transforme la chaîne de caractére fournis en entier.
    int atoi(const char *s);
    int i=atoi("14");

    i contien après cette instruction 14
    Alors tout d'abord, comment je fait pour créer un programme qui multiplie ces argumants si je ne sait pas d'avance le nombre d'argument entrée?
    ensuite comment fait t'on pour renvoyer cette valeur sur stdout?
    Enfin pourquoi nous donne t'il une fonction "atoi" qui transforme une chaîne de caractére en entier, quel est l'intêret dans cette exercice?

    Désolé de ne pas commencer à mettre le code pour montrer que j'ai cherché avant de poser ces questions, mais j'ai beau feuilleter mon cour/TD/TP je ne vois rien de similaire pour me l'expliquer.
    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Un prototype de la fonction main () est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main (int argc, char **argv)
    argc contient le nombre d'arguments sur la ligne de commande, nom de l'exécutable y compris. Tu connais donc le nombre d'arguments entrés...

    Il te faut une fonction pour transformer tes arguments sur la ligne de commande (des chaînes de caractères) en des entiers pour pouvoir ensuite les multiplier les uns contre les autres. atoi répond à ce besoin. Tu ne peux pas multiplier des chaînes de caractères...

    Renvoyer une valeur sur stdout => printf.

    Tout ceci est très basique, tu es sûr d'avoir tout ton cours sous la main ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Avec ce que tu ma dit j'ai trouver quelque info sur le net car je n'est pas vu sa on utiliser toujours int main(void) enfin j'ai peut être louper un cour
    le soucis la c'est qu'il me renvoie toujours 0, je tape sa dans mon terminal:
    gcc -g -W -Wall truc.c -o truc dans le fichier musique
    ensuite ./Musique/truc

    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
     
    #include<stdio.h>
    #include<stdlib.h>
     
    int conversion(int argc, char *argv[]){
      int i,cpt;
      cpt=0;
      for (i=0;i<=argc;i++){
        int c=atoi(*argv[i]);
        cpt=cpt*c;
      }
      return cpt;
    }
     
    int main (int argc, char **argv){
      printf("le resultat est:%d\n",conversion(argc,argv));
      return 0;
    }

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    normal, tu initiliases a zero et tu multiplies.. Mais 0*100 ca fait toujours zero...


    Ensuite, argv[0] contient le nom du programme...

    Les premiers arguments commencent a 1..

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    resultat = 1
     
    Si argc == 1
       erreur
    sinon
      pour i = 1 a i < argc
          resultat = resultat * atoi(argv[i]) ;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Voila je pense que c'est bon la merci, même si je vois pas comment le tester vu que j'ai que 1 argument qui est le chemin.
    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
     
    #include<stdio.h>
    #include<stdlib.h>
     
    int conversion(int argc, char *argv[]){
      int i,cpt;
      cpt=1;
      if (argc==1) printf("erreur");
      else {
            for (i=1;i<=argc;i++){
            int c=atoi(argv[i]);
            cpt=cpt*c;
            }
      }
      return cpt;
    }
     
    int main (int argc, char **argv){
      printf("le resultat est:%d\n",conversion(argc,argv));
      return 0;
    }

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    sur ma plateforme argv[argc]=NULL

    le dernier atoi(argv[i]) (quand i=argc ou argv[i]=NULL) renvoi 0 ce qui ramène le résultat final à 0.

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Delnir Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int conversion(int argc, char *argv[]){
      int i,cpt;
      cpt=0;
      for (i=0;i<=argc;i++){
        int c=atoi(*argv[i]);
        cpt=cpt*c;
      }
      return cpt;
    }
    i doit commencer à 1 car le premier paramètre devrait être le nom du programme.

    dans la boucle for l'expression i<argc suffit car argv[argc]=NULL

    atoi attends un char* tu lui fournis un char.

    argv est un tableau de pointeur sur chaine (char*argv[])donc argv[i] est la i ème chaîne et *argv[i] est le premier caractère de cette dernière

Discussions similaires

  1. multiples checkbox croisées entre elles
    Par lda75 dans le forum jQuery
    Réponses: 1
    Dernier message: 24/09/2012, 16h29
  2. Passage d'arguments entre 2 fonctions
    Par romain_t dans le forum Débuter
    Réponses: 3
    Dernier message: 27/11/2010, 12h15
  3. [Débutant] GUIDE arguments entré-sortie
    Par Milca85 dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 30/04/2010, 17h10
  4. Probleme d'argument entre dll ISAPI
    Par Korko Fain dans le forum Delphi
    Réponses: 2
    Dernier message: 16/05/2007, 10h14
  5. Multiple points d'entrées dans un JAR
    Par Kikito dans le forum Langage
    Réponses: 2
    Dernier message: 29/09/2006, 11h48

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