与Else If的Pascal问题

时间:2015-09-06 18:54:20

标签: pascal

PROGRAM FactorPrimo(input,output);
VAR
    numero : integer;
    factor : integer;
    resto : integer;
    primo : integer;
    multiplicidad : boolean;

BEGIN
    write('Ingrese numero: ');
    readln(numero);
    factor := 2;
    primo := 0;
    multiplicidad := false;
    IF numero > 1 THEN
    BEGIN
        REPEAT
        BEGIN
            resto := numero MOD factor;
            IF resto = 0 THEN
            BEGIN
                numero := numero DIV factor;
                primo := primo + 1;
                multiplicidad := true;
            END
            ELSE IF multiplicidad = true THEN
                IF primo > 1 THEN
                writeln(factor,'^',primo);
                multiplicidad := false;
                ELSE
                writeln(factor);
                multiplicidad := false;
            ELSE
            factor := factor + 1;
            primo := 0;
            END;
        UNTIL numero = 1;
        writeln(factor);
    END
    ELSE 
        write('Debe ingresar un numero mayor a 1');
END.

我不知道为什么但是程序没有输入IF PRIMO > 1 then它总是转到下面的ELSE语句。我做错了什么吗?我在java中完成它并且工作正常。

工作正常应该说:

factor^primo

但显示的只是:

factor

它应该从if到else if并尝试else。但它现在正在做的是从if到else,然后是if。

一个例子,数字360应该说:

2^3
3^2
5

但它现在显示的是:

2
3
5

我认为这是因为它总是以primo = 0结束,我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

通过更改其他内部的primo = 0,如果有诀窍,现在可以正常工作。

ELSE IF multiplicidad = true THEN
IF primo > 1 THEN
writeln(factor,'^',primo);
multiplicidad := false;
primo = 0;
ELSE
writeln(factor);
multiplicidad := false;
primo = 0;