Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 1
Регистрация: 14.02.2014
Сообщений: 2
1

Производная функции, исправить код

14.02.2014, 17:32. Показов 2534. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дoброгo времени суток. Я вoт попробовал написать программу, берущую производную от прoстенькой функции ( y(x) =x^3 - x^2 +1 для примера) и выбирающей макcимум из погрешностей в точках, но что-то не вышло, видимо, где-то ошибаюсь. Прoшу помощи в пoиске oшибки.

Если чуть подробней описывать задание, то
я тут ввожу функцию на отрезке [a,b], нахожу шаг по формуле h=(b-a)/n, нахожу производную в точках отрезка по формулам прaвой (в точку a), лeвой (в точке b), цeнтральнoй(остальные ) рaзностных пр-х и сравниваю с точным значением. Там, где погрешность e самая большая (maxe) , выбираю максимум погрешности (maxpoint) и и указываю в какой точке узла.

Компилятор выдал мне:
prog.pas: In main program:
prog.pas:31: error: syntax error before `else'

Вот моя печатанина:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
program dff_1;
const a= 1.0; b=3.0;
var n: integer; i,x,df,h,e,maxe,maxpoint: real;
function f(x:real):real;
begin
f:= sqr(x)*x - sqr(x) +1;
end;
function ftrue(x:real):real;
begin
ftrue:= 3* sqr(x) - 2*x; end;
procedure max(var e,i:real);
begin
if e > maxe then 
maxe:= e;
maxpoint:= i; 
if i>=b then
writeln('Максимальная погрешность:', maxe,'; в точке:',i); end;
begin
writeln('Введите, пожалуйста, число n!');
readln(n);
h:=(b-a)/n;
e:=0; maxe:=0; maxpoint:=a;
i:=a;
while i<= b do begin
    if i=a then begin
    df:=(f(a+h)-f(a))/h;
    e:=abs(df- ftrue(a));
    writeln('f`(a)=', df, 'e=', e);
    max(e,i);
    i:=i+h;
    else 
    if i=b then begin
    df:=(f(b)-f(b-h))/h;
    e:=abs(df - ftrue(a));
    writeln('f`(b)=', df, 'e=', e);
    max (e,i);
    else begin df:= (f(i+h)- f(i-h))/2h;
    e:= abs (df - ftrue(i));
    writeln('f`(', i, ')=', df, 'e=', e);
    max(e,i);
    i:=i+h; end;
end;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2014, 17:32
Ответы с готовыми решениями:

Вычислить значение функции (нужно исправить код)
var a,y : real; begin WriteLn('Введите a'); Readln(a); if (a&lt;0) then y...

Написать в виде функции нахождение наибольшего элемента массива, исправить код
Добрый день. Нужно было написать в виде функции нахождение наибольшего элемента массива. Сделал...

Исправить код так, чтобы график имел вид функции arctg
Данная программа строит график не до конца. Помогите исправить так, чтобы график имел вид функции...

Исправить код табулирования функции
Есть программа, готовая и работающая. program lab13; var n,a,b,x,y,h,i:double; label 1;...

2
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.02.2014, 18:11 2
Если бы код писал по людски и сам бы ошибки нашел
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
program dff_1;
const a= 1.0; b=3.0;
var n: integer; i,x,df,h,e,maxe,maxpoint: real;
function f(x:real):real;
begin
f:= sqr(x)*x - sqr(x) +1;
end;
function ftrue(x:real):real;
begin
ftrue:= 3* sqr(x) - 2*x; end;
procedure max(var e,i:real);
begin
if e > maxe then
maxe:= e;
maxpoint:= i;
if i>=b then
writeln('Максимальная погрешность:', maxe,'; в точке:',i); end;
begin
writeln('Введите, пожалуйста, число n!');
readln(n);
h:=(b-a)/n;
e:=0; maxe:=0; maxpoint:=a;
i:=a;
while i<= b do
 begin
  if i=a then
   begin
    df:=(f(a+h)-f(a))/h;
    e:=abs(df- ftrue(a));
    writeln('f`(a)=', df, 'e=', e);
    max(e,i);
    i:=i+h;
   end
  else if i=b then
   begin
    df:=(f(b)-f(b-h))/h;
    e:=abs(df - ftrue(a));
    writeln('f`(b)=', df, 'e=', e);
    max (e,i);
   end
  else
   begin
    df:= (f(i+h)- f(i-h))/(2*h);
    e:= abs (df - ftrue(i));
    writeln('f`(', i, ')=', df, 'e=', e);
    max(e,i);
    i:=i+h;
   end;
end;
end.
2
0 / 0 / 1
Регистрация: 14.02.2014
Сообщений: 2
14.02.2014, 19:20  [ТС] 3
Если бы код писал по людски и сам бы ошибки нашел
Спасибо, учту замечание За исправления тоже благодарен.

Сам я тоже вот, две ошибки в процедуре подправил, из-за которых на экран ерунда выводилась, вместо нужного.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
program dff_1;
const a =1.0; b=3.0;
var n: integer; i,x,df,h,e,maxe,maxpoint: real;
function f(x:real):real;
begin
f:= sqr(x)*x - sqr(x) +1;
end;
function ftrue(x:real):real;
begin
ftrue:= 3* sqr(x) - 2*x; end;
procedure max(var e,i:real);
begin
if e > maxe then begin
maxe:= e;
maxpoint:= i; end;
if i>=b then
writeln('Максимальная погрешность:', maxe,'; в точке:',maxpoint); end;
begin
writeln('Введите, пожалуйста, число n!');
readln(n);
h:=(b-a)/n;
e:=0; maxe:=0; maxpoint:=a;
i:=a;
while i<= b do
 begin
  if i=a then
   begin
    df:=(f(a+h)-f(a))/h;
    e:=abs(df- ftrue(a));
    writeln('f`(',a:6:2,')=', df:6:2, ',   e=', e:6:2);
    max(e,i);
    i:=i+h;
   end
  else if i=b then
   begin
    df:=(f(b)-f(b-h))/h;
    e:=abs(df - ftrue(a));
    writeln('f`(b)=', df:6:2, ',   e=', e:6:2);
    max (e,i);
   end
  else
   begin
    df:= (f(i+h)- f(i-h))/(2*h);
    e:= abs (df - ftrue(i));
    writeln('f`(', i:6:2, ')=', df:6:2, ',   e=', e:6:2);
    max(e,i);
    i:=i+h;
   end;
end;
writeln('Максимальная погрешность:', maxe:6:2,'; в точке:', maxpoint:6:2);
end.
0
14.02.2014, 19:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2014, 19:20
Помогаю со студенческими работами здесь

Исправить код (Рекурсивные функции вычислить неск. значений Аккермана)
Всем добрый вечер. Есть задача: 4. Вычислить несколько значений функции Аккермана для...

Скажите, пожалуйста, как исправить исправить код в процедуре
задание такое :Дан одномерный массив. Переместить нулевые элементы массива в начало, сдвинув...

Исправить код (функции)
using System; namespace ConsoleApp5 { class Program { static void Main(string...

Исправить код с вычислением функции
Всем привет, первая тема на форуме. Есть вот такой код, и вот такие ошибки. Что ему не нравится? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru