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 :

somme produit et moyenne


Sujet :

C

  1. #1
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut somme produit et moyenne
    Bonjour

    Je dois réaliser un programme qui lit N nombres entiers au clavier et qui affiche leur somme ,leur produit et leur moyenne . Le nombre N est à entrer au clavier .

    J'ai fait ce code :

    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
    #include<stdio.h>
     
    int main(int argc,char *argv[])
    {
    	int N,n=0,variablesTapees;
    	long somme=0,produit=1;
    	double moyenne=0;
     
    	printf("Veuillez taper une valeur pour designer le nombre de valeurs desirees :");
    	scanf("%i",&N);
     
    variablesTapees=N;
     
    	if(N==0)printf("pas de solution au probleme\n");
     
    	while(N!=0)
    	{
    		printf("Veuillez taper une valeur :");
    		scanf("%i",&n);
    		printf("%i\n",n);
     
    		somme+=n;
    		produit*=n;
    		N--;
    	}
     
    	moyenne=somme/variablesTapees;
     
    	printf("somme=%ld,produit=%ld,moyenne=%f\n,somme,produit,moyenne");
     
    	return 0;
    }
    mais ça ne fonctionne pas et comme d'habitude je ne comprends pas pourquoi ?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Qu'est ce qui ne fonctionne pas, la moyenne est fausse ?

    Cette ligne là produit un résultat incorrect car la division est une division entière et donc le résultat sera un nombre entier (stocké dans un double)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moyenne=somme/variablesTapees;
    Il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moyenne= (double)somme / (double)variablesTapees;
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Merci de ton aide

    J'ai vraiment beaucoup de difficultés pour la rigueur et la logique . Je pense que pour y parvenir je dois pratiquer encore et encore ? a moins qu'il n'existe une autre solution ? Mais bon ça m'étonnerait

  4. #4
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Je comprends pas pourquoi ce programme plante ?
    Je pense que je dois mal écrire la boucle for ?

    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>
     
    int main(int argc,char *argv[])
    {
    	/*déclaration des données*/
    	int N,n,variablesTapees=0;
    	long somme=0,produit=1;
    	double moyenne;
     
    	/*saisie des données*/
    	printf("Taper un nombre N de valeurs :");
    	scanf("%i",&N);
     
    	N=variablesTapees;
     
    	/*boucle permettant les calculs désirés*/
    	for(N;N!=0;N--)
    	{
    		printf("Veuillez taper une valeur :");
    		scanf("%i",&n);
    		somme+=n;
    		produit*=n;
    	}
     
    	moyenne=(double)somme/(double)variablesTapees;
     
    	/*affichage des résultats*/
    	printf("somme=%ld,produit=%ld,moyenne=%f\n",somme,produit,moyenne);
     
    	return 0;
    }

  5. #5
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	int N,n,variablesTapees=0;
    .... 
    	N=variablesTapees; // donc N==0
     
    	/*boucle permettant les calculs désirés*/
    	for(N;N!=0;N--)
     // N; ne sert à rien N!= 0 est faux -> la boucle n'est jamais exécutée
    A quoi sert le code
    puisqu'immédiatement derriere on fait
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  6. #6
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    D'accord . Je vais me servir d'une autre variable comme compteur pour la boucle.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    D'accord . Je vais me servir d'une autre variable comme compteur pour la boucle.
    Sans vouloir être vexant, je pense que là il faut repartir des bases de la programmation...

  8. #8
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    je suis désolé de vous embêter mais franchement je cherche à comprendre le mécanisme du langage (Et en plus il me semble que cette partie du forum s'intitule "Débuter" ,mais bon) .

    Je n'arrive pas à comprendre le mécanisme :

    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
    #include<stdio.h>
     
    int main(int argc,char *argv[])
    {
    	int N;
    	double fact;
     
    	printf("Veuillez entrer un nombre : ");
    	scanf("%d",&N);
     
    	while(N>0)
    	{
    		fact=(double)N*(double)(N-1)
    		N=N-1;
    	}
     
    	printf("La factorielle du nombre est %f\n",fact);
     
    return 0;
    }
    Pour moi ce code est bon puisque je demande à l'utilisateur une valeur du nombre N , je réalise la boucle pour obtenir sa factorielle en décrémentant cette valeur et j'obtiens le résultat avec le printf ?
    Où est-ce que je me foire ? n a bien une valeur qui est décrémentée et le calcul de la factorielle s'effectue tant que N est supérieure à 0 ce qui doit forcément arrivé puisque j'enlève 1 à N à chaque passage de la boucle ?

  9. #9
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Je crois que j'ai compris

    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
    #include<stdio.h>
     
    int main(int argc,char *argv[])
    {
    	int N;
    	double fact=1;
     
    	printf("Veuillez entrer un nombre : ");
    	scanf("%d",&N);
     
    	while(N>0)
    	{
    		fact*=N;
    		N--;
    	}
     
    	printf("La factorielle du nombre est %f\n",fact);
     
    return 0;
    }
    Je perdais la valeur de fact à chaque passage de la boucle pour finalement arriver à la valeur 0 de N.

    Serais-je sur le point d'y arriver ?

  10. #10
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    par contre je ne comprend pas ce code

    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()
    {
    	int N,I;
    	double fact;
     
    	do
    	{
    		printf("Entrez un nombre au clavier :");
    		scanf("%d",&N);
    	}while(N<0);
     
    	I=1;
    	fact=1;
     
    	while(I<=N)
    	{
    		fact*=I;
    		I++;
    	}
     
    	printf("%d! =%.0f\n",N,fact);
     
    	return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    do
    	{
    		printf("Entrez un nombre au clavier :");
    		scanf("%d",&N);
    	}while(N<0);
    Pour moi cette boucle demande à chaque fois de taper et d'afficher un nombre tant qu'il n'est pas égal à 0 ? Hors à l'exécution Je ne vois afficher qu'une fois le nombre ? Alors popurquoi créer une boucle ?

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    La factorielle ne peut calculer qu'avec des nombres positifs. Donc, N doit être positif.

    Ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    do
    {
       printf("Entrez un nombre au clavier :");
       scanf("%d",&N);
    }while(N<0);
    permet de boucler tant que N est plus petit que zéro. Cela interdit donc de traiter le calcul de la factorielle avec un nombre négatif.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. somme produit macro
    Par vilaf dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/06/2009, 16h53
  2. ecart type: Somme((1-[pvm]/[moyenne])^2)
    Par bmad1 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 03/10/2007, 15h24
  3. [Requete] Faire une somme puis une moyenne
    Par Mou dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/05/2007, 10h09
  4. cmt calculez la somme et la moyenne en access
    Par elhosni dans le forum Access
    Réponses: 4
    Dernier message: 31/10/2005, 21h07

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