Dérouler un algorithme

Résolu/Fermé
dalidalila Messages postés 3 Date d'inscription mercredi 3 janvier 2018 Statut Membre Dernière intervention 4 janvier 2018 - Modifié le 3 janv. 2018 à 02:51
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 5 janv. 2018 à 08:01
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

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 251
Modifié le 3 janv. 2018 à 10:34
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
dalidalila Messages postés 3 Date d'inscription mercredi 3 janvier 2018 Statut Membre Dernière intervention 4 janvier 2018
Modifié le 3 janv. 2018 à 19:39
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 :/
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 251
4 janv. 2018 à 07:51
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)
0
dalidalila Messages postés 3 Date d'inscription mercredi 3 janvier 2018 Statut Membre Dernière intervention 4 janvier 2018
4 janv. 2018 à 20:57
Merci infiniment :)
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 251
5 janv. 2018 à 08:01
pas de soucis, si c'est ok pour toi tu peux passer le sujet en résolu ;)
naga
0