چه طوری میشه سینوس را محاسبه کرد (فوری) ..... اگه ممکنه سورسشو میخواستم ....
Printable View
چه طوری میشه سینوس را محاسبه کرد (فوری) ..... اگه ممکنه سورسشو میخواستم ....
سلام
از راهنماي دلفي استفاده كنيد : تابع Sin
کد:var
R: Extended;
S: string;
begin
R := Sin(Pi);
Str(R:5:3, S);
Canvas.TextOut(10, 10, 'The Sin of Pi is ' + S);
end;
ممنون . ولی من این طوری نوشتم مشکلش کجاس.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Fact(n: Word): Longint;
var
f: LongInt;
i: Integer;
begin
f := 1;
for i := 2 to 8 do f := f * i;
Result := f;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
sin,fact,x:real;
begin
x:=-1;
x:=strtofloat(edit1.Text);
while i<=15 do
i:=0;
sin:=x-x*2*i+1/2*i+fact ;
i:=2*i+1;
edit2.Text:=floattostr(sin);
end;
end.
سلام
1- كد را داخل تگ Code قرار دهيد.
2- چرا تمام خط ها را از سر خط شروع مي كنيد؟! تا به حال با واژه "كدخوانا" برخورد كرده ايد؟!
3- شما بايد بگيد مشكل كجاست ، نه من.
قسمتی که آبیه اونجارو مشکل دارم جواب درست در نمیاد.نقل قول:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Fact(n: Word): Longint;
var
f: LongInt;
i: Integer;
begin
f := 1;
for i := 2 to 8 do f := f * i;
Result := f;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
sin,fact,x:real;
begin
x:=-1;
x:=strtofloat(edit1.Text);
while i<=15 do
i:=0;
sin:=x-x*2*i+1/2*i+fact ;
i:=2*i+1;
edit2.Text:=floattostr(sin);
end;
end.
سلام
برنامه را به تكه هاي كوچك تقسيم كنيد، بعد ببينيد مشكل از كجاست.
چيزي كه با يك نگاه ميشه فهميد اينه كه بعد از While آخر بايد يه Begin-End باشه ، چون در حالتي كه الان وجود داره اگر i كوچكتر از 15 باشه ، 15 بار مقدار i را برابر 0 خواهد كرد، ولي به ظاهر بايد 3 خط بعد هم اجرا شود.
سینوس هر زاویه (برحسب رادیان) به راحتی با تابع sin محاسبه می شود البته می بایست یونیت Math به پروژه اضافه شود.
و اگر می خواهید بدون استفاده از تابع سینوس دلفی سینوس یک زاویه را حساب کنید
با توجه به بسط مک لورن سینوس که به صورت زیر است:
Sinx=x-x^3/3!+x^5/5!-x^7/7!+...
تابع محاسبه سینوس به صورت زیر خواهد بود (تابع 15 جمله اول سری را را به عنوان سینوس زاویه بر می گرداند):
x برحسب رادیان می باشد.
کد:
function MySin(x: Double): Double;
var
i: Integer;
powX: Double;
sgn: Integer;
fact: Double;
SinOut: Double;
begin
sgn:=1;
powX:=x;
fact:=1;
MySin:=0;
for i:=1 to 16 do
begin
SinOut:=SinOut+sgn*PowX/fact;
sgn:=-sgn;
PowX:=PowX*x*x;
fact:=fact*(2*i)*(2*i+1);
end;
Result:=SinOut;
end;
دقيقا. شما باسد درجه را به راديان تبديل كنيد و بعد توي سينوس ازش استفاده نمائيد.
موفق باشي.