2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 запомнить результат в виде массива
Сообщение23.05.2008, 13:16 


27/02/08
4
Текст программы прилагаю. Но её необходимо доработать. я застопорилась. подтолкните. пожалуйста.
Условие задачи в следующем:"Составить программу, в которой
1. определить все корни уравнения (которое записано в задаче у меня)" на отрезке от -10 до 10.
2. вычислить определенный интеграл от х (i) до x(i+1). поинтегральная функция - это уравнение из пункта 1, x(i) x(i+1) - это два соседних корня заданного уравнения, i=1,2,3,..,n-1. n- число корней.
Указания: 1. при определении корней использовать метод сканирования с последующим уточнением решения методом хорд
2. определенные интегралы вычислять методом правых прямоугольников.
3. методы интегрирования и уточнения корней оформить в виде процедур или функций языка Пакаль.
4.Пределы интегрирования вводить не вручную, а запомнить результаты решения в виде массива и использовать для вычисления интеграла.
Вот.
Эта программа находит три корня уравнения= 1,3,7. Как их запомнить в виде массива? и как потом из этих трёх выбрать два для задания пределов интегрирования.
Найденные корни надо брать только из метода хорд. А как их ввести в процедуру Prav_pryam для ввода пределов интегрирования? Что-то не так. Если убрать процедуру нахождения интеграла, то всё идет как надо вроде. а в ней я нав. напортачила. если можно побыстрее.пож-ста.
Препод сказал, что нужно запомнить в массиве не сами корни, а их количество. Ну помоготе, прошу. В общем, все верно. но вот с этими массивами и затем вводами пределов из массива проблема.

Код:
uses crt;
      const xh=-10;xk=10;n=100;e=0.001;
      var i:integer; x,z,w,h:real;

      Function f(x: real): real;
      Begin
      f:=x*x*x-11*x*x+31*x-21;
      end;

      procedure metod_scanirov(x:real);
      var h:real;
      begin clrscr;
      writeln ('vvedite X=');
      readln (z);
      writeln ('vvedite pogreshnost H=');
      readln (w);
      if f(z+w)>f(z) then w:=-w;
      repeat z:=z+w; until f(z+w)>f(z);
      writeln ('1j koren po metodu scanirovaniya=',(z-w):2:1);
      writeln ('2j koren po metodu scanirovaniya=',(z+w):2:1); readln;
      end;

      procedure metod_hord(a,b:real);
      var t:integer;  c1,c: real; m:array [1..3] of real;
      begin
      c:=a;
      repeat c1:=c;
      c:=a-(f(a)*(b-a))/(f(b)-f(a));
      if (f(a)*f(c)<=0) then
      b:=c else a:=c;
      until abs (c1-c)<e;
      writeln ('koren uravnenia po metodu hord = ',c:2:1);
      m[t]:=c; writeln ('m=',m[t]:2:0);
      writeln ('funkciya ot kornya=',c:2:1,' ravna F(',c:1:0,')= ',f(c):2:1);
      readln; end;

      procedure prav_pryam;
      var i,t,n:integer; d,k,h,xb,s:real;   m:array [1..3] of real;
      begin
      for t:=1 to 3 do read (m[t]);
      d:=m[t];      k:=m[t+1];
       h:=(d-k)/n; s:=0; xb:=d;
      s:=0;
      for i:=1 to n do begin x:=xb+i*h; s:=s+f(x)*h; end;
      writeln ('integral ot',d:2:0,'  do',k:2:0,'  funkcii F (x) raven ',s:5:3);
      readln; end;

      begin
      metod_scanirov(x);
      x:=xh;     h:=(xk-xh)/n;
      for i:=1 to n do begin
      if f(x)*f(x+h)<=0 then metod_hord (x,x+h);  x:=x+h;
      prav_pryam; end; end.

 Профиль  
                  
 
 
Сообщение23.05.2008, 15:13 
Заслуженный участник
Аватара пользователя


18/05/06
13437
с Территории
Все мы в юности думали, что отступы придуманы врагом рода человеческого, а впихнуть на одну строчку как можно больше операторов - дело чести, ведь так важно экономить строчки, вдруг не хватит.
Поверьте, однако, что в действительности дело обстоит ровно наоборот.

 Профиль  
                  
 
 
Сообщение26.05.2008, 13:27 


27/02/08
4
Критиковать легче, чем помочь.
Делаем, как требует препод, а не как нам проще. подстраиваемся.а когда не получается, просим помощи. у вас.
Я задала конкретный вопрос.трудно?

 Профиль  
                  
 
 
Сообщение26.05.2008, 22:34 
Заслуженный участник
Аватара пользователя


18/05/06
13437
с Территории
Georgia писал(а):
Критиковать легче, чем помочь.
Естественно. У нас ведь "страна Советов, а не страна баранов".
Если препод требует писать вот буквально вот в таком виде (отступы, разбивка), то лучше вообще нигде не учиться, чем там. А если всё-таки не требует, то и незачем...
Ваш "конкретный вопрос" имеет четыре головы, причём...
... а, ладно.
Короче, сначала надо как-то пройти по всему отрезку, найти корни и их количество, и запомнить то и другое.
Примерно так:
Код:
m:=0 {это сколько у нас корней.}
for i:=1 to n do
begin
  {... здесь проверяем, есть ли корень на интервале...}
  if ... {если он есть, то}
  begin
    {... уточняем корень...}
    m:=m+1;
    x[m]:={... наш очередной корень};
  end;
end;

 Профиль  
                  
 
 
Сообщение27.05.2008, 15:27 


27/02/08
4
uses crt;
const xh=-10;xk=10;n=100;e=0.001;
var i:integer; x,z,w,h:real;
var t:array [1..5] of real;

Function f(x: real): real;
Begin
f:=x*x*x-11*x*x+31*x-21;
end;

procedure metod_scanirov(x:real);
var h:real;
begin clrscr;
writeln ('vvedite X=');
readln (z);
writeln ('vvedite pogreshnost H=');
readln (w);
if f(z+w)>f(z) then w:=-w;
repeat z:=z+w; until f(z+w)>f(z);
writeln ('1j koren po metodu scanirovaniya=',(z-w):2:1);
writeln ('2j koren po metodu scanirovaniya=',(z+w):2:1); readln;
end;

procedure metod_hord(a,b:real);
var t:integer;
c1,c: real;
begin
c:=a;
repeat c1:=c;
c:=a-(f(a)*(b-a))/(f(b)-f(a));
if (f(a)*f(c)<=0) then
b:=c else a:=c;
until abs (c1-c)<e;
writeln ('koren uravnenia po metodu hord = ',c:2:1);
writeln ('funkciya ot kornya=',c:2:1,' ravna F(',c:1:0,')= ',f(c):2:1);
end;
procedure kur;
var m,i,n:integer;
begin
m:=0;
x:=xh;
h:=(xk-xh)/n;
for i:=1 to n do begin
if f(x)*f(x+h)<=0 then begin metod_hord (x,x+h);
m:=m+1; t[m]:=x; x:=x+h;end;end; readln; end;

procedure prav_pryam;
var j,t,l:integer; d,k,h,xb,s:real;
begin
d:=t[m];
k:=t[m+1];
h:=(d-k)/n; s:=0; xb:=d;
s:=0;
for i:=1 to n do begin x:=xb+i*h; s:=s+f(x)*h; end;
writeln ('integral ot',d:2:0,' do',k:2:0,' funkcii F (x) raven ',s:5:3);
readln; end;

begin
metod_scanirov(x);
metod_hord(h,x+h);
prav_pryam; end.
посмотрите, пож-ста, еще. что не так?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group