PDA

View Full Version : تابعی برای توان



amin a.^2
چهارشنبه 22 شهریور 1385, 00:40 صبح
من یه تابع می خوام برای توان البته خودم تابع اس اچ ال را میشناسم ولی اشکال خیلی خیلی بزرگش اینه که فقط توان های 2 را بدست میاره لطفاٌ هرکی چیزی می دونه بگه
چون خیلی مهم

اَرژنگ
چهارشنبه 22 شهریور 1385, 05:53 صبح
من یه تابع می خوام برای توان البته خودم تابع اس اچ ال را میشناسم ولی اشکال خیلی خیلی بزرگش اینه که فقط توان های 2 را بدست میاره لطفاٌ هرکی چیزی می دونه بگه
چون خیلی مهم


Raises Base to any power.

Unit

Math

Category

Arithmetic routines

Delphi syntax:

function Power(const Base, Exponent: Extended): Extended;

Mojgan110
چهارشنبه 22 شهریور 1385, 07:49 صبح
A^B را میشه اینطور محاسبه کرد ، برای توان اعشاری هم مشکلی نداره :


EXP(B*Ln(A))

اَرژنگ
چهارشنبه 22 شهریور 1385, 08:13 صبح
A^B را میشه اینطور محاسبه کرد ، برای توان اعشاری هم مشکلی نداره :


EXP(B*Ln(A)) A=-1 , B=2
:چشمک:

dkhatibi
چهارشنبه 22 شهریور 1385, 14:46 عصر
اعداد منفی به توانهای اعشاری تعریف نشده اند
به صورت شرطی باید منفی و مثبت بودن عدد را چک کنید و در صورتی که عدد منفی به توان یک عدد صحیح زوج یا فرد رسیده علامت مورد نظر را لحاظ نمایید.و با قدر مطلق آن کار کنید.

اَرژنگ
چهارشنبه 22 شهریور 1385, 15:49 عصر
اعداد منفی به توانهای اعشاری تعریف نشده اند

میببخشید، مثلاً ۱- به توانه ۳/۱ تعریف شده یکی از سه تا جواباش ۱-


به صورت شرطی باید منفی و مثبت بودن عدد را چک کنید و در صورتی که عدد منفی به توان یک عدد صحیح زوج یا فرد رسیده علامت مورد نظر را لحاظ نمایید.و با قدر مطلق آن کار کنید.

قدر مطلقه عدد را به توان برسونیم سوال را عوض میکنه.
مثلاً ۱- به توانه ۰.۵ با ۱ به توانه ۰.۵ فرق داره.
اگر تابع برایه یک آرگومانتی تعریف نشده باشه، باید یک ارور بده به جایه اینکه آرگومانت را عوض کنه و بر حسبه مقدار جدید جواب بده.

amin a.^2
چهارشنبه 22 شهریور 1385, 20:05 عصر
مژگان جان تابع شما را خودم میدونم ولی لین ارور رو میده
اشکال از نوع متغیر لطفاً بگین باید اون متغیر از چه نوعی باشه
[Error] Unit1.pas(53): Incompatible types
در مورد راه حل های ارژنگ جان خیلی ممنون ولی این راهها خیلی طولانیه و سرعتا پایین میاره

اَرژنگ
چهارشنبه 22 شهریور 1385, 20:22 عصر
مژگان جان تابع شما را خودم میدونم ولی لین ارور رو میده
اشکال از نوع متغیر لطفاً بگین باید اون متغیر از چه نوعی باشه
[Error] Unit1.pas(53): Incompatible types
در مورد راه حل های ارژنگ جان خیلی ممنون ولی این راهها خیلی طولانیه و سرعتا پایین میاره
متغیررها باید Extended باشند.
کدام راه زیاد طول میکشه؟ مگر چکار دارید میکنید؟
اگر توضیح بدید چکار میکنید شاید بتونیم راهه مخصوصتر پیشنهاد کنیم،
از چه لحاز زیاد طول میکشه؟

amin a.^2
پنج شنبه 23 شهریور 1385, 01:02 صبح
ارژنگ جان
اولاً که با متغیرextendedهم ارور میده(همون قبلیه را)
بعدشم من راه شما را هم امتحان کردم ولی کار نمیده

اَرژنگ
پنج شنبه 23 شهریور 1385, 03:15 صبح
ارژنگ جان
اولاً که با متغیرextendedهم ارور میده(همون قبلیه را)
بعدشم من راه شما را هم امتحان کردم ولی کار نمیده
این کد راحت جواب میده:

Power( 2 , 2);

amin a.^2
پنج شنبه 23 شهریور 1385, 13:38 عصر
ارزنگ جان خیلی ممنون فکر کنم درسته اما راه تبدیل integer بهextended
چیه؟؟؟

Mahdi_S_T
جمعه 24 شهریور 1385, 07:31 صبح
اگه واسه اعشاری بخوای IntToFloat و برعکس

amin a.^2
شنبه 25 شهریور 1385, 00:47 صبح
عزیز جان اخه توان چه ربطی به float داره توان باید یا از نوعreal باشه یاextended
دوستان گرامی مشکل حل شد اینم راه حل
private
function tvn(x,y:integer):integer;

function TForm1.tvn(x, y: integer): integer;
var
m,w : integer;
begin
m := 1;
for w := 1 to y do
m := m * x;
result := m;
end;
بعدم هر جا خواستیم از توان استفاده کنیم از result استفاده می کنیم
اینجوری result:=tvn(a,b);
aوb اعداد یا متغیر ها هستند که به توان میرستند
این آموزش هم برای کسانی که اینا بلد نیستند

Mahyaa
شنبه 25 شهریور 1385, 11:11 صبح
یعنی فکر میکنید این روش از تابع Power و IntPower سریعتره ؟!!!!!

SoftDevCo
شنبه 25 شهریور 1385, 12:57 عصر
شما چه علاقه ای به ^ دارین ، UserName تون هم ^ داره.

اَرژنگ
شنبه 25 شهریور 1385, 13:31 عصر
یعنی فکر میکنید این روش از تابع Power و IntPower سریعتره ؟!!!!!
خیر این روش (O(n، روشی هستش که ((O(log(n

amin a.^2
شنبه 25 شهریور 1385, 14:18 عصر
خودم می دونم که تابع power از این روش خیلی سریع تر ولی هر چی از شما راه تبدبل extended به integer را خواستم جواب ندادید
تابع exp(a ln(b) ) هم خیلی خوبه و متغیر اون راهم پیدا کردم (real) و با اون هم کار میکنم
در ضمن سافت دو کو جان پس منم از شما یه سوال دارم شما چرا اینقدر به آدمای لخت علاقه دارین؟؟؟؟؟؟؟؟؟؟؟؟؟؟

Mahyaa
شنبه 25 شهریور 1385, 14:33 عصر
هر چی از شما راه تبدبل extended به integer را خواستم جواب ندادی

استفاده از IntPower به جای Power .

amin a.^2
یک شنبه 26 شهریور 1385, 00:54 صبح
mahyaaبه این هم ارور میده در ضمن من می خوام مثلاً cرا که یک متغیر توانی را مساوی با یه متغیر عددی بذارم این کارو چجوری بکنم

Mahyaa
یک شنبه 26 شهریور 1385, 06:57 صبح
به این هم ارور میده در ضمن من می خوام مثلاً cرا که یک متغیر توانی را مساوی با یه متغیر عددی بذارم این کارو چجوری بکنم
منظورت همون Incompatible types هستش ؟
خوب توی IntPower پایه یا Base از نوع Extended هستش . همینطور مقدار برگشتی تابع .

همون موقعی که میخواهی تابع رو صدا کنی اون رو توی یک متغیر از نوع Extended بریز .
اگر بعد از اون اصرار داری که اون رو به Int تبدیل کنی، از Round یا Trunc استفاده کن که گرد بشه یا مقدار صحیح اون رو بگیره .
اگر مطمئن هستی که پایه (Base) رو حتما Ineger میدی پس با Round و Trunc هیچ تقریبی هم انجام نمیگیره .

البته به این دقت کنه که Round و Trunc هردو Int64 برمیگردونند و اگه حاصل به توان رسوندن ، از این مقدار بیشتر بشه Exception میده .




.

amin a.^2
یک شنبه 26 شهریور 1385, 16:13 عصر
خیلی ممنون ولی در عبارت روبرو چجوری از trunce یا round استفاده کنم
[code]
sum(int64):=sum+c(extended);
[code/]
در ضمن من تو چند پست قبل نوشتم که ارورش اینه
incompatible types
بازم خیلی ممنون از همکاری شما

Mahyaa
یک شنبه 26 شهریور 1385, 16:32 عصر
من منظور شما رو از اون کد نفهمیدم اما چیزی که من گفتم شبیه اینه :


var
MyBase : Extended;
MyPowReslt : Int64;
MyExponent : Integer;
begin
MyPowReslt := Trunc(IntPower(MyBase , MyExponent));
end;

amin a.^2
یک شنبه 26 شهریور 1385, 16:36 عصر
خیلی منونم همینا میخواستم منظورم از کد هم این بود
سام برابر است با سام به علاوه ی سی