PDA

نسخه کامل مشاهده نسخه کامل : تابعی برای توان



amin a.^2
13-09-2006, 01:19
بچه هاي فعال انجمن دلفي سلام
من يه تابع مي خوام براي توان اعداد در دلفي اين پرسشا من ماه پيش هم پرسيده بودم ولي جز سولجر كسي محلم نذاشت سولجر تابع اس اچ ال را به من داد و خودشم گفت كه اشكال داره اما اشكالش خيلي بزرگه
(فقط باش ميشه توان هاي 2 را بدست اورد) حالا هر كسي در اين مورد چيزي مي دونه بگه چون خيلي نياز دارمك
فكر كنم به اندازه ي كافي توضيح دادم

مرد مباح
13-09-2006, 10:54
بابا
يك پروسيجر ساده بنويس و خلاص.
كدشو زير نوشتم.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

امتحان كن و خبرشو بده.
موفق باشي.

soldier
13-09-2006, 14:19
سلام
اينطوري كه سرعت برنامه مياد پايين!
من مي گردم اگر چيز بهتري پيدا كردم ميزارم! :)
موفق باشيد ! باي!

مرد مباح
13-09-2006, 15:39
اصلا پايين نمياد.
اين سريعترين و مطمئن ترين راه براي اين محاسبس.
امتحانش كن.
خيلي سريع كار ميكنه.
از لحاظ الگوريتمي چيز بهتر از اين تا حالا نديدم.
قاعدتا خود اس اچ ال هم از همين روند استفاده ميكنه.

موفق باشيد.

NoneForce
13-09-2006, 16:04
سلام
از اونجا كه غربي ها هم بعضي وقتها از اين توابع پيچيده استفاده مي كنند پس خود بورلند اين تابع را ايجاد كرده است :

تابع توان :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بايد Math را به Uses اضافه كنيد.

سورس :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

مي تونيد يه نگاهي به Math.pas كه در Borland\Delphi6\Source\Rtl\Common قرار دارد بيندازيد.

AbbasGholami
13-09-2006, 16:40
فرض کن میخواهی مقدار a به توان b را به دست بیاوری. فقط با یک خط این کار را انجام بده. به صورت زیر:


exp(b*ln(a))

به موقعیت پرانتزها توجه کن.

soldier
13-09-2006, 18:21
سلام
ويرايش شد :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

لطفآ بزاریدش توی کد :)
بای

amin a.^2
13-09-2006, 20:52
عباس جان از شما درسته ولی یه اروری میده
[Error] Unit1.pas(53): Incompatible types
اشکال از نوع متغیرهاست لطفاً بگین اون متغیر باید از چه نوعی باشه
مرد مباح دست شما درد نکنه ولی راه حل شما خیلی طولانیه

soldier
13-09-2006, 21:13
راه حل شما خیلی طولانیه
:):):):):):):):):)
اين رو ميگي طولاني ؟:)
من يه پروژه ساختم! يك قسمت تبديل .... هست.
اگر ببينيش . قول 100% ميدم كه بي هوش مي شي :):)
تقريبآ 85 خط فقط براي تبديل ... :) اونوقت فقط تبديل بقيه اش خوب ديگه خدا ميدونه :)
در ضمن طولاني بودن دليل نيست كه بدرد نخوره . بايد به پروسيجر هاي طولاني هم عادت كني
باي

amin a.^2
14-09-2006, 01:34
:):):):):):):):):)
اين رو ميگي طولاني ؟:)
من يه پروژه ساختم! يك قسمت تبديل .... هست.
اگر ببينيش . قول 100% ميدم كه بي هوش مي شي :):)
تقريبآ 85 خط فقط براي تبديل ... :) اونوقت فقط تبديل بقيه اش خوب ديگه خدا ميدونه :)
در ضمن طولاني بودن دليل نيست كه بدرد نخوره . بايد به پروسيجر هاي طولاني هم عادت كني
باي
سولجر جان حتماَ اين پروسيجر هاي طولاني ارزش كار شما را داره اما براي اين برنامه
من تلاش مي كنم از الگوريتم ها وتابع هاي خيلي كوچك استفاده كنم چون هم ارزششا نداره و هم مي خوام
تاپايان مهر تمام بشه

ALI Kheradmand
14-09-2006, 02:37
راه درستش همونه كه مرد مباح گفت (البته چند تا سوتي داره مثلا 0 به توان 0 رو خواهد نوشت 0 در صورتي كه 0 به توان 0 تعريف نشده به طور كل فكر كنم با توان 0 مشكل پيدا كنه).... بقيه به درد دهن پر كني مي خوره ....به خصوص كه آدمو گيج مي كنه و آدم نمي دونه الگوريتم كار اونا چيه ... اينجوري ممكنه به مشكل بر بخوريم ....

soldier
14-09-2006, 11:20
راه درستش همونه كه مرد مباح گفت (البته چند تا سوتي داره مثلا 0 به توان 0 رو خواهد نوشت 0 در صورتي كه 0 به توان 0 تعريف نشده به طور كل فكر كنم با توان 0 مشكل پيدا كنه).... بقيه به درد دهن پر كني مي خوره ....به خصوص كه آدمو گيج مي كنه و آدم نمي دونه الگوريتم كار اونا چيه ... اينجوري ممكنه به مشكل بر بخوريم ....

از همون الگوريتم مردمباح استفاده مي كنيم :)
من قبلآ يه همچين چيزي ساخته بودم اما نمي دونم واسه چي يك حلقه بي نهايت ايجاد ميشد
و كامپيوتر گير مي كرد. ;) اما این یکی خیلی عالیه :);) این مشکل رو هم نداره .
بای

NoneForce
14-09-2006, 11:43
سلام
براي كنترل و مقايسه زمان اجراي يك قسمت از كد مي تونيد اينطوري عمل كنيد :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

amin a.^2
14-09-2006, 14:03
از همون الگوريتم مردمباح استفاده مي كنيم :)
من قبلآ يه همچين چيزي ساخته بودم اما نمي دونم واسه چي يك حلقه بي نهايت ايجاد ميشد
و كامپيوتر گير مي كرد. ;) اما این یکی خیلی عالیه :);) این مشکل رو هم نداره .
بای

اولاَ اون تابع اوليه را كسي چيزي ازش نميدونه؟ :angry:
بعدشم من نمي دونم اون تابع مرد مباح جان را كجاي الگوريتمم بدارم
آخه الگوريتم من كه فقط توان حساب نمي كنه
تازه نان فرس جان نظر شما كه خودش ميشه باش يه برنامه ساخت :blink:

amin a.^2
14-09-2006, 14:38
دوستان گرامي بازم سلام
مي گم بازم به سايت برنامه نويس كه جواب آدما مي دن
اينم جواب
power(b,a);
اما بازم یه مشکلی هست راه تبدیل تابع extendedبهinteger چیه
جون عزیزاتون جواب بدین نه اینکه هم دیگه را تایید کنید

مرد مباح
14-09-2006, 19:32
دوست عزيز.
اين تابعي كه شما ميگين توي برنامه نويس پيدا كردي نان فورس معرفي كرد.
علاوه بر اين شما بايد با ساخت توابع توي دلفي آشنا باشي.
منم اونو به صورت يك تابع برات نوشتم.
من فكر كردم كه شما بلديد و اون تابع رو نوشتم.
فكر كنم تجربه كاري شما پايين باشه مگه نه ؟؟

amin a.^2
15-09-2006, 00:28
من فقط سه ما هه که دلفی کار می کنم و عجیب که شما تا حالا اینا نفهمیدید
میگما جواب بدین دیگه!!!!

amin a.^2
15-09-2006, 00:41
راستی مر مباح و بقیه ی دوستان نگفتید چجوری وسط یه الگوریتم تابع به این بزرگی بذارم

codemaster
15-09-2006, 07:27
سلام
اينطوري كه سرعت برنامه مياد پايين!
من مي گردم اگر چيز بهتري پيدا كردم ميزارم! :)
موفق باشيد ! باي!

اگر با حلقه نمیخوای بنویسی با چی می خوای بنویسی که سریعتر بشه! عزیز!
از توابع بازگشتی هم میشه استفاده کرد ولی حلقه سریعتره!

همون که مرد مباح نوشته عالیه و میتونی واسه باگش هم شرط تعریف کنی که محاسبه نکنه!
ولی طبق منطق کامپیوتر میتونی واسه 0 به توان 0 یک مقدار قراردادی بذاری که میتونه همون صفر باشه یا هر
مقداز دیگه.

کافیه اون تلبعی رو که مردمباح نوشته رو تو قسمت type برنامه جایی که procedure ها تعریف شدن بنویسی
و هر جا تو برنامه میخوای این کد رو بنویسی :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

مقدار Value رو x به توان y قرار میده.

:biggrin:

مرد مباح
15-09-2006, 10:55
بايد توي تعاريف تابع رو تعريف كني و ازش جداگانه استفاده كني !
اگه با كتاب دلفي رو ياد گرفتي يك سر به بخش رويه ها بزن.
وگرنه بگو تا بيشتر برات توضيح بدم.

amin a.^2
15-09-2006, 14:43
بايد توي تعاريف تابع رو تعريف كني و ازش جداگانه استفاده كني !
اگه با كتاب دلفي رو ياد گرفتي يك سر به بخش رويه ها بزن.
وگرنه بگو تا بيشتر برات توضيح بدم.
والا من نمي دونم وسط اين بلوك چجوري اين تابع را بذارم شما بگين
كد:
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,i,d:integer;
sum:int64;
begin
a:=StrToInt(voroudi.text);
i:=0;
sum:=0;
d:=a mod 10;
a:=a div 10;
b:=0;
c:=0;
while (a>0) do
begin
b:=a mod 10;
a:=a div 10;
c:=power(7,i);
i:=i+1;
c:=c*b;
sum:=sum+c;

end;
حتماَ من خيلي خرم مگه نه

amin a.^2
15-09-2006, 14:47
در ضمن شما عزيزان هنوز نگفتين كه چجوريextendedرا به integerتبدیل میکنند اون وقت گیر دادین به تابع
مر مباح

AbbasGholami
15-09-2006, 15:53
عباس جان از شما درسته ولی یه اروری میده
[Error] Unit1.pas(53): Incompatible types
اشکال از نوع متغیرهاست لطفاً بگین اون متغیر باید از چه نوعی باشه
مرد مباح دست شما درد نکنه ولی راه حل شما خیلی طولانیه

همه رو از جنس real تعریف کن. مطمئناٌ جواب میده.

amin a.^2
15-09-2006, 15:57
همه يهني حتي انهايي كه از جنسinteger هستند و به این قسمت ربطی ندارند

AbbasGholami
15-09-2006, 15:59
راستی من توی کارهایی که کردم از توان زیاد استفاده کردم. این روشی رو که گفتم بهت هر کجاش ایراد داشت بگو تا برات توضیح بدم.

amin a.^2
15-09-2006, 16:02
عباس جان اولاً دست شما درد نکنه بعدشم شما سوال قبلی منا جواب ندادینا!!!
در ضمن به راه حل شما تو همون پرانتزا گیر میده

AbbasGholami
15-09-2006, 16:03
امین جان اگه همین الان هستی بیا تو yahoo messeger برات آف گذاشتم. منم اونجا هستم حالا

amin a.^2
15-09-2006, 16:05
در ضمن من اینجا الگوریتم برنامه را گذاشتم شما می تونید بخش توان(p0wer) را ویرایش کنید تا من ببینم اشکال از چیزی یه که شما گفتید با از برنامه ی من

AbbasGholami
15-09-2006, 16:05
میتونی برنامه خودتو برام upload کنی تا اگه تونستم حلش کنم؟؟؟

amin a.^2
15-09-2006, 16:06
عباس جان من الان یا هو مسنجرم نصب نیست چون تازه ویندوز نصب کردم اگه تو جی میل عضوی بیا اونجا
بابا الگوریتم برنامه تو پست#21 هست دیگه نیازی نیست که من برنامه آپلود کنم

amin a.^2
15-09-2006, 16:14
می گما بیان تو پیغام خص.صی حرف بزنیم
البته من که می خوام بفرستم یه چرت وپرتی ارر می ده و میگه اگه یه بار دیگه این کار رو بکنبد عضویت شما به تعلیق در میاد

AbbasGholami
15-09-2006, 16:16
باشه من الان برنامه رو میبرم توی دلفی روش کار میکنم و بهت جواب میدم.

amin a.^2
15-09-2006, 16:18
خیلی ممنون

AbbasGholami
15-09-2006, 16:33
کد زیر رو بنویس. من امتحان کردم درست بود. به تعریف متغیرها هم دقت کن:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته به جای edit1.text به صورت voroudi.text بنویس.

AbbasGholami
15-09-2006, 17:16
جواب گرفتی یا نه.

amin a.^2
15-09-2006, 19:54
عباس جان خيلي ممنون از راهنمايي شما ولي مشكل من با همان راه حل مرد مباح حل شد وتمام شد
از شما و همچنين از مرد مباح خيلي ممنون
اينم اينجا ميذارم كه اگه بعداَ كسي اينا خواست اينجا باشه

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته این موضوع تجربه ی خوبی برام شد چون تاحالا بااینجور functionها کار نکرده بودم و بلد هم نبودم
به امید اینکه هر کسی روزی تابع توان را خواست به بد بختی من نیوفته
باز هم از عباس جان و مرد مباح سپاس گذاری فراوان میکنم و
special thanks to dear ALI(kheradmand)that helped me to solve this problem
اینم به زبون بیگانگان نوشتم هویجوری

amin a.^2
15-09-2006, 19:56
در ضمن بچه ها شما چي كار مي كنيد كه كداتون تو اين قابا مياد من كه هر كاري مي كنم نميشه (تو كروشم مي ذارم ولي فايده نداره)

soldier
16-09-2006, 14:27
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

جواب گیری

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

amin a.^2
16-09-2006, 15:51
سولجر جان چيزي كه من نوشته بودم با مال شما چه فرقي داره
در ضمن كسي جواب نداد چجوري كدهارا در اين قالب ها بذارم

soldier
16-09-2006, 16:16
سلام
كدي كه نوشته بودي چند تا مشكل داشت.
من هم اصلاحش كردم و كاملش كردم و گذاشتمش توي كد.
*اگر باعث ناراحت نشده باشه .
در ضمن اگر مي خواهي بزاري توي كد اينطوري :
قبل از كد اين رو مي نويسي : [ code ]
و بعد از کد این رو بنویس : [ /code ]
چون می خواستم به صورت کد بیاد بین کروشه و نوشته فاصله گذاشتم. اما تو اون فاصله رو نزار.
موفق باشی.بای

amin a.^2
17-09-2006, 01:28
من که ناراحت نشده بودم
دست شما هم درد نکنه از راهنماییتون(به این می گن تمدن)

soldier
17-09-2006, 11:21
سلام
خوشحالم که یه بار از ما راضی شدی. قابلت رو نداشت.
برای راهنمایی افرادی که تاپیک رو نخوندم.
پست 38 : [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کد ها کامل نوشته شده.
بای

amin a.^2
17-09-2006, 17:17
فكر كنم وقت اون رسيده كه اين تاپيك از صفحه ي اصلي تالار بيرون بره براي همين دوستان ديگه ناپيك نديد

ALI Kheradmand
20-09-2006, 10:40
عد special thanks to dear ALI(kheradmand)that helped me to solve this problem
اینم به زبون بیگانگان نوشتم هویجوری

چاكريم ...... (البته خالي بستم !)

amin a.^2
20-09-2006, 14:53
بابا اينا مي تونستي تو پيغام خصوصي بفرستي حالا تا دو سال ديگه اين تاپيك تو تالار هستش

ALI Kheradmand
20-09-2006, 22:07
اينم مي تونستي تو پيغام خصوصي بفرستي ....

amin a.^2
21-09-2006, 20:50
بابا شما که هر روز منا می بینی پس چرا اینقدر کرم می ریزی تو به جون خودت به جون ارجمند دیگه پست نده
در ضمن می دونم که میتونستم این پستا تو پیغام خصوصی بفرستم