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 :

Ca beug...


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 5
    Points
    5
    Par défaut Ca beug...
    voici mon programme mais je ne sais pas pourquoi le pc a l'air de chercher mais finalement rien ne s'affiche et le problème vient de la boucle while

    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
     
    {while(tab_somme[3]!=tab_qtite_dispo[3])
     {for (z=5;z<=5;z=z-1)
      {if(pas==0 & tab_qtite[3][z]!=0)
       {tab_qtite[3][z]=tab_qtite[3][z]+tab_qtite_dispo[3]-tab_somme[3] ;
       tab_somme[3]=tab_qtite_dispo[3];
       pas=pas+1;
       }
      }   
     } 
    }
    for (j=1;j<=3;j=j+1)
    {for (t=1;t<=5;t=t+1)
     {printf("Fournisseur %d au client %d: %d\n",j,t,tab_qtite[j][t]) ;
     }
    }
    pr renseignement:
    à la base pas=0
    tab_somme[3]=121
    tab_qtite_dispo[3]=120
    pour la troisieme ligne du tableau tab_qtite les valeurs sont 0/0/0/90/30

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Tu t'es trompé dans le test :
    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
    {
      while(tab_somme[3]!=tab_qtite_dispo[3])
      {
         for (z=5;z<=5;z=z-1) // <= ici tu ne fais la boucle qu'une fois, le for est inutile
         {
            if (pas==0 & tab_qtite[3][z]!=0) // <= ici c'est sans doute "&&" et non pas "&" qui est un opérateur bit-à-bit
            {
                tab_qtite[3][z]=tab_qtite[3][z]+tab_qtite_dispo[3]-tab_somme[3] ;
                tab_somme[3]=tab_qtite_dispo[3];
                pas=pas+1;
            }
         }
         pas=0;     
      }
    }
    for (j=1;j<=3;j=j+1)
    {
       for (t=1;t<=5;t=t+1)
       {
          printf("Fournisseur %d au client %d: %d\n",j,t,tab_qtite[j][t]) ;
       }
    }
    Il faudrait en savoir plus pour savoir pourquoi ça boucle.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Trap D
    Tu t'es trompé dans le test :
    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
    {
      while(tab_somme[3]!=tab_qtite_dispo[3])
      {
         for (z=5;z<=5;z=z-1) // <= ici tu ne fais la boucle qu'une fois, le for est inutile
         {
            if (pas==0 & tab_qtite[3][z]!=0) // <= ici c'est sans doute "&&" et non pas "&" qui est un opérateur bit-à-bit
            {
                tab_qtite[3][z]=tab_qtite[3][z]+tab_qtite_dispo[3]-tab_somme[3] ;
                tab_somme[3]=tab_qtite_dispo[3];
                pas=pas+1;
            }
         }
         pas=0;     
      }
    }
    for (j=1;j<=3;j=j+1)
    {
       for (t=1;t<=5;t=t+1)
       {
          printf("Fournisseur %d au client %d: %d\n",j,t,tab_qtite[j][t]) ;
       }
    }
    Il faudrait en savoir plus pour savoir pourquoi ça boucle.
    j'ai enlever "pas=0;"
    j'ai changer le"&" en "&&" mais ca ne marche toujours pas
    je dois laisser le for pke je fais com si je ne savais pas kel est la premiere valeur differente de 0 en commencant par la fin de la ligne
    ce que je souhaite faire c'est changer le 30 en 29

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Trap D
    Tu t'es trompé dans le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
      while(tab_somme[3]!=tab_qtite_dispo[3])
      {
         for (z=5;z<=5;z=z-1) // <= ici tu ne fais la boucle qu'une fois, le for est inutile
         {
    Cela serait vrai si c'était

    à la fin du for...

    Jc

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par fearyourself
    Citation Envoyé par Trap D
    Tu t'es trompé dans le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
      while(tab_somme[3]!=tab_qtite_dispo[3])
      {
         for (z=5;z<=5;z=z-1) // <= ici tu ne fais la boucle qu'une fois, le for est inutile
         {
    Cela serait vrai si c'était

    à la fin du for...

    Jc
    Moi ce que je souhaite faire c'est une boucle en partant de la fin de ma ligne, ce n'est pas juste qd j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (x=5;x<=5;x=x-1)

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par andjeo
    Moi ce que je souhaite faire c'est une boucle en partant de la fin de ma ligne, ce n'est pas juste qd j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (x=5;x<=5;x=x-1)
    Normalement, on dirait commence à la fin de la ligne et tu termines lorsque tu es trop à gauche (si on lit de gauche à droite bien sûr).

    Donc vu que la case la plus à gauche a un indice 0, tu ne penses pas qu'il faut tester si x>=0?

    Ton for serait tellement mieux écrit comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (x=5;x>=0;x--)
    D'ailleurs, pourquoi est-ce qu'on utilise des x maintenant? Ce n'était pas z avant ?

    Jc

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par fearyourself
    Citation Envoyé par andjeo
    Moi ce que je souhaite faire c'est une boucle en partant de la fin de ma ligne, ce n'est pas juste qd j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (x=5;x<=5;x=x-1)
    Normalement, on dirait commence à la fin de la ligne et tu termines lorsque tu es trop à gauche (si on lit de gauche à droite bien sûr).

    Donc vu que la case la plus à gauche a un indice 0, tu ne penses pas qu'il faut tester si x>=0?

    Ton for serait tellement mieux écrit comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (x=5;x>=0;x--)
    D'ailleurs, pourquoi est-ce qu'on utilise des x maintenant? Ce n'était pas z avant ?

    Jc
    x ou z cest du pareil au meme...
    je crois qu'à force de chercher j'ai le cerveau qui s'est atrofié lol
    c'est tellement évident ce que tu viens de dire...

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par fearyourself
    Citation Envoyé par Trap D
    Tu t'es trompé dans le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
      while(tab_somme[3]!=tab_qtite_dispo[3])
      {
         for (z=5;z<=5;z=z-1) // <= ici tu ne fais la boucle qu'une fois, le for est inutile
         {
    Cela serait vrai si c'était

    à la fin du for...

    Jc
    mon cerveau est en grève aujourd'hui
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 5
    Points
    5
    Par défaut
    Nouveau problème:
    voici mon tableau de départ
    40/50/10/00/00
    00/00/60/00/60
    00/00/00/90/30

    et voilà ce que je souhaite obtenir
    40/49/10/00/00
    00/00/60/00/60
    00/00/00/90/30

    voici 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
     
    for (y=1;y<=5;y=y+1)
    {while(tab_som[y]!=tab_qtite_dde[y])
     {pas=0; 
      for (z=1;z<=3;z=z+1)
      {if(pas==0 && tab_qtite[z][y]!=0)
       {tab_qtite[z][y]=tab_qtite[z][y]+tab_qtite_dde[y]-tab_som[y];
      tab_som[y]=tab_qtite_dde[y]; 
       pas=pas+1;
       } 
      }    
     }  
    }
    sachant que les valeurs du tableau tab_som sont: 40/51/70/90/90
    et que celles de tab_qtite_dde sont : 40/50/70/90/90


    Ca marche pa...

  10. #10
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    as tu initialisé tab_qtite[][] ?
    Colère et Haine mènent à la Puissance

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par keil
    as tu initialisé tab_qtite[][] ?
    oui tout est initialisé
    j'ai pas mis tout le programme autrement ca serait trop long

  12. #12
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    explique nous bien plutot ce qu'est censé faire ton prog.

    parce que je comprends tes tableau, mais pas l'opérations que tu tentes de faire
    Colère et Haine mènent à la Puissance

  13. #13
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    comme ca c'est plus lisible pour moi lol

    Citation Envoyé par andjeo
    Nouveau problème:
    voici mon tableau de départ
    40/50/10/00/00
    00/00/60/00/60
    00/00/00/90/30

    et voilà ce que je souhaite obtenir
    40/49/10/00/00
    00/00/60/00/60
    00/00/00/90/30

    voici 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
     
    for (y=0;y<=5;y=y+1)
    {
        while(tab_som[y]!=tab_qtite_dde[y])
        {
            pas=0; 
            for (z=0;z<=3;z=z+1)
            {
                if(pas==0 && tab_qtite[z][y]!=0)
                {
                    tab_qtite[z][y] = tab_qtite[z][y] + tab_qtite_dde[y]-tab_som[y];
                    tab_som[y] = tab_qtite_dde[y]; 
                    pas=pas+1;
                } 
            }    
        }  
    }
    sachant que les valeurs du tableau tab_som sont: 40/51/70/90/90
    et que celles de tab_qtite_dde sont : 40/50/70/90/90


    Ca marche pa...
    Colère et Haine mènent à la Puissance

  14. #14
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    bon bah suivant ton code et tes tableaux, ton prog change uniquement la premiere ligne de ton tableau, cependant voila une remarque:
    for (y=0;y<=5;y=y+1)
    ca veut dire que il va lire les cases: 0 1 2 3 4 et 5 ---> 6 cases alors que ton tableau n'en possède que 5
    presqu'idem pour ton autre for
    Colère et Haine mènent à la Puissance

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par keil
    bon bah suivant ton code et tes tableaux, ton prog change uniquement la premiere ligne de ton tableau, cependant voila une remarque:
    for (y=0;y<=5;y=y+1)
    ca veut dire que il va lire les cases: 0 1 2 3 4 et 5 ---> 6 cases alors que ton tableau n'en possède que 5
    presqu'idem pour ton autre for
    ah oui ca fait deja deux fautes pke je la refais juste en dessous
    mais ca change rien, ca ne marche tjrs pas...

  16. #16
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    bizarrement, ca marche nickel pour moi avec ton exemple
    Colère et Haine mènent à la Puissance

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par keil
    bizarrement, ca marche nickel pour moi avec ton exemple
    ah bon?

    Bon ben voici tout mon programme et chez moi ca ne marche 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
    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
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    #include <stdlib.h>
    #include <stdio.h>
    int main()
    {int j,t,k,i,cout;
    int tab_qtite_dispo[3] ;
    int tab_qtite_dde[5] ;
    int tab_qtite[3][5];
    int tab_pri[3][5];
     
    tab_qtite_dde[1]=40;
    tab_qtite_dde[2]=50;
    tab_qtite_dde[3]=70;
    tab_qtite_dde[4]=90;
    tab_qtite_dde[5]=90;
     
    tab_qtite_dispo[1]=100;
    tab_qtite_dispo[2]=120;
    tab_qtite_dispo[3]=120;
     
           tab_pri[1][1]=4   ;
           tab_pri[1][2]=1   ;
           tab_pri[1][3]=2   ;
           tab_pri[1][4]=6   ;
           tab_pri[1][5]=9   ;
     
           tab_pri[2][1]=6   ;
           tab_pri[2][2]=4   ;
           tab_pri[2][3]=3   ;
           tab_pri[2][4]=5   ;
           tab_pri[2][5]=7   ;
     
           tab_pri[3][1]=5   ;
           tab_pri[3][2]=2   ;
           tab_pri[3][3]=6   ;
           tab_pri[3][4]=4   ;
           tab_pri[3][5]=8   ; 
     
     
    //printf("Plan de transport initial:\n");
    //printf("\n");
     
     tab_qtite[1][1]=40  ;
           tab_qtite[1][2]=50  ;
           tab_qtite[1][3]=10  ;
           tab_qtite[1][4]=0   ;
           tab_qtite[1][5]=0   ;
     
           tab_qtite[2][1]=0   ;
           tab_qtite[2][2]=0   ;
           tab_qtite[2][3]=60  ;
           tab_qtite[2][4]=0  ;
           tab_qtite[2][5]=60   ;
     
           tab_qtite[3][1]=0    ;
           tab_qtite[3][2]=0    ;
           tab_qtite[3][3]=0    ;
           tab_qtite[3][4]=90   ;
           tab_qtite[3][5]=30   ;
     
     
    tab_qtite[3][2]=1; 
     
    int y,z,somme,som,ligne,colonne;
    int tab_somme[3], tab_som[5];
     
    somme=0;
    som=0;
     
    for (y=1;y<=3;y=y+1)
        {for (z=1;z<=5;z=z+1) 
         { somme=somme+tab_qtite[y][z];
         }
        tab_somme[y]=somme;
        //printf("la somme est: %d\n",tab_somme[y]);
            somme=0;
        }
    for (z=1;z<=5;z=z+1)
        {for (y=1;y<=3;y=y+1) 
         { som=som+tab_qtite[y][z];
         }
        tab_som[z]=som;
        printf("la somme est: %d\n",tab_som[z]);
            som=0;
        }
    tab_qtite[3][2]=0;
     
    int pas;
     
     
    for (y=1;y<=5;y=y+1)
    {while(tab_som[y]!=tab_qtite_dde[y])
     { pas=0;
      for (z=1;z<=3;z=z+1)
      {if(pas==0 && tab_qtite[z][y]!=0)
       {tab_qtite[z][y]=tab_qtite[z][y]+tab_qtite_dde[y]-tab_som[y];
       tab_som[y]=tab_qtite_dde[y]; 
       pas=pas+1;
       } 
      }    
     }  
    }
     
    for (j=1;j<=3;j=j+1)
    {for (t=1;t<=5;t=t+1)
     {printf("Fournisseur %d au client %d: %d\n",j,t,tab_qtite[j][t]) ;
     }
    }
     
     
     
     
     
     
    cout=0 ;
     
    for (k=1;k<=3;k=k+1)
        {for (i=1;i<=5;i=i+1)
             {cout=cout+tab_pri[k][i]*tab_qtite[k][i] ; }   
        }
     
    printf("\n");
    printf("Cout total = %d",cout) ;
    printf("\n");
     
     
     
          system("PAUSE");
          return 0;
    }

  18. #18
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    declare ca:
    int tab_qtite[3][5];

    plutot comme ca:
    int tab_qtite[4][6];

    c'est une solution "pas bien"!!!!

    tente de comprendre pourquoi ca marche comme ca. et comprend pourquoi c'est une solution "pas bien"!!!

    une fois que tu as compris, fais toutes les modif necessaires.
    si tu ne comprends vraiment pas, relis tes cours sur les tableaux en C
    Colère et Haine mènent à la Puissance

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par keil
    declare ca:
    int tab_qtite[3][5];

    plutot comme ca:
    int tab_qtite[4][6];

    c'est une solution "pas bien"!!!!

    tente de comprendre pourquoi ca marche comme ca. et comprend pourquoi c'est une solution "pas bien"!!!

    une fois que tu as compris, fais toutes les modif necessaires.
    si tu ne comprends vraiment pas, relis tes cours sur les tableaux en C
    mes autres programmes fonctionnent lorsque je mets 3 et 5, comment ca se fait alors?
    est-ce qu'on rajoute un seulement dans la déclaration des tableaux?

  20. #20
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    ok, je vais t'expliquer en quelques mot.
    Quand tu programme en C, il faut toujours que tu visualises la mémoire et que tu sache toujours qu'un tableau c'est avant tout un pointeur particulier.

    int tab[3][5] signifie que tu crées un pointeur de nom tab et que tu lui alloues 3*5*sizeof(int) octets en lecture/écriture en mémoire.

    donc, tu seras capable d'écrire en mémoire sur 60 octets en supposant qu'un int soit codé sur 4 octets.

    quand tu demande
    tab[1][1] = 5; //une assignation toute bete.
    tu demande d'écrire en memoire le nombre 5, 1*5+1 case après le début de ton tableau, soit 24 octets après l'emplacement mémoire sur lequel tab pointe.

    quand tu demande:
    tab[3][5] = 5;
    tu demande d'écrire en mémoire le nombre 5, 3*5+5 cases après le début de ton tableau, soit 120 octets après l'emplacement mémoire sur lequel tab pointe.
    en gros, si l'adresse mémoire sur lequel tab pointe est 78 en format décimal, tu lui demande décrire sur la portion 198->201 l'entier 5 (toujours codé sur 4 octets)
    hors ton tableau occupe l'espace 78->138, tu te rends donc compte que tu tentes d'écrire en dehors de l'espace réservé à ton tableau.
    En java, tu auras eu l'exception bounds out of limit, en C, tu aurais du avoir un segmentation fault.

    le problème avec le C, c'est que la plupart des compilos ne sont pas ausi stricts que celui de java. donc ils ne verifient pas les erreurs de ce genre.
    (Cela permet à beaucoup de hacker d'exercer le buffer overflow)

    tu fais des accès hors limites d'une zone définie, normalement c'est accès interdit, mais des programmes utilisant la mémoire partagée te permettent de lire voire écrire dans ces zones.

    Si tes autres progs marche, c'est parce que ton tableau est défini en mémoire juste avant une des zones de ce type. t'as eu du bol que ça ait marché, mais normalement ca devrait pas! (tente de un printf("%s\n", NULL); tu verras que ca fonctionnera pas)

    ce que je t'ai fait faire, c'est juste définir une taille plus grande pour que une partie de ton code reste cohérent et ait bien droit aux acces lecture/écriture dans la zone de ton tableau.

    c'est pour ca que ca marche.

    bref!
    Le premier indice d'un tableau en C est 0 (et non pas 1 comme en algorithmique).
    Quand tu utilises un langage, fait attention aux normes.

    le C étant très permissif, tu tomberas souvent sur des erreurs de ce genre.
    En C, il faut etre rigoureux et precis sur le code que tu établis!!
    Colère et Haine mènent à la Puissance

Discussions similaires

  1. beug sur mon PGM
    Par yesil08 dans le forum C++Builder
    Réponses: 15
    Dernier message: 18/05/2007, 18h41
  2. Beug lors de l'envoi de bit c++ builder
    Par tibo7 dans le forum C++Builder
    Réponses: 13
    Dernier message: 08/05/2007, 09h11
  3. beug sur un code retour
    Par vince2005 dans le forum Langage
    Réponses: 10
    Dernier message: 13/07/2006, 11h47
  4. href= + onmouseover= ..... et sa beug, la je comprand pas !!
    Par weldoo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/01/2006, 19h43
  5. changer image au clic -> beug ?
    Par thibotus01 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/10/2005, 16h37

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