Помогите дописать прогу!!
задача такова:
составить программу для вычисления значений F(x)= tg(x/2)+cos(x) на отрезке (а,b) в точках Х[i]=a+h[i]
,где h = (a-b)/m , НЕОБХОДИМО ИСПОЛЬЗОВАТЬ ФУНКЦИЮ ДЛЯ ВЫЧИСЛЕНИЯ ЗНАЧЕНИЙ, ПРОЦЕДУРУ ДЛЯ ВЫВОДА РЕЗУЛЬТАТОВ НА ПЕЧАТЬ.
a,b,h,m(целое) НЕОБХОДИМО ИСПОЛЬЗХОВАТЬ КАК ПЕРЕМЕННЫЕ, но при этом вводить или еще както задавать значения надо а=PI/2, b= Pi, m=20.
вот сопсна чяво надоти
а вот сопсна чаво есть:
program lab;
uses crt;
Func= function (x:Real): Real;
var i,m:integer; x,a,b,h;
begin
readln (a);readln (b);readln (m);
h := (b-a)/m;
x:=a
for i=1 to m do
begin Func= (sin(x/2)/cos(x/2))+cos(x);
writeln (x,Func);
x:=x+h
end;
readln;
end.
главная проблема Invalid nymeric format - короче беда с числом пи
2 пр непойму куда вставить и как написать процедуру вывода результатов, а так же с функцией мне кажеться чет нето.
ЕСЛИ НеВЛОМ непросто напишите а please чуть чуть поясните что да куда.
ХОТЯ Я БУДУ РАД ЛЮБОЙ ПОМОЩИ.
или вот добавляю есчо
еще я подумал и вот
Uses CRT;
type
Func = Function (x: Real) : Real;
Procedure PrintFunc (XPos: Byte; F:Func);
var
x,a,b,h : Real; i,m : Integer;
begin {PrintFunc}
readln (a,b,m);
x:=a;
for i := 1 to m do
begin
F := (sin(x/2)/cos(x/2))+cos(x);
h:=b-a)/m
x := a+h ;
GotoXY (XPos, WhereY) ;
WriteLn (x:5:3, F(x):18:5);
end
end.
Да что нетак?
Так как A,B вещественного типа, то PI в любом случае не будет восприниматься в операторе Readln как вещественное. Можно конечно вводить не Pi, Pi/2 , а 180, 90 тогда проблем не возникнет. Вывод можно сделать такким образом:
Program Lab;
Uses crt;
Var h,a,b:real;
m:integer;
Function Func(x:real):real;
Begin
Func:=(sin(x)/cos(x))+cos(x);
End;
Procedure PrintFunc;
var
i:integer;x:real;
begin
Write('BBEDUTE HACHALO DIAnA3OHA ');readln(a);
Write('BBEDUTE KOHEU, DIAnA3OHA ');readln(b);
Write('BBEDUTE LL|AF BbI4UC/|EHUR ');readln(m);
x:=a;
for i:= 1 to m do
begin
h:=(b-a)/m;
x:=x+h;
WriteLn (x:5:2,'___', func(x):5:2);
end;
readkey;
end;
Begin
clrscr;
PrintFunc;
end.
даже незнаю в задании строго указано ввод только чисел pi/2
pi, 20 беда в том как это сделать.
есть ли в паскале возможность перевести вводимые чила в радианах в градусы?
Program Lab;
Uses crt;
Var h:real;
m:integer;
Function Func(x:real):real;
Begin
Func:=(sin(x)/cos(x))+cos(x);
End;
Function Radian(s:string):real;
Var I:byte;
Begin
for i:=1 to length(s) do
begin
if (s[i]='p') and (s[i+1]='i') then Radian:=180;
if (s[i+2]='/') and (s[i+3]='2') then Radian:=180/2;
if (s[i+2]='/') and (s[i+3]='3') then Radian:=180/3;
if (s[i+2]='/') and (s[i+3]='4') then Radian:=180/4;
if (s[i+2]='/') and (s[i+3]='5') then Radian:=180/5;
if (s[i+2]='/') and (s[i+3]='6') then Radian:=180/6;
if (s[i+2]='/') and (s[i+3]='7') then Radian:=180/7;
if (s[i+2]='/') and (s[i+3]='8') then Radian:=180/8;
if (s[i+2]='/') and (s[i+3]='9') then Radian:=180/9;
end;
End;
Procedure PrintFunc;
var
i:integer;x:real;a,b:string;
begin
Write('BBEDUTE HACHALO DIAnA3OHA ');readln(a);
Write('BBEDUTE KOHEU, DIAnA3OHA ');readln(b);
Write('BBEDUTE LL|AF BbI4UC/|EHUR ');readln(m);
radian(a);
radian(b);
x:=radian(a);
for i:= 1 to m+1 do
begin
h:=(radian(b)-radian(a))/m;
WriteLn (x:5:2,'___', func(x):5:2);
x:=x+h;
end;
readkey;
end;
Begin
clrscr;
PrintFunc;
end.
СПАСИБО КОЛОСАЛЬНОЕ!!
наконец-то я понимать начал.