اطلاعیه

Collapse
No announcement yet.

آموزش C++ (در میکرو..)

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

    #31
    پاسخ : آموزش C++ (در میکرو..)

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

    من مشکلم این است که بعد تعریف اشاره باید برای آن آدرس تعریف کرد ولی در struct احتیاج به استفاده از علامت & نیست چرا؟

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

    دیدگاه


      #32
      پاسخ : آموزش C++ (در میکرو..)

      نوشته اصلی توسط alirf
      سلام
      هنوز کد فرستادن را یاد نگرفتم نمی دونم چرا بر عکس می شود

      من مشکلم این است که بعد تعریف اشاره باید برای آن آدرس تعریف کرد ولی در struct احتیاج به استفاده از علامت & نیست چرا؟

      یک سوال چرا می گن اشاره گر سرعت اجرا را بالا می برد؟
      در مورد & که صحبت کردیم. وقتی استفاده میشه که ما به آدرس جایی که یه متغییر (یا هر چیز دیگه ) ذخیره شده نیاز داریم. تو اون ساختاری که من تعریف کردم میگیم که یه عملیاتی رو بر روی متغییری که آدرس اون توسط آرگومان تابع وارد شده انجام بده.هیچ متغییری رو تعریف نمیکنیم که آدرس داشته باشیم. در عوض در تابع مین وقتی یه متغییر از اون جنس تعریف میکنیم آدرس اون رو میفرستیم برای این تابع. اینجوری:
      TIME zamandar;
      test(&zamandar);

      یکم سخت هست اگه بخواید اشاره گر ها رو این جوری برسی کنید.اگه در مورد اشاره گر ها نمیدونید بهتره که اول توسط متغییر های معمولی برسی کنید و بعد ساختار ها و......
      در مورد سرعت هم اینجوری میشه گفت که با کم کردن حجم اطلاعات سرعت اون رو زیاد میکنیم. مثلا یک تابع داریم که عملیاتی رو بر روی یه رشته از کاراکتر ها انجام میده.حالا ما این رشته رو یه جا توی حافظه داریم.یه راه این هست که آرگومان اون تابع یک رشته باشه و تمام اون رشته تو یه جای دیگه (محل قرار گیری آرگومان تابع) کپی بشه و عملیات اونجا انجام بشه و یا فقط آدرس اولین کاراکتر رو برای اون تابع بفرستیم و اون عملیات رو در محلی که اون رشته ذخیره شده انجام بده (دیگه اون کپی رو انجام نده). این یکی از حالت ها بود. کلا باعث نظم دادن اطلاعات میشه و این نظم باعث بیشتر شدن سرعت و کم شدن حافظه رم میشه. البته اینم بگم اگه درست استفاده نشه همه چیز رو میتونه بهم بریزه..........
      [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

      دیدگاه


        #33
        پاسخ : آموزش C++ (در میکرو..)

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

        دیدگاه


          #34
          پاسخ : آموزش C++ (در میکرو..)

          نوشته اصلی توسط شهریار رجب زاده
          فرض کنید میخواید به یکی که نمیدونه چطور از اشاره گر تو C استفاده کنه من همش نصفه نصفه یاد گرفتم آخرش هم نتونستم ازش استفاده کنم
          نمیدونه چطور استفاده کنه و یا نمیدونه کجا استفاده کنه؟
          اینکه بخوام بگم در این شرایط خاص باید از اشاره گر ها استفاده کرد نمیشه چون باید کلی به مساله نگاه کرد. خود من با دیدن مثال ها تونستم کم کم متوجه این بشم که کجا و تحت چه شرایطی بهتره که از اشاره گر ها استفاده کرد. قضیه مثل این هست که بخوایم بگیم کی از while استفاده کنیم کی از for .به هم راحت تبدیل میشند اما با استفاده از تمرین و دیدن مثال هست که میشه تشخیص داد کی استفاده از کدوم بهتره.
          اما اگر مساله این هست که چطور استفاده کنم!
          int *p;
          در اینجا یک اشاره گر ساختم که میتونه به یه متغییر int اشاره کنه.الان هیچ مقداری داخلش نریختم پس به یه جای نامعلوم اشاره میکنه و نمیشه از اون مقدار استفاده کرد.
          int a=5,b;
          اینجا هم 2 تا متغییر معمولی تعریف کردم که یکیش 5 رو نگه میداره و دیگری 0 رو.
          p=&a;
          با اجرای دستور بالا آدرسی که متغییر a توی اون ذخیره شده در اشاره گر ما ذخیره میشه.مثلا اگه a تو 50 امین خونه حافظه باشه مقدار اشاره گر هم 50 میشه.
          b=*p;
          اینجا به متغییر b گفتم که محتوایی اون خونه ای که اشاره گر بهش اشاره میکنه رو نگه داره.اشاره گر 50 رو نگه میداشت. در داخل خونه ی 50 هم عدد 5 ذخیره شده. پس متغیر b هم برایر همون 5 میشه.
          [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

          دیدگاه


            #35
            پاسخ : آموزش C++ (در میکرو..)

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

            دیدگاه


              #36
              پاسخ : آموزش C++ (در میکرو..)

              یه سری عملگر بیتی داریم که مستقیما روی بیت های متغییر ها کار میکنند.شامل
              = برای مقدار دادن.
              | برای or منطقی روی بیت ها
              ^ برای x-or منطقی روی بیت ها
              & برای and منطقی روی بیت ها
              ! برای not منطقی روی بیت ها.
              ~ برای متمم کردن
              این عملگر ها بیت به بیت روی متغییر ها تاثیر میزارند مثلا 0b11001100 اگر با عدد 0b01000000 اند منطقی بشه حاصلش 0b01000000 هست. (این روش برای چک کردن مقدار یک بیت خاص استفاده میشه)
              حاصل استفاده از این عملگر ها یک عدد هست.
              یه سری عملگر دیگه داریم که عملگر های منطقی هستند.شامل
              == تساوی (شاید بهتر باشه این این جا نباشه)
              && برای and منطقی
              || برای or منطقی
              حاصل این عملگر ها true یا false هست. یعنی حاصل 0x0F && 0xF0 مقدار true داره(در صورتی که اگه یه & میزاشتیم مقدارش صفر بود.این عملگر ها توی شرط ها برای بررسی چند شرط که حاصل هرکدوم بولی هست استفاده میشه مثل
              if( (a==35) && (b==45))

              عملگر های دیگه ای هم داریم که خروجی بولی میدن و کاربردشون رو حتما بلدید
              > کوچیکتر از
              < بزرگتر از
              != مخالف
              >= کوچیک تر مساوی
              <= بزرگ تر مساوی.

              عملگر دیگه ای هم هست که اونا رو هم حتما بلدید. دیگه توضیحش رو نمینویسم.
              ++
              --
              =*
              =/
              +=
              -=
              =%
              =&
              =^
              =|
              =>>
              =<<

              دیگه همین ها رو فعلا یادم میومد. اگه چیز دیگه ای هست بگید توضیح بدم
              [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

              دیدگاه


                #37
                پاسخ : آموزش C++ (در میکرو..)

                این علامت =^ دیگه چیه؟

                دیدگاه


                  #38
                  پاسخ : آموزش C++ (در میکرو..)

                  نوشته اصلی توسط شهریار رجب زاده
                  این علامت =^ دیگه چیه؟

                  A=A^B;
                  A^=B;

                  [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                  دیدگاه


                    #39
                    پاسخ : آموزش C++ (در مکرو..)

                    نوشته اصلی توسط shahinbahari

                    A=A^B;
                    A^=B;


                    کارش به توان رسوندنه؟

                    دیدگاه


                      #40
                      پاسخ : آموزش C++ (در میکرو..)

                      نوشته اصلی توسط شهریار رجب زاده
                      کارش به توان رسوندنه؟
                      خوب نخوندی ها.
                      ^ برای x-or منطقی روی بیت ها
                      [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                      دیدگاه


                        #41
                        پاسخ : آموزش C++ (در میکرو..)

                        نوشته اصلی توسط shahinbahari
                        خوب نخوندی ها.
                        ببخشید از روی یه گوشی عهد بوق بهتر از این نمیشد خوند :redface:
                        خوب حالا میشه کلا pre - processor ها رو کامل توضیح بدید
                        ممنون

                        دیدگاه


                          #42
                          پاسخ : آموزش C++ (در میکرو..)

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

                          #include<header.h>

                          دیگه این رو همه میشناسید.برای اضافه کردن یه هدر فایل به برنامه.
                          #define PI 3.1415
                          #define some_def
                          #define sum(x,y) x+y

                          برای تعریف یک اسم به کار میره.این اسم میتونه با یه مقدار متناظر باشه و یا برای معتبر ساختن اون اسم در برنامه استفاده بشه.(این قابلیت دوم تو کامپایل شرطی به کار میره)
                          البته یه استفاده دیگه ای هم داره که برای تعریف ماکرو به کار میره.(کارش شبیه به تابع inline میشه)
                          #error tell user some text error

                          این دستور باعث به وجود اومدن یک پنجره ارور قبل از کامپایل برنامه میشه. کاربردش تو کامپایل شرطی برنامه هست. مثلا کاربر فراموش کرده یک کتابخونه رو اضافه کنه و بقیه کتابخونه ها به اون نیاز دارند پس با این ارور این موضوع رو یادآوری میکنه.
                          #undef pi

                          کار این دستور دقیقا برعکس define هست و اون اسم تعریف شده رو تعریف نشده میکنه.

                          دستورات برای کامپایل شرطی:

                          #if
                          #else
                          #elseif
                          #endif
                          #ifdef
                          #ifndef

                          در کامپایل شرطی {} استفاده نمیشه و حدود شرط ها مانند بیسیک با endif مشخص میشه
                          #if some thing
                          program
                          #else
                          other program
                          #endif

                          2تا اسمی که شاید براتون جدید باشه ifdef و ifndef هست که به ترتیب معنی اگر تعریف شده بود و اگر تعریف نشده بود رو. میدن. منظور از تعریف همون عبارت هایی هست که با دستور define معتبر میکنیم.کامپایل شرطی در جاهایی کاربرد داره که مثلا نیاز هست بعضی از قابلیت های یک کتابخونه توسط کاربر محدود بشه تا حجم کد بهینه بشه و یا لازم باشه حتما بررسی بشه که یک سورس به برنامه اضافه شده یا نه.
                          [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                          دیدگاه


                            #43
                            پاسخ : آموزش C++ (در میکرو..)

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

                            دیدگاه


                              #44
                              پاسخ : آموزش C++ (در میکرو..)

                              خوب این ها برنامه های سبکی نیستند که راحت بشه فهمید.همه چند فایلی هستند و از چند کتابخونه تشکیل شده اند.شما دنبال کتاب راهنما اون rtos باش و از توی اون نحوه استفاده رو بررسی کنید.
                              طبیعی هست برنامه ای که n نفر m ساعت روش کار کردند رو نتونید با یه بار باز کردن بفهمید.
                              [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                              دیدگاه


                                #45
                                پاسخ : آموزش C++ (در میکرو..)

                                ببینم وکتور اینجا هم به کار میره مثل کامپیوتر؟

                                دیدگاه

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