Dérouler un algorithme [Résolu]

dalidalila 3 Messages postés mercredi 3 janvier 2018Date d'inscription 4 janvier 2018 Dernière intervention - 3 janv. 2018 à 00:09 - Dernière réponse : nagaD.scar 4185 Messages postés samedi 8 septembre 2007Date d'inscription 19 janvier 2018 Dernière intervention
- 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.



Afficher la suite 

5 réponses

Répondre au sujet
nagaD.scar 4185 Messages postés samedi 8 septembre 2007Date d'inscription 19 janvier 2018 Dernière intervention - Modifié par nagaD.scar le 3/01/2018 à 10:34
+1
Utile
4
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
dalidalila 3 Messages postés mercredi 3 janvier 2018Date d'inscription 4 janvier 2018 Dernière intervention - 3 janv. 2018 à 19:38
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 :/
nagaD.scar 4185 Messages postés samedi 8 septembre 2007Date d'inscription 19 janvier 2018 Dernière intervention - 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)
dalidalila 3 Messages postés mercredi 3 janvier 2018Date d'inscription 4 janvier 2018 Dernière intervention - 4 janv. 2018 à 20:57
Merci infiniment :)
nagaD.scar 4185 Messages postés samedi 8 septembre 2007Date d'inscription 19 janvier 2018 Dernière intervention - 5 janv. 2018 à 08:01
pas de soucis, si c'est ok pour toi tu peux passer le sujet en résolu ;)
naga
Commenter la réponse de nagaD.scar