Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Очень прошу, помогите, пожалуйста, решить задание курсовой работы по информатике (http://www.tehnari.ru/f43/t81199/)

Аннет 28.11.2012 16:57

Очень прошу, помогите, пожалуйста, решить задание курсовой работы по информатике
 
Задание: разработать схему алгоритма, составить программу на Pascal "вычисление таблицы значений функции".
Y = f(x,A,B) - представлена в виде системы:
tg (ax/b), при x<1
(sqrt((a^2)*(x^4)+b^2))/x^3, иначе

При заданных изменениях значение аргумента X и параметра A.
Аргумент Х: Xn, Dx, N; Параметр A: An, Ak, Da,
где Xn(An), Xk(Ak) - начальные и конечные значения аргумента; Dx(Da) - шаг изменения аргумента (параметра); N - число значений аргумента (параметра), изменяемого от значения Xn(An) с шагом Dx(Da).
Параметр B принимает значение численно равное интегралу f(x) = (x^2+x+2)^2*cos(2*x); предел интегрирования: a=2,51; b=-0,69

Vladimir_S 28.11.2012 19:09

Цитата:

Сообщение от Аннет (Сообщение 825577)
f(x) = (x^2+x+2)^2*cos(2*x)

Косинус в показателе или множитель? Вы бы хоть скобки поставили...

Аннет 28.11.2012 22:53

Извините за ошибку)))...
косинус множитель....
Помогите пожалуйста, три недели бьюсь на этим заданием....

Vladimir_S 29.11.2012 10:11

Цитата:

Сообщение от Аннет (Сообщение 825812)
Извините за ошибку)))...
косинус множитель....
Помогите пожалуйста, три недели бьюсь на этим заданием....

Если косинус - множитель, то интеграл спокойно берется "по частям" аналитически. Дальше осталось запрограммировать вывод значений функции двух переменных в виде таблицы с предварительным заданием границ и шагов. Такие задачи здесь рассматривались неоднократно, например http://www.tehnari.ru/f41/t79602/ . Что именно не получается?

Аннет 29.11.2012 13:55

Если честно, вообще ничего не получается).....уже так запуталась, что вообще "соображалка" не работает.....
Ну вот как нам объяснили это задание......даже просто по составлению алгоритма: алгоритм должен включать в себя главную программу и процедуры.
В начале считаем параметр B через вычисление интеграла...Я показала вот такую программку:
Program G;
CONST
a=2,51
b=-0,69
var
y=real;
Function I0 (x: real): Real;
begin
I0:=0,5*sin(x*2);
end;
Function I1 (x: real): Real;
begin
I1:=cos(x*2)/4+x*sin(x*2)/2;
end;
Function I2 (x: real): Real;
begin
I2:= x/2*cos(x*2)+(sqr(x)/2-0,25)*sin(x*2);
end;
Function I3 (x: real): Real;
begin
I3:= (sqr(x)*0,75-0,375)*cos(x*2)+(x*sqr(x)/2-0,75*x)*sin(x*2);
end;
Function I4 (x: real): Real;
begin
I4:= sqr(sqr(x))*sin(x*2)/2-2,0*((sqr(x)*0,75-0,375)*sin(x*2)-(x*sqr(x)/2-x*0,75)*cos(x*2));
end;
BEGIN
y:= (I4(b)+I3(b)*2+I2(b)*5+I1(b)*4+I0(b)*4)-(I4(a)+I3(a)*2+I2(a)*5+I1(a)*4+I0(a)*4);
Writeln ('B = ' , y:8:5);
Readln;
END.
Мне сказали, что вообще не правильно.....интеграл необходимо рассчитывать методом трапеции.
После этого мы должны взять массив, в котором должны включить циклический процесс для прокрутки параметра A с аргументом X....
Я что-то вот из таких объяснений не совсем понимаю как нужно полностью оформить эту программу....
Очень надеюсь на вашу помощь....сегодня вечером уже сдавать.....Просто молю о помощи!)

Vladimir_S 29.11.2012 14:10

Цитата:

Сообщение от Аннет (Сообщение 826106)
Мне сказали, что вообще не правильно

Да, вероятно. Потому что я вообще не понимаю смысла Ваших действий. Правильно ли я вижу подынтегральную функцию?
[(x² + x + 2)²]*Cos(2x). Так?
Цитата:

Сообщение от Аннет (Сообщение 826106)
интеграл необходимо рассчитывать методом трапеции.

Численно считать берущийся интеграл?! Ну что за бред...

Аннет 29.11.2012 14:28

да подынтегральная функция именно такая....
я не знаю, что это за бред....у нас вообще не предмет, а полная неразбериха...Нам даже Pascal толком не объяснили...как с ним работать....Дали и сказали решайте...
Я в полном отчаянии((((.....

Vladimir_S 29.11.2012 14:40

Цитата:

Сообщение от Аннет (Сообщение 826124)
да подынтегральная функция именно такая....
я не знаю, что это за бред....у нас вообще не предмет, а полная неразбериха...Нам даже Pascal толком не объяснили...как с ним работать....Дали и сказали решайте...
Я в полном отчаянии((((.....

Ладно-ладно, спокойно, без паники. Постараюсь Вам помочь. Хотя, на будущее, брать нас за горло типа "мне сегодня сдавать!" - последнее дело. Я, между прочим, на работе, а Вы просите написать курсовую, которая Вам явно не вчера была дана - то есть побросайте все дела и пишите. Хорошо, не буду больше ворчать. Попробую.

Аннет 29.11.2012 14:41

Спасибо Вас огромное tehno042

Vladimir_S 29.11.2012 15:37

Вроде так:
Код:

Var
 b,Xn,Dx,An,Ak,Da,a,x:real;
 i,j,Nx,Na:Integer;

Function Trapezium:real;
 const
  Eps=0.00001;
  a=2.51;
  b=-0.69;

 var
  i,N:Integer;
  Sum1,Sum2,h:Real;

 function F(q:real):real;
  begin
  F:=Sqr(Sqr(q)+q+2)*Cos(q*2);
  end;

 begin
  N:=10;
  h:=(b-a)/N;
  Sum1:=(F(a)+F(b))/2*h;
  for i:=1 to N-1 do
  Sum1:=Sum1+h*F(a+h*i);
  Sum2:=Sum1;
  Repeat
  Sum1:=Sum2;
  N:=N*2;
  h:=(b-a)/N;
  Sum2:=(F(a)+F(b))/2*h;
  for i:=1 to N-1 do
    Sum2:=Sum2+h*F(a+h*i);
  Until ABS(Sum2-Sum1)<Eps;
  Trapezium:=Sum2;
 end;

Function FU(xf,af:real):real;
 begin
  If xf<1 then
  FU:=Sin(af*xf/b)/Cos(af*xf/b)
  else
  FU:=SQRT(Sqr(af)*Sqr(Sqr(xf))+Sqr(b))/(xf*xf*xf);
 end;

Begin
 b:=Trapezium;
 Writeln('b= ',b:0:3);
 Write('Xn= ');
 Readln(Xn);
 Write('Dx= ');
 Readln(Dx);
 Write('N= ');
 Readln(Nx);
 Write('An= ');
 Readln(An);
 Write('Ak= ');
 Readln(Ak);
 Write('Da= ');
 Readln(Da);
 Na:=Round(Abs((Ak-An)/Da));
 Writeln;
 Write('  x\a  ');
 For j:=0 to Na do Write((An+Da*j):7:3);
 Writeln;
 For i:=0 to Nx do
  begin
  Write((Xn+Dx*i):7:3);
  For j:=0 to Na do
    begin
    a:=An+Da*j;
    x:=Xn+Dx*i;
    Write(FU(x,a):7:3);
    end;
  Writeln;
  end;
 Readln
End.



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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.