Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
949 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Programme C++ , erreur ? Ou ça ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Programme C++ , erreur ? Ou ça ?

n°2159957
Bloupies
Posté le 11-10-2012 à 23:33:03  profilanswer
 

Bonsoir
 
Je suis en train de faire un programme , demandant à l'utilisateur de rentrer des valeurs ( notes ) . On les additionne au fut et a mesure ( accumulateur ) , et calcule leur nombre au fur et à mesure .
J'ai bien réussi pour l'instant  
 
Cependant , maintenant , on me demande de calculer la moyenne au final , qui pourant parait très facile , mais lorsque je le compile , il ne veut pas l'afficher..
 
Voici un lien :  
Ps :Afficher des notes différents de -1 , et lorsque l'utilisateur tape -1 , tout doit être afficher ( nombre , somme , moyenne )
 
http://img4.hostingpics.net/pics/757659code.png
 
 
Merci beaucoup d'avance ( Ps2 : Je suis un peu fatigué , donc cela pourrait être une erreur d’inattention , je ne vois vraiment pas pourquoi cela n'affiche même pas au moins " La moyenne est .." )

mood
Publicité
Posté le 11-10-2012 à 23:33:03  profilanswer
 

n°2159960
Farian
Posté le 12-10-2012 à 00:26:31  profilanswer
 

Bonsoir !  
 
L'erreur est très simple : Il manque le " << endl" à la ligne 22.
 
En effet, le saut de ligne provoque le "flush" de la sortie standard et l'affichage effectif de ce qui a été demandé, sinon, tout est gardé en mémoire en attendant le prochain saut de ligne.
 
En fin de programme, le comportement dépend de l'OS : Sous Linux, la dernière ligne aurait été affichée juste avant le "prompt" (ce qui aurait été équivalent à l'affichage "La moyenne est de : 3.3333 C:\C++\TP2>" ), tandis que sous Windows il semble que le contenu de ce qui n'a pas encore été affiché soit perdu.
 
Bonne continuation en C++ !

n°2159961
Bloupies
Posté le 12-10-2012 à 00:53:44  profilanswer
 

Salut
 
Je viens de rajouter << endl;
 
La moyenne ne s'affiche toujours pas .

n°2159972
Farian
Posté le 12-10-2012 à 08:04:12  profilanswer
 

Bonjour !  
 
C'est très étrange ...
 
Pouvez-vous copier / coller votre code (même si la copie d'écran est , a priori, très parlante ...) ?  
 
(Ceci serait plus simple pour faire des essais sur nos machines :)

n°2159991
Bloupies
Posté le 12-10-2012 à 10:01:12  profilanswer
 

Salut ,  
 
le voici :
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int main ()
  4. {
  5. float note =0 , accumulateur=0 , nombre =0 ;
  6. float moyenne =0;
  7. while ( note != -1)
  8. {
  9.    cout << "Saisir une note : " ;
  10.    cin >> note;
  11.  
  12.   if (note == -1)
  13. {
  14.      nombre = nombre +0;
  15.      accumulateur = accumulateur +0;
  16.  moyenne = accumulateur/nombre ;
  17.      cout << "Fin de la saisie ! " << " " << "La somme vaut :" << accumulateur << endl;
  18.  cout << "Le nombre de valeurs est : " << nombre << endl;
  19.  cout << "La moyenne est de :" << moyenne << endl;
  20.    }
  21.     else if ( note != -1)
  22. {
  23.  nombre = nombre +1;
  24.      accumulateur= accumulateur + note;
  25.  cout << "Le nombre de valeur est :" << nombre << endl;
  26.      cout << "La somme des valeurs est :" << accumulateur << endl;
  27.    }
  28. }
  29. return 0;
  30. }

n°2159999
theshockwa​ve
I work at a firm named Koslow
Posté le 12-10-2012 à 10:38:41  profilanswer
 

Attention aux floats et aux comparaisons tout de même.
Les note, accumulateur et nombre devraient être des entiers. Moyenne (et son calcul lui-même) sont bien en float.
 
Cela dit, j'ai du mal à croire que l'ajout du endl ne résolve pas l'affichage de moyenne ...
 
Edit : D'ailleurs ... J'obtiens ca avec le code collé en dernier.

$ ./a.exe
Saisir une note : 2
Le nombre de valeur est :1
La somme des valeurs est :2
Saisir une note : 3
Le nombre de valeur est :2
La somme des valeurs est :5
Saisir une note : 5
Le nombre de valeur est :3
La somme des valeurs est :10
Saisir une note : -1
Fin de la saisie !  La somme vaut :10
Le nombre de valeurs est : 3
La moyenne est de :3.33333


Message édité par theshockwave le 12-10-2012 à 10:40:20

---------------
last.fm
n°2160000
Bloupies
Posté le 12-10-2012 à 10:44:11  profilanswer
 

C'est bon ça s'est arrangé :)
 
Merci encore !
 
Edit :: diviser un entier par un autre entier conduit à calculer le quotient entier de la division euclidienne. Si on veut calculer une division réelle, il suffit que'un des arguments ( accumulateur par exemple ) soit un réel . Si l'accumulateur est un réel, je pense signale qu'il serait logique que la variable note le soit aussi.

Message cité 1 fois
Message édité par Bloupies le 12-10-2012 à 10:47:59
n°2160010
theshockwa​ve
I work at a firm named Koslow
Posté le 12-10-2012 à 11:49:22  profilanswer
 

Bloupies a écrit :

C'est bon ça s'est arrangé :)
 
Merci encore !
 
Edit :: diviser un entier par un autre entier conduit à calculer le quotient entier de la division euclidienne. Si on veut calculer une division réelle, il suffit que'un des arguments ( accumulateur par exemple ) soit un réel . Si l'accumulateur est un réel, je pense signale qu'il serait logique que la variable note le soit aussi.


 
tu as bien retenu ton cours, mais ton raisonnement est erroné ici. Tu peux très bien conserver tes variables entières et faire :

Code :
  1. moyenne = accumulateur/float(nombre)


 
Ce qui revient exactement à ce que tu veux.


---------------
last.fm
n°2160108
boulgakov
Posté le 12-10-2012 à 18:07:45  profilanswer
 

theshockwave a écrit :


Code :
  1. moyenne = accumulateur/static_cast<float>(nombre)




 
 :o  

n°2160113
theshockwa​ve
I work at a firm named Koslow
Posté le 12-10-2012 à 18:55:49  profilanswer
 


Tu as quelque chose à reprocher fondamentalement aux constructeurs ? :)


---------------
last.fm
mood
Publicité
Posté le 12-10-2012 à 18:55:49  profilanswer
 

n°2160268
Joel F
Real men use unique_ptr
Posté le 15-10-2012 à 14:11:29  profilanswer
 

c'est pas grepable

n°2160284
antac
..
Posté le 15-10-2012 à 15:31:03  profilanswer
 

certes ;)

n°2160289
theshockwa​ve
I work at a firm named Koslow
Posté le 15-10-2012 à 16:07:55  profilanswer
 

Joel F a écrit :

c'est pas grepable


mbof ... greper un static_cast<float> ou un float(, ca ne change pas vraiment la donne. Ca ressemble plus à une question de convention.


---------------
last.fm
n°2160331
Joel F
Real men use unique_ptr
Posté le 16-10-2012 à 08:41:21  profilanswer
 

float(int,int)  est un truc valide qui n'a pas de rapport avec un cast

n°2160341
theshockwa​ve
I work at a firm named Koslow
Posté le 16-10-2012 à 10:53:28  profilanswer
 

Bah dans ce cas, profites-en pour éclairer ma lanterne, parce que je ne vois pas ce que ca veut dire et le compilo que j'ai sous le coude n'en veut pas
 
Edit : mes deux compilos n'en veulent pas :

Code :
  1. error: functional cast expression list treated as compound expression


Code :
  1. error C2564: 'float' : a function-style conversion to a built-in type can only take one argument


Message édité par theshockwave le 16-10-2012 à 10:56:33

---------------
last.fm
n°2160516
Joel F
Real men use unique_ptr
Posté le 17-10-2012 à 20:51:40  profilanswer
 

float(int,int) est un type fonction prenant 2 int et renvoyant un float.
 
la subtilité est bien type fonction, pas pointeur de fonction. C'ets le seul type utilisabel en C++ sans qu'on puisse en faire une instance. Ca sert dans des astuces de metaprogrammation pour passer un unique type composite à des classes templates. L'exemple d'applciation classique est std::result_of
 
typedef std::result_of< float(int,int)>::type type;

n°2160611
theshockwa​ve
I work at a firm named Koslow
Posté le 18-10-2012 à 11:31:06  profilanswer
 

:jap:


---------------
last.fm
n°2160684
boulgakov
Posté le 18-10-2012 à 18:34:03  profilanswer
 

Voilà, j'avais donc raison et maintenant je sais pourquoi  :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Programme C++ , erreur ? Ou ça ?

 

Sujets relatifs
Erreur à la conversion et erreur de relation sur AccessDéclenchement automatique de programme par enregistrement de fichier
[C] Conversion type énuméré en string pour affichage :programme C
Erreur java.lang.StackOverflowError[Python] Programme débutant
[C#] dataset ajouter une ligne depuis textbox[C/Ada] Traduction de C avec Ada de la bibliothèque portmidi.
Erreur dans un programme basique en CErreur programme C AIDE
Plus de sujets relatifs à : Programme C++ , erreur ? Ou ça ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR