Question

L'extrait de code suivant imprime le triangle Pascals, j'ai cet extrait de l'Internet mais je suis incapable d'obtenir la formule pour toute personne bin.If peut me aider avec elle, je serais thankfull \

#include<stdio.h>
int main()
{
    int bin=1,p,q=0,r,x;
    clrscr();
    printf("Rows you want to input:");
    scanf("%d",&r);
    printf("\nPascal's Triangle:\n");
    while(q<r)
    {   
        printf("ROW %d",q);
        for(p=40-3*q;p>0;--p)
        printf(" ");
        for(x=0;x<=q;++x)
        {
            if((x==0)||(q==0))
            bin=1;
            else
            bin=(bin*(q-x+1))/x;
            printf("%6d",bin);
        }
        printf("\n");
        ++q;
    }
    getchar();
    return 0;
}
Était-ce utile?

La solution

Ok, nous allons jeter un coup d'oeil. La formule de actuall est l'intérieur de la boucle:

    for(x=0;x<=q;++x)
    {
        if((x==0)||(q==0))
          bin=1;
        else
          bin=(bin*(q-x+1))/x;
        printf("%6d",bin);
    }

q représente la rangée du triangle de Pascal, à partir du haut. x représente le nombre d'éléments dans la rangée. Depuis la ligne 1, il y aura 1 élément de la ligne 2 deux elemnts. Ainsi, le for(x=0;x<=q;++x) sens.

maintenant à la clause si if((x==0)||(q==0)). Si x est 0 que nous sur le côté gauche du triangle ou au début de la ligne de triangle, qui est toujours 1. Si q est 0 à obviosly c'est la première rangée du triangle (en partant du haut) qui est aussi toujours 1. Comme il est le seul élément.

maintenant à la clause d'autre, ce qui est probablement la plus grande partie intéressante:

    else
      bin=(bin*(q-x+1))/x;

La première fois que nous obtenons dans cette clause est après q est 0 et x 0 était au début de la boucle et a été mis à 1. Ceci est important car bin a été défini en dehors de la boucle et maintient la valeur de itération à l'autre. Alors maintenant x est 2 et le bac est 1. Encore une fois q représente le numéro de ligne et la longueur de la ligne. Pour comprendre cela, vous devriez regarder la page wikipedia du triangle pascals. Surtout la partie avec

  

Calculer une ligne individuelle ou   diagonale par lui-même

vous trouverez la formule écrite à nouveau. Le mot important ici sont factorielles. Toujours à la recherche l'article sur la matrice pascals pourrait être utile. Je vais essayer de l'expliquer, mais (je déteste quand quelqu'un dit que), vous devez le voir. Jetez un oeil des diagonales du triangle et à la pascals partie intérieure de la formule (q-x+1). Maintenant, calculer les valeurs que vous alsways obtenir pour chaque diagonale. Vous voyez un modèle? J'espère maintenant que les choses commencent à faire sens.

Autres conseils

Imprimer les valeurs qui sont utilisées pour bin calculate dans la boucle pour comprendre comment cela fonctionne

    /* ... */
    else
    {
        printf("new bin=(%d*(%d-%d*1))/%d\n", bin, q, x, x);
        bin=(bin*(q-x*1))/x;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top