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 :

Probleme avec boucle while


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Probleme avec boucle while
    Bonsoir, je code un programme qui permet de calculer l'air d'un polygone a n coté, j'essaie de créer une fonction qui me permettrai d'alléger la fonction main en enlevant la boucle qui permet de generer les vecteurs ainsi que de calculer le produit vectoriel et d'efffectuer la somme.Mais sa ne marche pas et le programme se bloc lorsqu'il doit calculer l air .

    Programme qui fonctionne avec la boucle while dans main
    Code Programme qui fonctionne avec la boucle while dans main : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    void prodvect(double v1[3] , double v2[3],double pvec[3]);
    void vecteur(double pt1[3] , double pt2[3],double v[3]);
    void somme( double pvec[3],double som[3]);
    void sommateur (double pts[100][3] , int nbpts );
     
    void prodvect(double v1[3] , double v2[3], double pvec[3])
    {
    	pvec[0] = v1[1]*v2[2] - v1[2]*v2[1];
            pvec[1] = -(v1[0]*v2[2] - v1[2]*v2[0]);
            pvec[2] = v1[0]*v2[1] - v1[1]*v2[0];
    }
     
    void vecteur(double pt1[3] , double pt2[3], double v[3])
    {
    	int k;
    	k=0;
    	 while( k < 3 )
             {
                 v[k] = pt2[k] - pt1[k];
                 k = k+1;
              }
    }
    void somme( double pvec[],double som[])
    {
    	som[0]=som[1]=som[2]=0.0;
    	int k=0;
    	while(k < 3)
            {
               som[k] = som[k] + pvec[k];
               k = k + 1 ;
            }
    }
     
    int main(void)
    {
       double    pts[100][3],som[3],v1[3],v2[3],pvec[3];
       int       nbpts,i;
       double    aire;
     
       printf("\nNombre de points du polygone ?");
       scanf("%i",&nbpts);
       i=0;
       while(i<nbpts)
       {
          	printf("\n Point No %d >",i);
          	scanf("%lf%lf%lf", &pts[i][0], &pts[i][1], &pts[i][2]);
    	i = i + 1 ;
       }
       i=1;
       while(i< nbpts-1)
         {
            vecteur(pts[i],pts[0],v1);
            vecteur(pts[i+1],pts[0],v2);
     
            prodvect(v1,v2,pvec);
     
            somme(pvec,som);
            i = i+1 ;
          }
       aire =sqrt(som[0] * som[0] + som[1] * som [1] + som[2] * som[2]) ;
       printf("\nL'aire de votre polygone est %g\n", aire);
       return 0;
    }

    Programme qui ne fonctionne plus avec la fonction sommateur
    Code Programme qui ne fonctionne plus avec la fonction sommateur : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    void prodvect(double v1[3] , double v2[3],double pvec[3]);
    void vecteur(double pt1[3] , double pt2[3],double v[3]);
    void somme( double pvec[3],double som[3]);
    void sommateur (double pts[100][3] , int nbpts );
     
    void prodvect(double v1[3] , double v2[3], double pvec[3])
    {
    	pvec[0] = v1[1]*v2[2] - v1[2]*v2[1];
            pvec[1] = -(v1[0]*v2[2] - v1[2]*v2[0]);
            pvec[2] = v1[0]*v2[1] - v1[1]*v2[0];
    }
     
    void vecteur(double pt1[3] , double pt2[3], double v[3])
    {
    	int k;
    	k=0;
    	 while( k < 3 )
             {
                 v[k] = pt2[k] - pt1[k];
                 k = k+1;
              }
    }
    void somme( double pvec[],double som[])
    {
    	som[0]=som[1]=som[2]=0.0;
    	int k=0;
    	while(k < 3)
            {
               som[k] = som[k] + pvec[k];
               k = k + 1 ;
            }
    }
     
    void sommateur ( double pts[100][3] ,double pvec[3] ,double v1[3] ,double v2[3] ,int nbpts, double som[3] )
    {
        int i=1;
       while(i< nbpts-1)
         {
            vecteur(pts[i],pts[0],v1);
            vecteur(pts[i+1],pts[0],v2);
     
            prodvect(v1,v2,pvec);
     
            somme(pvec,som);
            i = i++;
          }
    }
     
     
    int main(void)
    {
       double    pts[100][3],som[3],v1[3],v2[3],pvec[3];
       int       nbpts,i;
       double    aire;
     
       printf("\nNombre de points du polygone ?");
       scanf("%i",&nbpts);
       i=0;
       while(i<nbpts)
       {
          	printf("\n Point No %d >",i);
          	scanf("%lf%lf%lf", &pts[i][0], &pts[i][1], &pts[i][2]);
    	i = i + 1 ;
       }
       sommateur(pts,pvec,v1,v2,nbpts,som);
       aire =sqrt(som[0] * som[0] + som[1] * som [1] + som[2] * som[2]) ;
       printf("\nL'aire de votre polygone est %g\n", aire);
       return 0;
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Déjà, le second code ne compile pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    08-12-21-1.c:101: error: conflicting types for 'sommateur'
    08-12-21-1.c:71: error: previous declaration of 'sommateur' was here
    08-12-21-1.c: In function 'sommateur':
    08-12-21-1.c:110: warning: operation on 'i' may be undefined
    Si corrige :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void sommateur(double pts[100][3], double pvec[3], double v1[3],
                   double v2[3], int nbpts, double som[3]);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void sommateur(double pts[100][3], double pvec[3], double v1[3],
                   double v2[3], int nbpts, double som[3])
    {
        int i = 1;
        while (i < nbpts - 1) {
            vecteur(pts[i], pts[0], v1);
            vecteur(pts[i + 1], pts[0], v2);
     
            prodvect(v1, v2, pvec);
     
            somme(pvec, som);
            i++; /* i = i++ est à indéterminé */
        }
    }

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J ai effectué les modification si dessus mais j ai toujours le même problème: le programme plante après qu'on lui rentre les points.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Slash54000 Voir le message
    J ai effectué les modification si dessus mais j ai toujours le même problème: le programme plante après qu'on lui rentre les points.
    Chez moi, le tout a l'air de fonctionner, quels points lui rentres tu ?

    exemple qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ echo 4 0 0 0 0 1 0 1 1 0 1 0 0 | ./a.out 
     
    Nombre de points du polygone ?
     Point No 0 >
     Point No 1 >
     Point No 2 >
     Point No 3 >
    L'aire de votre polygone est 1

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    C est bizarre sa marche aussi chez moi mais seulement quand je lance le programme a partie de code block si je lance le programme a partir de windows le programme se ferme tout seul sans me donner l air.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Ton programme plante ou la fenêtre se referme juste après ? C'est pas pareil.

    Essaye de rajouter un "getchar();" juste avant le "return" de la fonction principale.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Le programme se ferme .

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Slash54000 Voir le message
    Le programme se ferme .
    Quelques solutions pour résoudre le problème :
    • Lancer le programme depuis une console.
    • Ajouter un getchar() avant la fermeture. Cette fonction attend une saisie depuis l'entrée standard. /!\, il faudra peut-être purger le flux, cherche fpurge sur ce forum.
    • Ajouter un system("pause"); mais cette solution n'est pas portable, vraiment à éviter.

Discussions similaires

  1. Probleme avec boucle while
    Par enamuos dans le forum Langage
    Réponses: 2
    Dernier message: 29/12/2014, 22h43
  2. [MySQL] Probleme UPDATE avec boucle WHILE
    Par iverson_mac dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/06/2007, 17h07
  3. Réponses: 2
    Dernier message: 19/11/2006, 10h54
  4. Problème avec un while...
    Par pcdj dans le forum Linux
    Réponses: 7
    Dernier message: 17/10/2005, 22h24
  5. [Debutant/WinAPI] Souci avec boucle While et GetMessage()
    Par SnowStyle dans le forum Windows
    Réponses: 11
    Dernier message: 15/10/2005, 19h19

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