problème avec compilateur dev-c++
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

problème avec compilateur dev-c++



  1. #1
    Stevou

    problème avec compilateur dev-c++


    ------

    Bonjour.
    Alors voilà, j'ai commencé les programmations en cours hier, en langage C, et on a fait quelques exercices et tout.

    J'ai voulu transposer l'un de ceux-ci dans Dev-C++ :
    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {

    int a,b,c,d,X;

    cout<<"Entrer a,b,c,d"<<endl;
    cin>>a>>b>>c>>d;

    X=(a/c)+(b/d);
    cout<<"X="<<X<<endl;

    system("PAUSE");
    return EXIT_SUCCESS;
    }
    Je le teste et quand je met comme valeurs 1;1;2;2 (pour faire 1/2+1/2 = 1), et bien j'ai 0, et ça me fait des mauvais calculs à peu près partout!

    Est-ce qu'il y a une erreur dans ma programmation? Il ne me semble pas pourtant...

    Merci

    -----
    Embrace your dreams.

  2. #2
    Stevou

    Re : problème avec compilateur dev-c++

    J'ai mis X en float, je pensais que ça allait aider mais ça n'a rien fait... (d'ailleurs c'est assez logique vu que X=1/2 + 1/2 = 1, ce qui est entier (et ce que je ne trouve pas)).

    J'ai transposé tous mes autres exercices et eux fonctionnaient. Est-ce que le programme est bien écrit ?

    (en fait, ça ne veut pas calculer comme il faut quand a>c et b>d)
    Embrace your dreams.

  3. #3
    invite765732342432
    Invité

    Re : problème avec compilateur dev-c++

    Citation Envoyé par Stevou Voir le message
    X=(a/c)+(b/d);
    Une erreur classique et assez amusante (enfin, sauf quand on travaille en banque et que les résultats de gros calculs sont "presque" bons ) :
    a et c sont des int... donc le résultat d'un calcul binaire entre les deux sera un int aussi...

    Si tu veux obtenir le "bon" résultat (en fait, obtenir 0 est bon aussi, mais d'un certain point de vue), il faut:
    - soit caster les opérandes
    - soit directement typer les variables a, c, b, d en float (ainsi que X, bien entendu)

  4. #4
    Stevou

    Re : problème avec compilateur dev-c++

    Ah, donc une combinaison de deux int donne forcément un int? (à un moment, j'ai créer deux variables e et f tel que :
    int e,f;
    e=a/c;
    f=b/d;
    X=e+f;

    mais ça ne marchait pas.
    Merci (je retiendrais maintenant lol)
    Embrace your dreams.

  5. A voir en vidéo sur Futura
  6. #5
    invitedacb36df

    Re : problème avec compilateur dev-c++

    en fait pour préciser, si a et b sont des int, a/b donnera la partie entière de a/b.
    2/3 donnera 0 et ne sera pas arrondi à 1, par exemple

    Donc là tu as 1/2+1/2=0+0=0

    Dans le même style, essaie 1%2, tu obtiendras 1

    La règle étant que, dans tous les cas:
    a = (a/b)*b + a%b

  7. #6
    Stevou

    Re : problème avec compilateur dev-c++

    D'accord merci. Par contre, cela fait un moment que j'essaye de faire un programme permettant de dire si un nombre est premier (et sinon, on donne le plus petit diviseur), mais il y a des problèmes à chaque fois que je modifie quelque chose (des fois j'ai pas le bon diviseur, des fois il me dit que tout est premier).

    #include <cstdlib>
    #include <iostream>
    #include <math.h>

    using namespace std;

    int main(int argc, char *argv[])
    {
    int N,P,Q;



    cout<<"Entrer un nombre entier superieur a 1:"<<endl;
    cin>>N;

    P=2;


    while(Q!=0)
    {
    Q=N%P;
    P=P+1;
    }

    if (N=P)
    cout<<"Nombre premier"<<endl;
    else
    cout<<"Nombre non-premier"<<endl<<"Plus petit diviseur : "<<P<<endl;

    system("PAUSE");
    return EXIT_SUCCESS;
    }
    Je ne vois pas d'où ça bloque (vous voyez le principe que j'ai voulu utiliser ?)
    Embrace your dreams.

  8. #7
    invitedacb36df

    Re : problème avec compilateur dev-c++

    tout d'abord, si tu fais du C (et pas du C++) en cours, attention à tes cout, qui n'existent pas en C (il faut faire des printf)

    Ensuite, les bonnes habitudes sont à prendre dès maintenant:

    P=P+1; s'écrit P++ (++P même si on veut être rigoureux)
    if (N==P){} et pas if (N=P)
    else {} et pas else
    tu peux caler tes cout sur la même ligne que les if et else avec ou sans crochets, mais préfère toujours en mettre (même structure pour le while, le if, le for...)
    initialise ton Q à 1 avant de le tester.. normalement ça ne fait rien mais bon...

  9. #8
    invitedacb36df

    Re : problème avec compilateur dev-c++

    heu par contre quand tu testeras un premier tu risques de boucler à l'infini...
    il faut que dans ton while tu rajoutes (P<N), et même P<=sqrt(N) si tu veux optimiser ton code

  10. #9
    Stevou

    Re : problème avec compilateur dev-c++

    Je pense qu'il est inutile de mettre P<N car quand on atteint la valeur de P : P==N, Q=0.
    Cependant, mettre la racine j'y ai pensé mais je ne vois pas comment afficher tout cela au final :s Enfin je veux dire après le dernier if (et pour les cout, c'est sûr que c'est ça, ça marche).
    J'ai fait cela et au final, il ne réagit que par rapport aux nombres pairs (et me donne le bon résultat).

    int N,P,Q;



    cout<<"Entrer un nombre entier superieur a 1:"<<endl;
    cin>>N;

    P=2;
    Q=1;

    while(Q!=0)
    {
    Q=N%P;
    P=P++;
    }

    if (N==P){
    cout<<"Nombre premier"<<endl;}
    else
    {cout<<"Nombre non-premier"<<endl<<"Plus petit diviseur : "<<P<<endl;}

    EDIT : pour la racine, il faudrait mettre au final (ayant mis P<=sqrt(N))
    if (Q=0){cout<<"Nombre non-premier"<<endl<<"Plus petit diviseur : "<<P<<endl;}
    else{cout<<"Nombre premier"<<endl;}
    C'est ça,
    Dernière modification par Stevou ; 15/01/2009 à 15h00.
    Embrace your dreams.

  11. #10
    invite765732342432
    Invité

    Re : problème avec compilateur dev-c++

    Citation Envoyé par Stevou Voir le message
    EDIT : pour la racine, il faudrait mettre au final (ayant mis P<=sqrt(N))
    Attention: si tu limites à sqrt(N), c'est pour améliorer les performances, alors mieux vaut stocker la valeur de sqrt(N) dans une variable avant la boucle (ça évite de recalculer cette valeur à chaque itération...)

  12. #11
    Stevou

    Re : problème avec compilateur dev-c++

    Oui, c'est ce que je comptais.
    Par contre, une idée à propos de ma programmation ? Il y a toujours quelque chose qui ne colle pas :s (les nombres pairs marchent, les impairs quand on fait entrée bein... ça donne rien du tout)

    Merci
    Embrace your dreams.

  13. #12
    invite765732342432
    Invité

    Re : problème avec compilateur dev-c++

    Citation Envoyé par Stevou Voir le message
    Oui, c'est ce que je comptais.
    Par contre, une idée à propos de ma programmation ? Il y a toujours quelque chose qui ne colle pas :s (les nombres pairs marchent, les impairs quand on fait entrée bein... ça donne rien du tout)

    Merci
    Alors, on n'écrit pas P=P++, mais P++ tout court

    Je pense que ton problème est dans la condition de if:
    au sortir du while, si le nombre est premier, que se passe-t-il ?
    Prenons N=3
    Alors, on arrive à P=3, Q = 3%3 = 0
    donc on va quitter la boucle... mais tu fais après P++ => donc P = 4

    Résultat, quand tu compares P et N ils sont différents...
    Ils serait beaucoup mieux de simplement prendre un boolean pour le remplir à false si tu trouves un diviseur... ça simplifierait nettement l'algo.

  14. #13
    Stevou

    Re : problème avec compilateur dev-c++

    là je me sens idiot^^
    ça marche! =D
    Merci beaucoup (maintenant, j'ai plus qu'à rajouter à ce programme celui que j'ai fait à côté (pour vérifier qu'il marche) afin d'obtenir une liste de nombre premiers dans un intervalle pis voilà mon algorithme )

    Merci (j'aurais appris pas mal de choses en tout cas)
    Embrace your dreams.

  15. #14
    invitedacb36df

    Re : problème avec compilateur dev-c++

    voilà: maintenant pour optimiser

    R=sqrt(N);
    while((Q!=0)&&(P<=R)){

    à la place de
    while(Q!=0)

    et
    ++P
    à la place de P++
    (pour un int la différence est infinitésimale, mais dès que tu créeras des objets, la différence se fera sentir, donc, prends les bonnes habitudes dès maintenant... le i++ est tellement dur à perdre après )

  16. #15
    Stevou

    Re : problème avec compilateur dev-c++

    Ah, je me disais bien que j'y arrivais pas avec la racine, j'ai mis un "ou" en me disant bêtement "c'est que l'un des deux disparaisse pour sortir de la boucle", ce qui est complètement faux avec un ou!

    J'ai encore du boulot^^ (mais bon, je commence).

    Merci beaucoup, je me met au ++P

    par contre, ça marche pas avec la nouvelle configuration, ça me met que 11 n'est pas premier et a pour plus petit diviseur 4
    R=sqrt(N);
    while((Q!=0)&&(P<=R))
    {
    ++P;
    Q=N%P;
    }
    :s (déjà tout à l'heure en mettant || au lieu de && ça m'avait fait pareil)
    Embrace your dreams.

  17. #16
    invite765732342432
    Invité

    Re : problème avec compilateur dev-c++

    Citation Envoyé par Stevou Voir le message
    par contre, ça marche pas avec la nouvelle configuration, ça me met que 11 n'est pas premier et a pour plus petit diviseur 4
    Ta condition "if" est mauvaise. Suis mon conseil:
    Avant la boucle, tu mets un booléen à true (par défaut le nombre est premier)
    Dans laboucle, si tu trouves un diviseur, tu mets ce booléen à false (puisqu'il n'est donc pas premier) et tu sors de la boucle.

    Pour ton if, il ne reste plus qu'à savoir ce que vaut ce booléen.
    C'est beaucoup plus simple, et ça évite d'avoir à dupliquer les conditions d'arrêt !

  18. #17
    Stevou

    Re : problème avec compilateur dev-c++

    Oula, je vois les booléens que la semaine prochaine ou dans deux semaines :s j'attendrais donc avant de modifier tout ça^^
    merci
    Embrace your dreams.

  19. #18
    invitedacb36df

    Re : problème avec compilateur dev-c++

    un booléen pour faire court c'est une variable qui ne vaud que 0 ou 1 (en C) ou false ou true (en C++)

    donc tu ferais ici (en C donc..) un:

    int estpremier=1;

    ta boucle devient alors:

    while (estpremier && (P>=sqrt(N))
    {
    if (Q%P==0) estpremier=0;
    else ++P;
    }

  20. #19
    Stevou

    Re : problème avec compilateur dev-c++

    Oulaoulaoula, je comprend rien!^^ Je préfère apprendre le cours avant d'utiliser bêtement ça, après je le mettrais

    Merci quand même, c'est gentil (ps : c'est pas plutôt N%P==0 ? :P)
    Embrace your dreams.

Discussions similaires

  1. Dev pak de dev c++(libxml2,iconv)
    Par inviteb3f08f17 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 08/10/2008, 11h21
  2. petit problème avec le compilateur Hi-tech
    Par MofK dans le forum Électronique
    Réponses: 14
    Dernier message: 02/09/2008, 12h59
  3. petit probleme avec DEV-C++
    Par invite21d356cd dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 06/11/2007, 01h50
  4. probléme avec Dev c++ sous vista
    Par invitefe0032b8 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 05/07/2007, 20h11
  5. Pbs avec dev-C++
    Par invite85f66a7c dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 11/08/2004, 16h14
Découvrez nos comparatifs produits sur l'informatique et les technologies.