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 :

Boucle while modifiant les valeurs


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Par défaut Boucle while modifiant les valeurs
    bonjour voila je viens poster ici avec l'espoir que quelqu'un m'aide a régler un certain problème dans mon programme .
    pour votre compréhension la matrice sous forme de vecteur est une image du ciel étoilé les valeurs sont les pixels , je boucle dessus pour compter toute les étoiles .

    alors il n'y a pas d'erreur de compilation , il s'exectute mais pas correctement il y a un problème au niveau du for contenue dans le if qui me sert a initialiser les cases de mon vecteur V a 0

    je m'explique a ce niveau la j'ai une matrice écrit sous forme de vecteur V qui contient un certain nombre de valeur , je veux que les coordonne i et j de mes valeur maximum soit stocké dans un vecteur x et y donc je fais un if pour avoir les coordonnees de mon max dans x et y
    mais pour trouver le prochain max je dois initialiser la précédente valeurs sinon je trouverais toujours le même point .
    je l'initialise donc .

    mais le résultat obtenue n'est pas celui que j'aurais du avoir car avant de mettre la boucle while j'avais fait affiché juste le premier x(0) et avec la boucle while le premier x(0) n'est plus du tout le même .
    je pense donc a un problème avec la remise a 0 .


    voici le code :
    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
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<time.h>
     
     
    FILE *pf1 ,*pf2 ;
    #define D 1447680 
    #define  n  1040
    #define  m  1392
    #define star 3000
     
    int i , j , k , d ,c ,b  ,num_star , num_starmaxi ;
     
    double x[star],y[star];
    float somme ,somme2 ,somme3 , moy ,carre_moy , ecart_type , seuil ,seuil2 ,max ;
     
    float V[n*m];
     
    int main(){
     
        num_starmaxi=2 ;
        somme3=7671;
        somme=0;
        somme2=0;
        seuil2=7670;
       pf1=fopen("allsky_20150716_232659.txt","r");
      // pf2=fopen("image_ciel.dat","w");
     
       for (i=0;i<n;i++){
      for(j=0;j<m;j++){
     
     
      fscanf(pf1,"%f \n",&V[i*m+j]);
      //fprintf(pf2,"%f \n",V[i*m+j]);
     
       // somme=somme+V[i*m+j];
       //moy=somme/D ;
     
      // printf("%f \n" , moy);
     
     
     
     
      //printf("%f \n",V[i*m+j]);
     
     
      }
       }//
      fclose(pf1);
     // fclose(pf2);
     
    //pf1=fopen("image_ciel.dat","r");
    //pf2=fopen("seuil_ciel.rtf","w");
     
    //somme=0;
     
    for(i=0;i<D ;i++){
      //fscanf(pf1,"%f \n ",&V[i]);
     
       somme=somme+V[i];
       somme2=somme2+V[i]*V[i];
     
     
     //printf("%f \n" , V[i]);
     }
      moy= somme/D ;
      carre_moy= somme2/D;
      ecart_type= sqrt(carre_moy-(moy*moy));
      seuil= moy + 4*ecart_type ;
     
      printf("%f %f %f %f \n" , moy , carre_moy , ecart_type , seuil);
        printf("%f\n" , somme);
              for(i=0;i<D;i++){
                 if(V[i]< seuil){
                    V[i]=0.0 ;
    //fprintf(pf2,"%f ∖n ",V[i]);
    //printf("%f",V[i] );
                    }
                   }
    //fclose(pf1);
    //fclose(pf2);
       num_star=0;
       while(  num_star<num_starmaxi){
           for(i=0;i<n;i++){
               for(j=0;j<m;j++){
                   k=i*m+j;
                   somme3=somme3+V[k];
                   if(max<V[k]){
                       max=V[k];
                       x[num_star]=j;
                       y[num_star]=i;
     
     
     
     
                    for(b=i-2;i<=i+2;i++){
                        for(c=j-2;c<=j+2;j++){
                            d=b*m+c;
                            V[d]=0;
                         }}
                    num_star=num_star+1;
                    }
            }
            }
         printf("%f \n ",somme3);
        }
     
     for(i=0;i<num_starmaxi;i++){
     
        printf("%lf %lf  \n",x[i],y[i]);
        }
      return 0;
      }

    Pièce jointe 335312

  2. #2
    Membre très actif
    Homme Profil pro
    Programmeur des cavernes
    Inscrit en
    Août 2017
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Programmeur des cavernes
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 364
    Par défaut
    Dans tes deux boucles internes (dont les compteurs sont b et c), tu ne prends pas en compte les risques de dépassements, donc ne t'attends pas à ce que les résultats soient justes.

    PS : c'est quoi ce code de porc ? Indentation écrite avec les pieds, que des variables globales,...

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Par défaut
    trés bien merci mais je ne comprend pas comment remédiez a cela , et je ne comprend pas non plus les dépassements qu'il peut y avoir , car moi je penses cela de cette manière :

    tant que (itération max non atteinte )
    je lis dans v
    si (v(k)>max )
    alors max = V(k)
    on met les coordnée i et j dans x et y
    et je fais une boucle for pour 'initialiser mon v(k) a 0 sur une zone de 5 pixel en haut et en bas
    je ferme le for
    j'incrément ici mon nombre d'étoile car si je le fais hors du if j'aurais autant de nombre d'étoile que de point dans la matrice

    je ferme le for qui tourne sur V

    je ferme mon while et ensuite je print mes x et y .


    je ne vois donc pas comment la boucle sur b et c peut dépasser ce que j'ai demander dans ce for et clair il peut aller que d'une case a une autre et ne peut aller plus loin .

    si vous pouviez m'éclairer la dessus ce serait vraiment gentil .

    pour répondre a votre question


    l'indentation conventionnelle je ne la connais pas , et cela n'empêche pas mon code de fonctionner (sur ma machine et celle qu'on utilise en salle info) . je trouve mon code lisible .


    et ensuite pour les variable globale alors là je n'ai aucune idée de quoi vous me parlez , là j'utilise seulement ce que j'ai appris en cours .


    ps: j'ai modifié l'indentation peut être est ce mieux ( aucune idée ) .

Discussions similaires

  1. Problème dans un programme
    Par jeune ingénieure dans le forum Windows 7
    Réponses: 0
    Dernier message: 13/03/2011, 21h07
  2. [Débutant] Petit problème dans mon programme
    Par bsangoku dans le forum MATLAB
    Réponses: 8
    Dernier message: 22/04/2010, 16h19
  3. Problèmes dans un programme awk
    Par seyar666 dans le forum Linux
    Réponses: 1
    Dernier message: 13/05/2008, 17h33
  4. Problème dans mon programme
    Par zesister dans le forum Scheme
    Réponses: 17
    Dernier message: 02/05/2008, 02h39
  5. problème dans un programme
    Par mederic dans le forum C
    Réponses: 5
    Dernier message: 13/05/2006, 16h53

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