اطلاعیه

Collapse
No announcement yet.

آموزش زبان سی

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

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

    نوشته اصلی توسط reza_agha
    یکی از مواردی که دوستان اغلب راجع بهش اشتباه میکنن دستور switch هست. دستور switch این چیزی که شما میگین نیست. دستور switch در اصل یک مجموعه از کد ها هست که توسط case های متفاوت میشه از جاهای متفاوتی وارد اون شد و توسط دستور break از این بلوک خارج شد. برای فهم بهتر این مطلب کد زیر رو در نظر بگیرین:

    switch(n)
    {
    case 0:
    if(something_ok)
    a = 5;
    break;
    case 1:
    a = 5;
    break;
    }


    این کد رو میشه اینطوری هم نوشت (در صورتی که اگر فرض بر فرم پیشنهادی شما باشه این فرم مجاز نیست. مثل بقیه زبانها. ولی C بقیه زبانها نیست!)

    switch(n)
    {
    case 0:
    if(something_ok)
    {
    case 1:
    a = 5;
    }
    break;
    }
    آقا رضا، دوتا سوال. اول اینکه یه بار گفته بودید که یه جایی توی سایت آموزش داده شده که چطور باید کدها رو نوشت تا اینجوری خوشگل نشون داده بشن. می تونید یا روشش یا لینکش رو اینجا بذارید؟

    دوم هم اینکه توی اون حالت دومی که شما نوشتید، یعنی وقتی توی case 0 هستیم و به کد case 1 می رسیم، کامپایلر چیکار میکنه؟ اون خط رو رد میکنه؟
    دانش فنی تا به عمل تبدیل نشده، ذره ای ارزش نداره. اما بعضی وقت ها باید از دانش برای باز کردن مرزهای جدیدی در علم استفاده کرد، نه اینکه اونها رو صرفاً فقط به عمل تبدیل کرد.

    دیدگاه


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

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

      دیدگاه


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

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

        دیدگاه


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

          نوشته اصلی توسط reza_agha
          ببخشید من دو روزی نبودم که گیر بدم. حالا اومدم جبران مافات!
          متاسفانه این هم یک اشتباه کوچولوی دیگه هست. با اینکه اینجا unsigned int مساوی با یک word هست ولی درست نیست که بگیم همیشه unsigned int همون word هست.

          انواع صحیح به قرار زیر هستن:
          char و short و long
          نوع char یک بایتی و نوع short همواره 2 بایتی و نوع long همواره 4 بایتی هست. این اندازه ها ربطی به پلتفرم نداره. شما روی یک سیستم 16 بیتی short رو دو بایتی دارین و روی یک سیستم 32 بیتی هم 2 بایتی. بنابراین معادل word دقیقا میشه unsigned short. در یک سیستم 16 بیتی (حالا گیر ندین. 8 بیتی هم همینطوره) int حجمی برابر با 2 بایت داره و روی یک سیستم 32 بیتی برابر با 4 بایت. یکی از خصوصیات یا محسنات زبان C اینه که میتونین باهاش جوری کد بزنین که بین سیستم های متفاوت قابلیت انتقال داشته باشه. اگر از انواع int برای نوشتن یک کد استفاده کنین؛ این نوع روی سیستم های متفاوت ممکنه حجم و مسلما رنج عددی متفاوتی داشته باشه. در صورتی که نوع word از نظر شما یک نوع مطلقا 2 بایتی هست.
          یک مورد خیلی مهم تر از متغیری برای حلقه و غیرهم استفاده از یک فیلد در یک ساختار داده ای هست که ممکنه بین چند سیستم متفاوت به اشتراک گذاشته بشه. اینجور مواقع اشتباه ترین کار استفاده از نوعی مثل int هست.

          (پی نوشت: لطفا گیر سه پیچ ندین. تازه از مسافرت برگشتم نمیدونم چطوری توضیح بدم!)
          پس int واسه آرم 4 بایتیه و واسه avr دو بایتیه
          درسته
          مولا علی (ع) میفرمایند : آسوده باش , آستین هارا بالا بزن , بر خدا توکل کن , آنگاه خدا را خواهی دید که زودتر از تو دست به کار شده است .

          دیدگاه


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

            1- برای خوشگل نشون دادن میتونین کدتون رو توی notepad تایپ کنین و کل متن رو داخل یک تگ ltr بذارین.

            جاهای خالی رو هم از داخل این دو خطی که با ][ محصور شدن حذف کنین:

            [ l t r ]
            for(i=0; i<10; i++)
            {
            }
            [ / l t r ]



            2- فراموش نکنین که در زبانهای دیگه مثل بیسیک و فرترن دستور switch یا معادل اون در حقیقت یک سری if-else هست که بر اساس مقایسه یک سری مقادیر ثابت با یک متغیر مشترک پیاده شده. مثلا:

            if( a == 0 )
            {
            st1
            }
            else if( a == 1)
            {
            st2
            }
            else if(a == 2)
            {
            st3
            }
            else
            {
            st4
            }


            رو میشه با معادل خودش به این صورت پیاده کرد:

            switch(a)
            {
            case 0: st1;
            break;
            case 1: st2;
            break;
            case 2: st3;
            break;
            default:
            st4;
            break;
            }


            اما همونطوری که عرض کردم یک فرق کلی با بقیه زبونها هست و اونم اینه که دستورات بین { و } توسط کامپایلر ترجمه میشه و دستورات case فقط دستور انتقال اجرا به داخل بلوک switch هستن و break برای انتقال اجرا به دستور بعد از بلوک سوئیچ.

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

            ------
            یه مورد جالب دیگه هم من بگم.
            در اغلب کتب برنامه نویسی قید شده که حتی المقدور از دستور goto استفاده نکنین. که اغلب دوستان و اساتید عوضش میکنن و میگن هرگز!
            ولی من باب اطلاعتون بعضی جاها باید!!

            مثلا کد زیر رو در نظر بگیرین:

            for(int a=0; a<10000; a++)
            {
            for(int b=0; b<10000; b++)
            {
            for(int c=0; c<10000; c++)
            {
            if( some_condition_is_true)
            goto break_all_loops_at_once;
            }
            }
            }
            break_all_loops_at_once:;


            بجای این goto چی میخوایین بذارین که صرف نظر از سرعتش باعث سردرگمی برنامه نویس نشه؟

            پس int واسه آرم 4 بایتیه و واسه avr دو بایتیه
            دقیقا! چون arm یک محیط 32 بیتی هست و avr یک محیط 8/16 بیتی.

            دیدگاه


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

              آقا داریوش نظر لطف شماست
              ما دست پرورده ایم داداش!
              در مورد بخش بندی هم بله حق با شماست حتما اینکار رو میکنم اما بزارید این پست هم مورد نقد اساتید قرار بگیره بعدش من تمام مطالبی رو که گفتم با در نظر گرفتن نقد اساتید در قالب یک پست ارائه میکنم .
              خوب با اجازه آقا رضا ؛خدا کنه یاد نکردن بنده از دستور goto باعث این برداشت آقا رضا و عرض اون توی این تایپیک نباشه
              آخه من دقیقا به همون دلیلی که شما فرمودید این دستور رو ذکر نکردم، پس با اجازه شما این دستور رو به همراه
              دو دستور دیگه که مربوط به مبحث انتقال کنترل غیر شرطی میشوند رو بیان میکنم .
              انتقال کنترل غیر شرطی :
              بر خلاف دستور if که در ابتدا یک شرط رو بررسی می کنند و بعد دستور دیگری را در صورت صحت شرط اجرا میکند
              در زبان c دستوراتی هستند که بدون بررسی شرطی کنترل اجرای برنامه رو از نقطه ای به نقطه ای دیگر انتقال میدهند که عبارتند از :
              1.دستور break :
              این دستور جهت خروج از حلقه های تکرار میگردد و اگر در داخلی ترین حلقه در چند حلقه تو در تو باشد پس از اجرا فقط از همان حلقه خارج میشود .

              break;


              2. دستور continue :
              این دستور در حلقه تکرار موجب انتقال کنترل به ابتدای حلقه می شود . پس از انتقال کنترل به ابتدای حلقه ، شرط
              حلقه مورد بررسی قرار می گیرد ، اگر شرط درست باشه ، اجرای دستورات حلقه ادامه می یابد و گرنه حلقه تکرار
              خاتمه پیدا کرده و کنترل اجرای برنامه سطر بعد از حلقه را اجرا میکند .

              continue;


              3.دستور goto :
              این دستور که معمولا به ندرت در برنامه ها استفاده می شود ، سبب انتقال کنترل از نقطه ای به نقطه دیگر از
              برنامه می شود .
              .
              .
              .
              goto برچسب;
              .
              .
              .
              برچسب :
              .
              .
              .
              \\------------------
              یا
              \\-----------------------
              .
              .
              .
              برچسب :
              .
              .
              .
              goto برچسب;
              .
              .
              .
              \\---------------------


              توجه : انتقال کنترل توسط goto فقط در داخل یک تابع امکان پذیر هست ، یعنی نمیشه برچسب رو خارج از تابعی زد که goto به همراه اون برچسب داخل اون تابع هست.


              دیدگاه


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

                گیر بازاره....! بدو که دوباره شروع شد!!

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

                انتقال کنترل توسط goto فقط در داخل یک تابع امکان پذیر هست ، یعنی نمیشه برچسب رو خارج از تابعی زد که goto به همراه اون برچسب داخل اون تابع هست.
                البته یک مورد استثنا وجود داره که البته ربطی به دستورات C نداره ولی جزء امکانات توابع استاندارد C هست و ایضا خیلی هم خطرناک!
                استفاده از دو تابع setjmp و longjmp.
                برای رفرنس میتونین به هدر setjmp.h رجوع کنین.

                دیدگاه


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

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

                  دیدگاه


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

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


                    for (int i=0; i>10; i++)
                    {
                    function1;
                    .
                    .
                    .
                    continue;
                    .
                    .
                    .
                    }


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

                    دیدگاه


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

                      آقا حامد ببخشید، من بازم متوجه نشدم!؟؟؟

                      دیدگاه


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

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

                        توی این حلقه تکرار، زمانی که حلقه اجرا میشه اول تابع function1 اجرا میشه، بعد بقیه دستورات، تا برسه به continue. به اینجا که رسید دیگه بقیه دستورات رو اجرا نمی کنه و به انتهای حلقه میره، بعد به شرط حلقه بر می گرده (ابتدای حلقه) تا شرط رو دوباره چک کنه و اگه شرط هم چنان برقرار نشده بود، دوباره به داخل حلقه بره.

                        ببینید هر حلقه زمانی که تمام دستورات داخل { و } تموم شد، دوباره به ابتدای حلقه بر می گرده و شرط حلقه رو چک می کنه. البته اگه چیزی اون رو از داخل حلقه بیرون نیاره. توی این مثال من هم شرط رسیدن i به 10 بود که تا زمانی که این شرط محقق نشه دستورات داخل حلقه هم چنان تکرار میشه.

                        امیدوارم حرفام مفهوم باشه.

                        -----------------------------------------------------------------------

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

                        دیدگاه


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

                          بله حالا بهتر شد ولی بازم چه حسن کچل چه کچل حسن :nice:

                          حرف شما و آقا رضا کاملا صحیح تره ، در واقع من این رو نمیدونستم که اول به این "{" میرسه و بعد به ابتدای حلقه
                          منتقل میشه

                          دیدگاه


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

                            خوب دوستان اینهم کل مطالب اصلاح شده که بنده گفتم:
                            حلقه ها و ساختارهای تصمیم گیری
                            1. if:
                            کلی ترین فرم این ساختار تصمیم گیری به این ترتیب هست :
                            if () {
                            }
                            else if {
                            }
                            else{
                            };

                            خوب این دستور رو به اشکال مختلف با توجه به نوع مورد نیازتون می تونید استفاده کنید :
                            1. ساده ترین حالت : if با یک شرط و یک خط دستور

                            if ( شرط )
                            دستور1,دستورر2,دستور3,...;
                            2. if با یک شرط و یک خط دستور و یک حالت پیشفرض
                            if(شرط)
                            دستور1;
                            else
                            دستور1;
                            3. if با یک شرط و چند خط دستور
                            if(شرط){
                            دستور1;
                            دستور2;
                            دستور3;
                            ...;
                            };
                            4. if با یک شرط و چند خط دستور و یک حالت پیشفرض با چند خط دستور
                            if(شرط){
                            دستور1;
                            دستور2;
                            دستور3;
                            ...;
                            }
                            else{
                            دستور1;
                            دستور2;
                            دستور3;
                            ...;
                            };
                            5. if با چند شرط و چند خط دستور و یک حالت پیشفرض با چند خط دستور
                            if(شرط1){
                            دستور1;
                            دستور2;
                            دستور3;
                            ...;
                            }
                            else if(شرط2){
                            دستور1;
                            دستور2;
                            دستور3;
                            ...;
                            }
                            else if(شرط3){
                            دستور1;
                            دستور2;
                            دستور3;
                            ...;
                            }
                            ...
                            ...
                            ...
                            else{
                            دستور1;
                            دستور2;
                            دستور3;
                            ...;
                            };


                            2-حلقه for :
                            کلی ترین فرم این حلقه به صورت زیر هست :

                            for(گام حرکت;شرط حلقه; مقدار اولیه اندیس حلقه){
                            دستور1;
                            دستور1;
                            دستور1;
                            .
                            .
                            .
                            }
                            *حلقه for با یک خط دستور
                            for(مقدار اولیه اندیس حلقه;شرط حلقه;گام حرکت)
                            دستور1,دستورر2,دستور3,...;

                            3-ساختار تکرار while
                            فرم کلی این دستور :

                            while (شرط حلقه) {
                            دستور1;
                            دستور2;
                            دستور3;
                            .
                            .
                            .
                            };
                            *while با یک خط دستور
                            while (شرط حلقه)
                            دستور1,دستورر2,دستور3,...;
                            \\------------------------------------------------

                            4-ساختار تکرار do...while
                            فرم کلی :

                            do {
                            دستور1;
                            دستور2;
                            دستور3;
                            .
                            .
                            . }
                            while (شرط حلقه);
                            *do...while با یک خط دستور :
                            do
                            دستور1,دستورر2,دستور3,...;
                            while (شرط حلقه);
                            \\----------------------------------------


                            خوب همونطور که مشخصه فرق این دو حلقه اینکه : در اولی شرط در ابتدای حلقه چک میشه و اگر شرط درست باشه حلقه اجرا و در غیر این صورت خط بعد از حلقه اجرا میشه
                            اما در دومی شرط همواره در انتهای حلقه چک میشه و اگر شرط درست باشه حلقه دوباره اجرا و در غیر این صورت خط بعد از حلقه اجرا میشه
                            5-ساختار تصمیم switch
                            فرم کلی این دستور :

                            switch (عبارت) {
                            case مقدار1 :
                            مجموعه دستورات 1
                            break;
                            case مقدار2 :
                            مجموعه دستورات 2;
                            break;
                            case مقدار3 :
                            مجموعه دستورات3;
                            break;
                            .
                            .
                            .
                            default:
                            مجموعه دستورات حالت پیشفرض;
                            };
                            \\-----------------------------------------------



                            در این دستور همواره مقادیر 1 تا n با عبارت موجود در آرگومان switch مقایسه شده و هر قسمت که با آن مدارش برابر بود
                            مجموعه دستوراتش اجرا شده و از ساختار switch خارج میشود ؛ اگر هم هیچکدام از مقادیر با عبارت برابر نباشند
                            مجموعه دستورات قسمت default اجرا شده و سپس از ساختار خارج می شود که البته این قسمت اختیاری
                            است و درصورت ننوشتن این قسمت مسلما حالت پیشفرضی برای ساختار پیش بینی نشده
                            توجه :یکی از مواردی که دوستان اغلب راجع بهش اشتباه میکنن دستور switch هست.
                            دستور switch در اصل یک مجموعه از کد ها هست که توسط case های متفاوت میشه از جاهای متفاوتی وارد اون شد و توسط دستور break از این بلوک خارج شد. برای فهم بهتر این مطلب کد زیر رو در نظر بگیرین:

                            switch(n)
                            {
                            case 0:
                            if(something_ok)
                            a = 5;
                            break;
                            case 1:
                            a = 5;
                            break;
                            }

                            این کد رو میشه اینطوری هم نوشت:
                            switch(n)
                            {
                            case 0:
                            if(something_ok)
                            {
                            case 1:
                            a = 5;
                            }
                            break;
                            }


                            فراموش نکنین که در زبانهای دیگه مثل بیسیک و فرترن دستور switch یا معادل اون در حقیقت یک سری if-else هست که بر اساس مقایسه یک سری مقادیر ثابت با یک متغیر مشترک پیاده شده. مثلا:

                            if( a == 0 )
                            {
                            st1
                            }
                            else if( a == 1)
                            {
                            st2
                            }
                            else if(a == 2)
                            {
                            st3
                            }
                            else
                            {
                            st4
                            }



                            مثال بالا رو میشه با معادل خودش به این صورت پیاده کرد:

                            switch(a)
                            {
                            case 0: st1;
                            break;
                            case 1: st2;
                            break;
                            case 2: st3;
                            break;
                            default:
                            st4;
                            break;
                            }



                            اما همونطوری که گفته شد این مسئله یک فرق کلی با بقیه زبونها هست و اونم اینه که دستورات بین { و } توسط کامپایلر ترجمه میشه و دستورات case فقط دستور انتقال اجرا به داخل بلوک switch هستن و break برای انتقال اجرا به دستور بعد از بلوک سوئیچ.

                            دیدگاه


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

                              انتقال کنترل غیر شرطی :
                              1.دستور break :
                              این دستور جهت خروج از حلقه های تکرار میگردد و اگر در داخلی ترین حلقه در چند حلقه تو در تو باشد پس از اجرا فقط از همان حلقه خارج میشود .

                              break;


                              2. دستور continue :
                              این دستور در حلقه تکرار موجب انتقال کنترل به انتهای حلقه و پس از مشاهده "{" به ابتدای حلقه منتقل شده، شرط
                              حلقه مورد بررسی قرار می گیرد ، اگر شرط درست باشد ، اجرای دستورات حلقه ادامه می یابد و گرنه حلقه تکرار
                              خاتمه پیدا کرده و کنترل اجرای برنامه سطر بعد از حلقه را اجرا میکند .

                              continue;


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

                              .
                              .
                              .
                              goto برچسب;
                              .
                              .
                              .
                              برچسب :
                              .
                              .
                              .
                              \\------------------
                              یا
                              \\-----------------------
                              .
                              .
                              .
                              برچسب :
                              .
                              .
                              .
                              goto برچسب;
                              .
                              .
                              .
                              \\---------------------



                              توجه : انتقال کنترل توسط goto فقط در داخل یک تابع امکان پذیر هست ، یعنی نمیشه برچسب رو خارج از تابعی زد که goto به همراه اون برچسب داخل اون تابع هست.

                              ببخشید هر دو قسمت توی یک پست جا نمیشد!

                              دیدگاه


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

                                نوشته اصلی توسط iranesabz
                                سلام
                                میدونم دیر شد ولی خوب پیش میاد دیگه :mrgreen:
                                بخش دوم , آموزش دوم
                                شناسه ها در C
                                شناسه (identifier ) نامی است که به یک قسمت از برنامه مانند متغییر , تابع , ثابت , و یا ... داده می شود .
                                برای نوشتن شناسه ها میتوان از علائم زیر استفاده کرد :
                                حروف انگلیسی کوچک و بزرگ , ارقام , علامت خط پایین یا _
                                نکته : شناسه ها به کوچکی و بزرگی حروف حساس است و نمی تواند یک شناسه با رقم شروع شود مثلا :
                                Sum برابر نیست با sum و 2name مجاز نمی باشد زیرا با عدد شروع شده است .
                                نکته : در زبان سی شناسه نمی تواند از کلمات کلید ی که برای منظورهای خاص در زبان C رزرو شده اند استفاده نمایید به عنوان مثال :
                                If , int , do , for
                                کلمات کلیدی 32 تا میباشند البته به تازگی کلمات دیگری نیز اضافه شده است .

                                انواع داده ها در C

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

                                بیت جزء داده های اصلی نیست ولی ...
                                از آنجا که در متغییر های نوع char , کد اسکی کارکتر ذخیره می گردد از این متغییر ها را می توان به عنوان یک عدد صحیح کوچک نیز استفاده کرد و اعمال ریاضی برروی آنها مجاز است .
                                اصلاح کنند ها در زبان C : اصلاح کننده ها به همراه زبان C به کار می روند و به ما اجازه می دهند دقت نوع داده ی مورد نظر را برای نیازهای مختلف خود تغییر دهیم و این اصلاح کننده ها عبارتند از :
                                Short , long , signed , unsigned

                                ثوابت :
                                ثابت ها اشاره به مقادیر ثابتی دارند که مقدار انها تغییری نمی یابد و چند نوعند :
                                1: ثابتهای صحیح , 2 : ثابتهای اعشاری , 3 : ثابتهای کارکتری مثل 'a'
                                4 : ثابتهای رشته ای مثل "a" یا " iran"
                                نکته : تعریف ثابتها با کلمه ی کلیدی const یا flash انجام میشود مثال :
                                const int a = 33
                                اعلان متغییرها
                                شکل کلی متغییرها به صورت زیر است :
                                ;<tape> <variable-list>
                                که در آن <tayp> از نوع داده هایی است که گفته شد و <variable-list> لیستی از متغییرهاست که با گاما از یکدیگر جدا شده اند .
                                مثال :
                                ;int sum
                                long int a,A,b,c;
                                می توان در هنگام تعریف متغیرها به آن مقدار اولیه داد مثال : int d=0
                                نکته : زبان C به طور خودکار به متغییر ها مقدار اولیه نمی دهد ( حتی 0 )
                                نکته : برای تعیین محل تعریف متغییرها از عملگر @ استفاده می کنیم مثال :
                                iint b@0xA3;
                                پروژه ی برنامه فلاشر به همراه توضیحاتی مختصر برای آشنایی عزیزان
                                پروژه فلاشر
                                #include <mega16.h>
                                #include <delay.h>
                                #difine xtal 1000000
                                Int i ;
                                Void main ( void )
                                {
                                DDRA = 0xFF;
                                While(1)
                                {
                                for ( i=1; i<=128 ; i=i*2 )
                                {
                                PORTD = i ;
                                delay_ms(100);
                                }
                                for ( i=64 ; i>1 ; i=1/2 )
                                {
                                PORTD = i;
                                delay_ms(100);
                                }
                                }
                                }
                                توضیحات برنامه
                                سه خط اول جزو دستورات پیش پردازنده می باشند زیرا با علامت # شروع شده اند . خط چهارم متغییر ه را از نوع int تعریف کرده است . خط پنجم , هر برنامه سی دارای تابعی به نام main است که اجرای برنامه از آن شروع می شود . خط ششم , شروع یک بلوک . خط هفتم , پین های میکرو رو خروجی تعریف کرده زیرا برابر با FF یا به عبارتی 11111111 کرده است در نتیجه زمانی که همه 1 باشد همه پین ها خروجی میباشند .
                                خط هشتم , یک دستور تکرار حلقه است و تا زمانی که شرط برقرار باشد تکرار می گردد . خط 9 شروع بلوکی دیگر .
                                خط دهم , for نیز یک حلقه است که دارای محدوده می باشد و i=0 مقدار دهی اولیه به متغییر حلقه و i<=128 شرط تکرار حلقه و i=i*2 نحوه ی افزایش متغییر حلقه .
                                خط یازدهم , شروع بلوکی دیگر . خط دوازدهم , متغییر را در پورت D قرار می دهد . خط سیزدهم , یک تاخیر است . خط چهاردهم , پایان یکی از بلوکهاست . خط پانزدهم , یک حلقه است که طوری نوشته شده است که زمانی که لامپ های فلاشر تا آخر روشن می رود مجدد برگردد . خط شانزدهم , شروع بلوک دیگر . خط 17 و 18 , همانند خط 12 و 13 . خط 19 و 20 و 21 , نیز پایان سه بلوک می باشد .

                                فقط نمیدونم چرا من کدویژنم نصب نمیشه
                                امید است که بتونم بیشتر و سریعتر ادامه بدهم :wow:
                                اگر می بینید کمی بی نظمی رخ داده است و ; در سمت چپ قرار گرفته بدانید که باید در سمت راست قرار دهید این مشکلاتی است که زمان کپی کردن پیش میاید :mrgreen:

                                آقا این دستور یعنی چی؟ کدوم پایه ها رو یک میکنه؟ اگه میشه با عکس توضیح بدید؟
                                حلقه ی for چرا تا 128 ادامه داره؟ چرا گام حرکت i/2 شده؟ علت این دستورات چیه؟
                                اگر بخواهیم یکی از بالا یکی از پایین روشم خاموش شود و به وسط برسند( یعنی دیود اولی روشم بشه و خاموش بشه بعد دیود هشتمی و بعد دیود دومی و بعد هفتمی و.. تا به وسط برسند و دوباره تکرار بشه)

                                دیدگاه

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