Se connecter avec
S'enregistrer | Connectez-vous

Probleme de compilation

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte

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");

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;
}
Expert Programmation

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).

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;
}

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.

#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

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;
}

Expert Programmation

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.

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. }
Expert Programmation

  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)
Lassé par la pub ? Créez un compte
Tom's guide dans le monde