Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 25.01.2012, 12:44   #21 (permalink)
Jekich
Новичок
 
Регистрация: 23.01.2012
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо огромное, буду разбираться.
Jekich вне форума   Ответить с цитированием
Старый 15.01.2017, 10:37   #22 (permalink)
Joker456
Новичок
 
Регистрация: 15.01.2017
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

У меня почему-то не получается подстроить код под мою задачу. Центры эллипса и окружности ввёл (их отдельно посчитал) и изменил данные радиуса окр. и a,b эллипса.
Вот код
Код:
Uses CRT;
Const
 R=25.0;
 Ae=16.0;
 Be=37.0;

Var
 X0c,Y0c,X0e,Y0e,X1,Y1,X2,Y2,X3,Y3,Step:Real;
 i,Nt,k:Byte;
 N:Word;
 Rect,Trap,Simp:Array[1..100] of Real;
 Np:Array[1..100] of Word;

Function Ysl(Xsl:Real):Real;
begin
 Ysl:=Y1+(Xsl-X1)/(X2-X1)*(Y2-Y1);
end;

Function Ycr(Xcr:Real):Real;
begin
 Ycr:=Y0c-Sqrt(Sqr(R)-Sqr(Xcr-X0c));
end;

Function Yel(Xel:Real):Real;
begin
 Yel:=Y0e-Be*Sqrt(1-Sqr((Xel-X0e)/Ae));
end;

Function F1(Xf:Real):Real;
begin
 F1:=-Ycr(Xf);
end;

Function F2(Xf:Real):Real;
begin
 F2:=-Ysl(Xf);
end;

Function F3(Xf:Real):Real;
begin
 F3:=Yel(Xf)-Ycr(Xf);
end;

Function F4(Xf:Real):Real;
begin
 F4:=Ysl(Xf)-Ycr(Xf);
end;

Function Rectangle1:Real;
var
 i:Integer;
 Sum,h,a,b:Real;
begin
 a:=X0c-Sqrt(sqr(R)-sqr(Y0c));
 b:=X1;
 h:=(b-a)/N;
 Sum:=0;
 for i:=0 to N-1 do
  Sum:=Sum+h*F1(a+h*i);
 Rectangle1:=Sum;
end;

Function Rectangle2:Real;
var
 i:Integer;
 Sum,h,a,b:Real;
begin
 a:=X1;
 b:=0;
 h:=(b-a)/N;
 Sum:=0;
 for i:=0 to N-1 do
  Sum:=Sum+h*F2(a+h*i);
 Rectangle2:=Sum;
end;

Function Rectangle3:Real;
var
 i:Integer;
 Sum,h,a,b:Real;
begin
 a:=0;
 b:=X3;
 h:=(b-a)/N;
 Sum:=0;
 for i:=0 to N-1 do
  Sum:=Sum+h*F3(a+h*i);
 Rectangle3:=Sum;
end;

Function Rectangle4:Real;
var
 i:Integer;
 Sum,h,a,b:Real;
begin
 a:=X3;
 b:=X2;
 h:=(b-a)/N;
 Sum:=0;
 for i:=0 to N-1 do
  Sum:=Sum+h*F4(a+h*i);
 Rectangle4:=Sum;
end;

Function Trapezium1:Real;
var
 i:Integer;
 Sum,h,a,b:Real;
begin
 a:=X0c-Sqrt(sqr(R)-sqr(Y0c));
 b:=X1;
 h:=(b-a)/N;
 Sum:=(F1(a)+F1(b))/2*h;
 for i:=1 to N-1 do
  Sum:=Sum+h*F1(a+h*i);
 Trapezium1:=Sum;
end;

Function Trapezium2:Real;
var
 i:Integer;
 Sum,h,a,b:Real;
begin
 a:=X1;
 b:=0;
 h:=(b-a)/N;
 Sum:=(F2(a)+F2(b))/2*h;
 for i:=1 to N-1 do
  Sum:=Sum+h*F2(a+h*i);
 Trapezium2:=Sum;
end;

Function Trapezium3:Real;
var
 i:Integer;
 Sum,h,a,b:Real;
begin
 a:=0;
 b:=X3;
 h:=(b-a)/N;
 Sum:=(F3(a)+F3(b))/2*h;
 for i:=1 to N-1 do
  Sum:=Sum+h*F3(a+h*i);
 Trapezium3:=Sum;
end;

Function Trapezium4:Real;
var
 i:Integer;
 Sum,h,a,b:Real;
begin
 a:=X3;
 b:=X2;
 h:=(b-a)/N;
 Sum:=(F4(a)+F4(b))/2*h;
 for i:=1 to N-1 do
  Sum:=Sum+h*F4(a+h*i);
 Trapezium4:=Sum;
end;

Function Simpson1:Real;
var
 i,Ns:Integer;
 Sum,h,a,b:Real;
begin
 a:=X0c-Sqrt(sqr(R)-sqr(Y0c));
 b:=X1;
 Ns:=N div 2;
 h:=(b-a)/(2*Ns);
 Sum:=(F1(a)+F1(b))/3*h;
 for i:=1 to Ns do
  Sum:=Sum+4.0*h/3.0*F1(a+h*(2*i-1));
 for i:=2 to Ns do
  Sum:=Sum+2.0*h/3.0*F1(a+h*(2*i-2));
 Simpson1:=Sum;
end;

Function Simpson2:Real;
var
 i,Ns:Integer;
 Sum,h,a,b:Real;
begin
 a:=X1;
 b:=0;
 Ns:=N div 2;
 h:=(b-a)/(2*Ns);
 Sum:=(F2(a)+F2(b))/3*h;
 for i:=1 to Ns do
  Sum:=Sum+4.0*h/3.0*F2(a+h*(2*i-1));
 for i:=2 to Ns do
  Sum:=Sum+2.0*h/3.0*F2(a+h*(2*i-2));
 Simpson2:=Sum;
end;

Function Simpson3:Real;
var
 i,Ns:Integer;
 Sum,h,a,b:Real;
begin
 a:=0;
 b:=X3;
 Ns:=N div 2;
 h:=(b-a)/(2*Ns);
 Sum:=(F3(a)+F3(b))/3*h;
 for i:=1 to Ns do
  Sum:=Sum+4.0*h/3.0*F3(a+h*(2*i-1));
 for i:=2 to Ns do
  Sum:=Sum+2.0*h/3.0*F3(a+h*(2*i-2));
 Simpson3:=Sum;
end;

Function Simpson4:Real;
var
 i,Ns:Integer;
 Sum,h,a,b:Real;
begin
 a:=X3;
 b:=X2;
 Ns:=N div 2;
 h:=(b-a)/(2*Ns);
 Sum:=(F4(a)+F4(b))/3*h;
 for i:=1 to Ns do
  Sum:=Sum+4.0*h/3.0*F4(a+h*(2*i-1));
 for i:=2 to Ns do
  Sum:=Sum+2.0*h/3.0*F4(a+h*(2*i-2));
 Simpson4:=Sum;
end;

BEGIN
 ClrScr;
 X0c:=-4.0; Y0c:=-15.0;
 X0e:=-7.0; Y0e:=8.0;
 Writeln('X0c=',X0c:9:5,' - X координата центра окружности');
 Writeln('Y0c=',Y0c:9:5,' - Y координата центра окружности');
 Writeln('X0e=',X0e:9:5,' - X координата центра эллипса');
 Writeln('Y0e=',Y0e:9:5,' - Y координата центра эллипса');
 Writeln;
 Step:=-1;
 X1:=0;
 For i:=1 to 5 do
  begin
   Step:=Step/10;
   Repeat
    X1:=X1+Step;
    Y1:=Y0e-Be*Sqrt(1-sqr((X1-X0e)/Ae));
   Until Sqr(X1-X0c)+Sqr(Y1-Y0c)>Sqr(R);
   X1:=X1-Step;
  end;
 Y1:=Y0e-Be*Sqrt(1-sqr((X1-X0e)/Ae));
 Writeln('X1= ',X1:9:5,' - X координата первой точки пересечения');
 Writeln('Y1= ',Y1:9:5,' - Y координата первой точки пересечения');
 Y2:=0;
 X2:=X0c+Sqrt(sqr(R)-sqr(Y0c));
 Writeln('X2= ',X2:9:5,' - X координата второй точки пересечения');
 Writeln('Y2= ',Y2:9:5,' - Y координата второй точки пересечения');
 Step:=1;
 X3:=0;
 For i:=1 to 5 do
  begin
   Step:=Step/10;
   Repeat
    X3:=X3+Step;
    Y3:=Ysl(X3);
   Until Sqr((X3-X0e)/Ae)+Sqr((Y3-Y0e)/Be)>1;
   X3:=X3-Step;
  end;
 Y3:=Ysl(X3);
 Writeln('X3= ',X3:9:5,' - X координата третьей точки пересечения');
 Writeln('Y3= ',Y3:9:5,' - Y координата третьей точки пересечения');
 Writeln;
 Writeln('Нажмите "Enter" для продолжения...');
 Readln;
 ClrScr;
 k:=0;
 Repeat
  Write('Введите количество точек (0 для выхода из программы) ');
  Readln(N);
  If N>0 then
   Begin
    ClrScr;
    Inc(k);
    Np[k]:=N;
    For i:=1 to 58 do Write('-');
    Writeln;
    Writeln('| Число разбиений |              Результат               |');
    Writeln('|                 |--------------------------------------|');
    Writeln('|       n         |      A     |      B     |     C      |');
    For i:=1 to 58 do Write('-');
    Writeln;
    Rect[k]:=Rectangle1+Rectangle2+Rectangle3+Rectangle4;
    Trap[k]:=Trapezium1+Trapezium2+Trapezium3+Trapezium4;
    Simp[k]:=Simpson1+Simpson2+Simpson3+Simpson4;
    For i:=1 to k do
     Writeln('|     ',Np[i]:4,'        |',Rect[i]:12:6,'|',Trap[i]:12:6,'|',Simp[i]:12:6,'|');
    For i:=1 to 58 do Write('-');
    Writeln;
   End;
 Until N=0;
END.
Миниатюры
iaadhinie2.png  
Joker456 вне форума   Ответить с цитированием
Старый 15.01.2017, 13:24   #23 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Joker456 Посмотреть сообщение
У меня почему-то не получается подстроить код под мою задачу. Центры эллипса и окружности ввёл (их отдельно посчитал) и изменил данные радиуса окр. и a,b эллипса.
Этого мало. Задача требует очень долгой и вдумчивой вычислительной работы на первом этапе и программистской - на втором. А не просто "взял, поменял цифры и - вуаля!". Что касается выложенного решения, то его, конечно, можно использовать, взяв, например, подпрограммы вычисления интегралов - но и только. Саму задачу решать надо "с чистого листа".
На всякий случай, давайте сверим данные по окружности и эллипсу. Если обозначить Xc, Yc координаты центра окружности, то должно получиться так:
Xc = -4
Yc = -15,
и уравнение окружности, таким образом, запишется, как
(x + 4)² + (y +15)² = 25²
Обозначая координаты центра эллипса, как Xe, Ye, получаем:
Xe = -6.62
Ye = 8,
и имеем уравнение эллипса:
(x + 6.62)²/16² + (y - 8)²/37² = 1
А вот дальше и начинается основная мутота. Нужно решить (аналитически или численно) систему этих двух нелинейных уравнений и, таким образом, найти координаты точки пересечения окружности и эллипса в правой полуплоскости. Далее нужно найти аналитическое уравнение прямой. Потом сообразить, из каких фрагментов можно составить искомые площади (причем в качестве оси "х" в некоторых случаях удобнее взять вертикальную ось) и сосчитать необходимые интегралы, каковые потом скомбинировать.
В общем, тут плотной работы не недельку.
Извините, но в это впрягаться я не буду.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 10:18.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.