سلام
می خواستم موضوع توابع بازگشتی رو در زبان
Pascal و زبان C/C++ بذارم
در Pascal رو داخل دلفی
اما C/C++ رو تو محیط Dos می نویسم (C++ ver 5. 02)
چون C/C++ . Net رو نصب شده رو سبستمم ندارم
امیدوارم به دردتون بخوره
Printable View
سلام
می خواستم موضوع توابع بازگشتی رو در زبان
Pascal و زبان C/C++ بذارم
در Pascal رو داخل دلفی
اما C/C++ رو تو محیط Dos می نویسم (C++ ver 5. 02)
چون C/C++ . Net رو نصب شده رو سبستمم ندارم
امیدوارم به دردتون بخوره
سلام
اولش یه تعریف از تابع بازگشتی
خیلی ساده:تابعی که کار های بازگشتی و تکراری
رو با صدا زدن خودش انجام بده
مثلا فاکتوریل factorial یعنی ضرب یه عدد در
عدد قبلیش تا اینکه به یک(1) برسیم
کار تکراری و قابل پیاده سازی به وسیله تابع برگشتی
ضرب عدد در عدد قبلی
سلام
آموزش1:فاکتوریل
در Pascal
اول تابع زیر رو در private قسمت تعریف کنید
حالا برای بدنه تابعکد:Function factorial (MyNumber:integer):Longint;
کد:if MyNumber=1 then
Result:=1
else
Result:=factorial(MyNumber-1)*MyNumber;
دو تا Edit رو فرم بذارین و یه Button
حالا توی رویداد Click مربوط به Button بنویسید
حالا در C/C++کد:if StrToInt(Edit1.Text)>0 then
Edit2.Text:=IntToStr(factorial(StrToInt(Edit1.Text)))
else
Edit2.Text:='0';
محیط C++ تحت داس
برای زبان C هم تغییرات کمی لازمهکد:#include<stdio.h>
#include<fstream.h>
#include<conio.h>
long int factorial(int MyNumber);
void main()
{
int a;
cout<<"Enter Number: ";
cin>>a;
cout<<endl<<"Factorial is "<<a<<" : "<<factorial(a);
getch();
}
long int factorial(int MyNumber)
{
if(MyNumber==1)
return 1;
else
return factorial(MyNumber-1)*MyNumber;
}
تبدیل Cout به Printf و ....
ولی ساختار همینه
امیدوارم به درتون بخوره
هر جا سوالی بود در خدمتم
اگه بلد باشم جواب می دم
بازم گير مد تشكر هستيم
تششششششششششششششششكر
سلام
ممنون ، تاپیک جالبی رو باز کردی ...
موفق باشی ...
سلام
آموزش 2 :
چاپ دنباله
n-…-5-4-3-2-1-2-3-4-5-…-n
ابتدا در Delphi
تابع Revers رو در قسمت private تعریف می کنیم
در بدنه تابع می نویسیمکد:procedure Revers(MyNumber:integer);
endکد:if (MyNumber=1) then
Edit2.Text:=Edit2.Text+'1-'
else
begin
Edit2.Text:=Edit2.Text+IntToStr(MyNumber)+'-';
Revers(MyNumber-1);
Edit2.Text:=Edit2.Text+IntToStr(MyNumber)+'-';
دوتا Edit و یه Button روی فرم می ذاریم
داخل Click مربوط به Button می نویسیم
تابع در C/C++کد:Edit2.Clear;
if StrToInt(Edit1.Text)<1 then
Edit2.Text:='0'
else
Revers(StrToInt(Edit1.Text));
با یه خورده تغییر در C هم می تونین بنویسید.کد:#include<stdio.h>
#include<fstream.h>
#include<conio.h>
void revers(int MyNumber);
void main()
{
int a;
cout<<"Enter Number: ";
cin>>a;
cout<<endl<<"Revers is : ";
revers(a);
getch();
}
void revers(int MyNumber)
{
if(MyNumber==1)
cout<<"1-";
else
{
cout<<MyNumber<<"-";
revers(MyNumber-1);
cout<<MyNumber<<"-";
}
}
امیدوارم به دردتون بخوره
هر جا مشکلی بود در خدمتم
اگه بتونم جواب می دم
سلام
منتظر توابع شما هم هستیم
چندتا دیگه هم نوشتم که می ذارمنقل قول:
سلام
ممنون ، تاپیک جالبی رو باز کردی ...
موفق باشی ...
بهترین مبحث برنامه نویسی بعد از Database به نظرمن
توابع بازگشتی هستن. یعنی این توابع یه چیز دیگه ان
فقط اینو در باره توابع بازگشتی بگم که
تمام تکنبک های برنامه نویسی ( غیر ازdatabase) یه
طرف ، توابع بازگشتی هم همون طرف.
آموزش3:بدست اوردن n امین عدد دنباله فیبوناچی
در Pascal
اول تابع زیر رو در private قسمت تعریف کنید
بعدش تابع زیر رو در public قسمت تعریف کنیدکد:function fibonachiPrivate(Count,MyCounter,a,b: integer): Longint;
حالا برای بدنه fibonachiPrivate تابعکد:function fibonachi(count:integer):longint;
و برای تابع fibonachiکد:if Count=MyCounter then
Result:=a+b
else
Result:=fibonachiPrivate(Count,MyCounter+1,b,a+b)
دو تا Edit رو فرم بذارین و یه Buttonکد:if ((count=1)or(count=2))then
Result:=1
else
Result:=fibonachiPrivate(count,3,1,1)
حالا توی رویداد Click مربوط به Button بنویسید
دقت کنید دو تا تابع تعریف شده ، برای حفظ امنیت برنامه هست(اگر بخواهین اینا راکد:Edit2.Text:=IntToStr(fibonachi(StrToInt(Edit1.Text)))
توی یه کلاس به مار ببرید)
کاربر نباید به توابع اصلی شما دسترسی داشته باشد
و باید یه تابع واسط تعریف شود
حالا در C/C++
محیط C++ تحت داس
برای زبان C هم تغییرات کمی لازمهکد:#include<stdio.h>
#include<fstream.h>
#include<conio.h>
long int fibonach(int,int=3,int=1,int=1);
void main()
{
int a;
cout<<"Enter Number: ";
cin>>a;
cout<<endl<<"Fibonachi Number is : ";
if ((a==1) || (a==2))
cout<<1;
else
cout<<fibonach(a);
getch();
}
long int fibonach(int count,int MyCount,int a,int b)
{
if (count==MyCount)
return a+b;
else
return fibonach(count,MyCount+1,b,a+b);
}
تبدیل Cout به Printf و ....
ولی ساختار همینه
امیدوارم به درتون بخوره
چون توابع رو خودم می نویسم ممکن بهینه تر هم پیدا بشه
اما قبل از قرار دادن تست شون میکنم
هر جا سوالی بود در خدمتم
اگه بلد باشم جواب می دم
برنامه نویسی بازگشتی بزرگترین مشکلی که داره استفاده بیش از اندازه از حافظه هست که باعث کند شدن اجراهای متوالی این نوع توابع میگردد. ولی یکی از مزیتهای این نوع توابع راحتی تبدیل فرمولهای ریاضی به کد برنامه نویسی و خوانایی کد میباشد
کد پیدا کردن GCD بوسیله توابع بازگشتی:
کد:#include <stdio.h>
int GCD(int n,int m);
void main(){
int m,n;
printf("enter two number?\n");
scanf("%d",&m);
scanf("%d",&n);
printf("the GCD is : %d", GCD(n,m));
}
int GCD(int n,int m){
if ((n >=m ) && (n%m == 0))
return m;
else if (n <m)
return GCD(m,n);
else
return GCD(m,n%m);
}
این قسمت هم باید در درون تابع فیبو قرار بگیرد (لطفاً به تعریف کلی توابع برگشتی دقت بیشتری کنید).نقل قول:
کد:if ((a==1) || (a==2))
cout<<1;
else
cout<<fibonach(a);
در ضمن اگر اشتباه نکنم سری فیبو از 0 شروع میشه
کد:if (a == 1)
return 0;
else if (a == 2)
return 1;