2015-09-06 74 views
0
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中完成了,它工作正常。Pascal問題與其他問題如果

做工精細它應該說:

factor^primo 

但顯示的內容僅僅是:

factor 

應該從如果對否則,如果去和嘗試別的。但是它現在正在做的是從if到else,然後是else。

一個例子,用數字360就應該說:

2^3 
3^2 
5 

但是它現在展示的是:

2 
3 
5 

我想這是因爲它總是與普里莫= 0結束,我不知道如何解決這個問題。

+0

我弄明白了,它從「if」語句到「else」使primo始終= 0。我該如何解決這個問題? – user2912069

+0

在轉到「else if」之前,它在「if」和「else」之間跳轉三次。我做錯了什麼? – user2912069

+1

請包括示例數據和問題中生成的輸出以及您期望看到的內容的描述。 –

回答

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;