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 :

d�calage dans les tableaux, comment avancer?


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut d�calage dans les tableaux, comment avancer?
    Bonjour.

    J'ai ecris un programme fournissant des statistiques a partir de donn�es fournies dans un fichier.

    Le prog se compile tr�s bien et marche, mais en affichant des resultat legerement faux....

    Pour calculer les stat, je manipule des tableaux de double, et il semble qu'il y ai des d�calages inexpliqu�s de lignes/colones dans mes tableaux.

    par exemple j'ai un tableau tab[1000][21].
    Lorsque je donne une valeur a tab[x][21] , la variable tab[x+1][0] se voit automatiquement attribu� la meme valeur!

    Quand je manipule tab[x][21] on dirait que le compilateur comprend tab[x+1][0]

    De plus j'arrive a afficher la valeur tab[x][25] alors que mon tableau n est d�clar� que jusqu'a [21].


    J'ai d�ja pass� pas mal de temps a relire, a re ecrire des parties du code mais en vin.

    C'est ici que j'ai besoin de votre experience, que me conseillez vous de faire? Retaper le code en entier sans me servire de ce que j'ai d�ja fais? continuer a chercher comme ca?

    ou si vous avez une id�e d'ou peut venir ce \{@#|\]! de d�calage dans les tableaux...

  2. #2
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    235
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 235
    Par d�faut
    Slt, faudrait que tu mettes une parti de ton code, car sinon ca va �tre dur de t'aider.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut
    ah... en fait je crois que j'ai trouv�... la solution la plus logique est que un de mes tableau n'est pas assez grand ou que je me suis tromp� de +1 ou -1 dans une boucle, resultat, la variable devant etre stok� en tab[x][21] est stoqu�e apr�s en tab[x+1][0].

    reste a trouver le bon tableau...

  4. #4
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    235
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 235
    Par d�faut
    Un conseil, fais 2 boucles imbriqu�s pour afficher les r�sultats de ton tableau, et affiches les. Cela te permttra de + facilement d�bugger ton tableau. Tu verras si les r�sultats sont incoh�rents, si ca bug par colonne,...
    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut
    C bon j suis arriv�!
    Juste pour te montrer a quoi ca ressemble mon programme:

    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
     
    void use_file()
    {
    	for(int w=0; w<nbrdestat; w++)
    	{
    		for(int x=0; x<20; x++)
    		{
     
    			tab_stat[w][x] = - (tab_read[w][x+8]);
     
    			if( tab_read[w][4] <= - (tab_stat[w][x]) )
    			{
    				tab_stat[w][x] = tab_stat[w][x] + tab_read[w][7];
    			}
     
    		}
     
    		tab_stat[w][21] = tab_read[w][0];
    	}
    }
     
    void comp_tab_rn()
    {
     
     
    	for (int k=0; k<10; k++)
    	{
    		tab_new_rn[k][21] = 9+k;
     
    		for (int s=0; s<nbrdestat; s++)
    		{
    			if( tab_stat[s][21] == 9+k )
    			{
    				tab_new_rn[k][22] ++;
    			}
    		}
    	}
     
    	// mise en place des esperences
     
    	for (int c=0; c<10; c++)
    	{
    		for (int s=0; s<nbrdestat; s++)
    		{
    			if( tab_stat[s][21] == 9+c )
    			{
    				for ( int v=0; v<20; v++)
    				{
    					tab_new_rn[c][v] = tab_new_rn[c][v] + tab_stat[s][v];
    				}
    			}
    		}
    	}
    }
    Faire du traitement de statistique c'est faire des boucles et encore des boucles!

  6. #6
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    235
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 235
    Par d�faut
    Bon ben si ca marche c bien alors Par contre un conseil, commente bien ton code, car si ce sont des stats, tu vas vite t'embrouiller si tu reprends le code plus tard.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut
    ok.

    Sinon a part ca, il est bo mon code non ?

    enfin je veux dire pas trop bord�lique?

  8. #8
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    235
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 235
    Par d�faut
    Ben c un code tout simple, y'a que des imbrications. c'est juste les commentaires qui manques car tu ne fais des traitements qu'a partir des tes indices.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    24
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par d�faut
    des imbrications? C'est des algorythmes?

    Moi c'est ce que j'aime bien faire, ca fait r�flechire c cool...

    genre ecrire des fonctions de tri, de classement, etc...

    C des algo ca non?

  10. #10
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    235
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 235
    Par d�faut
    Les imbrication sont les encastrement que tu fais, par exemple:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(...)
    {
       if(...)
       {
          if(...)
          {
              ...
          }
       }
    }
    Ce que tu as fais, ce sont des boucles imbriqu�es. On ne peut pas parler d'algos � proprement parl�. Va faire un ptit tour ds la rubrique algorithmes, tu verras des exemples plus ou moins simple.

  11. #11
    Membre �m�rite
    Avatar de Elijha
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    Avril 2003
    Messages
    314
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : B�timent Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par d�faut
    Salut

    Juste une petite remarque !

    En C, si tu d�clares un tableau de tab[1000][21], les valeurs des index du tableau doivent aller de 0 � 999 et 0 � 20. Sinon il risque d'avoir des d�passement en m�moire.
    Exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int tab[1000][21] ;
    void main(void)
      { int i, j ;
     
      // Init du tableau
      for(i=0; i<1000; i++)  // i prend les valeurs 0 à 999
        for(j=0; j<21; j++)  // j prend les valeurs 0 à 20
          tab[i][j] = 0 ;
     
      tab[0][21] = 10 ;  // Dépassement de mémoire (null pointer assigment)
      tab[0][20] = 10 ;  // Ok, on est dedans
      }
    C'�tait juste une petite remarque.

    Voila...

  12. #12
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    235
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 235
    Par d�faut
    Oui je l'avais pens� aussi, mais comme il avait mis "tab[x+1][0]", je pense qu'il le sait.

  13. #13
    Membre �m�rite
    Avatar de Elijha
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    Avril 2003
    Messages
    314
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : B�timent Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par d�faut
    Salut

    Petite erreur de ma part ! Dans le code, j'ai mis que tab[0][21] = 10 impliquait un 'null pointer assigment' : faux, il attribut 10 � tab[1][0].
    Il pourrait avoir un 'null pointer assigment' seulement dans le cas tab[999][21] = 10. Dans ce cas seul, on tape � l'exterieur du tableau en m�moire.

    Je ne pourrais pas affirmer une erreur dans son code, car les d�clarations de tableau n'y sont pas, mais on peut extrapoler que dans sa fonction 'void use_file()' la ligne tab_stat[w][21] = tab_read[w][0]; si tab_stat est d�clar� alors il aura une erreur; premi�rement dans son algorithme, et deuxi�mement un 'null pointer assigment' lorsque ces 2 boucles attendront la fin du tableau (ouf, j'y suis arriv�) :o .
    Pour corrig� (s'il y a a corriger) sa d�claration doit �treVoila....

  14. #14
    gl
    gl est d�connect�
    R�dacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par d�faut
    Citation Envoy� par Elijha
    Salut

    Petite erreur de ma part ! Dans le code, j'ai mis que tab[0][21] = 10 impliquait un 'null pointer assigment' : faux, il attribut 10 � tab[1][0].
    Il pourrait avoir un 'null pointer assigment' seulement dans le cas tab[999][21] = 10. Dans ce cas seul, on tape � l'exterieur du tableau en m�moire.
    La consequence de ce type d'erreur va dependre du compilateur, des options de compilation et du systeme. Tu ne peux pas a priori etre certain de l'erreur que ca va generer.

  15. #15
    Membre �m�rite
    Avatar de Elijha
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    Avril 2003
    Messages
    314
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : B�timent Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par d�faut
    Salut

    Exacte pour les options de compilations et mille excuses pour le 'null pointer assignment' (je viens de le tester).
    Mais il y a des grandes chances que si l'index d�passe la taille total du tableau (dans notre cas 1000x21 cases m�moires), que le programme �crive � un endroit non d�finit.
    Je travail sur micro-contr�leur, et une erreur de ce type est fatal � l'execution du programme (du moins � son bon fonctionnement).

    Voila et merci de la pr�cision.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Fractions dans les tableaux
    Par oliv314 dans le forum Tableaux - Graphiques - Images - Flottants
    R�ponses: 3
    Dernier message: 24/05/2007, 08h58
  2. R�ponses: 3
    Dernier message: 28/02/2007, 17h53
  3. D�calage dans les pages html sous Internet explorer 7
    Par mouna201 dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 9
    Dernier message: 21/01/2007, 09h59
  4. Etat : lignes dans les tableaux
    Par oceanediana dans le forum Access
    R�ponses: 2
    Dernier message: 09/08/2006, 08h34
  5. [W3C] saut de ligne dans les tableaux
    Par zulul dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 2
    Dernier message: 11/09/2005, 22h22

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