IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[C++] Plantage


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [C++] Plantage
    Bonjour,

    C'est mon premier poste ! Je viens de découvrir votre site, et pense s'y interresser très fortement dans un futur proche !

    Mais voila, en reprennant là où j'avais laissé tomber le C++ il y a quelque années, déjà un problème !

    Je viens d'installer Dev-C++ et j'ai voulu tester un petit programme pour calculer Pi à une erreur souhaité près.

    Je commence par calculer la somme des 1/k^2, mais là directe ça plante... pourtant je pars bien de 1... Lorsque j'enlève les 1/k^2, tout il n'y a pas d'erreur (mais du coup c'est pas la somme souhaité).

    Matez le code de beginner :p mais je ne comprends pas !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
     float resultat=0;
     int i;
     
     for (i=1;i<=15;i++)   //15 c'est un exemple, on peut faire tendre vers
     {                              //l'infini pour que ça soit plus juste.
         resultat+=1/(i^2);
     }
     cout << resultat; 
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Je précise, il n'y a pas d'erreur à la compilation, seulement à l'execution une jolie boite Microsoft qui annonce un plantage! Pourtant je ne manipule pas des pointeurs, etc....

    Si quelqu'un veut bien m'expliquer, c'est sympa !

    Salut !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    ^ est l'opérateur XOR (OU exclusif), du coup tu dois te retrouver avec des 0 au dénominateur (pour i = 2 par exemple). La puissance c'est pow (dans <cmaths>), mais seulement pour les flottants. Pour les entiers tu devrais écrire une petite fonction.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ah !!!
    J'étais loin de me douter de cela !

    Merci beacoup

  4. #4
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Salut,
    je pense que tu veux faire k², non?
    si c'est le cas, alors je pense que cela vient de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     resultat+=1/(i^2);
    Cela ne fait pas i² ; cela correspond à un OU exclusif qui compare les nombres bit à bit.
    Le code fonctionnel serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
      float resultat=0.0; // c pour preciser que c'est un float
      int i;
     
      for (i=1;i<=15;i++)   //15 c'est un exemple, on peut faire tendre vers
      {                              //l'infini pour que ça soit plus juste.
         resultat+=1.0/(i*i); /*met 1.0 pour être sur que cela ne fasse pas la
                                         division entière */
      }
      cout << resultat << endl; // on va à la ligne après
      /* system("PAUSE");  je ne te conseille pas, je l'ai jamais utilisé
          si tu veux que le programme s'arrête fais un cin << i; */
      return 0;
    }
    b Oo

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Plantage IIS ...
    Par rgarnier dans le forum XMLRAD
    Réponses: 20
    Dernier message: 28/10/2003, 10h54
  2. Plantage de Delphi 7
    Par Andry dans le forum EDI
    Réponses: 3
    Dernier message: 04/09/2003, 16h36
  3. Réponses: 7
    Dernier message: 20/08/2003, 10h33
  4. plantage a la deconnexion du client
    Par travail dans le forum 4D
    Réponses: 3
    Dernier message: 05/06/2003, 13h39
  5. [Kylix] Plantage IDE Kylix3/Mandrake 9.0
    Par OmicroN dans le forum EDI
    Réponses: 3
    Dernier message: 28/01/2003, 23h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo