Решить уравнение - Free Pascal (837)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте!) Помогите пожалуйста, очень нужна ваша помощь в решении задачи... Задача:" Решить уравнение ax2+bx+c=0 a - произведение вектора Т(к), b - произведение элементов целочисленного вектора D(L) с - произведение элементов целочисленного вектора R(n).". Я нашла на вашем форуме решение.. но преподаватель говорит оно не верное, и "как минимум странное") Помогите пожалуйста, буду очень благодарна..
Вот решение, на которое ругался преподаватель...
uses crt;
function arcctg(x,e:real;var i:integer):real;{вычисление функции через разложение в ряд}
var s,si,t:real;
begin
s:=0;
t:=-x;{первый член ряда}
si:=-x;
i:=1;
while abs(s-si)>e do
begin
s:=si;
i:=i+1;
{рекуррентное соотношение An=-A(n-1)/x^2}
t:=-exp(ln(1))*(i+1)*exp(ln(x)*2*i+1);
si:=si+t/(2*i+1);{член ряда= An/(2*i+1)}
end;
arcctg:=pi/2+s;{значение функции}
end;
procedure Shapka(xn,xk,dx,e:real);{рисование шапки}
begin
writeln(' Таблица табулирования функции arctg(x)');{заголовок}
writeln('на интервале ',xn:0:2,' ',xk:0:2,' с шагом ',dx:0:2,' с точностью ',e:0:8);
writeln('----------------------------');
writeln('| x | arcctg(x) | Китр.|');
writeln('----------------------------');
end;
var xn,xk,e,dx,f:real;
i,k:integer;
begin
clrscr;
repeat
write('Введите конец интервала |xk|<=1 xk=');
readln(xk);
until xk<=1;
repeat
write('Начало интервала xn<',xk:0:2,' xn=');
readln(xn);
until xn<xk;
repeat
write('Введите точность в интервале (0,1) e=');
readln(e);
until(e>0)and(e<1);
repeat
write('Введите шаг табуляции, положительное число меньше ',xk-xn:0:2,' dx=');
readln(dx);
until (dx<xk-xn)and(dx>0);
write('Press Enter...');
readln;
clrscr;
Shapka(xn,xk,dx,e);
k:=0;
while xn<=xk do
begin
f:=arcctg(xn,e,i);
writeln('|',xn:6:2,' |',f:10:6,' |',i:4,' |');
k:=k+1;
if k mod 18=0 then{если вывели 18 строк, делаем задержку. Если много значений, не войдет на экран}
begin
write('Press Enter...');
readln;
clrscr;
Shapka(xn,xk,dx,e);
end;
xn:=xn+dx;
end;
writeln('----------------------------');
write('Press Enter...');
readln
end.

Решение задачи: «Решить уравнение»

textual
Листинг программы
uses crt;
const max=5;
type vec=array[1..max] of integer;
procedure vector(var a:vec;n:byte;var p:integer;c:char);
var i:byte;
begin
writeln('Вектор ',c);
repeat
write('Размер вектора от 1 до ',max,'=');
readln(n);
until n in [1..max];
p:=1;
for i:=1 to n do
 begin
  a[i]:=1+random(5);
  write(a[i]:3);
  p:=p*a[i];
 end;
writeln;
writeln('Произведение=',p);
end;
var t,d,r:vec;
    a,b,c,k,l,n:integer;
    ds,x1,x2:real;
begin
clrscr;
randomize;
vector(t,k,a,'T');
vector(d,l,b,'D');
vector(r,n,c,'R');
ds:=b*b-4*a*c;
if ds<0 then writeln('Действительных корней нет!')
else if ds=0 then
   begin
    x1:=-b/(2*a);
    writeln('x1=x2=',x1:0:2);
   end
else
  begin
   x1:=(-b-sqrt(ds))/(2*a);
   x2:=(-b+sqrt(ds))/(2*a);
   writeln('x1=',x1:0:2,'   x2=',x2:0:2);
  end;
readln
end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы