دوشنبه , ۳۰ اردیبهشت ۱۳۹۸
آخرین مطالب
LINK TABLES
خانه | برنامه‌نویسی | زبان C – آرایه‌ها (جلسه ۴)

زبان C – آرایه‌ها (جلسه ۴)

امیدوارم که توپ باشن همه‌ی بچه‌ها و آماده برای درس امروز. کم کم که پیش میریم مباحث داره حرفه‌ای تر میشه و توی برنامه نویسی میکروکنترلر میتونید ازش استفاده کنید. خب بریم برای شروع درس آرایه ها که اولین داده از نوع مرکب هست. 🙂

 

طبق جلسات دو و سه، می دانیم که در برنامه نویسی از متغییرها برای ذخیره اطلاعات استفاده می شود. ولی مواردی پیش می آید که اطلاعات زیادی در یک برنامه به صورت یکجا وجود دارد و باید عملیاتی روی تمام آن ها انجام گیرد. در این صورت معرفی کردن تعداد زیادی متغییر و انجام عملیات روی آن ها کار بسیار وقت گیری خواهد بود و نیاز به برنامه های طولانی با دستورهای مشابه خواهد داشت. فرض کنید لازم باشد مجموعه بزرگی از اعداد خوانده شوند، ۵۰ سنسور به میکروکنترلر متصل است و باید تمام این مقادیر را خوانده و ذخیره کند. این جاست که متغیرهای معمولی که تا کنون معرفی شدند جواب گو نیستند و باید سراغ نوع جدید از داده رفت، چون اگر بخواهیم از متغیر معمولی استفاده کنیم نیاز به تعریف ۵۰ اسم مختلف و متمایز برای متغیرها است و این فقط بخشی از دشواری کار است. چرا که برای انجام عملیات ریاضی باید اسم همه را بدانیم و … . این نوع جدید آرایه نام دارد. آرایه مجموعه ای از متغیرهای هم طول و هم نوع را تحت عنوان یک نام معرفی می کند.

مزایای استفاده از آرایه

  • اعلان ساده تر (اعلان یک متغییر بجای ده ها و هزاران)
  • سادگی کار با آنها ( عملیات ریاضی یکسانی بر روی آنها انجام می گیرد)
  • انعطاف پذیری بیشتر (به روشهای مختلف می توان آنها را پردازش نمود)
  • سهولت فهم برنامه
  • کاهش اندازه برنامه نوشته شده

آرایه های یک بعدی

در اثر دستوری به شکل int a، یک متغیر به نام a در برنامه تعریف می‌شود که به آن دو خانه از حافظه نسبت داده می‌شود. حال سوالی که وجود دارد این است که آیا می‌توان به جای یک خانه از حافظه، تعدادی خانه را به یک نام منسوب کرد؟

پاسخ را می‌توان در آرایه ‌ها جستجو کرد. آرایه عبارت است از مجموعه‌ای از متغیرهای معمولی(ساده) همنوع، هم طول و کنار هم که تحت عنوان یک اسم با تعداد عناصر معین در برنامه تعریف می‌شوند. دستیابی به عناصر آرایه ها از طریق عملگر زیرنویس که علامت آن یک زوج کروشه است و در سمت راست اسم آرایه قرار می‌گیرد، انجام می‌شود. شماره خانه مورد نظر از آرایه که اندیس آرایه نیز نامیده می‌شود در داخل زوج کروشه قرار می‌گیرد. در ادامه با تعریف آرایه آشنا می شویم.

نحوه تعریف

برای این کار باید در دستور تعریف، نوع و نام آرایه ذکر گردد و بعد از آن در داخل یک زوج کروشه یعنی [ ]، تعداد عناصر (خانه های) آرایه به درج شود. در باکس زیر، نحوه تعریف را مشاهده می کنید:

آرایه ای که دارای n عنصر (خانه) باشد، اندیس عناصر آن از صفر تا n-1 تعریف می‌شود و کلیه این عناصر از یک نوع می‌باشند. مثلا برای یک آرایه با ۵ خانه شماره اندیس از ۰ تا ۴ تغییر می کند. در واقع خانه اول از صفر شروع می شود. به مثال زیر توجه کنید:

  • در خط اول آرایه ای از نوع char با نام x که دارای ۷ خانه یا عنصر است تعریف شده است.
  • در خط دوم آرایه ای از نوع int با نام s که دارای ۱۰ خانه یا عنصر است تعریف شده است.
  • تذکر: اندازه یا تعداد خانه های آرایه باید در زمان تعریف آن مشخص گردد.

برای فهم بهتر تعریف آرایه به شکل زیر دقت کنید:

در این شکل آرایه ای از نوع int با نام x که دارای ۷ خانه است تعریف شده است. همان طور که مشخص است، اندیس آرایه از ۰ شروع شده و تا ۶ پیش می رود. هم چنین طبق شکل واضح است که در هر خانه از آرایه چه مقداری ذخیره شده است. سوال: طول [۰]x چند بایت است؟

حتما این سوال ذهنتان را مشغول کرده که چگونه می توان به آرایه مقدار داد؟ پس به مثال زیر توجه کنید:

در آرایه ۴ عضوی بالا که با نام i مشخص شده است:

  • عدد ۳ در [۰]i قرار می گیرد.
  • عدد ۶ در [۱]i قرار می گیرد.
  • عدد ۱۰ در [۲]i قرار می گیرد.
  • عدد ۱۵ در [۳]i قرار می گیرد.

هم چنین به سبک زیر هم می توان آرایه ها را مقدار دهی کرد.

آرایه ها ی دو بعدی

تا به این جا درباره آرایه هایی صبحت شد که یک اندیس داشتند یا به بیان دیگر تمام خانه های آن ها در یک بعد بود. آرایه های دیگری وجود دارند که دو اندیس دارند. خانه های این آرایه ها در دو بعد است. دقیقا مانند خانه های یک جدول که در دروزنامه حل می کنید و در دو بعد x و y دارای خانه است. در نتیجه آرایه دو بعدی، یک ماتریس دارای سطر و ستون است. هر خانه از این ماتریس یک متغیر است و با اندیس های سطر و ستون مشخص می شود.

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

به مثال زیر از تعریف آرایه دو بعدی دقت کنید:

در این خط یک آرایه دو بعدی از نوع int و با نام array تعریف شده که ۲ سطر و ۴ ستون دارد. در مجموع دارای ۸ خانه است.

حال مثال بالا را مقدار دهی اولیه می کنیم :

اعداد ۱و۲و۳و۴ در خانه های ۰ تا ۳ سطر اول و اعداد ۵و۶و۷و۸ در خانه های ۰ تا ۳ سطر دوم قرار می گیرد.

array[0][0] =1      array[0][1]=2       array[0][2]=3       array[0][3]=4

array[1][0] =5      array[1][1]=6       array[1][2]=7       array[1][3]=8

اعضای آرایه دو بعدی نیز به تنهایی می توانند در محاسبات شرکت کنند.

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

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

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

درباره ی احسان عبداللهی

احسان عبداللهی هستم | کارشناسی الکترونیک خوندم و کارشناسی ارشد مخابرات |در سال 94 وب سایت میکرولرن را راه اندازی کردم | سعی کردم هر چیزی را به صورت کاربردی دنبال کنم، برای همین از کارشناسی کار با میکروکنترلرهای AVR و ARM، برنامه نویسی C و طراحی PCB را به صورت تخصصی کار کردم و از کارشناسی ارشد برنامه نویسی پایتون ، Computer vision و deep learning را به صورت تخصصی و کاربردی شروع کردم | الان هم سعی میکنم همیشه خودم را به روز نگه دارم و لذت کار کردن با دنیای برنامه نویسی و امبدد سیستم ها را به دیگران انتقال بدم

۷ دیدگاه

  1. سلام خسته نباشید، ممنون بابت اطلاعات خوبتون
    من دمای بدست اومده توسط سنسور دما lm35 رو درون یک آرایه بدون دادن عددی برای تعداد خانه های اون ارایه ریختم حالا می‌خوام بدونم مقدار این سنسور در هر لحظه چند خانه از ارایه رو به خودش اختصاص داده؟؟
    به عبارتی می‌خوام تعداد خونه های ارایه رو بدست بیارم ، لطفاً کمکم کنید با چه کدی این کار رو انجام بدم؟؟

    • سلام
      بستگی داره آرایه از چه نوعی باشه. اگه از نوع int باشه یعنی هر خونه ۱۶ بیت داره پس مقدار خوانده شده از lm35 حتما در یک خونه جا میشه.

      • ممنون از پاسخگوییتون
        حالا اگه از ایسی ساعت ds1307 استفاده کنیم و نوع ارایه از نوع char باشه؟؟
        من می‌خوام مقدار خونه های آرایه رو بدست بیارم تا با استفاده از این عدد بدست اومده ساعت رو با ماژول وای فای به یک سرور انتقال بدم ، چون این ماژول از پروتکل یوزارت استفاده می‌کنه من باید دقیقا بدونم تعداد ارایه ام چندتاست

        • تعداد خونه های آرایه را که شما در شروع کار تعیین می کنید. منظورتون را دقیق تر بیان کنید.

          • من تعداد خونه های ارایه رو تعیین نکردم و باز گذاشتم با این حال اگر هم تعیین کنم برای مثال من برای وقتی که ساعت ۱۲:۱۲:۱۲ است ۸ خونه رو اشغال می‌کنه اما زمانی که ساعت ۲:۴:۱۳ است ۶ خونه اشغال میشه و حالت های دیگه برای همین من می‌خوام تعداد خونه های پر شده توسط تراشه ds1307 رو بدست بیارم

          • باید برنامه را ببینم. توی تلگرام میتونید ارسال کنید.از صفحه ارتباط با ما میتونید اقدام کنید.

  2. با سلام
    میشه در مورد نمایش ارایه های یک بعدی و دو بعدی در lcd کاراکتری توضیح بفرمایین
    با تشکر از اساتید و سایت میکرولرن

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *