2010-10-30 5 views
0

L'extrait de code suivant imprime le triangle Pascals, j'ai obtenu cet extrait de l'Internet, mais je suis incapable d'obtenir la formule pour bin.Si quelqu'un peut m'aider avec je serais merci \Aide dans le triangle Pascals

#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; 
} 
+0

Je ne comprends pas vraiment la question, que recherchez-vous exactement? –

+0

@ inf.ig.sh: Je suis incapable de comprendre la la formule pour le calcul de bin –

Répondre

1

Ok, nous allons jeter un coup d'oeil. La formule est la actuall intérieure de 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 numéro de l'élément dans la rangée. Comme dans la rangée 1, il y aura 1 élément dans la rangée 2 deux éléments. Donc le for(x=0;x<=q;++x) a du sens.

maintenant à la clause if if((x==0)||(q==0)). Si x vaut 0 que nous sommes sur le côté gauche du triangle ou au début de la ligne du triangle, ce qui est toujours 1. Si q vaut 0 que obviosly, c'est la première rangée du triangle (en commençant par le haut) qui est toujours 1. Puisqu'il y a le seul élément.

maintenant à la clause else, qui est probablement la partie la plus 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 est 0 au début de la boucle et a été défini sur 1. Ceci est important car bin a été défini en dehors de la boucle for et conserve la valeur de l'itération à l'itération. Alors maintenant x est 2 et bin 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 pascal's triangle. Surtout la partie avec

Calculer une ligne ou diagonale par lui-même

vous y trouverez la formule écrite à nouveau. Le mot important ici sont des factoriels. En regardant également l'article sur le pascal matrix pourrait être utile. Je vais essayer de l'expliquer mais (je déteste quand quelqu'un dit ça) vous devez le voir. Jetez un oeil aux diagonales du triangle pascal et à la partie interne de la formule (q-x+1). Calculez maintenant les valeurs que vous obtiendrez toujours pour chaque diagonale. Vous voyez un motif? J'espère que les choses commencent à avoir du sens.

1

Imprimer les valeurs utilisées pour calculer bin 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; 
    } 
+0

@pmgI toujours pas la logique derrière cette formule pour imprimer le triangle .. –