• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Решение геометрических задач в Паскале

Natashka

Ученик
Регистрация
30 Сен 2012
Сообщения
8
Реакции
0
Баллы
0
Решение геометрических задач в Паскале

Помогите пожалуйста решить задачку в ПАскль, не могла не че придумать((((
Составить алгоритм и написать код программы, вычисляющей длину линии вертикального разреза фигуры y_razrez, значения площадей фигуры слева и справа от линии разреза s_left, s_right, по значениям аргумента x, введенным с консоли: Безымянный.webp
 
Площадь фигуры вычисляется по следующим условиям:
Полная площадь фигуры фактически будет равна 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|.
Теперь остается воспользоваться формулой вычисления площади сектора, учитывая, что используется не полный круг, а половина.

Удачи в вычислениях :D
 
не могли бы вы написать код программы я уже как только не побовала:tehnari_ru_325:
 
не могли бы вы написать код программы я уже как только не побовала:tehnari_ru_325:
Да легко. Только вот когда время будет - возможно, не раньше выходных. Писанины много.
 
Ну вот, добил. В нумерации функций индексы 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.
 
Назад
Сверху