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 :

Petite précision sur un programme


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Par défaut Petite précision sur un programme
    Bonjour,

    Ce programme calcule les somme produit et moyenne d'une série de chiffres tapée au clavier,série qui prend fin quand on tape 0 .

    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>
     
    main()
    {
    	int X;/*le chiffre courant*/
    	int N=0;/*le compteur des données*/
    	int SOM=0;/*la somme actuelle*/
    	long PROD=1;/*le produit actuel-type long à cause de la grandeur du résultat*/
     
    	do
    	{/*saisie des données (pour perfectionnnistes)*/
    		printf("Entrez le %d%s chiffre : ",(N+1),(N)?"e":"er");
    		scanf("%d",&X);
     
    		if(X<0||X>9)printf("\a");
    		else if(X)
    		{
    			N++;
    			SOM+=X;
    			PROD*=X;
    		}
    		else if(!X&&N>0)
    		{
    			/*seulement si au moins un chiffre a été accepté*/
    				printf("La somme des chiffres est %d\n",SOM);
    			    printf("Le produit des chiffres est %ld\n",PROD);
    				printf("La moyenne des chiffres est %f\n",(float)SOM/N);
    		}
    	}while(X);
     
    	return 0;
    }
    Ma question se porte sur la ligne 22 et l'instruction
    else if(!X&&N>0)
    Je voudrais juste savoir si c'est important de mettre '&&N>0' ou si c'est inutile ?

  2. #2
    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
    Citation Envoyé par chicabonux Voir le message
    Je voudrais juste savoir si c'est important de mettre '&&N>0' ou si c'est inutile ?
    c'est surtout que c'est l'autre élément qui est inutile

    • Premier if : tu testes si X est strictement négatif ou strictement supérieur à 9
    • premier else : tu testes si X n'est pas nul (donc compris entre 1 et 9)
    • deuxième else : le cas qui reste est X = 0


    le N>0 est nécessaire, car cela participe au nombre, alors qu'un zéro en tête ne change rien..

    Note :
    Mais je viens de voir que ton while est while(X)

    Donc ton dernier else ne sert à rien..

    Il faut juste mettre ton print à la sortie du do..while..

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Par défaut
    Ce programme calcule les somme produit et moyenne d'une série de chiffres tapée au clavier,série qui prend fin quand on tape 0
    Ben justement cette précision est importante pour connaître la fin du programme ? Où alors je comprends encore mal le déroulement du programme ?

  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
    regarde ma note..

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Par défaut
    ok merci

  6. #6
    Membre averti
    Profil pro
    Développeur C#, Python, dans la carte à puce
    Inscrit en
    Mars 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C#, Python, dans la carte à puce
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 46
    Par défaut
    Je trouve pas clair cette expression :
    On est toujours obligé de réfléchir à la priorité des opérateurs, alors que de belles parenthèses, c'est pratique.

    D'ailleurs, là je pensais que c'était équivalent à
    mais il semblerait que je me sois trompé

    Moi, j'aime les parenthèses

    (et il faut que révise les priorités des opérateurs )

  7. #7
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par gwenBZH Voir le message
    ...
    D'ailleurs, là je pensais que c'était équivalent à
    mais il semblerait que je me sois trompé
    Oui, tu t'es trompé.
    Personnellement, j'écrirai explicitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    do
    {
    ....
       if(X<0||X>9)printf("\a");
       else if(X!=0)
    ....
            else if(X==0 && N>0) // et comme le dit souviron34 le X==0 est inutile
    ...
    }while (x !=0)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Par défaut
    Voilà maintenant un programme qui calcule à l'écran un nombre lu à rebours qui contient une suite de chiffres non nuls ,terminée par zéro et en controlant qu'il s'agisse vraiment de chiffres .

    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
    #include<stdio.h>
     
    main()
    {
    	int X,N=0;
    	long VALD=1,NOMB=0;
     
    	do
    	{
    		printf("Entrez le %d%s chiffre : ",(N+1),(N)?"e":"er");
    	        scanf("%d",&X);
     
    		if(X<0||X>9)printf("\a");
    		else if(X)
    		{
    			NOMB+=VALD*X;
    			N++;
    			VALD*=10;
    		}
    		else printf("La valeur du nombre renverse est %ld\n",NOMB);
     
    	}while(X);
     
    	return 0;
    }

    Ce code ne vérifie pas si ce qui est tapé au clavier est un chiffre ? Comment réaliser ce contrôle ?
    (Le code est un corrigé d'un exercice à effectuer )

  9. #9
    Expert confirmé
    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
    Par défaut
    Ce code ne vérifie pas si ce qui est tapé au clavier est un chiffre ? Comment réaliser ce contrôle ?
    La première chose est de vérifier la valeur de retour de scanf(). Mais ceci ne garantit pas que la chaine entrée soit entièrement numérique. Pour affiner le test, il faut tester caractère par caractère pour vérifier que chacun est un chiffre.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/10/2007, 15h48
  2. Réponses: 5
    Dernier message: 15/06/2007, 15h12
  3. petite précision sur gtk_main_quit()
    Par bit_o dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 19/04/2007, 21h20
  4. Petite précision sur les pointeurs
    Par Fonzy007 dans le forum C
    Réponses: 2
    Dernier message: 07/12/2006, 11h25
  5. [XPath] petite précision sur type de syntaxe
    Par Royd938 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 15/06/2006, 12h13

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