اطلاعیه

Collapse
No announcement yet.

تابع (زیر برنامه ) عدد صفر بر میگرداند

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

    تابع (زیر برنامه ) عدد صفر بر میگرداند

    سلام
    میخواهم یه تابع ( زیر برنامه ) داشته باشم که وقتی صداش میزنیم طبق یه عملیات به ما یک عدد برگرداند
    در برنامه زیر عدد صفر بر میگردد دلیلش پی میباشد
    1#include <Keypad.h>
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(0,1,3,4,5,6);
    const byte ROWS = 3; // Four rows
    const byte COLS = 3; // Three columns
    // Define the Keymap
    char keys[ROWS][COLS] = {
    {2,9,6},
    {10,3,5},
    {1,7,4},

    };
    int f=0;
    byte rowPins[ROWS] = { 13, 11, 10 };
    byte colPins[COLS] = { 9, 8, 7 };
    Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
    #define ledpin 12
    void farman(int a , int b);
    void setup()
    {
    pinMode(ledpin,OUTPUT);
    digitalWrite(ledpin, HIGH);
    lcd.begin(16,2);
    }
    void loop()
    {

    word key = kpd.waitForKey();
    if(key)
    {
    switch(key)
    {
    case 10 : int a,b ;farman (a,b);f=a*2;lcd.clear();lcd.print(f);break;
    case 1 : farman (a,b);f=a*3;lcd.clear();lcd.print(f);break;
    default:break;
    }

    }
    }
    void farman (int a, int b)
    {
    word k = kpd.waitForKey();
    if(k)
    {
    a=k;
    return a;
    }

    }


    #2
    پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

    نوشته اصلی توسط elmvafan نمایش پست ها
    سلام
    میخواهم یه تابع ( زیر برنامه ) داشته باشم که وقتی صداش میزنیم طبق یه عملیات به ما یک عدد برگرداند
    در برنامه زیر عدد صفر بر میگردد دلیلش پی میباشد
    1#include <Keypad.h>
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(0,1,3,4,5,6);
    const byte ROWS = 3; // Four rows
    const byte COLS = 3; // Three columns
    // Define the Keymap
    char keys[ROWS][COLS] = {
    {2,9,6},
    {10,3,5},
    {1,7,4},

    };
    int f=0;
    byte rowPins[ROWS] = { 13, 11, 10 };
    byte colPins[COLS] = { 9, 8, 7 };
    Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
    #define ledpin 12
    void farman(int a , int b);
    void setup()
    {
    pinMode(ledpin,OUTPUT);
    digitalWrite(ledpin, HIGH);
    lcd.begin(16,2);
    }
    void loop()
    {

    word key = kpd.waitForKey();
    if(key)
    {
    switch(key)
    {
    case 10 : int a,b ;farman (a,b);f=a*2;lcd.clear();lcd.print(f);break;
    case 1 : farman (a,b);f=a*3;lcd.clear();lcd.print(f);break;
    default:break;
    }

    }
    }
    void farman (int a, int b)
    {
    word k = kpd.waitForKey();
    if(k)
    {
    a=k;
    return a;
    }

    }

    http://s6.picofile.com/file/8391654500/3.zip.html
    سلام چون خروجی تابع رو void تعریف کردی چیزی بر نمیگردونه هر دو جایی که تو کدت تابع farman رو تعریف کردی بجای void از int استفاده کن مشکل حل میشه

    فرستاده شده از SM-A305Fِ من با Tapatalk

    دیدگاه


      #3
      پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

      نوشته اصلی توسط Master81 نمایش پست ها
      سلام چون خروجی تابع رو void تعریف کردی چیزی بر نمیگردونه هر دو جایی که تو کدت تابع farman رو تعریف کردی بجای void از int استفاده کن مشکل حل میشه

      فرستاده شده از SM-A305Fِ من با Tapatalk
      ممنون از راهنمایتون
      کد به صورت زیر تغیر دادم باز مشکل حل نشد
      #include <Keypad.h>
      #include <LiquidCrystal.h>
      LiquidCrystal lcd(0,1,3,4,5,6);
      const byte ROWS = 3; // Four rows
      const byte COLS = 3; // Three columns
      // Define the Keymap
      char keys[ROWS][COLS] = {
      {2,9,6},
      {10,3,5},
      {1,7,4},

      };
      int f=0;
      byte rowPins[ROWS] = { 13, 11, 10 };
      byte colPins[COLS] = { 9, 8, 7 };
      Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
      #define ledpin 12
      int farman(int a , int b);
      void setup()
      {
      pinMode(ledpin,OUTPUT);
      digitalWrite(ledpin, HIGH);
      lcd.begin(16,2);
      }
      void loop()
      {

      word key = kpd.waitForKey();
      if(key)
      {
      switch(key)
      {
      case 10 : int a,b,f ;farman (a,b);f=a*2;lcd.clear();lcd.print(f);break;
      case 1 : farman (a,b);f=a*3;lcd.clear();lcd.print(f);break;
      default:break;
      }

      }
      }
      int farman (int a, int b)
      {
      word k = kpd.waitForKey();
      if(k)
      {
      a=k;
      return a;
      }

      }

      دیدگاه


        #4
        پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

        نوشته اصلی توسط elmvafan نمایش پست ها
        ممنون از راهنمایتون
        کد به صورت زیر تغیر دادم باز مشکل حل نشد
        #include <Keypad.h>
        #include <LiquidCrystal.h>
        LiquidCrystal lcd(0,1,3,4,5,6);
        const byte ROWS = 3; // Four rows
        const byte COLS = 3; // Three columns
        // Define the Keymap
        char keys[ROWS][COLS] = {
        {2,9,6},
        {10,3,5},
        {1,7,4},

        };
        int f=0;
        byte rowPins[ROWS] = { 13, 11, 10 };
        byte colPins[COLS] = { 9, 8, 7 };
        Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
        #define ledpin 12
        int farman(int a , int b);
        void setup()
        {
        pinMode(ledpin,OUTPUT);
        digitalWrite(ledpin, HIGH);
        lcd.begin(16,2);
        }
        void loop()
        {

        word key = kpd.waitForKey();
        if(key)
        {
        switch(key)
        {
        case 10 : int a,b,f ;farman (a,b);f=a*2;lcd.clear();lcd.print(f);break;
        case 1 : farman (a,b);f=a*3;lcd.clear();lcd.print(f);break;
        default:break;
        }

        }
        }
        int farman (int a, int b)
        {
        word k = kpd.waitForKey();
        if(k)
        {
        a=k;
        return a;
        }

        }
        سلام
        ببخشید این کد دقیقا قراره چکار کنه؟ من هرچی فکر میکنم به نتیجه ای نمیرسم! خیلی جاهاش هم از نظر من مشکل داره.

        دیدگاه


          #5
          پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

          نوشته اصلی توسط hossein.m98 نمایش پست ها
          سلام
          ببخشید این کد دقیقا قراره چکار کنه؟ من هرچی فکر میکنم به نتیجه ای نمیرسم! خیلی جاهاش هم از نظر من مشکل داره.
          سلام
          ابتدا از کی پد یک عدد بگیره بعد برود به زیر برنامه یک عدد دیگه بگیرد حالا این عدد که گرفته باتوجه به حالتی در switch case بوده یک عملیات ریاضی انجام دهد
          البته در کل این بخشی از برنامه اصلی ماهست که در فراخوانی به مشکل خوردم

          دیدگاه


            #6
            پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

            نوشته اصلی توسط elmvafan نمایش پست ها
            سلام
            ابتدا از کی پد یک عدد بگیره بعد برود به زیر برنامه یک عدد دیگه بگیرد حالا این عدد که گرفته باتوجه به حالتی در switch case بوده یک عملیات ریاضی انجام دهد
            البته در کل این بخشی از برنامه اصلی ماهست که در فراخوانی به مشکل خوردم
            آخه ببینید اصلا کد شما غلطه! توی خط 33 شما a و b رو تعریف کردید و حتی مقدار اولیه هم ندادید و بعد بلافاصله تابع farman رو با آرگومان های a و b فراخوانی کردید که مقدار مشخصی ندارن و مقدار بازگشتی تابع رو هم هیچ جایی ذخیره نکردید!
            توی خط 34 هم a و b حتی تعریفم نشدن ولی شما اون ها رو دادید به همون تابع و باز هم مقدار بازگشتی تابع رو ذخیره نکردید! با این تفاسیر برنامه نباید اصلا کامپایل بشه که بخواد عملکرد درستی داشته باشه.
            سوال بعدی اینه تابع kpd.waitForKey کارش دقیقا چیه؟ کارش اینه فقط منتظر باشه تا کلیدی فشرده بشه یا اینکه علاوه بر انتظار اعلام میکنه کدوم کلید فشار داده شده؟ اگر کارش صرفا انتظار باشه که نوع استفاده ای که ازش کردید کلا غلطه!

            دیدگاه


              #7
              پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

              نوشته اصلی توسط hossein.m98 نمایش پست ها
              آخه ببینید اصلا کد شما غلطه! توی خط 33 شما a و b رو تعریف کردید و حتی مقدار اولیه هم ندادید و بعد بلافاصله تابع farman رو با آرگومان های a و b فراخوانی کردید که مقدار مشخصی ندارن و مقدار بازگشتی تابع رو هم هیچ جایی ذخیره نکردید!
              توی خط 34 هم a و b حتی تعریفم نشدن ولی شما اون ها رو دادید به همون تابع و باز هم مقدار بازگشتی تابع رو ذخیره نکردید! با این تفاسیر برنامه نباید اصلا کامپایل بشه که بخواد عملکرد درستی داشته باشه.
              سوال بعدی اینه تابع kpd.waitForKey کارش دقیقا چیه؟ کارش اینه فقط منتظر باشه تا کلیدی فشرده بشه یا اینکه علاوه بر انتظار اعلام میکنه کدوم کلید فشار داده شده؟ اگر کارش صرفا انتظار باشه که نوع استفاده ای که ازش کردید کلا غلطه!
              بله منم نگاه کردم کد کلا مشکل داره یه تابع با دو تا ورودی تعریف کرده ولی فقط از ی ورودی استفاده کرده بقیشم که شما گفتین

              فرستاده شده از SM-A305Fِ من با Tapatalk

              دیدگاه


                #8
                پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

                نوشته اصلی توسط hossein.m98 نمایش پست ها
                آخه ببینید اصلا کد شما غلطه! توی خط 33 شما a و b رو تعریف کردید و حتی مقدار اولیه هم ندادید و بعد بلافاصله تابع farman رو با آرگومان های a و b فراخوانی کردید که مقدار مشخصی ندارن و مقدار بازگشتی تابع رو هم هیچ جایی ذخیره نکردید!
                توی خط 34 هم a و b حتی تعریفم نشدن ولی شما اون ها رو دادید به همون تابع و باز هم مقدار بازگشتی تابع رو ذخیره نکردید! با این تفاسیر برنامه نباید اصلا کامپایل بشه که بخواد عملکرد درستی داشته باشه.
                سوال بعدی اینه تابع kpd.waitForKey کارش دقیقا چیه؟ کارش اینه فقط منتظر باشه تا کلیدی فشرده بشه یا اینکه علاوه بر انتظار اعلام میکنه کدوم کلید فشار داده شده؟ اگر کارش صرفا انتظار باشه که نوع استفاده ای که ازش کردید کلا غلطه!
                امدم a , b را صفر دادم در خط 33
                یک c تعریف کردم صفر دادم مقدار اولیه
                اگر در خط 34 a,b را تعریف کنم موقع کامپایل کردن خطا میدهد
                تایع Waitforkey

                این تابع منتظر می*ماند تا کلیدی فشرده شود و مقداری دریافت نماید. این تابع باعث متوقف شدن کد‎های دیگر برنامه (به جز وقفه*ها) می*شود، یعنی اگر بعد از این تابع برنامه روشن و خاموش شدن یک LED را قرار دهید ، LED تا زمانی که دکمه*ای از کیپد فشرده نشود ،خاموش و روشن نمی*شود.

                دیدگاه


                  #9
                  پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

                  نوشته اصلی توسط elmvafan نمایش پست ها
                  امدم a , b را صفر دادم در خط 33
                  یک c تعریف کردم صفر دادم مقدار اولیه
                  اگر در خط 34 a,b را تعریف کنم موقع کامپایل کردن خطا میدهد
                  تایع Waitforkey

                  این تابع منتظر می*ماند تا کلیدی فشرده شود و مقداری دریافت نماید. این تابع باعث متوقف شدن کد‎های دیگر برنامه (به جز وقفه*ها) می*شود، یعنی اگر بعد از این تابع برنامه روشن و خاموش شدن یک LED را قرار دهید ، LED تا زمانی که دکمه*ای از کیپد فشرده نشود ،خاموش و روشن نمی*شود.
                  سوال من این بود اعلام میکنه کدوم دکمه فشار داده شده یا فقط منتظر میمونه؟

                  دیدگاه


                    #10
                    پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

                    نوشته اصلی توسط hossein.m98 نمایش پست ها
                    سوال من این بود اعلام میکنه کدوم دکمه فشار داده شده یا فقط منتظر میمونه؟
                    بله اعلام میکند چه کلیدی فشار داده شده است
                    در قسمت زیر برنامه وقتی مینویسم lcd.print(k) عدد فشار داده شده را نمایش میدهد

                    دیدگاه


                      #11
                      پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

                      نوشته اصلی توسط elmvafan نمایش پست ها
                      بله اعلام میکند چه کلیدی فشار داده شده است
                      در قسمت زیر برنامه وقتی مینویسم lcd.print(k) عدد فشار داده شده را نمایش میدهد
                      خوب این درست. خطوط 33 و 34 همچنین خود بدنه تابع کماکان مشکل داره! مگر قرار نیست 2 بار کلید خونده بشه؟ خوب چه نیازی به اون تابع هست؟ توی خطوط برنامه 2 بار خوندن رو پیاده کنید.

                      دیدگاه


                        #12
                        پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

                        نوشته اصلی توسط hossein.m98 نمایش پست ها
                        خوب این درست. خطوط 33 و 34 همچنین خود بدنه تابع کماکان مشکل داره! مگر قرار نیست 2 بار کلید خونده بشه؟ خوب چه نیازی به اون تابع هست؟ توی خطوط برنامه 2 بار خوندن رو پیاده کنید.
                        می فرماید چه مشکلی دارد؟
                        تابع را من ساده نوشتم که خطا را پیدا کنم در کل کلی عملیات باید در تابع بنویسم
                        برا این میخاهم فراخوانی انجام گیرد

                        دیدگاه


                          #13
                          پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

                          نوشته اصلی توسط elmvafan نمایش پست ها
                          می فرماید چه مشکلی دارد؟
                          تابع را من ساده نوشتم که خطا را پیدا کنم در کل کلی عملیات باید در تابع بنویسم
                          برا این میخاهم فراخوانی انجام گیرد
                          شما دقیقا بفرمایید هدفتون از این برنامه چیه! اون متغیرها هر کدوم چی هستن؟ توی چندتا پست صحبت از LED و عملیات ریاضی و اینا کردید که آخرشم من متوجه نشدم چکار قراره بکنید.
                          چیزی که من در حال حاضر میبینم یک سری متغیر و تابع بی معنیه که اصلا مشخص نیست چکار قراره انجام بدن!
                          اگر میشه اینم بفرمایید که چقدر روی برنامه نویسی تسلط دارید.

                          دیدگاه


                            #14
                            پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

                            نوشته اصلی توسط hossein.m98 نمایش پست ها
                            شما دقیقا بفرمایید هدفتون از این برنامه چیه! اون متغیرها هر کدوم چی هستن؟ توی چندتا پست صحبت از LED و عملیات ریاضی و اینا کردید که آخرشم من متوجه نشدم چکار قراره بکنید.
                            چیزی که من در حال حاضر میبینم یک سری متغیر و تابع بی معنیه که اصلا مشخص نیست چکار قراره انجام بدن!
                            اگر میشه اینم بفرمایید که چقدر روی برنامه نویسی تسلط دارید.
                            برنامه نویسی در حد معمول با بسکام هستم
                            اردوینو تازه شروع کردم
                            شمایل کلی که برنامه من میختهم داشته باشم به صورت زیر میباشد
                            ما یه زیر برنامه داشته باشیم که داخلش یکسری عملیات انجام دهیم و خروجی در یک متغیر قرار گیرد
                            حالا در برنامه اصلی اون زیر برنامه را فراخوانی کنیم فراخوانی چند جای برنامه اصلی میباشد
                            منظورم اینه بجا اینکه من بیایم 30 خط دستور چند بار در برنامه اصلی بنویسیم در زیر برنامه بنویسم و زمانی نیازش دارم فراخوانی بکنم
                            ممنون

                            دیدگاه


                              #15
                              پاسخ : تابع (زیر برنامه ) عدد صفر بر میگرداند

                              نوشته اصلی توسط elmvafan نمایش پست ها
                              برنامه نویسی در حد معمول با بسکام هستم
                              اردوینو تازه شروع کردم
                              شمایل کلی که برنامه من میختهم داشته باشم به صورت زیر میباشد
                              ما یه زیر برنامه داشته باشیم که داخلش یکسری عملیات انجام دهیم و خروجی در یک متغیر قرار گیرد
                              حالا در برنامه اصلی اون زیر برنامه را فراخوانی کنیم فراخوانی چند جای برنامه اصلی میباشد
                              منظورم اینه بجا اینکه من بیایم 30 خط دستور چند بار در برنامه اصلی بنویسیم در زیر برنامه بنویسم و زمانی نیازش دارم فراخوانی بکنم
                              ممنون
                              خوب اول از همه پیشنهاد میدم حتما روی مهارت های زبان ++c/c خودتون کار کنید. ظاهرا فعلا دید درستی نسبت به کارکرد برنامه ندارید.
                              خوب اگر شما در مورد توابع مطالعه کنید میبینید تابع میتونه یک یا چند ورودی داشته باشه و یک خروجی برگردونه؛ دقیقا همونطوری که توی مدرسه و در درس ریاضی به ما آموزش دادن. اما فرقی که با ریاضیات داره اینه که توی زبان c یک تابع میتونه هیچ ورودی ای نداشته باشه و یا اصلا خروجی ای هم به اصطلاح بر نگردونه.
                              فرض بگیرید من میخوام یک تابع بنویسم که دو تا عدد صحیح از ورودی بگیره، جمع این دو عدد رو حساب کنه و در خروجی قرار بده. خوب در زبان c باید همه چیز تعریف شده باشه؛ در اینجا هم ما باید نوع ورودی های تابع و نوع خروجی تابع رو مشخص کنیم. کافیه بدنه تابع رو به شکل زیر بنویسیم:

                              int f(int num1, int num2)
                              {
                              int result;
                              result = num1 + num2;
                              return result;
                              }

                              این تابع دو تا ورودی num1 و num2 رو میگیره و حاصل جمع این دوتا رو بر میگردونه. این برنامه به ساده ترین شکل نوشته شده که درکش راحت باشه. خوب برای استفاده از تابع داخل برنامه هم میشه مثل این قطعه کد عمل کرد:

                              int a = 10;
                              int b = 11;
                              int c = f(a, b);
                              lcd.print(c);

                              قطعه کد بالا a و b رو میده به تابع و تابع خروجی رو توی c قرار میده. بعدش هم c رو میشه داد به تابعlcd.print تا مقدار c رو نشون بده.
                              جدیدترین ویرایش توسط hossein.m98; ۲۲:۴۱ ۱۳۹۹/۰۱/۰۶. دلیل: تصحیح اشتباه

                              دیدگاه

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