2017-10-16 8 views
-4

Voici le script:Quelle partie de cet entier est un entier non négatif? (Erreur factoriel)

n=input('Enter the number of rows: ') 
PT=zeros(n); 
row=1; 
col=1; 
while row~=n+1 
    for col=1:1:n 
    PT(row, col)=(factorial(row-1)/(factorial(col-1)*factorial(row-col))); 
    end 
    row=row+1; 
    col=1; 
end 
PT 

Quand je lance, il dit d'entrer le nombre de lignes, donc j'entrer « 4 ». Ensuite, il est dit

error: factorial: all N must be real non-negative integers 
error: called from 
    factorial at line 40 column 5 
    hw6p2 at line 7 column 17 

Je ne comprends pas ce qui ne va pas.

+0

Qu'essayez-vous de mettre en œuvre ici? Quelle formule? –

+0

Citant du centre d'aide, * "Les questions qui cherchent l'aide au débogage (" pourquoi ce code ne fonctionne-t-il pas? ") Doivent inclure le comportement *** * désiré ***, ... * Voir: Comment créer un MCVE ]. "* –

+0

Vous avez omis une partie de la citation du centre d'aide qui dit que cette question est conforme aux directives. Les questions cherchant l'aide au débogage ("pourquoi ce code ne fonctionne-t-il pas?") Doivent inclure le comportement souhaité, un problème spécifique ** ou une erreur et le code le plus court nécessaire pour le reproduire dans la question elle-même ** –

Répondre

3

Dans la ligne for col=1:1:n, col peut obtenir jusqu'à la valeur n, même si row est encore 1. Par conséquent, lorsque vous appelez factorial(row-col), row peut être 1 et col peut être 2. C'est là que ça peut être négatif.

+2

Cela devrait être un commentaire IMO car cela ne fournit pas la solution du problème. Il indique seulement le problème –

+1

La question était quelle partie de leur code provoque la factorielle négative. Je pense que cela répond à cette question. –

+2

Parfois, la réponse peut être même Oui/Non mais cela n'en fait pas une réponse appropriée IMO –

-2

Votre entrée factorielle ne doit pas être négative ..... dans la boucle (ligne-col) prend une valeur négative et une erreur a sauté. Utilisez abs pour le rendre positif toujours.

n=input('Enter the number of rows: ') 
PT=zeros(n); 
row=1; 
col=1; 
while row~=n+1 
    for col=1:1:n 
    PT(row, col)=(factorial(row-1)/(factorial(col-1)*factorial(abs(row-col)))); 
    end 
    row=row+1; 
    col=1; 
end 
PT