2014-11-27 2 views
0

Может кто-нибудь сказать мне, что не так с моим кодом? Предполагается решать квадратные уравнения:Free Pascal, проблема с вложенными ifs и elses

program quadraticeq; 
uses crt; 
var 
    a,b,c,x1,x2,R1,I1,R2,I2,D: integer; 
    p:1..4; 
begin 
    writeln (output, 'Enter a,b i c:'); {ax^2 + bx + c = 0} 
    readln (a,b,c); 

    D:=sqr(b)-4*a*c; {discriminant} 

    if a=0 then 
     p:=1 
    else 
     if D=0 then begin 
      p:=2; 
      x1:=(-b)/(2*a); 
      end 
     else 
      if D>0 then begin 
       p:=3; 
       x1:=(-b+sqrt(D))/(2*a); 
       x2:=(-b-sqrt(D))/(2*a); 
      end 
      else begin 
       p:=4; 
       R1:=(-b)/(2*a); 
       I1:=sqrt(-D)/(2*a); 
       R2:=-R1; 
       I2:=-I1; 
     end; 

    case p of 
    1: writeln (output, 'Wrong entry! Quantificator a mustnt be zero!'); 
    2: writeln (output, 'Double root of the equation is: x1=x2=',x1); 
    3: writeln (output, 'Roots of the equation are x1=',x1,'and x2=',x2,'.'); 
    4: writeln (output, 'Complex roots of the equation are x1=',R1,'+i',I1,' and x2=',R2,'+i',I2,'.'); 
    end; 
end. 
+2

И? Чем оно отличается от того, что вы хотите? Вы ожидаете, что кто-то ее скомпилирует, запустит, проверит его (на основе спецификации, состоящей из «решающих квадратичных уравнений»), так что вам не нужно прикладывать какие-либо усилия к вашему вопросу? – Blorgbeard

+4

Отформатировав его правильно, вы увидите, что есть некоторые недостающие «end». – fedorqui

ответ

1

Когда я скомпилировать код под FreePascal, я получаю:

Compiling main.pas                
main.pas(17,21) Error: Incompatible types: got "Double" expected "SmallInt"  
main.pas(22,33) Error: Incompatible types: got "Extended" expected "SmallInt"  
main.pas(23,33) Error: Incompatible types: got "Extended" expected "SmallInt"  
main.pas(27,25) Error: Incompatible types: got "Double" expected "SmallInt"  
main.pas(28,29) Error: Incompatible types: got "Extended" expected "SmallInt"  
main.pas(40) Fatal: There were 5 errors compiling module, stopping    
Fatal: Compilation aborted              

так это выглядит как конфликт между целым и типов с плавающей точкой. Когда я включаю все, кроме p переменных быть типа real:

var 
    a,b,c,x1,x2,R1,I1,R2,I2,D: real; 
    p:1..4; 

затем компилируется нормально.

И, при выполнении, что с известными значениями:

(x + 1)(x - 3) = 0 
=> x^2 -2x -3 = 0 

я вижу:

Enter a, b, c:                 
1 -2 -3                   
Roots of the equation are x = 3.00000 or -1.00000. 

Это было сделано с некоторыми незначительными изменениями в программе, чтобы сделать вывод более удобным для чтения, но основная часть код (в частности, расчеты) остался нетронутым.

Смежные вопросы