помогите с программой , доработайте , не могу блин , весь мозг сломал
Составить алгоритм и написать код программы, вычисляющей длину линии вертикального разреза фигуры y_razrez, значения площадей фигуры слева и справа от линии разреза s_left, s_right, по значениям аргумента x, введенным с консоли:
(картинка в прикрепленном файле)
Pascal |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
| Program lab2;
Uses CRT;
Var x, a, b, y, z, s_left, s_right, alfa, sin_alfa, segment,s_lefts, s_rights,alfas,sin_alfas,segments,s_lefta,s_righta :Real;
Begin
ClrScr;
Write('vvedite x [-1..1] :');Readln(x);
If (x<=0.0) Then
Begin
y:=Sqrt(1.0 - abs(x) * abs(x));
If (x<=-1.0)
Then y:=0.0;
a:=Sqrt(abs(0.25 - (abs(x)-0.5) * (abs(x)-0.5)));
If (x=-0.5)
Then a:=0.5;
b:=y+a;
End
Else
Begin
y:=Sqrt(1.0 - x * x);
If (x>=1.0)
Then y:=0.0;
a:=Sqrt(abs(0.25 - (x-0.5) * (x-0.5)));
If (x=0.5)
Then a:=0.5;
b:=y-a;
End;
If (x=0.0) Then
Begin
b:=1;
s_lefta:=pi/4+pi/8;
s_righta:=pi/4-pi/8;
End;
If (x<0.0) Then
Begin
sin_alfa:=y;
If (sin_alfa<>1.0)
Then alfa:=Arctan(sin_alfa/Sqrt(1.0 - sin_alfa*sin_alfa))
Else alfa:=Pi/2.0;
segment:=0.5*(alfa - sin_alfa);
s_right:=segment - 0.5*abs(x)*y;
s_left:=Pi/2.0 - s_right;
if (x<=0.5) then
begin
z:=0.5-abs(x);
sin_alfas:=a;
If (sin_alfas<>0.5)
Then alfas:=Arctan(sin_alfas/Sqrt(0.25 - sin_alfas*sin_alfas))
Else alfas:=Pi/2.0;
segments:=0.5*0.25*(alfas - sin_alfas);
s_rights:=segments + 0.5*abs(z)*a;
s_lefts:=Pi*0.25/2.0 - s_rights;
if z=0
Then
begin
s_rights:=pi/16;
s_lefts:=pi/16;
end;
end;
if (x>-0.5) then
begin
z:=abs(x)-0.5;
sin_alfas:=a;
If (sin_alfas<>0.5)
Then alfas:=Arctan(sin_alfas/Sqrt(0.25 - sin_alfas*sin_alfas))
Else alfas:=Pi/2.0;
segments:=0.5*0.25*(alfas - sin_alfas);
s_rights:=(segments + 0.5*abs(z)*a)/2;
s_lefts:=Pi/8 - s_rights;
if z=0
Then
begin
s_rights:=pi/16;
s_lefts:=pi/16;
end;
end;
s_righta:=s_rights+s_right;
s_lefta:=s_lefts+s_left;
end;
If (x>0.0) Then
Begin
z:=x-1.0;
x:=1.0-x;
sin_alfa:=y;
If (sin_alfa<>0.0)
Then alfa:=Arctan(sin_alfa/Sqrt(1.0 - sin_alfa*sin_alfa))
Else alfa:=Pi/2.0;
segment:=0.5*(alfa - sin_alfa);
s_right:=segment + 0.5*x*y;
s_left:=Pi/2.0 - s_right;
if (x<=0.5) then
begin
sin_alfas:=a;
If (sin_alfas<>0.5)
Then alfas:=Arctan(sin_alfas/Sqrt(0.25 - sin_alfas*sin_alfas))
Else alfas:=Pi/2.0;
segments:=0.5*0.25*(alfas - sin_alfas);
s_lefts:=segments + 0.5*x*a;
s_rights:=Pi*0.25/2.0 - s_lefts;
if z=0
Then
begin
s_rights:=pi/16;
s_lefts:=pi/16;
end;
end;
if (x>0.5) then
begin
sin_alfas:=a;
If (sin_alfas<>0.5)
Then alfas:=Arctan(sin_alfas/Sqrt(0.25 - sin_alfas*sin_alfas))
Else alfas:=Pi/2.0;
segments:=0.5*0.25*(alfas - sin_alfas);
s_rights:=segments + 0.5*abs(z)*a;
s_lefts:=Pi*0.25/2.0 - s_rights;
end;
s_righta:=s_rights+s_right;
s_lefta:=s_lefts+s_left;
End;
WriteLn('y_razrez=',b:6:4);
WriteLn('s_left=',s_lefta:6:4);
WriteLn('s_right=',s_righta:6:4);
readkey
End. |
|