Dérouler un algorithme

Résolu
Bonjour,
Je n'arrive pas a comprendre les sorties de ce programme:

#include <stdio.h>
#include <stdlib.h>

int main()
{  
     int s[10];
     int k=0;
     int i,j;
for(i=0;i<=9;i++)
{
    s[i]=0;
    s[k]=s[k]+2;
    for(j=0;j<=i;j++)
    {
        s[j]=s[j]+j;
    }
}
for(i=0;i<=9;i++)
{
    printf("%d\n",s[i]);
}

}

Le résultat est: 20,9,16,21,24,25,24,21,16,9.
La première sortie c'est 20 donc S[k]=10 au début ! Mais k=0 donc pourquoi s[k]=10??
Merci de m'aider ! C'est surement une question bête mais je suis débutante.

1 réponse

  1. salut,

    Rajoutes justes quelques affichages :

    
    int main()
    {  
         int s[10];
         int k=0;
         int i,j;
        for(i=0;i<=9;i++)
        {
            s[i]=0;
            printf("------ set for i  %d\n",i);
            s[k]=s[k]+2;
            printf("-- set s[%d] to %d\n",k,s[k]);
            for(j=0;j<=i;j++)
            {
                s[j]=s[j]+j;
                printf("set with j {%d} %d\n",j,s[j]);
            }
        }
        for(i=0;i<=9;i++)
        {
            printf("%d\n",s[i]);
        }
    
    }
    


    Ca va te permettre de comprendre que s[0] = 2*i au final (donc 2*10 donc 20) et de comprendre le reste par la meme occasion.

    naga
    1. Merci beaucoup ! Donc il fallait comprendre que s[o]=2*i ! C'est pas très évident de le dérouler sans avoir vu le résultat (les sorties) avant :/
    2. question d'habitude, première chose que je me suis dis en regardant le code c'est que k n'était pas incrémenté ^^ ... et vue que la seconde boucle ne change pas s[0] vue que j=0, on fait juste i fois s[0]=s[0]+2 . bref x)
    3. Merci infiniment :)
    4. pas de soucis, si c'est ok pour toi tu peux passer le sujet en résolu ;)
      naga