2017-09-20 13 views
0

Je suis en train de trouver l'erreurpseudocode - Qu'est-ce qui ne va pas sur ce

Le code est censé savoir si un entier positif entré par un utilisateur est divisible par le nombre 3.

n = userinput 
WHILE n ≥ 0 
    n = n - 3 
ENDWHILE 
IF n = 0 THEN 
    OUTPUT 'is divisible by 3' 
ELSE: 
    OUTPUT 'is not divisible by 3' 

peu importe ce qu'il sort 'n'est pas divisible par 3'

+0

Demandez-vous au sujet uniquement ou pseudocode avez-vous essayé de traduire cela en Python? Si –

+2

'n' est égal à zéro dans votre boucle while, il déduisons 3 à nouveau, donc' n' ne sera jamais nul, donc la 'IF n = 0' ne sera jamais vrai. –

+1

Avez-vous fait à travers ce fait un pas avec du papier et un crayon? – scrappedcola

Répondre

0

Vous utilisez plus grand que OU EGAL TO donc vous ne sortirez pas de la boucle sur n = 0, seulement n = -3 qui déclenche alors votre ELSE déclaration. L'aspect EQUAL TO vous emmène trop loin.

Répondre au commentaire: Utiliser> au lieu de> =. Fondamentalement, le code tel qu'il est écrit ne permettra jamais que n soit égal à 0 au moment où la condition est évaluée. Trace chaque étape de la boucle en utilisant un numéro comme 3.

N = 3 
//first pass 
WHILE (3 >= 0) // true 
n = 3-3 //n now 0 

//second pass 
WHILE (0 >= 0) //True, 0 is equal to 0 
n = 0-3 //n now -3 

//third pass 
WHILE(-3 >= 0) //False break out of loop 

IF(-3 == 0) // false so we jump to the else 

ELSE: 3 is not divisible by 3. 

Un moyen rapide de repérer facilement vérifier vos boucles qui ne fonctionnent pas comme prévu est juste exécuter manuellement à travers eux avec une entrée facile.

+0

Que dois-je utiliser pour le réparer alors? –

+0

J'ai ajouté une explication étape par étape du processus. Rappelez-vous la grande chose à propos des ordinateurs, c'est qu'ils font exactement ce que vous leur dites. Rappelez-vous aussi la pire chose à propos des ordinateurs est qu'ils font EXACTEMENT ce que vous leur dites. – PeskyToaster