مشاهده نسخه کامل
: آموزش (پیشرفته) : توابع بازگشتی در Pascal و C/C++
mahdi bg
08-03-2007, 05:28
سلام
می خواستم موضوع توابع بازگشتی رو در زبان
Pascal و زبان C/C++ بذارم
در Pascal رو داخل دلفی
اما C/C++ رو تو محیط Dos می نویسم (C++ ver 5. 02)
چون C/C++ . Net رو نصب شده رو سبستمم ندارم
امیدوارم به دردتون بخوره
mahdi bg
08-03-2007, 05:28
سلام
اولش یه تعریف از تابع بازگشتی
خیلی ساده:تابعی که کار های بازگشتی و تکراری
رو با صدا زدن خودش انجام بده
مثلا فاکتوریل factorial یعنی ضرب یه عدد در
عدد قبلیش تا اینکه به یک(1) برسیم
کار تکراری و قابل پیاده سازی به وسیله تابع برگشتی
ضرب عدد در عدد قبلی
mahdi bg
08-03-2007, 05:29
سلام
آموزش1:فاکتوریل
در Pascal
اول تابع زیر رو در private قسمت تعریف کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدحالا برای بدنه تابع
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دو تا Edit رو فرم بذارین و یه Button
حالا توی رویداد Click مربوط به Button بنویسید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا در C/C++
محیط C++ تحت داس
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای زبان C هم تغییرات کمی لازمه
تبدیل Cout به Printf و ....
ولی ساختار همینه
امیدوارم به درتون بخوره
هر جا سوالی بود در خدمتم
اگه بلد باشم جواب می دم
MasterData
08-03-2007, 12:56
بازم گير مد تشكر هستيم
تششششششششششششششششكر
Mahmood_N
09-03-2007, 21:23
سلام
ممنون ، تاپیک جالبی رو باز کردی ...
موفق باشی ...
mahdi bg
10-03-2007, 06:16
سلام
آموزش 2 :
چاپ دنباله
n-…-5-4-3-2-1-2-3-4-5-…-n
ابتدا در Delphi
تابع Revers رو در قسمت private تعریف می کنیم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیددر بدنه تابع می نویسیم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
end
دوتا Edit و یه Button روی فرم می ذاریم
داخل Click مربوط به Button می نویسیم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدتابع در C/C++
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبا یه خورده تغییر در C هم می تونین بنویسید.
امیدوارم به دردتون بخوره
هر جا مشکلی بود در خدمتم
اگه بتونم جواب می دم
mahdi bg
12-03-2007, 07:11
سلام
منتظر توابع شما هم هستیم
سلام
ممنون ، تاپیک جالبی رو باز کردی ...
موفق باشی ...
چندتا دیگه هم نوشتم که می ذارم
بهترین مبحث برنامه نویسی بعد از Database به نظرمن
توابع بازگشتی هستن. یعنی این توابع یه چیز دیگه ان
فقط اینو در باره توابع بازگشتی بگم که
تمام تکنبک های برنامه نویسی ( غیر ازdatabase) یه
طرف ، توابع بازگشتی هم همون طرف.
mahdi bg
12-03-2007, 07:20
آموزش3:بدست اوردن n امین عدد دنباله فیبوناچی
در Pascal
اول تابع زیر رو در private قسمت تعریف کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبعدش تابع زیر رو در public قسمت تعریف کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا برای بدنه fibonachiPrivate تابع
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و برای تابع fibonachi
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیددو تا Edit رو فرم بذارین و یه Button
حالا توی رویداد Click مربوط به Button بنویسید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیددقت کنید دو تا تابع تعریف شده ، برای حفظ امنیت برنامه هست(اگر بخواهین اینا را
توی یه کلاس به مار ببرید)
کاربر نباید به توابع اصلی شما دسترسی داشته باشد
و باید یه تابع واسط تعریف شود
حالا در C/C++
محیط C++ تحت داس
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبرای زبان C هم تغییرات کمی لازمه
تبدیل Cout به Printf و ....
ولی ساختار همینه
امیدوارم به درتون بخوره
چون توابع رو خودم می نویسم ممکن بهینه تر هم پیدا بشه
اما قبل از قرار دادن تست شون میکنم
هر جا سوالی بود در خدمتم
اگه بلد باشم جواب می دم
برنامه نویسی بازگشتی بزرگترین مشکلی که داره استفاده بیش از اندازه از حافظه هست که باعث کند شدن اجراهای متوالی این نوع توابع میگردد. ولی یکی از مزیتهای این نوع توابع راحتی تبدیل فرمولهای ریاضی به کد برنامه نویسی و خوانایی کد میباشد
کد پیدا کردن GCD بوسیله توابع بازگشتی:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این قسمت هم باید در درون تابع فیبو قرار بگیرد (لطفاً به تعریف کلی توابع برگشتی دقت بیشتری کنید).
در ضمن اگر اشتباه نکنم سری فیبو از 0 شروع میشه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
mahdi bg
14-03-2007, 05:50
سلام این دفعه حضور دوستان انجمن C
برای این که آموزش بهتر باشه و انسجام بیشتری بین مطالب
باشه این دوتا آموزش رو در یک تاپیک زدم
اگه سوالی داشتین می تونین توی این تاپیک بپرسین
اگه بلد بودم جواب بدم
چون C#.Net و C++.Net رو روی سیستمم ندارم
نمی تونم توابع رو برای .Net بنویسیم اما فکر نکنم
بردن این توابع از C++ تحت داس به محیط .Net کاری
داشته باشه
mahdi bg
14-03-2007, 05:52
سلام
در مورد توابع بازگشتی بگم که بعضی
از مسائل فقط با توابع بازگشتی قابل حل هستن
معروف ترین این توابع : برج های هانوی هستن هر دو versionشم
سلام این هم تابع بازگشتی برای برجهای هانوی تو سی
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
mahdi bg
16-03-2007, 05:40
سلام
netspc عزیز
از توجه هتون ممنون
گفتم که
چون توابع رو خودم می نویسم ممکن بهینه تر هم پیدا بشه
اما قبل از قرار دادن تست شون میکنم
در ضمن اگر اشتباه نکنم سری فیبو از 0 شروع میشه
تا اونجای که من می دونم از 1 شروع میشه
اگه با 0 هم شروع بشه تفاوت چندانی نمی کنه تابع جواب می ده
چندتا تابع ریاضی دارم می نویسم که می ذارم
منتظر توابع سایر دو ستان نیز هستیم
mahdi bg
22-03-2007, 05:06
آموزش4:برعکس کردن رشته
در Pascal
اول تابع زیر رو در private قسمت تعریف کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا برای بدنه revers تابع قبلش یه متغییر به نام MyCha; از نوع Char تعریف کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دو تا Edit رو فرم بذارین و یه Button
حالا توی رویداد Click مربوط به Button بنویسید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا در C/C++
محیط C++ تحت داس
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای زبان C هم تغییرات کمی لازمه
تبدیل Cout به Printf و ....
ولی ساختار همینه
امیدوارم به درتون بخوره
چون توابع رو خودم می نویسم ممکن بهینه تر هم پیدا بشه
اما قبل از قرار دادن تست شون میکنم
هر جا سوالی بود در خدمتم
اگه بلد باشم جواب می دم
واقعآ دستتون درد نکنه...
اگه میشه برنامه فیبوناچی را بصورت ران شده بزارین تا من تو دلفی 7 اجرا کنم... چو ن با تیکه دستورهای قبلی نتونستم خودم ردیفش کنم... متشکرم
با سلام
میشه این برنامه رو ردیابی و تریس کنید و توضیح بدید.(مرحله به مرحله)
برنامه ای که ذو عدد از ورودی خوانده هریک از ارقام ان را در یک سطر چاپ کنه. اگه عدد کوچکتر از 10 باشه ان عدد را در خروجی چاپ کنه و تابع به برنامه فراخوانی بگرده.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مرد مباح
31-01-2009, 22:07
1. دوست عزيز اسن تالاز مربوط به دلفي است. اگه جاي ديگه اين سوال رو ميپرسيدين بهتر بود.
2. خوشحالم كه يك نفر رو ديدم كه سرچ ميكنه و به همين دليل با كمال ميل توضيحات رو خدمتتون ميدم :
در ابتداي برنامه كه كاملا واضح است و برنامه يك عدد رو ميگيره.
در ادامه از تابع Wirte_V براي نمايش روي مونيتور استفاده ميكنه.
وقتي عدد ورودي وارد اين تابع ميشه چك ميكنه ببينه كه آخرين عدد هست يا نه. وقتي تقسيم يك عدد صحيح بر 10 مقدار صفر باشه و يا اينكه خود عدد كمتر از 10 باشه، يعني آخرين عدد موجود هست.
اگر يك عدد بزرگتر باشه مقدار تقسم اون بر 10 باعث ميشه كه يك رقم از سمت راست آن عدد كم بشه.
به دليل اينكه تابع بازگشتي قبل از فرمان Printf قرار گرفته، اين تابع تا زماني كه به اولين رقم برسيد تكرار ميشه. و بعد از اون چون قبلا تمام فرايند تحليل صورت گرفته تمامي اعداد پشت هم نمايش داده ميشه.
اميدوارم كه مطلب رو درست تونسته باشم توضيح بدم.
ولي اگه مشكلي بود، بگو تا يك عدد رو برات توي برنامه تريس كنم.
موفق باشي.
با سلام دوست عزیز ممنون خوب بود ولی اگه میشه با یه عدد توضیح بده که کامل بیافته!
با تشکر
مرد مباح
01-02-2009, 13:05
فرض كن عدد 4251 وارد شده.
بنابر اين در مرحله اول Write_V(4251)i اجرا ميشه. داخل اين فانكشن برسي ميشه كه عدد از 10 كوچيكتر نيست. بنابراين عدد بر 10 تقسيم ميشه و دوباره به فاكنشن لينك ميشه. عدد دوم 425 و عدد سوم 42 و عدد چهارم 4 است. وقتي به عدد آخر ميرسه چون از 10 كوچكتره چاپش ميكنه.
بعد يك مرحله به عقب بر ميگرده. يعني عدد 42. باقيمانده اين عدد بر 10 عدد 2 هست كه اونو چاپ ميكنه و يك مرحله ميره عقب و براي عدد 425 و 4251 هم باقيمانده ها رو بر 10 مينويسه.
به اين ترتيب تمام ارقام زيدر هم نوشته ميشن. البته دليل زير هم نوشته شدن آن نيز استفاده از n/ هست.
موفق باشي.
F A R H A D
01-02-2009, 23:37
البته دوست عزیزم مرد مباح کامل توضیح دادند اما یه توضیح اضافی هم میدم که فکر کنم مفید باشه
چند روز پیش یکی از دوستان در مورد پشته (stack) پرسیدند. یکی از کاربردهای پشته در انجام چنین مواردی هست
شما اگر دقیقا رفتار کامپایلر رو در زمان اجرا، روی کاغذ پیاده کنید و با ساختار پشته آشنا باشید به راحتی میتونید به کاری که این کد انجام میده پی ببرید
موفق باشید
samandoor
11-01-2011, 18:20
با سلام خدمت دوستان
من می خواستم در مورد برنامه زیر در زبان c که سری فیبوناچی را تولید میکند توضیحاتی از قبیل ردیابی خطی برنامه در قسمت توابع بازگشتی بدهید.
//fibronachi
#include<conio.h>
#include<stdio.h>
int fib(int n);
int main()
{
int n;
scanf("%d",&n);
printf("%d",fib(n));
getch();
return 0;
}
int fib(int n)
{
if(n==2||n==1)
return 1;
return fib(n-1)+ fib(n-2);
}
khazoonam
01-07-2012, 00:07
:40:
mamnooon....
kheyli be dardam khord:11:
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.