Tom's Guide > Forum > Programmation > Probleme de compilation
Mot :    Pseudo :           
 

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


Message édité par hanye2020 le 11-10-2008 à 12:06:15
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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

Répondre à loic m

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

Répondre à hanye2020

Personne pour m'aider ?

Répondre à hanye2020

le system("pause" ); met-le bien juste avant le return 0;
sinon remontre ton nouveau code.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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

Répondre à hanye2020

Voila :) merci pour votre aide:)

Répondre à hanye2020

Tu n'affiches aucun résultat, mais l'algo devrait fonctionner :)

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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

Répondre à hanye2020

Non , tu comptes juste le nombre de 0 et le nombre de 1, et tu n'affiches pas ces valeurs.


Message édité par CRicky le 11-10-2008 à 18:50:11
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

je tes envoyer un message cricky pour que tu comprenne ce que je veux dire lit le :) merci :)

Répondre à hanye2020

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

Répondre à hanye2020

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

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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

Répondre à hanye2020

et ça affiche quoi pour 8 par exemple?

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

rien sa reste 8 cest tout tu peu essayer si tu veux telecharge dev-c++ :)

Répondre à hanye2020

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.

Répondre à loic m

Je ne test aucun code ici. Comme loic m, je pense que tu n'a pas exécuté le dernier programme.


Message édité par CRicky le 11-10-2008 à 23:16:33
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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.

Répondre à hanye2020

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.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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.

Répondre à hanye2020

Si tu as un problème tu postes sur le forum, je n'aide pas en MP.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

ok :)


Message édité par hanye2020 le 21-10-2008 à 00:41:38
Répondre à hanye2020

Essaie de faire quelque chose, et envoie le code si tu bloques.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

#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

Répondre à hanye2020

Si tu boss sur windows tu as enccore oublié le system("pause" ); juste avant le return.

Répondre à loic m

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


Message édité par hanye2020 le 17-10-2008 à 03:29:30
Répondre à hanye2020

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.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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

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


Message édité par hanye2020 le 20-10-2008 à 00:22:50
Répondre à hanye2020

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

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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

Répondre à hanye2020

Il faut mettre [cpp] et non pas [borne] ;)

Répondre à loic m

voila;) quest ce que vous en penser?

Répondre à hanye2020

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

Code :
  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é. ;)

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


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

Code :
  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 ?

Code :
  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:

Code :
  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.

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


Parfait, mais pareil pour la position du commentaire.

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


Idem

Code :
  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:

Code :
  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)


Message édité par CRicky le 20-10-2008 à 20:52:48
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Tom's Guide > Forum > Programmation > Probleme de compilation
Aller à :

Il y a 262 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens