2017-09-20 4 views
0

ich den Fehler zu finden versuchenPseudocode - Was ist falsch dieses

Der Code soll, wenn eine positive ganze Zahl von einem Benutzer eingegeben, um herauszufinden, genau teilbar durch die Anzahl 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' 

egal, was es ausgibt 'ist nicht durch 3 teilbar'

+0

Fragen Sie nur nach Pseudocode oder haben Sie versucht, dies in Python zu übersetzen? –

+2

Wenn 'n' in Ihrer while-Schleife Null ist, wird 3 wieder subtrahiert, so dass' n' niemals null ist, daher wird'IFn = 0' niemals wahr sein. –

+1

Bist du tatsächlich mit Papier und Bleistift durchgegangen? – scrappedcola

Antwort

0

Sie verwenden größer als OR EQUAL TO, so dass Sie nicht aus der Schleife auf n = 0 ausbrechen, nur n = -3, die dann Ihre auslöst ELSE-Anweisung. Der EQUAL TO-Aspekt bringt Sie einen Schritt zu weit.

Beantworten des Kommentars: Verwenden> statt> =. Grundsätzlich erlaubt der geschriebene Code niemals, dass n zum Zeitpunkt der Auswertung der Bedingung gleich 0 ist. Verfolgen Sie jeden Schritt der Schleife mit einer Reihe wie 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. 

Eine schnelle Möglichkeit leicht zu erkennen Loops überprüfen, die nicht ausführen, wie erwartet ist nur manuell durchlaufen sie mit einem einfachen Eingang.

+0

Was soll ich verwenden um es dann zu reparieren? –

+0

Ich habe eine Schritt für Schritt Erklärung des Prozesses hinzugefügt. Denken Sie daran, dass das Tolle an Computern ist, dass sie genau das tun, was Sie ihnen sagen. Denken Sie auch daran, dass das Schlimmste an Computern ist, dass sie genau das tun, was Sie ihnen sagen. – PeskyToaster