Написать программу с двумя формами ветвлений – альтернативой и переключателем

Betty

Составить алгоритм и написать код программы, вычисляющей длину линии вертикального разреза фигуры y_razrez, значения площадей фигуры слева и справа от линии разреза s_left, s_right, по значениям аргумента x, введенным с консоли
6 ответов

Betty

Program Variant_11;
Uses WinCRT;
Const r=1;
      t=0.5;
Var y_razrez, s_left, s_right, x, alfa, betta,z, h: Real;
Begin
WriteLn('Laboratornaya rabota#2');
WriteLn('Variant#11');
WriteLn('IS-12-2');
WriteLn('TTTT');
WriteLn;
Write('x='); {VVod ishodnyh dannyh}
ReadLn(x);
IF (x=0)
Then Begin
y_razrez:=1;
s_left:=(Pi*r*r)/4+(Pi*t*t)/2;
s_right:=(Pi*r*r)/4+(Pi*t*t)/2;
End;
IF (x<>0)
Then If (x>=0.5)
     Then Begin
     y_razrez:=z+h
     z:=sqrt(r*r-x*x)
     h:=sqrt(t*t-(x-0.5)*(x-0.5))
     alfa:=2*arctan(z/x)
     betta:=2*arctan(h/(x-0.5))
     s_right:=(r*r/2*(alfa-sin(alfa)))/2+(t*t/2*(betta-sin(betta)))
     s_left:=(Pi*r*r)/4+(Pi*t*t)/2+(Pi*r*r)/4+(Pi*t*t)/2-s_right
     End;
     Else Begin
      y_razrez:=z+h;
     z:=sqrt(r*r-x*x);
     h:=sqrt(t*t-(0.5-x)*(0.5-x));
     alfa:=2*arctan(z/h);
     betta:=2*arctan(h/(0.5-x));
     s_right:=(r*r/2*(alfa-sin(alfa)))/2+(t*t/2*(betta-sin(betta)))/2;
     s_left:=(Pi*r*r)/4+(Pi*t*t)/2+(Pi*r*r)/4+(Pi*t*t)/2-s_right;
     End;
Else If(x>=-0.5)
     Then Begin
     y_razrez:=z+h;
     z:=sqrt(r*r-x*x);
     h:=sqrt(t*t-(0.5-abs(x))*(0.5-abs(x)));
     alfa:=2*arctan(z/x);
     betta:=2*arctan(h/(0.5-abs(x)));
     s_left:=(r*r/2*(alfa-sin(alfa)))/2+(t*t/2*(betta-sin(betta)))/2;
     s_right:=(Pi*r*r)/4+(Pi*t*t)/2+(Pi*r*r)/4+(Pi*t*t)/2-s_left;
     End;
     Else Begin
     y_razrez:=z+h;
     z:=sqrt(r*r-x*x);
     h:=sqrt(t*t-(abs(x)-0.5)*(abs(x)-0.5));
     alfa:=2*arctan(z/x);
     betta:=2*arctan(h/(abs(x)-0.5));
     s_left:=(r*r/2*(alfa-sin(alfa)))/2+(t*t/2*(betta-sin(betta)))/2;
     s_right:=(Pi*r*r)/4+(Pi*t*t)/2+(Pi*r*r)/4+(Pi*t*t)/2-s_left;
     End;
WriteLn('y_razrez=',y_razrez:0:6); {Vyvod dannyh}
WriteLn('s_left=',s_left:0:6);
WriteLn('s_right=',s_right:0:6);
End.
Объясните пожалуйста дуре почему она не хочет работать и где ошибка


Betty

Betty, сразу в глаза бросилось то что вы ставите ; перед else что недопустимо...


Betty

Ой... Спасибо


Betty

В общем вот рабочая...
Program Variant_11;
Uses WinCRT;
Const r=1;
      t=0.5;
Var y_razrez, s_left, s_right, x, alfa, betta,z, h: Real;
Begin
WriteLn('Laboratornaya rabota#2');
WriteLn('Variant#11');
WriteLn('IS-12-2');
WriteLn('TTTT');
WriteLn;
Write('x='); {VVod ishodnyh dannyh}
ReadLn(x);
IF (x=0)
Then Begin
y_razrez:=1;
s_left:=(Pi*r*r)/4+(Pi*t*t)/2;
s_right:=(Pi*r*r)/4+(Pi*t*t)/2;
End;
IF (x<>0)
Then If (x>=0.5)
     Then Begin
     y_razrez:=z+h;
     z:=sqrt(r*r-x*x);
     h:=sqrt(t*t-(x-0.5)*(x-0.5));
     alfa:=2*arctan(z/x);
     betta:=2*arctan(h/(x-0.5));
     s_right:=(r*r/2*(alfa-sin(alfa)))/2+(t*t/2*(betta-sin(betta)));
     s_left:=(Pi*r*r)/4+(Pi*t*t)/2+(Pi*r*r)/4+(Pi*t*t)/2-s_right;
     End
     Else Begin
      y_razrez:=z+h;
     z:=sqrt(r*r-x*x);
     h:=sqrt(t*t-(0.5-x)*(0.5-x));
     alfa:=2*arctan(z/h);
     betta:=2*arctan(h/(0.5-x));
     s_right:=(r*r/2*(alfa-sin(alfa)))/2+(t*t/2*(betta-sin(betta)))/2;
     s_left:=(Pi*r*r)/4+(Pi*t*t)/2+(Pi*r*r)/4+(Pi*t*t)/2-s_right;
     End
Else If(x>=-0.5)
     Then Begin
     y_razrez:=z+h;
     z:=sqrt(r*r-x*x);
     h:=sqrt(t*t-(0.5-abs(x))*(0.5-abs(x)));
     alfa:=2*arctan(z/x);
     betta:=2*arctan(h/(0.5-abs(x)));
     s_left:=(r*r/2*(alfa-sin(alfa)))/2+(t*t/2*(betta-sin(betta)))/2;
     s_right:=(Pi*r*r)/4+(Pi*t*t)/2+(Pi*r*r)/4+(Pi*t*t)/2-s_left;
     End
     Else Begin
     y_razrez:=z+h;
     z:=sqrt(r*r-x*x);
     h:=sqrt(t*t-(abs(x)-0.5)*(abs(x)-0.5));
     alfa:=2*arctan(z/x);
     betta:=2*arctan(h/(abs(x)-0.5));
     s_left:=(r*r/2*(alfa-sin(alfa)))/2+(t*t/2*(betta-sin(betta)))/2;
     s_right:=(Pi*r*r)/4+(Pi*t*t)/2+(Pi*r*r)/4+(Pi*t*t)/2-s_left;
     End;
WriteLn('y_razrez=',y_razrez:0:6); {Vyvod dannyh}
WriteLn('s_left=',s_left:0:6);
WriteLn('s_right=',s_right:0:6);
readkey;
End.


Betty

Она всё равно выдает ошибку при вводе отрицательного числа


Betty

Betty, так это уже ошибка времени выполнения и я к этому отношения не имею, т.к я незнаю что ваша программа решает и что вы там наделали, я лишь исправил ошибки для того чтобы программа была рабочей и запускалась