30.09.2012, 17:32 | #1 (permalink) |
Новичок
Регистрация: 30.09.2012
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Решение геометрических задач в Паскале
Составить алгоритм и написать код программы, вычисляющей длину линии вертикального разреза фигуры y_razrez, значения площадей фигуры слева и справа от линии разреза s_left, s_right, по значениям аргумента x, введенным с консоли: |
30.09.2012, 17:32 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Посмотрите, в данных обсуждениях может находиться нужная информация Решение нелинейного уравнения на Паскале Десять задач в Паскале Общее решение Помогите в решение задач по электронике Решение задачи в паскале |
01.10.2012, 19:09 | #2 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Площадь фигуры вычисляется по следующим условиям:
Полная площадь фигуры фактически будет равна 0,5*Pi Площадь в первой четверти будет равна 0,25*Pi-0,125*Pi=0,125*Pi Площадь во второй четверти будет равна 0,25*Pi Площадь в третьей четверти будет равна 0,125*Pi Теперь определите координаты точек пересечения прямой, заданной функцией f(x)=x и окружностей x[sup]2[/sup]+y[sup]2[/sup]=1 и x[sup]2[/sup]+y[sup]2[/sup]=0,25. Особо интересуют значения координаты Y. Длину отрезка вычислите по формуле |Y1-Y2|. Теперь остается воспользоваться формулой вычисления площади сектора, учитывая, что используется не полный круг, а половина. Удачи в вычислениях |
06.10.2012, 18:04 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ну вот, добил. В нумерации функций индексы 1, 2 и 3 относятся к верхней большой полуокружности, левой малой и правой малой, соответственно.
Код:
Var X,Y_razrez,S_left,S_right:real; Function ArcCos(Xac:real):real; begin if Xac=1 then ArcCos:=0 else if Xac=-1 then ArcCos:=Pi else ArcCos:=(Pi/2)-ArcTan(Xac/SQRT(1-Xac*Xac)); end; Function Y1(x1:real):real; begin Y1:=Sqrt(1-Sqr(x1)); end; Function Y2(x2:real):real; begin Y2:=-Sqrt(0.25-Sqr(x2+0.5)); end; Function Y3(x3:real):real; begin Y3:=Sqrt(0.25-Sqr(x3-0.5)); end; Function Segm1_right(x1:real):real; Var alph:real; begin alph:=ArcCos(x1); Segm1_right:=alph/2-Y1(x1)*x1/2; end; Function Segm1_left(x1:real):real; begin Segm1_left:=Pi/2-Segm1_right(x1); end; Function Segm2_right(x2:real):real; Var alph:real; begin alph:=ArcCos((0.5+x2)/0.5); Segm2_right:=alph*0.125+Y2(x2)*(0.5+x2)/2; end; Function Segm2_left(x2:real):real; begin Segm2_left:=Pi*0.125-Segm2_right(x2); end; Function Segm3_right(x3:real):real; Var alph:real; begin alph:=ArcCos((x3-0.5)/0.5); Segm3_right:=alph*0.125-Y3(x3)*(x3-0.5)/2; end; Function Segm3_left(x3:real):real; begin Segm3_left:=Pi*0.125-Segm3_right(x3); end; Begin Repeat Write('Enter X (X<-1 or X>1 to quit): '); Readln(X); If (X>=-1) and (X<=1) then begin if X=0 then begin Y_razrez:=1; S_left:=Pi*0.375; S_right:=Pi*0.125; end else if X<0 then begin Y_razrez:=Y1(X)-Y2(X); S_left:=Segm1_left(X)+Segm2_left(X); S_right:=Segm1_right(X)+Segm2_right(X)-Pi*0.125; end else begin Y_razrez:=Y1(X)-Y3(X); S_left:=Segm1_left(X)-Segm3_left(X)+Pi*0.125; S_right:=Segm1_right(X)-Segm3_right(X); end; Writeln('Y_razrez= ',Y_razrez:0:5); Writeln('S_left= ',S_left:0:5); Writeln('S_right= ',S_right:0:5); end; Until (X<-1) or (X>1); End. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|