Другие языки программирования и технологии

Pascal, код программы

Помогите, пожалуйста, найти ошибку
Program zet;
Const E=0.01;z=0.5;P_sr=105;SB=5;SA=8;

Var a,b,A_sm,B_sm,c,f_a,f_b,f_c,g,c_st:real;
function fz(a,b,c:real):real;
begin
fz:=exp(3*ln(z))-exp(2*ln(z))+z*P_sr*(-exp(2*ln(SB))*P_sr-P_sr+exp(2*ln(SA)))-exp(2*ln(SA))*SB*exp(2*ln(P_sr))
end;
Begin
a:=0;
b:=1;
c:=(a+b)/2;
Repeat
f_a:=fz(a);
f_b:=fz(b);
f_c:=fz(c);
g:=f_b*f_c;
if g>0 then b:=c
else a:=c;
c_st:=c;
c:=(a+b)/2;
Until (c-c_st)<E
End.
В чём проблема?
Максим Коробков
Максим Коробков
53 700
Лучший ответ
Сергей Стрижаков строка 14
Program5.pas(14) : Неверное количество параметров функции
На какой вы элементарные произведения засовываете в экспоненциально-лагорифмические обёртки?
Из свойства степени:

x²=x·x
x³=x·x·x
xⁿ=x·x·…·x, где n раз перемножаем x

Значит:

exp(3*ln(z)) = z*z*z
exp(2*ln(z)) = z*z
-exp(2*ln(SB) = -SB*SB
exp(2*ln(SA)) = SA*SA
exp(2*ln(P_sr)) = P_sr*P_sr

Итого, ваша длинная формула

fz:=exp(3*ln(z))-exp(2*ln(z))+z*P_sr*(-exp(2*ln(SB))*P_sr-P_sr+exp(2*ln(SA)))-exp(2*ln(SA))*SB*exp(2*ln(P_sr))

превращается

fz:=z*z*z - z*z + z*P_sr*(-SB*SB*P_sr - P_sr + SA*SA) - SA*SA*SB*P_sr*P_sr

При чём, у вас в формуле присутствует какая-то переменная z, которая ранее (да и позднее) ни где в программе не упоминается…
Осмелюсь предположить, что заголовок вашей функции должен выглядеть вот так:

function fz(z:real):real;

Тогда он будет согласовываться с её вызовом:

f_a:=fz(a);
f_b:=fz(b);
f_c:=fz(c);

Ну, а уже правильно или не правильно — это вам решать, ибо мы не видели исходного задания!
Борис Жоголь
Борис Жоголь
56 261
Ну про параметры тебе рассказали, ок. рассмотрим твою функцию
Const E=0.01;z=0.5;P_sr=105;SB=5;SA=8;

function fz(a,b,c:real):real;
begin
fz:=exp(3*ln(z))-exp(2*ln(z))+z*P_sr*(-exp(2*ln(SB))*P_sr-P_sr+exp(2*ln(SA)))-exp(2*ln(SA))*SB*exp(2*ln(P_sr))
end;

она представляет собой одну довольно запутанную формулу, в которой никак не принимают участие переменные a,b и c. Если я просмотрел место где они участвуют - ткни меня в него. Если они не участвуют, то на фига их передавать в функцию? А если нечего передавать, то значение fz можно вычислить один раз и навсегда. считай объявить ту же константу

Но судя по всему зависимость должна быть. иначе вот это совсем выглядит чушью
Repeat
f_a:=fz(a);
f_b:=fz(b);
f_c:=fz(c);