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 :

mauvaises valeurs en sortie


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut mauvaises valeurs en sortie
    Bonsoir,
    je fais u programme qui demande le nombre de valeurs à entrer dans un tableau, qui demande ensuite d'entrer ces valeurs puis qui les additionne et qui sort enfin le pourcentage.
    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
    #include <stdio.h>
    #define TMIN 1 /* nb tranche d'age */
    #define TMAX 100
    #define PMIN 1  /* pop par tranche d'age */
    #define PMAX 10000000 
    int main(void)
    {
    	double tab[TMAX];
    	int i;
    	int T = 0;
    	double somme = 0;
    	while ( T<TMIN || T>TMAX)
    	scanf("%d",&T);
    	for (i=0; i<T; i++){
    		scanf("%lf", tab);
    		if (tab[i] >= PMIN && tab[i] <= PMAX) continue;
    		somme += tab[i];
    	}
    	for (i=0; i<T; i++)
    		printf("%lf\n", (tab[i]*100)/somme);  /* affiche le pourcentage par tranche d'age */
    	return 0;
    }
    Mais les valeurs de sortie sont étranges. Je pense que le problème se situe au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i=0; i<T; i++){
    		scanf("%lf", tab);
    		if (tab[i] >= PMIN && tab[i] <= PMAX) continue;
    		somme += tab[i];
    Pouvez vous m'aider svp.

  2. #2
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut
    j'ai trouvé une solution.
    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
    /* tranche d'age strohecker guillaume */
    #include <stdio.h>
    #define TMIN 1 /* nb tranche d'age */
    #define TMAX 100
    #define PMIN 1  /* pop par tranche d'age */
    #define PMAX 10000000 
    int main(void)
    {
    	double tab[TMAX];
    	int i;
    	int T = 0;
    	double somme;
    	while ( T<TMIN || T>TMAX)
    	scanf("%d",&T);
    	for (i=0; i<T; i++){
    		scanf("%lf", &tab[i]);
    		if (tab[i] >= PMIN && tab[i] <= PMAX) continue;
    	}
    	for (somme=0, i=0; i<T; i++)
    		somme += tab[i];
    	for (i=0; i<T; i++)
    		printf("%lf\n", tab[i]*100/somme);  /* affiche le pourcentage par tranche d'age */
    	return 0;
    }

  3. #3
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut
    maintenant je voudrais le décomposer en fonction.
    le probleme semble un peu plus complexe car a chaque compilation j'ai des erreurs.
    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
    #include <stdio.h>
    #define TMIN 1 /* nb tranche d'age */
    #define TMAX 100
    #define PMIN 1  /* pop par tranche d'age */
    #define PMAX 10000000 
     /* calcul de la somme */
     la_somme(double *somme, int T, int tab[])
    {
    	int i;
    	for (somme=0, i=0; i< T; i++)
    		somme += tab[i];
    }
     
    int main(void)
    {
    	double tab[TMAX];
    	int i;
    	int T = 0;
    	double somme;
    	while ( T<TMIN || T>TMAX)
    	scanf("%d",&T);
    	for (i=0; i<T; i++){
    		scanf("%lf", &tab[i]);
    		if (tab[i] >= PMIN && tab[i] <= PMAX) continue;
    	}
    	/*for (somme=0, i=0; i<T; i++)
    		somme += tab[i];*/
    	for (i=0; i<T; i++)
    		printf("%lf\n", tab[i]*100.0/la_somme(&somme, T, tab));  /* affiche le pourcentage par tranche d'age */
    	return 0;
    }
    peut-on me donner des conseilles svp.

  4. #4
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Citation Envoyé par emprex Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* calcul de la somme */
     la_somme(double *somme, int T, int tab[])
    {
    	int i;
    	for (somme=0, i=0; i< T; i++)
    		somme += tab[i];
    }
    il faut que tu dises quel est le type de retour de ta fonction. Ici elle ne retourne rien, alors tu mets void :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void la_somme(double *somme, int T, int tab[])
    Citation Envoyé par emprex Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (somme=0, i=0; i< T; i++)
    		somme += tab[i];
    je pense que c'est la valeur pointée par somme que tu veux changer, alors tu mets *somme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    *somme=0;
    for (i=0;i<T;i++) {
        *somme += tab[i];
    }

  5. #5
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut
    merci,
    j'ai corrigé ma fontion calul du résultat,
    maintenant j'ai un problème sur une fonction affichage du résultat. Le compilateur me lance deux warnings à propos du pointeur *double et me parle d'un **double.
    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
    #include <stdio.h>
    #define TMIN 1 /* nb tranche d'age */
    #define TMAX 100
    #define PMIN 1  /* pop par tranche d'age */
    #define PMAX 10000000 
     /* calcul de la somme */
    double la_somme(double *somme, int T, double tab[])
    {
    	int i;
    	*somme=0;
    	for (i=0; i< T; i++)
    		*somme += tab[i];
    	return *somme;
    }
     
    /* affichage de la somme */
    double affiche_le_resultat(double *somme, int T, double tab[])
    {
    	int i;
    	for (i=0; i<T; i++)
    		printf("%lf\n", tab[i]*100.0/la_somme(&somme, T, tab));/* affiche le pourcentage par tranche d'age */
    	return i;
    }
     
    int main(void)
    {
    	double tab[TMAX];
    	int i;
    	int T = 0;
    	double somme = 0;
    	while ( T<TMIN || T>TMAX)
    	scanf("%d",&T);
    	for (i=0; i<T; i++){
    		scanf("%lf", &tab[i]);
    		if (tab[i] >= PMIN && tab[i] <= PMAX) continue;
    	}
    	affiche_le_resultat(&somme, T, tab);
    	return 0;
    }

  6. #6
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Il y a qq confusions.

    Dans ta fonction affiche_le_resultat, somme désigne un pointeur sur un double. Donc, quand tu appelles la fonction la_somme, ce n'est pas la peine de mettre &, sinon tu lui donnes l'adresse de ton pointeur (d'où le **double dans le message).

    Ceci dit, il me semble inutile de donner un pointeur sur somme en paramètre de ta fonction la_somme, puisque maintenant elle te renvoie le résultat.

    Enfin, affiche_le_resultat est censée renvoyer un double alors que tu mets un return i; où i est un int.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par emprex Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	for (i=0; i<T; i++){
    		scanf("%lf", tab);
    Tu passes toujours la même adresse à scanf()...

    Je conseille d'aider l'utilisateur à faire des saisies correctes.

    Après correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Entrer le nombre d'elements entre 1 et 100
    3
    Entrer un element entre 1 et 10000000
    12
    Entrer un element entre 1 et 10000000
    34
    Entrer un element entre 1 et 10000000
    56
    11.764706
    33.333333
    54.901961
     
    Press ENTER to continue.
    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
     
    #include <stdio.h>
     
    #define TMIN 1                  /* nb tranche d'age */
    #define TMAX 100
    #define PMIN 1                  /* pop par tranche d'age */
    #define PMAX 10000000
     
    int main (void)
    {
       double tab[TMAX];
       int i;
       int T = 0;
       double somme = 0;
       do
       {
          printf ("Entrer le nombre d'elements entre %d et %d\n", TMIN, TMAX);
          scanf ("%d", &T);
       }
       while (T < TMIN || T > TMAX);
     
       for (i = 0; i < T; i++)
       {
          do
          {
             printf ("Entrer un element entre %d et %d\n", PMIN, PMAX);
             scanf ("%lf", tab + i);
          }
          while (tab[i] < PMIN || tab[i] > PMAX);
          somme += tab[i];
       }
     
       for (i = 0; i < T; i++)
       {
          /* affiche le pourcentage par tranche d'age */
          printf ("%f\n", (tab[i] * 100) / somme); 
       }
       return 0;
    }

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/07/2007, 11h33
  2. Fonction Get() renvoyant les mauvaises valeurs
    Par jairbubbles dans le forum XML
    Réponses: 1
    Dernier message: 20/11/2006, 12h33
  3. [JSP] addition deux valeurs en sortie d'une jsp
    Par LESOLEIL dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 08/06/2005, 11h13
  4. [langage] foreach, last et valeurs de sortie
    Par Herode dans le forum Langage
    Réponses: 6
    Dernier message: 01/04/2005, 14h37
  5. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28

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