اطلاعیه

Collapse
No announcement yet.

این پیغام توی کدویژن چیه؟

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

    این پیغام توی کدویژن چیه؟

    این پیغام توی کدویژن چیه؟برای تابعها میده
    declaration syntax error

    #2
    پاسخ : این پیغام توی کدویژن چیه؟

    میگه نحوه تعریف تابعتون غلطه

    دیدگاه


      #3
      پاسخ : این پیغام توی کدویژن چیه؟

      طبق جزوه و کتاب زبان c نوشتم
      نمیدونم چرا

      دیدگاه


        #4
        پاسخ : این پیغام توی کدویژن چیه؟

        مثلا این پیش الگو تابع

        [tt]void program(char x,char &y1[8],char &y2[8],char &y3[8])[/tt]


        اینم خود تابع

        [tt]

        program(char x,char &y1[8],char &y2[8],char &y3[8])
        {
        while(PIND.1==0) //on or off rele
        {
        if(PIND.0==1)
        {
        y1[x]=1;
        on();
        }
        esle
        {
        y1[x]=0;
        off();
        }
        }
        while(PIND.1==0 || y1[x]==0) //value up
        {
        y2[x]=key()
        display(y2[x]);
        }
        while(PIND.1==0 || y1[x]==0) //value down
        {
        y3[x]=key()
        display(y3[x]);
        }
        }
        [/tt]

        این تابعی که توی برنامه استفاده کردم



        [tt]
        program(valuepro,positive_rele[8],upkey[8],downkey[8]);
        [/tt]
        لطفا کمک کنید

        دیدگاه


          #5
          پاسخ : این پیغام توی کدویژن چیه؟

          اوه اوه اینکه کلکسیون خطاست

          اولش که به & های پروتوتایپش گیر میده ...

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

          ضمنا بهتره وقتی کدتون رو پست میکنید اون رو داخل تگ کد قرار بدید

          دیدگاه


            #6
            پاسخ : این پیغام توی کدویژن چیه؟

            سلام
            تعریف تابع رو باید در بالای mainصورت بدین و در انتهای آن ; حتما باید قرار داشته باشه

            کد:
            void program(char x,char &y1[8],char &y2[8],char &y3[8])

            برای ارسال یک آرایه نیازی نیست که مقدار آرایه رو در ارسال تعیین کنین یعنی این دستور رو جایگزین کنین

            کد:
            program(valuepro,positive_rele,upkey,downkey);

            این تابعتون هم چک و تصحیح کردم فکر نکنم مشکل دیگه داشته باشه توابع دیگه هم چک و بررسی کنین
            کد:
            void program(char x,char &y1[8],char &y2[8],char &y3[8])
            {
              while(PIND.1==0)     //on or off rele
              {
               if(PIND.0==1)
               {
                 y1=1;
            
            
                 on();
               }
               esle
               {
                 y1=0;
                 off();
               } 
              }
              while(PIND.1==0 || y1==0)    //value up
            
            
              {
               y2=key();
            
            
               display(y2);
            
              }
              while(PIND.1==0 || y1==0)    //value down
            
            
              {
               y3=key();
            
            
               display(y3);
            
            
              }    
            }
            هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

            دیدگاه


              #7
              پاسخ : این پیغام توی کدویژن چیه؟

              کاش منظورتون رو نوشتن تابع هم مینوشتین تا بشه بهتر راهنمایی کرد اما بطور کلی:
              1- شما در زبان سی نمیتونید کل آرایه رو بعنوان آرگومان به تابع ارسال کنید. برای ارسال آرایه تنها راه حل استفاد از اشاره گرهاست یعنی شما آدرس یکی از خونه های آرایه رو بعلاوه تعداد داده مورد نایز تابع رو براش ارسال میکنید
              2- وقتی جلوی کلمات کلیدی تعریف داده مثل int, char از امپرسند یا همون & (که بیشتر بهش میگیم And) استفاده کنید در واقع دارید یک ارجاع به متغیر تعریف میکنید (ارجاع در واقع نام دیگری برای یک متغیر است و با اشاره گر و همچنین تعریف متغیر فرق دارد )

              دیدگاه


                #8
                پاسخ : این پیغام توی کدویژن چیه؟

                نوشته اصلی توسط baby_1
                سلام
                تعریف تابع رو باید در بالای mainصورت بدین و در انتهای آن ; حتما باید قرار داشته باشه

                کد:
                void program(char x,char &y1[8],char &y2[8],char &y3[8])

                برای ارسال یک آرایه نیازی نیست که مقدار آرایه رو در ارسال تعیین کنین یعنی این دستور رو جایگزین کنین

                کد:
                program(valuepro,positive_rele,upkey,downkey);

                این تابعتون هم چک و تصحیح کردم فکر نکنم مشکل دیگه داشته باشه توابع دیگه هم چک و بررسی کنین
                کد:
                
                void program(char x,char &y1[8],char &y2[8],char &y3[8])
                
                
                
                
                
                {
                  while(PIND.1==0)     //on or off rele
                  {
                   if(PIND.0==1)
                   {
                     y1=1;
                
                
                     on();
                   }
                   esle
                   {
                     y1=0;
                     off();
                   } 
                  }
                  while(PIND.1==0 || y1==0)    //value up
                
                
                  {
                   y2=key();
                
                
                   display(y2);
                
                  }
                  while(PIND.1==0 || y1==0)    //value down
                
                
                  {
                   y3=key();
                
                
                   display(y3);
                
                
                  }    
                }

                مشکلش چیه؟
                مگه توی زیان c اینطور تابع نمینویستند؟

                دیدگاه


                  #9
                  پاسخ : این پیغام توی کدویژن چیه؟

                  من تابعی میخوام که 1ورودی و 3خروجی داشته باشه
                  ورودی شماره هر خانه ارایه است که با توجه به عدد ورودی گرفته شده که تعیین کننده ی خانه های ارایه های 3خروجی که قراره برگشت داده بشه ارایه ها توسط تابع key در این تابع ارایه های 3خروجی پر شوند

                  دیدگاه


                    #10
                    پاسخ : این پیغام توی کدویژن چیه؟

                    نوشته اصلی توسط محمد مینائیان
                    من تابعی میخوام که 1ورودی و 3خروجی داشته باشه
                    ورودی شماره هر خانه ارایه است که با توجه به عدد ورودی گرفته شده که تعیین کننده ی خانه های ارایه های 3خروجی که قراره برگشت داده بشه ارایه ها توسط تابع key در این تابع ارایه های 3خروجی پر شوند
                    oo:
                    خداییش تنها چیزی که فهمیدم خط اول بود!

                    دیدگاه


                      #11
                      پاسخ : این پیغام توی کدویژن چیه؟

                      mojalan جان برنامه من هیچی
                      شما اصول تابع کهچند ورودی و چند خروجی داره را اصولی بنویسید؟

                      دیدگاه


                        #12
                        پاسخ : این پیغام توی کدویژن چیه؟

                        باشه. خلاصه درس توابع از زبان C :
                        1- مهم نیست تابع شما چند ورودی داره ؛ هر چند تا بود به ترتیب با مشخص کردن نوع اون جلوی اسم تابع و داخل پرانتز میاد. توجه داشته باشید که اگه بخواین مقدار المانهای یک آرایه رو به تابع بعنوان ورودی بدین راه حل استفاده از اشاره گر هاست یعنی شما آدرس اون خونه از آرایه و نوع مقادیر موجود در آرایه رو براش مشخص میکنید. این کار برای استفاده از مقادیر تکی هم امکانپذیره اگه که شما نخواین اون مقدار به ورودی تابع کپی بشه (سرعت بیشتر بشه مثلا یا اینکه تغییرات درون تابع مستقیما روی متغیر انجام بشه) چند مثال

                        func(int i)
                        func(char ch , float f)
                        func(int b, int* Array, int count)
                        func(int* myint)

                        اولین تابع مقدار یک عدد صحیح رو میگیره و پردازش میکنه. در اینجا وقتی تابع فراخوانی بشه ابتدا از مقدار اصلی عدد صحیحی که در آرگومان تابع موقع فراخوانی استفاده شده یه کپی گرفته میشهو داخل متغیر i ریخته میشه. توجه داشته باشیم که پردازش روی i انجام میشه نه روی متغیری که موقع فراخوانی داخل پرانتز اسمشو نوشتیم
                        دومین تابع دو تا آرگومان داره. اولی یه کاراکتر و دومی یه عدد شناور با دقت کم
                        سومین تابع سه تا آرگومان داره. فرض بر این بوده که در اینجا میخواستیم مقادیر یک آرایه رو به تابع انتقال بدیم. (برای جلوگیری از هزینه سربار کپی المانهای ارایه به آرگومان تابع ؛ از اشاره گر استفاده شده و این تنها راهه). ما موقع استفاده از تابع آدرس یکی از خونه های آرایه ای رو که میخوایم انتقال بدیم رو در آرگومان دوم مینویسیم و عموما در اینگونه موارد تعداد داده های مورد نیاز هم بعنوان آرگومان بعدی (در اینجام متغیر count) هم ارسال میشه . نکته اصلی اینه که چون آدرس آرایه ارسال شده دیگه از مقادیر اون در هنگام فراخواین استفاده نمیشه و تابع مستقیما روی داده های آرایه اصلی پردازش رو انجام میده
                        تابع چهارم هم که فقط آدرس یه متغیر صحیح رو نیاز داره

                        و اما برای خروجی تابع سه حالت متصوره1- بدون خروجی2- یک خروجی3-چند خروجی
                        حالت اول که خروجی تابع با کلمه void مشخص میشه
                        در حالت دوم تابع با کلمه کلیدی return یک مقدار رو برمیگردونه. این مقدار در یک متغیر موقت که در اسم تابع هست !!! قرار میگیره. مثلا وقتی مینویسیم

                        y=func(i);

                        مقدار خروجی موقتی تابع که در اسم func قرار گرفته به داخل متغیر y البته بعد از اجرای تابع کپی میشه و اون متغیر موقتی هم پاک میشه (یعنی حافظه اشغال شدش به سیستم برمیگرده)
                        و اما وقتی نیاز به چند متغیر بعنوان خروجی داریم (مثلا داخل تابع یه آرایه ایجاد شده و ما میخوایم اون مقادیر رو برگردونیم) دو راه داریم. یا اینکه اون مقادیر رو داخل تابع درون یه آرایه میریزیم و آدرس شروع اون آرایه رو (با فرض اینکه میدونیم آرایه چد تا مقدار برمیگردونه) میذاریم
                        مثلا اعلان تابع اینجوی میشه

                        int* func(char ch);

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

                        دیدگاه


                          #13
                          پاسخ : این پیغام توی کدویژن چیه؟

                          آقا محمد اگه هنوز مشکلت حل نشده دو راه پیشنهاد میکنم :
                          1- بخش توابع کتابهای سی رو بخونی مثلا جعفرنژاد رو
                          2- خواسته واقعیت از تابع رو دوباره بنویسی تا الگوش رو برات بنویسم

                          دیدگاه


                            #14
                            پاسخ : این پیغام توی کدویژن چیه؟

                            نوشته اصلی توسط mojalan
                            باشه. خلاصه درس توابع از زبان C :
                            1- مهم نیست تابع شما چند ورودی داره ؛ هر چند تا بود به ترتیب با مشخص کردن نوع اون جلوی اسم تابع و داخل پرانتز میاد. توجه داشته باشید که اگه بخواین مقدار المانهای یک آرایه رو به تابع بعنوان ورودی بدین راه حل استفاده از اشاره گر هاست یعنی شما آدرس اون خونه از آرایه و نوع مقادیر موجود در آرایه رو براش مشخص میکنید. این کار برای استفاده از مقادیر تکی هم امکانپذیره اگه که شما نخواین اون مقدار به ورودی تابع کپی بشه (سرعت بیشتر بشه مثلا یا اینکه تغییرات درون تابع مستقیما روی متغیر انجام بشه) چند مثال

                            func(int i)
                            func(char ch , float f)
                            func(int b, int* Array, int count)
                            func(int* myint)

                            اولین تابع مقدار یک عدد صحیح رو میگیره و پردازش میکنه. در اینجا وقتی تابع فراخوانی بشه ابتدا از مقدار اصلی عدد صحیحی که در آرگومان تابع موقع فراخوانی استفاده شده یه کپی گرفته میشهو داخل متغیر i ریخته میشه. توجه داشته باشیم که پردازش روی i انجام میشه نه روی متغیری که موقع فراخوانی داخل پرانتز اسمشو نوشتیم
                            دومین تابع دو تا آرگومان داره. اولی یه کاراکتر و دومی یه عدد شناور با دقت کم
                            سومین تابع سه تا آرگومان داره. فرض بر این بوده که در اینجا میخواستیم مقادیر یک آرایه رو به تابع انتقال بدیم. (برای جلوگیری از هزینه سربار کپی المانهای ارایه به آرگومان تابع ؛ از اشاره گر استفاده شده و این تنها راهه). ما موقع استفاده از تابع آدرس یکی از خونه های آرایه ای رو که میخوایم انتقال بدیم رو در آرگومان دوم مینویسیم و عموما در اینگونه موارد تعداد داده های مورد نیاز هم بعنوان آرگومان بعدی (در اینجام متغیر count) هم ارسال میشه . نکته اصلی اینه که چون آدرس آرایه ارسال شده دیگه از مقادیر اون در هنگام فراخواین استفاده نمیشه و تابع مستقیما روی داده های آرایه اصلی پردازش رو انجام میده
                            تابع چهارم هم که فقط آدرس یه متغیر صحیح رو نیاز داره

                            و اما برای خروجی تابع سه حالت متصوره1- بدون خروجی2- یک خروجی3-چند خروجی
                            حالت اول که خروجی تابع با کلمه void مشخص میشه
                            در حالت دوم تابع با کلمه کلیدی return یک مقدار رو برمیگردونه. این مقدار در یک متغیر موقت که در اسم تابع هست !!! قرار میگیره. مثلا وقتی مینویسیم

                            y=func(i);

                            مقدار خروجی موقتی تابع که در اسم func قرار گرفته به داخل متغیر y البته بعد از اجرای تابع کپی میشه و اون متغیر موقتی هم پاک میشه (یعنی حافظه اشغال شدش به سیستم برمیگرده)
                            و اما وقتی نیاز به چند متغیر بعنوان خروجی داریم (مثلا داخل تابع یه آرایه ایجاد شده و ما میخوایم اون مقادیر رو برگردونیم) دو راه داریم. یا اینکه اون مقادیر رو داخل تابع درون یه آرایه میریزیم و آدرس شروع اون آرایه رو (با فرض اینکه میدونیم آرایه چد تا مقدار برمیگردونه) میذاریم
                            مثلا اعلان تابع اینجوی میشه

                            int* func(char ch);

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

                            دیدگاه

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