Programme C

Fermé
mery - 6 nov. 2009 à 22:24
jason-live Messages postés 178 Date d'inscription mardi 1 septembre 2009 Statut Membre Dernière intervention 26 décembre 2009 - 7 nov. 2009 à 00:37
Bonjour,
svp je suis débutante en programmation en langage C et j'ai besoin de votre aide pour résoudre ce problème:

Ecrire un programme qui affiche la moyenne d'une suite d'entiers positifs entrés au clavier.
On arrêtera la saisie quand le nombre -1 est entré, comme dans l'exemple suivant :
Entrez un entier positif : 5
Entrez un entier positif : 2
Entrez un entier positif : 3
Entrez un entier positif : -1
La moyenne de ces 3 entiers vaut 3.333333

Merci à vous

24 réponses

Dora The Explorer Messages postés 2811 Date d'inscription mardi 4 septembre 2007 Statut Contributeur Dernière intervention 1 septembre 2011 853
6 nov. 2009 à 22:28
Comme d'hab, pourquoi tu mettrais pas ce que tu as déjà commencé à écrire? Ensuite des gens t'aiguilleront peut-être selon tes erreurs.
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
6 nov. 2009 à 22:43
Dora a raison.
Cette question est déjà sortie il y a quelques semaines...
Bonne continuation.
0
godLike Messages postés 259 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 26 juillet 2011 26
6 nov. 2009 à 22:56
Programme en C++ :

#include "stdafx.h"
# include <iostream>
using namespace std;

int main()
{
int i,cumul,moy;

cumul=0;
float=0;

cout<<"entrer un chiffre (chiffre négatif pour terminer la saisie) :"<<endl;
cin>>i;

while(i>=0)
{
moy+=i;
cumul++;
cout<<"entrer un chiffre (chiffre négatif pour terminer la saisie) :"<<endl;
cin>>i;
}

cout<<moy%cumul<<endl;

return 0;
}

voilà voilà si ça marche pas tiens moi au courant avec l'erreur que ça retourne.

Bonne soirée.
0
jason-live Messages postés 178 Date d'inscription mardi 1 septembre 2009 Statut Membre Dernière intervention 26 décembre 2009 35
6 nov. 2009 à 23:00
il lui faut un programme en c et pas en c++
mais je vais lui faire et l'aider ensuite car je débute aussi et j'aime bien le C <3
a toute suite ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
godLike Messages postés 259 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 26 juillet 2011 26
6 nov. 2009 à 23:27
Avec un while !!! comme c'est fait dans mon programme ..
essaie plutot d'intepreter mon programme en C .. tu te casseras moins la tête :)
0
jason-live Messages postés 178 Date d'inscription mardi 1 septembre 2009 Statut Membre Dernière intervention 26 décembre 2009 35
6 nov. 2009 à 23:31
ouai mais je ne comprend pas ton programme en c++ j'en ai jamais fais et je comprend jamais rien
le mieu c'est qu'on me donne la reponse et comme ça, comme je me connais je regarderais le code pour mieu comprendre et je referais des exercices de ce genre ;)
je veux reussir je vous assure ;)
0
godLike Messages postés 259 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 26 juillet 2011 26
6 nov. 2009 à 23:32
Avec l'algo tu comprends ?
Je peux te donner l'algo et tu le fais en C ^^
0
jason-live Messages postés 178 Date d'inscription mardi 1 septembre 2009 Statut Membre Dernière intervention 26 décembre 2009 35
6 nov. 2009 à 23:34
nan nan j'ai lus un bout de lecon et j'ai compris mais c'est super chaud
le c je comprend très bien ;)
0
godLike Messages postés 259 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 26 juillet 2011 26
6 nov. 2009 à 23:35
Non mais on peut comprends , mais l'algo est la partie logique du programme , ca décrit comment va evoluer ton programme. C'est le squelette de ton programme. Si tu ne sais pas faire d'algo aucun de tes programmes ne marchera.
0
jason-live Messages postés 178 Date d'inscription mardi 1 septembre 2009 Statut Membre Dernière intervention 26 décembre 2009 35
6 nov. 2009 à 23:38
ouais l'algo c'est la partie logique du programme
mais des fois je suis bloquer en C et si tu veux quand je suis bloquer je visualise le programme dans ma tête une sorte d'algo aussi et je reussi mais stp si tu connais le bon code en C du programme qu'on veut faire donne le nous et je l'étudierais car je suis trop curieux de savoir comment ... arrive t-on a mettre -1 pour ARRETER le programme...
0
godLike Messages postés 259 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 26 juillet 2011 26
6 nov. 2009 à 23:40
Bah je ne connais pas du tout la syntaxe en C .. Pour arrête ton programme la saisie de -1 doit être une condition d'arrêt.

En C++ il faut dire : " Tant que le chiffre saisie n'est pas -1 faire ...... "
Mais je ne sais pas si en C c'est pareil et niveau syntaxe je ne saurai vraiment pas t'aider.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
6 nov. 2009 à 23:46
Salut,

Un exemple
lami20j@debian:~$ cat a.c
#include <stdio.h>

int main()
{
  int n,somme,i;
  i=somme=0;
  do{
    printf("Entrez un entier positif : ");
    scanf("%d",&n);
    if(n>=0){
      somme+=n;
      ++i;
    }
  }while(n>=0);
  printf("La moyenne de %d entiers vaut %f\n",i,(float)somme/i);
  return 0;
}
lami20j@debian:~$ gcc a.c
lami20j@debian:~$ ./a.out
Entrez un entier positif : 5
Entrez un entier positif : 2
Entrez un entier positif : 3
Entrez un entier positif : -1
La moyenne de 3 entiers vaut 3.333333
0
godLike Messages postés 259 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 26 juillet 2011 26
6 nov. 2009 à 23:48
Ah ah ah c'est vraiment different le C et le C++ , ça a l'air vraiment hard la syntaxe du C ><
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
6 nov. 2009 à 23:56
Re,

Voici la traduction du message C++ en C

lami20j@debian:~$ cat b.c
#include<stdio.h>

int main()
{
        int i,cumul,moy;

        cumul=0;
        i=0;
        moy=0;

        printf("entrer un chiffre (chiffre négatif pour terminer la saisie) : ");
        scanf("%d",&i);
        while(i>=0){
                moy+=i;
                cumul++;
                printf("entrer un chiffre (chiffre négatif pour terminer la saisie) : ");
                scanf("%d",&i);
        }
        printf("%f\n",(float)moy/cumul);
        return 0;
}
lami20j@debian:~$ gcc b.c
lami20j@debian:~$ ./a.out
entrer un chiffre (chiffre négatif pour terminer la saisie) : 5
entrer un chiffre (chiffre négatif pour terminer la saisie) : 2
entrer un chiffre (chiffre négatif pour terminer la saisie) : 3
entrer un chiffre (chiffre négatif pour terminer la saisie) : -1
3.333333

0
jason-live Messages postés 178 Date d'inscription mardi 1 septembre 2009 Statut Membre Dernière intervention 26 décembre 2009 35
6 nov. 2009 à 23:50
j'aurais voulu faire comme ça mais ça pas l'air de marcher :(
#include <stdio.h>
#include <stdlib.h>

int main()
{
    long nombre1, nombre2, nombre3, resultat = 0;
    long  nombreATaperPourArreter = -1;

	printf ("Entrez un entier positif \n");
	scanf("%d",&nombre1);
	printf ("Entrez un entier positif \n");
	scanf("%d", &nombre2);
	printf ("Entrez un entier positif \n");
	scanf("%d", &nombre3);
	resultat = (nombre1+nombre2+nombre3) / 3;
	printf ("La moyenne de ces 3 nombres est de %d \n", resultat);
	  while (nombreATaperPourArreter != -1)
    {
        scanf ("%d", &nombreATaperPourArreter);
        printf("fin du programme \n");
    }
	system("pause");
}
0
merci les amis, mais stp janson-live, le programme que tu m'as donné , c'est vrai qu'il me permet d'ecrire une suite d'entiers, mais je voudrais savoir:

* si je veux ecrire 100 entiers :p est ce que je dois ecrire 100 fois :
printf ("entrer un entier positif \n");
scanf ("%d",&nombre ...)

* aussi la moyenne que tu as déclaré en bas ne s'affiche pas sur le programme :(

svp les amis si je dis n'importe quoi c'est par ce que je suis débutante et je veux de l'aide :)

merci
0
Dora The Explorer Messages postés 2811 Date d'inscription mardi 4 septembre 2007 Statut Contributeur Dernière intervention 1 septembre 2011 853
6 nov. 2009 à 23:57
https://forums.commentcamarche.net/forum/affich-15086035-programme-c#13
Tu n'as pas besoin de faire de nombreux printf. A l'aide d'une boucle, on continue à faire rentrer des nombres à l'utilisateur, tant que ce nombre n'est pas négatif. (pour coller plus à ton exercice à savoir entrer -1 pour arrêter, la fin de la boucle aurait du être
} while (n != -1);
je suppose.


int main()
{
  int n,somme,i;
  i=somme=0;

  // boucle qui dure tant que le nombre entré est supérieur à 0
  do{                                                      
    printf("Entrez un entier positif : ");
    scanf("%d",&n);
    if(n>=0){
      somme+=n;     //on ajoute le nombre entré (n) à la somme
      ++i;
    }
  }while(n>=0);
  printf("La moyenne de %d entiers vaut %f\n",i,(float)somme/i);
  return 0;
}
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
6 nov. 2009 à 23:58
Salut,

Regarde ici https://forums.commentcamarche.net/forum/affich-15086035-programme-c#13
Tu peux écrire jusqu'à la semaine prochaine des entiers positifs. Il suffit de taper un entier négatif pour que le programme s'arrête
0
jason-live Messages postés 178 Date d'inscription mardi 1 septembre 2009 Statut Membre Dernière intervention 26 décembre 2009 35
6 nov. 2009 à 23:55
ba je débute aussi mais je suis à fond dans le C mais au début ^^
mais mon programme que j'ai donné même si on entre -1 le programme ne s'arrête pas stp aidez moi je voudrais savoir pourquoi ????
et mery je ne peux pas répondre à ta question si tu peux écrire 100 fois un entier positif... car je débute comme toi ;)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
7 nov. 2009 à 00:05
Re,

Avant de commencer écrire du code, réfléchi à ton algorithme, partie très importante.

Donc l'idée est de saisir des nombres entiers positifs et des qu'on saisi un entier négatif le programme doit s'arrêter.

Soit tu fait en dur comme tu as essayé en déclarant 3 variables nombres et une variable pour sortir.
Mais en ce cas ton programme sera limité à seulement 3 nombres entiers positifs.

Soit tu fait une boucle en calculant la somme des nombres saisis et en même temps tu comptes les nombre.
Pour la boucle tu mets la condition d'arrêt, un nombre entier négatif.
Quand tu sors de la boucle tu as deux valeur : la somme et le nombre des entiers positifs.
Il te restera à calculer la moyenne.

0
jason-live Messages postés 178 Date d'inscription mardi 1 septembre 2009 Statut Membre Dernière intervention 26 décembre 2009 35
7 nov. 2009 à 00:02
je comprend pas regardez SVP !
#include <stdio.h>
#include <stdlib.h>

int main()
{
    long nombre1, nombre2, nombre3, resultat = 0;
    long nombreATaperPourArreter = 0;

     if (nombreATaperPourArreter == -1)
    {
        scanf ("%d", nombreATaperPourArreter);
        printf ("FIN du programme \n");
    }
	printf ("Entrez un entier positif \n");
	scanf("%d",&nombre1);
	printf ("Entrez un entier positif \n");
	scanf("%d", &nombre2);
	printf ("Entrez un entier positif \n");
	scanf("%d", &nombre3);
	resultat = (nombre1+nombre2+nombre3) / 3;
	printf ("La moyenne de ces 3 nombres est de %d \n", resultat);

	system("pause");
}

Faut-il que je mette un WHILE, DO WHILE, IF ... ???
aidez moi
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
7 nov. 2009 à 00:17
Re,

J'ai l'impression que tu n'as pas lu ce que j'ai écrit.

Ta condition
 if (nombreATaperPourArreter == -1)

Ne sera jamais VRAIE, puisque nombreATaperPourArreter est toujours 0
Nul part dans ton programme on ne vois pas que cette variable change.
0
jason-live Messages postés 178 Date d'inscription mardi 1 septembre 2009 Statut Membre Dernière intervention 26 décembre 2009 35
7 nov. 2009 à 00:23
ba si dans le scanf ("%d", &nombreATaperpourArreter);
si je tappe 1 il devrait s'arreter mais ne s'arrete pas =(
et si j'ai lu mais j'ai rien compris :(
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
7 nov. 2009 à 00:31
Re,

Ben, non.
Regarde

long nombreATaperPourArreter = 0;

if (nombreATaperPourArreter == -1)
{
scanf ("%d", nombreATaperPourArreter);
printf ("FIN du programme \n");
}


Donc ton scanf s'exécute if (nombreATaperPourArreter == -1)
Donc il ne s'exécutera jamais puisque long nombreATaperPourArreter = 0;

Tu n'as pas compris le if.
Dans ton cas les instructions de la boucle if ne s'exécute pas puisque au moment quand if commence la variable vaut 0
Comme la condition de if demande que la variable soit -1 et ce n'est pas le cas vu qu'elle vaut zéro, alors les instructions scanf et prinf de la boucle if ne s'exécutent pas.

0
Dora The Explorer Messages postés 2811 Date d'inscription mardi 4 septembre 2007 Statut Contributeur Dernière intervention 1 septembre 2011 853
7 nov. 2009 à 00:32
Au début, tu déclares ta variable. Tu l'initialises à 0.
Juste après, tu vérifies que cette valeur n'est pas égale à -1. Forcément, si elle est égale à 0, elle n'est pas égale à -1. Donc ta condition n'est pas vraie, et tu ne fais pas de scanf.

Tu as déjà utilisé des boucles?
0