Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2007, 22:29   #1
Nexx
Пользователь
 
Регистрация: 25.09.2007
Сообщений: 28
По умолчанию Паскаль. Не могу найти ошибку. Нужна помощь!

Задание такое:
Вычислить значение функции F(X)=P1(x)+P2(x)+P3(x), где:

P1(x)=A1*x^5+A2*X^4+A3*X^3+A4*X^2+A 5*X+A6;
P2(x)=B1*(x+0.5)^7+B2*(x+0.5)^6+... +B7*(x+0.5)+B8;
P3(x)=E1*(x-0.1)^4+E2*(x-0.1)^3+E3*(x-0.1)^2+E4*(x-0.1)+E5,

а так же ее первую производную в точке Xc, если Xc=0.3.
Решить с помощью процедур+запихнуть в Unit.
Nexx вне форума Ответить с цитированием
Старый 05.12.2007, 22:31   #2
Nexx
Пользователь
 
Регистрация: 25.09.2007
Сообщений: 28
По умолчанию

Код:
program p;
{$F+}
uses crt;
type mas=array[1..10] of real; nado=function(c:real):real;
var n1,n2,n3,i,j,l:integer;
    x,xc,xc1,xc2,y,h,g,s,eps,pr1,pr2:real;
    a,b,e:mas;
function P1(x:real;a:mas;n:integer):real;
  var k1,k:real;
 begin
	k1:=a[1];
	for i:=1 to n-1 do
	begin
	      k:=a[i+1]+k1*x;
	      k1:=k;
	end;
	  p1:=k;
  end;
function proizv(x,xc:real; a:mas;n:integer):real;
   var c,c1,k,k1,k2:real;
  begin
	 c1:=n*a[1];  k1:=a[1];
  for i:=1 to n-1 do
    begin
      c:=(n-i)*a[i+1]+c1*xc;
       k:=a[i+1]+k1*x;
      c1:=c;  k1:=k;
    end;
    k2:=k;
  c:=(c-k2)/xc;
  proizv:=c;
    end;

procedure Fx(x:real; a,b,e:mas;  var y:real);
	  begin
	    y:=p1(x,a,n1)+p1(x+0.5,b,n2)+p1(x-0.1,e,n3);
	    {}
	  end;
function fun(x:real;l:integer):real;
begin
fun:=x-l*sin(x+1);
end;

procedure koren(g,h,eps:real; fun:nado;var v:real);
begin

       while(abs(g-h)>eps) do begin
       Xc2:=(h+g)/2;
       if(fun(Xc2)*fun(g)<0) then h:=Xc2
			 else g:=Xc2;

       end;

end;
procedure Pr(Xc1,Xc2:real; a,b,e:mas; var pr1,pr2:real);
	  begin
	    pr1:=proizv(x,Xc1,a,n1)+proizv(x,Xc1,b,n2)+proizv(x,Xc1,e,n3);
	    pr2:=proizv(x,Xc2,a,n1)+proizv(x,Xc2,b,n2)+proizv(x,Xc2,e,n3);
	  end;
begin
      clrscr;
      writeln('Vvedite X: ');
      readln(x);
      writeln('Vvedite n1,n2,n3 - stepeni virazheniy: ');
      readln(n1,n2,n3);
      writeln('Vvedite koefficienti: ');
      for i:=1 to n1 do begin
	 write('A[',i,']=');
	 read(a[i]);
		       end;
       for i:=1 to n2 do begin
	 write('B[',i,']=');
	 read(b[i]);
			 end;
	for i:=1 to n3 do begin
	 write('E[',i,']=');
	 read(e[i]);
			 end;
	 writeln('Vvedite Xc1: ');
	 readln(Xc1);


   Fx(x,a,b,e,y);

   writeln('Znachenie funkcii ravno Fx=',y:5:2);
   writeln;
   writeln('Naidem ee proizvodnuyu:');
    pr(xc1,xc2,a,b,e,pr1,pr2);
     writeln('V tochke Xc1 proizvodnaya Fx ravna: F''x=',pr1:5:2);
     readkey;
      end.
Error: Division by zero.

Последний раз редактировалось Nexx; 06.12.2007 в 09:00.
Nexx вне форума Ответить с цитированием
Старый 05.12.2007, 22:32   #3
Nexx
Пользователь
 
Регистрация: 25.09.2007
Сообщений: 28
По умолчанию

Ошибка в районе 31 строки, как это дело исправить?
Nexx вне форума Ответить с цитированием
Старый 05.12.2007, 22:51   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
c:=(c-k2)/xc;
Зачем делить на хс, если известно, что хс=0,3?
Пишите сразу c:=(c-k2)/0,3;
puporev вне форума Ответить с цитированием
Старый 06.12.2007, 08:46   #5
Nexx
Пользователь
 
Регистрация: 25.09.2007
Сообщений: 28
По умолчанию

я здесь не всю прогу написал, там еще Xc задается как корень уравнения x-l*sin(x+1)=0, l принимает значения 1,3,6,9,12,15, поэтому там c:=(c-k2)/xc. Но это не суть, она мне в этой строке выдает деление на ноль. Ставим строку в скобочки, и все идет, но блин произв неправильно считается.
Nexx вне форума Ответить с цитированием
Старый 06.12.2007, 09:15   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Трудно так с ходу разобраться, надо программу гонять и пошагово искать ошибку. хС явно не равна 0, т.к. 0 не является корнем приведенного уравнения. Если не разберешься, скинь сюда программу, только не код, никакого желания переписывать нет.
puporev вне форума Ответить с цитированием
Старый 06.12.2007, 09:16   #7
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Не, код тоже скинь. Если очень надо, я погоняю.
Sibedir вне форума Ответить с цитированием
Старый 06.12.2007, 09:24   #8
Nexx
Пользователь
 
Регистрация: 25.09.2007
Сообщений: 28
По умолчанию

Я пока не трогал ур-е x-l*sin(x+1)=0, а принял Xc =0,3.
Вложения
Тип файла: zip Programma.zip (950 байт, 11 просмотров)
Nexx вне форума Ответить с цитированием
Старый 06.12.2007, 10:00   #9
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

The loading file is begun

... 21 %
... 54 %
... 87 %

The loading file is successfully completed


Скачал.
Смотрю.
Sibedir вне форума Ответить с цитированием
Старый 06.12.2007, 10:35   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Все оказалось на много проще:

Даже не вдоваясь в суть задачи, можно увидеть такую вещь. В приведенном вами коде в сообщении #2, да и во вложенном исходнике, в строке 89 {pr(xc1,xc2,a,b,e,pr1,pr2);} вы обращаетесь к переменной xc2, в которую не соизволили хоть что-то записать. Таким образом, проследив нехитрый путь программы, мы увидем, что дойдя в определенный момент до упомянутой строчки 31 {c:=(c-k2)/xc;}, будем иметь в переменной xc не определенное значение, которое Pascal по умолчанию поставил равным 0;

::: Надо перед выполнением проседуры pr присвоить переменной xc2 какое-нибудь значение отличное от 0.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку! Эдуард Общие вопросы C/C++ 7 27.02.2008 16:34
формирование матрицы (задание выполненно не могу найти сваю ошибку) КиношкА Помощь студентам 7 11.01.2008 03:50
помогите плиз...(помощь могу оплатить) паскаль номак Фриланс 5 04.01.2008 18:57
Нужна помощь с задачей...никак не могу разобраться( Gekata Паскаль, Turbo Pascal, PascalABC.NET 4 13.12.2006 14:02