Votre question

Probleme de compilation

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
11 Octobre 2008 11:53:05

Salut tout le monde, je m'explique en fait je n'arrive pas a compilé sur dev-c++ Voila ce que j'ai fait

#include <iostream>
using namespace std;

int main(){

int zero=0,un=0,n,r;

cout<<"Entrer un nombre"<<endl;
cin>>n;




while(n>=1)

{

r=n%2;
n=n/2;


if (r==1)
{

++un;

}

else if (r==0)

{

++zero;

}


}

cout<<"nombre de zero"<<""<<"nombre de un"<<endl;

cout<<"le nombre de zero-le nombre de un"<<endl;
cout<<"(zero-un)"<<endl;
return 0;

J'ai essayé en faite de faire un binaire qu"il me donne tout le temps la réponse de binaire mais il bloque il me donne juste "Entrer un nombre" puis quand je tape 8 par exemple il se referme :s

Autres pages sur : probleme compilation

11 Octobre 2008 12:53:05

Si tu arrive à lancer ton programme ce n'est déjà pas un problème de compilation ... sinon il ne compilerait pas.

Ensuite le problème vient du fait que lorsque le programme a executer la dernière instruction, il se ferme et tu n'as donc pas le temps de voir le résultat.

Rajoute ca avant ton return 0;

system("pause");
11 Octobre 2008 13:21:06

ouai sa ferme plus la page :)  Mais le probléme quand j'appuie comme j'ai mis 8 le programme ne calcule pas le 8 en base 2 (binaire ) Elle s'arrete chez moi Entrer le nombre :
8
Appuyer sur une touche pour continuer....
Contenus similaires
11 Octobre 2008 16:05:51

Personne pour m'aider ?
a b L Programmation
11 Octobre 2008 16:18:52

le system("pause"); met-le bien juste avant le return 0;
sinon remontre ton nouveau code.
11 Octobre 2008 17:15:55

#include <iostream>
using namespace std;

int main(){

short int n,r,zero=0,un=0;

cout<<"Entrer un nombre"<<endl;
cin>>n;




while (n>=2)

{

r=n%2;
n=n/2;


if (r==1)
{

un++;

}

else if (r==0)

{

zero++;

}

}

system("pause" );
return 0;
11 Octobre 2008 17:16:34

Voila :)  merci pour votre aide:) 
a b L Programmation
11 Octobre 2008 18:42:52

Tu n'affiches aucun résultat, mais l'algo devrait fonctionner :) 
11 Octobre 2008 18:47:16

C'est a dire le résultat ? J'ai compilé et jai exécuté le programme jai Entrer le nombre j'ai mis 8 ensuite sa ne continue pas sa devrait me donnai 1000 en base 2
a b L Programmation
11 Octobre 2008 18:50:00

Non , tu comptes juste le nombre de 0 et le nombre de 1, et tu n'affiches pas ces valeurs.
11 Octobre 2008 18:57:11

je tes envoyer un message cricky pour que tu comprenne ce que je veux dire lit le :)  merci :) 
11 Octobre 2008 19:51:20

En fait le probléme pour être clair c'est qu'il ne calcule pas le reste de la division et le nombre et il ne fait pas les conditions il s'arrete a "Entrer le nombre" une fois que j'appuie par exemple sur 8 il continue plus et il affiche le nombre de zero: 0
le nombre de un :0
cest po logique ??
#include <iostream>
using namespace std;
int main (){

int n,r,zero=0,un=0;

cout<<"Entrer un nombre"<<endl;
cin>>n;


while (n<=0)
{
r=n%2;
n=n/2;

if (r==1)
{
un++;
}

else if (r==0)
{
zero++;
}
}
cout << "le nombre de zero : " << zero << endl;
cout << "le nombre de un : " << un << endl;

system("PAUSE" );
return 0;
}
a b L Programmation
11 Octobre 2008 20:58:02

OK, je viens de comprendre.
Ta condition est "while (n<=0) ", ce qui signifie que ça continue la boucle tant que n <= 0, et 8 n'est pas négatif, donc il ne rentre même pas dans la boucle.
En fait tu a inversé la condition. Il faut mettre "while (n > 0)", c'est à dire que ça boucle tant que n > 0 (et donc la boucle s'arrêtera lorsque n <= 0).
11 Octobre 2008 21:37:16

Merci pour ta reponse cricky mais sa change rien c'est bizarre voila le resultat :

#include <iostream>
using namespace std;
int main (){

int n,r,zero=0,un=0;

cout<<"Entrer un nombre"<<endl;
cin>>n;


while (n>0)
{
r=n%2;
n=n/2;

if (r==1)
{
un++;
}

else if (r==0)
{
zero++;
}
}
cout << "le nombre de zero : " << zero << endl;
cout << "le nombre de un : " << un << endl;

system("PAUSE" );
return 0;
}
a b L Programmation
11 Octobre 2008 21:49:48

et ça affiche quoi pour 8 par exemple?
11 Octobre 2008 21:58:28

rien sa reste 8 cest tout tu peu essayer si tu veux telecharge dev-c++ :) 
11 Octobre 2008 21:59:16

Merci pour ta reponse
11 Octobre 2008 23:09:41

Le dernier code est le code exacte que tu as compilé ? il n'y a pas vraiment d'erreur pourtant d'un point de vue code.
a b L Programmation
11 Octobre 2008 23:16:26

Je ne test aucun code ici. Comme loic m, je pense que tu n'a pas exécuté le dernier programme.
11 Octobre 2008 23:41:43

Merci pour votre reponse mais sacher je l'ai compiler et je l'ai reexecuter je vous le promet.:s Si quelqu'un pourai l'essayer et me dire ce qu'il a trouvé comme faute . MEric pour votre aiide.
a b L Programmation
12 Octobre 2008 11:47:35

Ton code actuel, affiche au moins "le nombre de zero : ", donc si tu n'as pas ça, c'est que ton programme compilé ne correspond pas à ce source.
12 Octobre 2008 12:15:57

Enfin j'ai réussi merci cricky. En fait comme tu m'a di c'était peut être pas la bonne source ce que j'ai fait j'ai fait jai ouvert une nouvelle page et jai copié le tout et jai recompilé et tout fonctionne:)  Tu peux lire le message que je t'es envoyer parceque je n'arrive pas a comprendre ce que je dois faire aprés sa.
a b L Programmation
12 Octobre 2008 12:41:31

Si tu as un problème tu postes sur le forum, je n'aide pas en MP.
14 Octobre 2008 19:51:21

personne pour m'aider
a b L Programmation
14 Octobre 2008 23:52:36

Essaie de faire quelque chose, et envoie le code si tu bloques.
15 Octobre 2008 22:45:55

#include <iostream>
using namespace std;


int difference1_0(int );
int main ()
{
int nombre_entre,x;
cout<<"Entrez un nombre : ";
cin>> nombre_entre;

for(int n=0; n<nombre_entre ; n++)
{
x = difference1_0(n);

cout<<x<<endl;

}

}

int difference1_0 (int nombre_entre)
{
int rest,zero=0,un=0,dif;
do
{
rest=nombre_entre%2;
if(rest==0)
{
zero++;
}
else if(rest==1)
{
un++;
}
nombre_entre=nombre_entre/2;

}
while(nombre_entre!=0);
dif=(un-zero);
return dif;
}

Quand j'entre un numero elle se referme direct :s et il fo en faite si je tape 16 par exemple le programme doit me donner −1 1 0 2 -1 1 1 3 -2 0 0 2 0 2 2 4 -3
16 Octobre 2008 09:40:32

Si tu boss sur windows tu as enccore oublié le system("pause"); juste avant le return.
17 Octobre 2008 03:25:45

Voila j'ai réussi à finir mon projet. Est ce que il ya des erreurs de syntaxe ou de faute quelque part? je voudrais ajouter des commentaire a l'aide de ''//" que puis je dire ? parceque on nous l'impose. merci pour votre aide en tout cas:) 
#include <iostream>
using namespace std;

int difference1_0(int );
int main ()
{
bool estNegatif=true;
int nombre_entre,nbre_suite_dif,compteur=0,nbre_courant=0;
cout<<"Entrez un nombre : ";
cin>> nombre_entre;

for(int n=0; n<nombre_entre ; )
{
nbre_suite_dif=difference1_0(nbre_courant);

if(nbre_suite_dif==0)
{
compteur++;
}

else
{
bool estNegatif2=(nbre_suite_dif<0);
if(estNegatif==estNegatif2)
{
compteur++;
}
else
{
cout<<compteur<<" ";
compteur=1;
estNegatif=estNegatif2;
n++;
}

}
nbre_courant++;
}
system ("pause");
}

int difference1_0 (int nombre_entre)
{
int rest,zero=0,un=0,dif;
do
{
rest=nombre_entre%2;
if(rest==0)
{
zero++;
}
else if(rest==1)
{
un++;
}
nombre_entre=nombre_entre/2;

}
while(nombre_entre!=0);
dif=(un-zero);
return dif;
}

a b L Programmation
17 Octobre 2008 20:03:51

Quand tu fais une boucle, tu explique sur quoi tu boucles (par exemple: boucle sur tous les nombres précédents le nombre choisi). Dans les if et les else, tu précise dans quel cas tu es dans cette partie de code. Ne met jamais de nom de variable ou de bout de code dans les commentaires explicatifs, car il faut que ce soit compréhensible par quelqu'un qui n'a pas encore lu le code. D'ailleurs, il faut pouvoir comprendre comment ton algo marche sans avoir lu le code.
18 Octobre 2008 19:33:39

voila j'ai fait les commentaires, vous pourriez modifier un peu sa et changer les variables et voir la syntaxe si cest juste :)  merci mais voila ce que j'ai deja fait

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int difference1_0(int ); /* declaration de ma fonction qui est en dessus de ma fonction int main */
  5. int main ()
  6. {
  7. bool estNegatif=true;
  8. int nombre_entre,nbre_suite_dif,nbre_suite_finale=0,nbre_courant=0; /* nbre_courant est le enieme nombre de la suite de difference de 1_0 */
  9. cout<<"Entrez un nombre : ";
  10. cin>> nombre_entre;
  11.  
  12. for(int nbre_affichage=0 ; nbre_affichage < nombre_entre ; )
  13. {
  14. nbre_suite_dif=difference1_0(nbre_courant); /* nombre de la première suite des resultats du nombre de un moins le nombre de zero*/
  15. if(nbre_suite_dif==0)
  16. {
  17. nbre_suite_finale++; /* compteur du nombre d'affichage de la suite finale */
  18. }
  19.  
  20. else
  21. {
  22. bool estNegatif2=(nbre_suite_dif<0);
  23. if(estNegatif==estNegatif2) /* on compare les nombres consecutifs , de la suite des resultats de la difference de 1 et 0 , entre eux */
  24. {
  25. nbre_suite_finale++;
  26. }
  27. else
  28. {
  29. cout<<nbre_suite_finale<<" ";
  30. nbre_suite_finale=1; /* on reinitialise le compteur du nomnbre de la suite finale */
  31. estNegatif=estNegatif2; /* on sauvegarde le dernier nombre pour le comparer au nombre suivant */
  32. nbre_affichage++;
  33. }
  34.  
  35. }
  36. nbre_courant++; /* on passe au nombre suivant de la suite de difference entre 1 et 0 */
  37. }
  38. system("PAUSE" );
  39. }
  40.  
  41. int difference1_0 (int nombre_entre) /* fonction qui calcule la difference de 1 et de 0 après avoir effectue une representation binaire */
  42. {
  43. int rest,zero=0,un=0,dif;
  44. do
  45. {
  46. rest=nombre_entre%2;
  47. if(rest==0)
  48. {
  49. zero++;
  50. }
  51. else if(rest==1)
  52. {
  53. un++;
  54. }
  55. nombre_entre=nombre_entre/2;
  56.  
  57. }
  58. while(nombre_entre!=0);
  59. dif=(un-zero);
  60. return dif;
  61. }
19 Octobre 2008 16:03:34

personne pour m'aider
a b L Programmation
19 Octobre 2008 18:22:32

Peux-tu éditer en mettant les balises de code (bouton C/C++)?
parce que c'est illisible :) 
19 Octobre 2008 21:38:17

Voila :)  qu'est ce que vous en pensez ?? j'ai fait les commentaires, vous pourriez modifier un peu sa et changer les variables et voir la syntaxe si cest juste merci mais voila ce que j'ai deja fait

19 Octobre 2008 22:02:28

Il faut mettre [cpp] et non pas [borne] ;) 
20 Octobre 2008 00:23:25

voila;) quest ce que vous en penser?
a b L Programmation
20 Octobre 2008 20:49:47

  1. /* declaration de ma fonction qui est en dessus de ma fonction int main */

ça, ça ne sert à rien, on voit que c'est une déclaration de fonction. Dit simplement à quoi elle sert (par exemple: fonction qui calcule la différence entre le nombre de 1 et le nombre de 0).
Ne met jamais un commentaire qui explique le côté technique du code. Dis-toi que le commentaire doit être lu par une personne qui ne connait pas le contexte de ton programme (qui n'a jamais lu l'énoncé).
Personnellement, je sais programmer en C, donc je n'ai pas besoin de détail technique, et celui qui ne sait pas programmer en C, pas la peine de lui expliquer un truc qu'il ne va pas comprendre, sauf si c'est un tutorial et que tu veux lui apprendre à programmer en C, sans trop chercher au fonctionnement de ton programme (ce qui n'est pas ton cas).

  1. /* nbre_courant est le enieme nombre de la suite de difference de 1_0 */

Voilà c'est mieux ça, mais attention ce n'est pas très clair si on a pas lu l'énoncé. ;) 

  1. for(int nbre_affichage=0 ; nbre_affichage < nombre_entre ; )

Et le for il sert à faire quoi ? à boucler sur quoi ?

  1. if(nbre_suite_dif==0)

A quoi sert le if ? dans quel cas (sans citer de nom de variable) on rentre ou on ne rentre pas dans le if ?

  1. if(estNegatif==estNegatif2) /* on compare les nombres consecutifs , de la suite des resultats de la difference de 1 et 0 , entre eux */

Voilà, ça c'est parfait. Juste un détails: généralement, pour les commentaires des if et des for, on les met une ligne avant:
  1. /* on compare les nombres consecutifs , de la suite des resultats de la difference de 1 et 0 , entre eux */
  2. if(estNegatif==estNegatif2)

On dit ce qu'on fait en commentaire, et après, on met le code pour montrer comment on le fait.

  1. /* on reinitialise le compteur du nomnbre de la suite finale */

Parfait, mais pareil pour la position du commentaire.

  1. /* on sauvegarde le dernier nombre pour le comparer au nombre suivant */

Idem

  1. /* fonction qui calcule la difference de 1 et de 0 après avoir effectue une representation binaire */

Bonne description. En fait il faut mettre le même commentaire (au caractère près :)  ) au niveau de la déclaration du prototype.
Après pour une description complète des fonction, tu peux décrire les paramètre et le retour de la fonction. Là, tu peux être légèrement (j'ai bien dit légèrement :)  ) plus technique, car si jamais quelqu'un (ou toi plus tard), doit utiliser ta fonction sans avoir à regarder son code pour savoir comment elle marche, avoir les détails sur les paramètres et la valeur de retour aident beaucoup ;) 
Par exemple (ce n'est qu'un exemple), tu peux faire:
  1. /* fonction qui calcule la difference de 1 et de 0 après avoir effectue une representation binaire
  2. Paramètre : nombre_entre : nombre à lire et à décoder en binaire
  3. Retourne la différence de 1 et de 0 du nombre lu
  4. */
  5. int difference1_0 (int nombre_entre)
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS