اطلاعیه

Collapse
No announcement yet.

آموزش زبان سی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #76
    پاسخ : آموزش زبان سی و کدویژن

    با عرض سلام مجدد
    از قدیم تا الان میگن ادم سیر نمیدونه گرسنگی یعنی چی :cry2:
    این بخاطر اینه که شما برنامه نویسی بلدین(اونم سطح بالا).ولی افرادی مثل من چی ؟
    میخوام یه پروژه کوچیک راه بندازم نمیتونم.رفتم بیسیک یاد گرفتم (چون راحت تر بود).ولی بعد از چند ماه تازه دارم متوجه میشم AVR محدوده.
    اگه میخوام arm یاد بگیرم باید زبان C بلد باشم.حالا دارم C یاد میگیرم.منابع اموزشی که از پایه یاد بدن کمه.جدا از error هایی که کامپایلر C میده و تازه کاری مثل من که نمیدونه چکار کنه.بنظر شما ادمی مثل من نباید سردرگم بشه ؟
    با تشکر

    دیدگاه


      #77
      پاسخ : آموزش زبان سی و کدویژن

      ولی بعد از چند ماه تازه دارم متوجه میشم AVR محدوده.
      آره راست میگین. ولی ممکنه بگین چی وجود داره که محدودیت نداشته باشه؟ :eek:
      آرم هم محدودیت داره. PC هم محدودیت داره. اما اینها بنا بر نیاز هست. وقتی کسی (جسارتا) شناخت کافی از مشکلش نداشته باشه باید هم به این محدودیت بخوره.

      اگه میخوام arm یاد بگیرم باید زبان C بلد باشم
      الزاما نه! کامپایلر پاسکال که میدونم برای آرم هست. احتمالا کامپایلر بیسیک هم براش میشه گیر آورد.

      حالا چرا سراغ این دو تا زبون نمیرین؟ مشخصه همین حالا هم بدون شناخت کافی از نیاز ها و امکانات موجود AVR رو ول کردین و اومدین سراغ آرم.
      توصیه میکنم یک بار اول کل طرحتون رو روی کاغذ بیارین و بعد برین سراغ انتخاب جنس و ابزار.
      تازه ببینم به عنوان مثل مگه XMEGA چشه؟ اونم کارتون رو راه نمیندازه؟
      شاید الگوریتم و روش پیاده سازی اشتباهی انتخاب کرده باشین.

      علاوه بر تمام اینها صرف یادگیری چهار تا if و else قطار کردن که C نمیشه. باید به خودتون ثابت کنین که این زبون یک انتخاب بجا هست. اگر بعد از بررسی به این نتیجه رسیدین که بنده هم در خدمتم.

      دیدگاه


        #78
        پاسخ : آموزش زبان سی و کدویژن

        درسته اقا رضا ولی مشکل اصلی-زبان برنامه نویسی نیست.هدف اصلی یاد گرفتن C-فقط کار با ARM نیست.منبع اموزشی هم مهمه.من با C مشکل ندارم بلطف دوستان تا حدی یاد گرفتم و یه جورایی حس میکنم زبان شیرین تر و راحت تریه بر عکس چیزی که بعضی از دوستان میگن C خیلی سخته.
        فقط بعضی از نکات کلیدی هست که باعث پیچیدگی ظاهری این زبان میشه.بنظرم بهتره دوستان دست بدست هم بدن و اموزش C رو با جدیت ادامه بدن.
        اقا رضا و دیگر دوستان هم ایرادات رو برطرف کنن.
        با تشکر فراوان

        دیدگاه


          #79
          پاسخ : آموزش زبان سی و کدویژن

          تا الان والا چندین بار این قرار گذاشته شده که دوستان بیان اینجا و مشکلات خودشون رو مطرح کنن. همه موارد و سوالها هم خوشبختانه به جواب رسیده، اما دوستان همیشه از اینکه کدویژن نصب نمیشه و این مسائل می نالیدند، که واقعاً به نظر من دلیل منطقی نمی تونه باشه.
          دانش فنی تا به عمل تبدیل نشده، ذره ای ارزش نداره. اما بعضی وقت ها باید از دانش برای باز کردن مرزهای جدیدی در علم استفاده کرد، نه اینکه اونها رو صرفاً فقط به عمل تبدیل کرد.

          دیدگاه


            #80
            پاسخ : آموزش زبان سی و کدویژن

            خوب البته اقا رضا درست میگند
            چه لوزمی داره ما سی و کدویژن و سی شارپ و یاد بگیریم و حتی بعدش بریم و آرم و هم یاد بگیریم
            وقتی که می تونیم به جاش :NO:
            بیسیک و بسکام و ویژوال بیسیک و ایکس مگا رو جایگزین کنیم
            به نظر من هم خیلی بهتره وقتمون رو روی یکی بزاریمو اونو کامل یاد بگیریم تا اینکه بریمو چندتارو نیمه کاره یاد بگیریم
            اما یک مشکلی که باعث میشه ما ناچارا وقتمون رو روی چند تا بزاریم مربوط به شرایطی یه که واسه ما پیش میاد شما نگاه کنید به ما توی کاردانی بیسیک و بسکامو یاد دادند خوب خیلی عالی میشد اگر همین ها رو توی کارشناسی به ما در سطح بالاتر درس میدادند ولی خوب وقتی استاد میاد و سی رو اموزش میده باز امثالی مثل ما ناچاریم بریم و سی رو یاد بگیریم و اون زمانی رو که واسه بیسیک می تونیم بزاریم که بهتر یاد بیگیریمش ناچارا میریم و سی رو یاد میگیریم .
            من هم کدویژن و ول می کنم چون که به قول آقا رضا نیازم نیست من اگر هم یک روزی بخوام با ایکس مگا کار کنم میتونم با بسکام کار کنم و اگر هم روزی بخوام با آرم کار کنم کدویژن بدرد من نمیخوره و باید از یک کامپایلر دیگه استفاد ه کرد . ولی خوب میدونم باز مجبور میشم اینو یاد بگیرم . پس با اجازه ی دوستان اسم کدویژنو حذفش میکنم :mrgreen:
            مولا علی (ع) میفرمایند : آسوده باش , آستین هارا بالا بزن , بر خدا توکل کن , آنگاه خدا را خواهی دید که زودتر از تو دست به کار شده است .

            دیدگاه


              #81
              پاسخ : آموزش زبان سی

              سلام به همه دوستان
              داشتیم استفاده میکردیم :read:

              دیدگاه


                #82
                پاسخ : آموزش زبان سی

                سلام
                اینکه میشه با بسکام کار رو راه انداخت درست ولی من بشخصه از اینکه بجای بسکام c کار نکردم پشیمونم .
                یه مثال میزنم شما میتونید اسپانیایی یاد بگیرید ولی انگلیسی همه گیرتره و منابعشم بیشتره.
                اگر منابع آموزشی خوب وجود داشته باشه مشکل نرم افزار زیاد مهم نیست.
                بیشتر آموزشهایی که به روش پرسش و پاسخ درسایت وجود داره مسیر درست و کاملی طی نمی کنه.
                چون افراد سئوال کننده در یک سطح نیستن .
                این مدعیان در طلبش بی خبرانند
                آن را که خبر شد خبری باز نیامد

                دیدگاه


                  #83
                  پاسخ : آموزش زبان سی

                  نوشته اصلی توسط alielcr
                  سلام به همه دوستان
                  داشتیم استفاده میکردیم :read:
                  راستش دلیل اصلی که ولش کردم این پستو این بود که مدتی بدون سیستم شده بودم . :mrgreen:
                  یک دلیل دیگه که من این پستو راه انداختم این بود که همه مشارکت کنند ولی مشارکت خیلی کم بود و فقط بین 6 تا 8 نفر بیشتر نبود . :mrgreen:
                  به دلایلی دیگه فرصتممم کمتر شده . :mrgreen:
                  یه دلیل دیگه به خاطر کدویژن بود که مارو کشت :mrgreen:
                  تازه شما بازهم میتونی استفاده کنی اگر سوالی دارین بپرسین دوستان راهنمایی تون می کنند . :nice: من به اندازه ی خودم در خدمتم
                  البته من این آموزشو ول نمی کنم باز هم مخ آقا رضا و آقا حامد و به کار میگیرم همین طوری ولشون نمی کنم . سعی هم می کنم آموزش ها رو ادامه بدم . تا مشکلات برطرف بشه .

                  نوشته اصلی توسط Babak1367
                  سلام
                  اینکه میشه با بسکام کار رو راه انداخت درست ولی من بشخصه از اینکه بجای بسکام c کار نکردم پشیمونم .
                  یه مثال میزنم شما میتونید اسپانیایی یاد بگیرید ولی انگلیسی همه گیرتره و منابعشم بیشتره.
                  اگر منابع آموزشی خوب وجود داشته باشه مشکل نرم افزار زیاد مهم نیست.
                  بیشتر آموزشهایی که به روش پرسش و پاسخ درسایت وجود داره مسیر درست و کاملی طی نمی کنه.
                  چون افراد سئوال کننده در یک سطح نیستن .
                  بله شما هم درست میگید
                  مولا علی (ع) میفرمایند : آسوده باش , آستین هارا بالا بزن , بر خدا توکل کن , آنگاه خدا را خواهی دید که زودتر از تو دست به کار شده است .

                  دیدگاه


                    #84
                    پاسخ : آموزش زبان سی

                    جناب آقا بابک!
                    علاوه بر موردی که قید کردین یک مشکل اساسی دیگه هم هست. زبان C رو خیلی ها کار میکنن همینطور #C. ولی استفاده درست از این زبانها احتیاج به یک پیش زمینه قوی در برنامه نویسی و شناخت ساختار سیستم و نحوه تولید کد داره. جسارته. ولی شنیدین میگن "تیغ در کف زنگی مست"؟ این زیان C میتونه باشه. من اغلب موارد کارم رو با اشاره گر ها پیش میبرم. ولی خیلی ها از این مورد شاکی هستن و یک سری دستورات رو بدون طراحی اولیه و نگاه به آینده استفاده میکنن. بعد از یک مدت هم از زیر بار سنگین نگهداری و توسعه در میرن.
                    حالا دیگه مواردی مثل طراحی های بر مبنای OOP دیگه بگذریم.
                    اینا رو میشه موردی راهنمایی کرد اما نباید انتظار داشت که بشه در فروم ها کامل بهش پرداخت.
                    شما حتی کد کسانی رو که با بیسیک کار میکنن ببینین؛ در اغلب موارد با اسپاگتی و کد های مزین شده به چهار پنج خط کامنت برمیخورین. و تازه میبینین که اغلب از دست زبون مینالن. در صورتیکه همون بیسیک هم میتونه خیلی از کارها رو براحتی راه بندازه.
                    الان فعلا مد ARM هست و هنوز تا حدودی AVR. ولی من مواردی رو سراغ دارم که فقط یک 8051 میتونه براحتی از پس کار بربیاد و ARM اگر نگیم زیرش میزاد؛ مشکل اساسی پیدا میکنه.

                    دیدگاه


                      #85
                      پاسخ : آموزش زبان سی

                      نوشته اصلی توسط رضا آقازاده
                      جناب آقا بابک!
                      علاوه بر موردی که قید کردین یک مشکل اساسی دیگه هم هست. زبان C رو خیلی ها کار میکنن همینطور #C. ولی استفاده درست از این زبانها احتیاج به یک پیش زمینه قوی در برنامه نویسی و شناخت ساختار سیستم و نحوه تولید کد داره. جسارته. ولی شنیدین میگن "تیغ در کف زنگی مست"؟ این زیان C میتونه باشه. من اغلب موارد کارم رو با اشاره گر ها پیش میبرم. ولی خیلی ها از این مورد شاکی هستن و یک سری دستورات رو بدون طراحی اولیه و نگاه به آینده استفاده میکنن. بعد از یک مدت هم از زیر بار سنگین نگهداری و توسعه در میرن.
                      حالا دیگه مواردی مثل طراحی های بر مبنای OOP دیگه بگذریم.
                      اینا رو میشه موردی راهنمایی کرد اما نباید انتظار داشت که بشه در فروم ها کامل بهش پرداخت.
                      شما حتی کد کسانی رو که با بیسیک کار میکنن ببینین؛ در اغلب موارد با اسپاگتی و کد های مزین شده به چهار پنج خط کامنت برمیخورین. و تازه میبینین که اغلب از دست زبون مینالن. در صورتیکه همون بیسیک هم میتونه خیلی از کارها رو براحتی راه بندازه.
                      الان فعلا مد ARM هست و هنوز تا حدودی AVR. ولی من مواردی رو سراغ دارم که فقط یک 8051 میتونه براحتی از پس کار بربیاد و ARM اگر نگیم زیرش میزاد؛ مشکل اساسی پیدا میکنه.
                      بله درست میفرمایید اما من خیلی برام پیش آمده مشتری ازم تغییر کاربری خواسته و روی بردی باید کار میکردم
                      که میکروش میتونه از هر خانواده ای باشه .
                      و به شخصه باگ های عجیب غریبی در کار با میکروهای pic 12 و attiny با بیسیک دیدم و مجبور شدم دست و پا شکسته
                      با C کارم رو راه بندازم .
                      همین تازگی در تاپیک (راه اندازی موتور های براشلس) بچه ها برنامه ای کاربردی با C قرار دادن ومن ازش سر در نمییارم
                      و اینگونه برنامه ها به زبان بیسیک وجود نداره.
                      پس ما در بسکام هم قوی نمی شیم چون نمونه های قدرتمند رو به c می نویسند و سازندگان میکرو مثال هاشونو
                      به C مینویسن.میبینید ما عمرمونو روی زبانی گذاشتیم که جای پیشرفت نداره.
                      این مدعیان در طلبش بی خبرانند
                      آن را که خبر شد خبری باز نیامد

                      دیدگاه


                        #86
                        پاسخ : آموزش زبان سی

                        خوب اگه اینجوره که باقی حرفها کشکه. جای انتخاب نیست. توصیه میکنم از خوندن کتاب ریچی شروع کنین. اما اگر دیدین به دردسر میفتین هر کتاب دیگه ای هم که راحت باشین مشکلی نیست.
                        مشکلی هم پیش اومد؛ بنده خدمتتون هستم.

                        دیدگاه


                          #87
                          پاسخ : آموزش زبان سی

                          سلام
                          یک سوالی داشتم یعنی 2 تا سوال داشتم
                          # include <iostream.h>
                          # include <conio.h>
                          int Fib (int);
                          int main(){
                          int n ;
                          cout<<" tedade jomalate fib ";
                          cin>>n;
                          Fib(n) ;
                          getch();
                          return 0 ;
                          }
                          int Fib (int n) {
                          if (n==1 || n==2){
                          return 1 ;
                          cout<<"1";
                          }
                          else{
                          return (Fib(n-1)+Fib(n-2)) ;
                          cout << Fib (n-1)+Fib(n-2);
                          }
                          }
                          سلام برنامه ی بالا رو استادم نوشته ولی فکر کنم اشتباه نوشته
                          کارش اینه که n جمله ی دنباله ی فیبونانچی رو در خروجی چاپ کنه ولی هیچی چاپ نمی کنه توی برنامه که نوشته ام
                          دنباله ی فیبونانچی به این شکله
                          .... 8 , 5 , 3 , 2 , 1 , 1 یعنی عدد بعدی مجموع 2 عدد قبلی است
                          اما سوال اصلی اینه که من یک چیزی رو هنوز درست نفهمیده ام اونم در مورد اوناییه که با رنگ قرمز نشون داده ام توی برنامه
                          من هنوز با این return مشکل دارم
                          میدونم که return 0 یعنی اتمام برنامه
                          ولی توی بعضی مواقع به جای صفر مثلا می گذارند 1 یا یک چیزه دیگه یا مثلا در یک برنامه که تعداد اعداد 28 رو میشمرد نوشته بود return cont28 در صورتی که cont28 یک متغیر بود .
                          لطفا این return و واسه من خوب شرح بدید ممنون .
                          در ضمن استاد توی برنامه یعنی به حساب خودش هم از توابع بازگشتی استفاده کرده .
                          مولا علی (ع) میفرمایند : آسوده باش , آستین هارا بالا بزن , بر خدا توکل کن , آنگاه خدا را خواهی دید که زودتر از تو دست به کار شده است .

                          دیدگاه


                            #88
                            پاسخ : پاسخ : آموزش زبان سی

                            نوشته اصلی توسط سید مصطفی طبسی
                            سلام
                            یک سوالی داشتم یعنی 2 تا سوال داشتم
                            # include <iostream.h>
                            # include <conio.h>
                            int Fib (int);
                            int main(){
                            int n ;
                            cout<<" tedade jomalate fib ";
                            cin>>n;
                            Fib(n) ;
                            getch();
                            return 0 ;
                            }
                            int Fib (int n) {
                            if (n==1 || n==2){
                            return 1 ;
                            cout<<"1";
                            }
                            else{
                            return (Fib(n-1)+Fib(n-2)) ;
                            cout << Fib (n-1)+Fib(n-2);
                            }
                            }
                            سلام برنامه ی بالا رو استادم نوشته ولی فکر کنم اشتباه نوشته
                            کارش اینه که n جمله ی دنباله ی فیبونانچی رو در خروجی چاپ کنه ولی هیچی چاپ نمی کنه توی برنامه که نوشته ام
                            دنباله ی فیبونانچی به این شکله
                            .... 8 , 5 , 3 , 2 , 1 , 1 یعنی عدد بعدی مجموع 2 عدد قبلی است
                            اما سوال اصلی اینه که من یک چیزی رو هنوز درست نفهمیده ام اونم در مورد اوناییه که با رنگ قرمز نشون داده ام توی برنامه
                            من هنوز با این return مشکل دارم
                            میدونم که return 0 یعنی اتمام برنامه
                            ولی توی بعضی مواقع به جای صفر مثلا می گذارند 1 یا یک چیزه دیگه یا مثلا در یک برنامه که تعداد اعداد 28 رو میشمرد نوشته بود return cont28 در صورتی که cont28 یک متغیر بود .
                            لطفا این return و واسه من خوب شرح بدید ممنون .
                            در ضمن استاد توی برنامه یعنی به حساب خودش هم از توابع بازگشتی استفاده کرده .
                            برنامه تقریباً درسته، اما همون طور که انتظار میره یه ایراد کوچیک داره که همون باعث میشه اجرا نشه. البته من نتونستم اون رو تست کنم، اما توضیحاتی که میدم قاعدتاً باید مساله رو حل کنه. آخه من متاسفانه الان کامپایلر c استاندارد ندارم، اما شما اگه turbo c رو دارید خوشحال میشم اینجا قرار بدید تا همه استفاده کنند.

                            اما در مورد قضیه return:

                            وقتی شما تابع رو از نوعی به غیر از void تعریف می کنید، در واقع به کامپایلر می فهمونید که این تابع زمانی که اجرا شد و به اتمام رسید، مقداری رو بر می گردونه. توابع void توابعی هستند که هیچ مقداری رو بر نمی گردونن. اگه مفهوم برگردوندن رو درست متوجه نشدید بفرمائید تا دقیق تر بگم.

                            برای اینکه در انتهای این توابع شما مقداری رو بر گردونید، باید از دستور return استفاده کنید. معمول استفاده از این دستور به این شکل هست:

                            1- اگه بخواید اعلام کنید که تابع درست اجرا شده، مقدار 0 رو بر می گردونید.
                            2- اگر بخواید اعلام کنید که اجرای تابع با خطا بوده، مقدار 1 رو بر می گردونید.
                            3- اگر بخواید مقدار دیگه ای رو (اعم از یه عدد، یا یه کاراکتر، یا هر چیز دیگه) برگردونید، اون مقدار رو می زنید.

                            حالا من فکر می کنم مشکل برنامه شما این باشه که:
                            کد:
                            if (n==1 || n==2){
                            return 1 ;
                            cout<<"1";
                            اولاً که return 1 رو آخرین خط تابع قرار نداده، بنابراین نباید انتظار داشته باشیم که خط cout اصلاً اجرا بشه. این رو ببینید:
                            کد:
                            # include <iostream.h>
                            # include <conio.h>
                            int Fib (int);
                            int main(){
                            	int n ;
                            	cout<<" tedade jomalate fib ";
                            	cin>>n;
                            	Fib(n) ;
                            	getch();
                            	return 0 ;
                            }
                            
                            int Fib (int n) {
                            	if (n==1 || n==2){
                            		cout<<"1";
                            		return 0 ;
                            	}
                            	else{
                            		cout << Fib (n-1)+Fib(n-2);
                            		return 0;
                            	}
                            }

                            این طوری باید جواب نشون داده بشه. البته این کد رو میشه قشنگ تر هم نوشت، که اگه دوست داشته باشید براتون می نویسم. اما مشکل دیگه ای هم وجود داره که به همون دلیل من نگفتم برنامتون درسته. اون هم اینه که در واقع این برنامه اصلاً کاری که شما می خواید رو انجام نمیده!!! :NO:
                            این برنامه جمله n ام دنباله فیبوناتچی رو به شما میگه. نه n جمله اول دنباله فیبوناتچی رو. برای اینکه اون رو درست کنید باید یه حلقه بهش اضافه کنید تا از عدد n که کاربر وارد می کنه تا 1 عقب عقب بشمره (یا برعکس، از 1 تا n بشمره) و به ازای تک تک اون عددها، جمله متناظر فیبوناتچی رو توی خروجی قرار بده.

                            میتونستم کدش رو اینجا بنویسم، اما فکر کنم خودتون اول یه مقدار روش فکر کنید بهتر باشه....
                            دانش فنی تا به عمل تبدیل نشده، ذره ای ارزش نداره. اما بعضی وقت ها باید از دانش برای باز کردن مرزهای جدیدی در علم استفاده کرد، نه اینکه اونها رو صرفاً فقط به عمل تبدیل کرد.

                            دیدگاه


                              #89
                              پاسخ : پاسخ : پاسخ : آموزش زبان سی

                              سلام و سپاس
                              وقتی شما تابع رو از نوعی به غیر از void تعریف می کنید، در واقع به کامپایلر می فهمونید که این تابع زمانی که اجرا شد و به اتمام رسید، مقداری رو بر می گردونه. توابع void توابعی هستند که هیچ مقداری رو بر نمی گردونن. اگه مفهوم برگردوندن رو درست متوجه نشدید بفرمائید تا دقیق تر بگم.

                              برای اینکه در انتهای این توابع شما مقداری رو بر گردونید، باید از دستور return استفاده کنید. معمول استفاده از این دستور به این شکل هست:

                              1- اگه بخواید اعلام کنید که تابع درست اجرا شده، مقدار 0 رو بر می گردونید.
                              2- اگر بخواید اعلام کنید که اجرای تابع با خطا بوده، مقدار 1 رو بر می گردونید.
                              3- اگر بخواید مقدار دیگه ای رو (اعم از یه عدد، یا یه کاراکتر، یا هر چیز دیگه) برگردونید، اون مقدار رو می زنید.
                              میشه بیشتر این برگردوندنو توضیح بدید
                              اصلا چرا باید بر گردونیم و چطوری بفهمیم که باید مثلا اون کاراکتر یا اون عدد رو بر گردونیم
                              آیا اگر همیشه صفر و برگردونیم اشتباه میشه
                              آیا میشه همیشه از تابع void استفاده کرد یا نه .
                              برنامه ی شما رو گذاشتم ولی کار نکرد مثلا یک عدد رو زدم تعدادی فقط صفر و یک نوشت :eek:
                              اگر بخوام می تونم خودم برنامه رو بنویسم مشکل من توی همین دستور returne
                              توی توابع بازگشتی هم کمی مشکل دارم اخه یعنی استادمون می خواسته با توابع بازگشتی بنویسه البته این نوع اشتباهات واسه درس برنامه سازی واسه استاد ها پیش میاد که اشتباه مثلا برنامه رو بنویسند ولی خوب دیگه برنامه رو استاد اشتباه نوشته .
                              مولا علی (ع) میفرمایند : آسوده باش , آستین هارا بالا بزن , بر خدا توکل کن , آنگاه خدا را خواهی دید که زودتر از تو دست به کار شده است .

                              دیدگاه


                                #90
                                پاسخ : پاسخ : پاسخ : آموزش زبان سی

                                نوشته اصلی توسط سید مصطفی طبسی
                                میشه بیشتر این برگردوندنو توضیح بدید
                                اصلا چرا باید بر گردونیم و چطوری بفهمیم که باید مثلا اون کاراکتر یا اون عدد رو بر گردونیم
                                آیا اگر همیشه صفر و برگردونیم اشتباه میشه
                                آیا میشه همیشه از تابع void استفاده کرد یا نه .
                                بله. اول از همه بگم که برگردوندن اصلاً کار اجباری ای نیست. من خودم معمولاً توی کدهایی که می نویسم (معمولاً البته تو کدویژن) از تابع های void استفاده می کنم. اما بعضی وقت ها برای کوتاه کردن کد و یا کارهای کنترلی نیاز میشه که تابع مقداری رو برگردونه.

                                اما یعنی چی برگردوندن. یه مثال می زنم. فرض کنیم ما تابعی داریم که کار اون جمع زدن دو عدد هست. مثلاً:
                                کد:
                                sum (int a,int b){
                                	int result = 0;
                                	result = a+b;
                                }

                                در مورد اینکه تابع چه نوعی داره الان می گم:

                                1- اگه تابع از نوع int باشه:
                                گفتم که این تابع باید یه مقدار رو برگردونه. حالا فرض کن بدنه اصلی تابعت اینطوریه:
                                کد:
                                int main (){
                                	...
                                	...
                                	cout << sum(a,b);
                                
                                getch;
                                
                                return 0;
                                }

                                چند خط اول که مربوط به گرفتن دوتا مقدار از کاربر هست رو ننوشتم. اما این برنامه اگه با تابع sum که از نوع int هست اجرا بشه چطور میشه:

                                وقتی که به خط cout میرسیم، کامپایلر عبارتی که بعد از >> نوشته شده رو نمایش میده. اما این مقدار چیه؟ تابع sum!

                                قاعدتاً نباید انتظار داشته باشیم که این ورداره تو خروجی بنویسه (sum (a,b. بنابراین وقتی به این خط میرسه، کامپایلر تابع sum رو اجرا می کنه.

                                داخل تابع همون طور که نوشتم، دو تا عدد با هم دیگه جمع میشن، و در result ذخیره میشن. خب. فرض کن این کار هم انجام شد. حالا کامپایلر از اجرای تابع بر می گرده. اما قرار بود چیزی رو پرینت کنه. چی رو؟؟؟؟؟؟؟؟؟؟

                                اون چیزی که پرینت میشه، مقدار تابع هست. یعنی زمانی که تابع اجرا میشه و تموم میشه تابع یه مقداری می گیره. (یادت باشه که از اول فرض کردیم تابع از نوع int هست).

                                بنابراین باید آخر تعریف تابع مشخص کنیم که چه مقداری رو دوست داریم داخل تابع قرار بگیره. اینجاست که باید از return استفاده کنیم و بنویسیم:
                                کد:
                                return (result);

                                این طوری به تابع میگیم آخر کار مقدار تابع رو برابر result قرار بده. این مقدار رو می تونی هر چیزی قرار بدی. هر چی باشه، بر اساس کد بدنه اصلی برنامه همون روی صفحه نشون داده میشه.

                                2- اگر تابع از نوع void باشه:

                                گفته بودم که این نوع تابع مقداری رو بر نمی گردونه. بنابراین اگر بدنه اصلی برنامه مثل حالت قبلی باشه، cout چیزی رو در خروجی تابع نمی بینه تا نشون بده. پس باید دستور cout رو ببریم داخل تعریف تابع. یعنی تعریف تابع این شکلی میشه:
                                کد:
                                void sum (int a,int b){
                                	int result = 0;
                                	result = a+b;
                                	cout<<result;
                                }

                                و بدنه اصلی برنامه هم این شکلی میشه:

                                کد:
                                int main (){
                                	...
                                	...
                                	sum(a,b);
                                
                                getch;
                                
                                return 0;
                                }

                                اینجا دستور نمایش داخل خود تابع هست، و ما فقط کافیه تابع رو فراخوانی کنیم.


                                فکر کنم دیگه همه چیز رو گفتم. فقط یه چیزی، اون هم این که انتخاب این که تابعت از چه نوعی باشه با خودته، و به کدی که می نویسی بستگی داره.

                                در ضمن در مورد فیبوناتچی هم یادم رفت بنویسم. این صفحه رو نگاه کن، کلی کد در موردش نوشته شده. فکر می کنم یه سریش بازگشتی هم هست. متاسفانه الان c ندارم که تست کنم. اما اگه از این صفحه کارت راه نیفتاد، از یه جایی دانلود می کنم.

                                http://bytes.com/topic/c/answers/519162-fibonacci-series
                                دانش فنی تا به عمل تبدیل نشده، ذره ای ارزش نداره. اما بعضی وقت ها باید از دانش برای باز کردن مرزهای جدیدی در علم استفاده کرد، نه اینکه اونها رو صرفاً فقط به عمل تبدیل کرد.

                                دیدگاه

                                لطفا صبر کنید...
                                X