FPGA, آموزش میکروبلیز و زبان C, توصیه شده, مقاله

آموزش میکروبلیز قسمت پنجم : آموزش زبان برنامه‌نویسی C

آموزش میکروبلیز از مبتدی تا پیشرفته

بسم‌الله‌الرحمن‌الرحیم

 

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

 

کاراکتر در زبان برنامه‌نویسی C چیست؟

کاراکتر (char) یک نوع متغیر (Variable) در زبان برنامه نویسی C است که برای ذخیره تنها یک کاراکتر به کار می‌رود. منظور از کاراکتر در واقع، حروف الفبا، اعداد و علامت هایی است که در متن ها به کار می‌بریم. نکته ای که در استفاده از کاراکتر‌ها بسیار حائز اهمیت است، اندازه آن می‌باشد. که در قسمت ” آموزش میکروبلیز قسمت سوم: آموزش زبان برنامه‌نویسی C ” به این موضوع پرداختیم.

طرز صحیح استفاده از کاراکتر در زبان برنامه‌نویسی C به صورت زیر است.

هشدار: در خط برنامه ای که نوشتیم فقط تنها کلمه ای که کلیدی است و باید باشد اسم char است و ما بقی همگی اسم‌هایی کاملا اختیاری هستند. 

هشدار: یک کاراکتر در بین دو علامت ‘ ‘ تعریف می‌شود (نباید علامت ” ” را به کار ببرید).

هشدار: تلفظ صحیح کلمه Char به صورت کر است نه چر ( لطفا درست تلفط کنید خودتونو مسخره می‌کنند خیرتونو می‌خوام اینجوری میگم).

آرایه در زبان برنامه‌نویسی C چیست؟

آرایه (Array)، تعدادی عنصر از یک نوع خاص هستند که با یک‌دیگر تعریف می‌شوند و با استفاده از اندیس های (در ادامه توضیح می‌دهیم) متناظر آنها، می‌توانیم به آنها اشاره نماییم.

طرز صحیح تعریف آرایه در زبان برنامه‌نویسی C

در صورتیکه بخواهیم آرایه را مقدار دهی اولیه کنیم باید از علامت {} استفاده کنیم.

طرز صحیح مقدار دهی اولیه به متغیر در زبان برنامه‌نویسی C

 

روش اول:

در این روش اگر دقت کنید سایز آرایه که عدد 5 (تعداد اعضای آرایه) است مشخص شده است.

روش دوم:

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

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

نحوه فراخوانی اعضای آرایه در زبان برنامه‌نویسی C

ابتدا نیاز است که با نحوه شماره گذاری (اندیس گذاری) آرایه‌ها آشنا شویم. برای درک این موضوع به تصویری که در ادامه قرار می‌دهیم دقت کنید.

آرایه در زبان C چیست؟

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

نتبجه مهم: در آرایه‌ها اولین عضو همیشه از عدد صفر شروع می‌شود.

خب حالا با توجه به اینکه با نحوه اندیس گذاری آرایه‌ها آشنا شدیم نوبت به استفاده از اعضای آرایه رسیده است که برای این کار کافی‌است به صورت دستور زیر عمل کنیم.

حال اگر به جدولی که در بالا قرار داده‌ایم دقت کنید می‌بینید که خانه چهارم متعلق به عدد 50 است.

دقت کنید که برای فراخوانی هر عضو از آرایه فقط کافی‌ است که اندیس مربوطه آن را درون براکتی که آرایه را تعریف کرده‌ایم قرار دهیم.

تعریف آرایه چند بعدی در زبان برنامه‌نویسی C

تقریبا می‌توان گفت مثل آرایه تک بعدی است اما با این تفاوت که اعضای آن بسته به چند بعدی بودن آرایه متفاوت است.

به فرمول زیر دقت کنید.

به طور مثال

حال با تعریف بالا، می‌خواهیم آرایه دو بعدی را تعریف کنیم.

در واقع اگر به فرمول بالا نگاه کنیم می‌بینیم که دقیقا یک ماتریس تشکیل داده است. برای درک بهتر لطفا به تصویری که در ادامه قرار می‌دهیم دقت کنید.

تعریف آرایه‌ها در زبان برنامه‌نویسی C

اگر به جدول دقت کنید دقیقا متوجه خواهید شد که یک ماتریس تشکیل شده است که اگر با تعریف آرایه دو بعدی آن را قیاس کنیم به این‌گونه است که مقدار X در واقع همان ROW و مقدار Y همان Column است. برای درک بهتر به مثال زیر توجه کنید.

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

دسترسی به اعضای آرایه دو بعدی در زبان برنامه‌نویسی C

تمرین: مقدار a چه عددی است؟

برای درک بهتر به مثال زیر توجه کنید.(تحلیلش با خودتون واقعا ساده است)

قبل از اینکه به خروجی کد نگاه کنید توصیه می‌کنیم ابتدا خودتان خروجی را تحلیل کنید.

اشاره‌گر‌ها در آرایه‌ها

یکی از مباحثی که بسیار زیاد در برنامه‌نویسی از اهمیت زیادی برخوردار است بحث اشاره‌گر‌ها (Pointer) است که در بخش خودش به طور مفصل در این مورد صحبت خواهیم کرد ان شالله اما در این قسمت می‌خواهیم صرفا از اشاره‌گر‌ها برای ارتباط با آرایه‌ها صحبت کنیم.

نکته مهم این است که آرایه‌ها خود نوعی اشاره‌گر محسوب می‌شوند که ما از همین نکته می‌خواهیم در ادامه استفاده کنیم.

طرز استفاده از اشاره‌گر‌ها در آرایه‌ها

خب اگر به نکته‌ای که در بالا اشاره کردیم دقت کنیم می‌توانیم به صورت زیر عمل کنیم.

اجازه دهید این قسمت را با یک دیگر تحلیل کنیم.

علامت * به معنی اشاره‌گر است که در اینجا اشاره‌گر P از نوع Double تعریف شده است.

تعریف یک آرایه 10 عضوی با نام Balance که نکته جالب اینجا است که از نوع اشاره‌گر تعریف نشده است ( معنیش اینکه خودش یک نوع اشاره‌گره وگرنه امکان نداشت بتونن اینجوری خوش و خرم کنار هم باشن)

نکته طلایی: باید و حتما نوع اشاره‌گر‌ها با یک دیگر یکی باشد به طور مثال نوع P و Balance هر دو از نوع Double هستند. ( در مورد تبدیل صریح و ضمنی هم در ادامه مقالات خواهیم گفت).

دسترسی به اعضای آرایه از طریق اشاره‌گر

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

تا این قسمت که چیز جدیدی را نگفته‌ایم و دقیقا یک آرایه 5 عضوی و یک اشاره‌گر P تعریف کرده‌ایم. حالا برای دسترسی به هر عضو باید به صورت دستور زیر عمل کنیم.

اگر دقت کنید اشاره‌گر بعلاوه اندیس موردنظر آرایه به همراه علامت * در خارج از پرانتز قادر هستیم که هر عضو آرایه را فراخوانی کنیم.

نوشتن توابع بر حسب آرایه‌ها

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

  • تابع اشاره‌گر با آرایه‌ها
  • تابع آرایه با اندازه محدود
  • تابع آرایه با اندازه نامحدود

 تابع اشاره‌گر با آرایه‌ها

این تابع داری ورودی از نوع اشاره‌گر است که به صورت زیر تعریف می‌شود.

تابع آرایه با اندازه محدود

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

تابع آرایه با اندازه نامحدود

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

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

مثال: تابعی بنوسید که اسم و سایز آرایه را به همراه تشخیص اعضای آرایه بدست آورد و در نهایت عمل میان‌گیری را انجام دهد.

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

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

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

خروجی کد هم به صورت زیر می‌باشد.

رشته در زبان برنامه‌نویسی C چیست؟

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

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

اگر به برنامه بالا نگاه کنیم می‌بینیم که دقیقا آرایه ای از کاراکتر‌ها کنار یک دیگر قرار گرفته‌اند که در نهایت، این حروف می‌خواهند به کلمه Hello تبدیل شوند اما سوال اینجا است که کاراکتر آخر چیست؟

این کاراکتر نشان‌دهنده انتهای رشته از کاراکتر خاصی به نام (تهی= NULL) است که با ‘۰\ ‘ مشخص شده است. بنابراین آخرین کاراکتر در هر رشته برابر با ‘۰\ ‘ می باشد. لذا اگر رشته ای به طول n تعریف کنیم، فقط از n-1 کاراکتر آن می توانیم استفاده کنیم. زیرا کاراکتر آخر ‘۰\ ‘ است.

تعریف اصولی رشته در زبان برنامه‌نویسی C

روش اول

در این روش می‌توان مقدار اندازه رشته را مشخص کرد که باید حتما به این نکته هم توجه کنید که خود کاراکتر تهی یا Null هم، خودش یک کاراکتر محسوب می‌شود. برای درک بهتر به مثال زیر توجه کنید.
اگر دقت کنید کلمه Hello از 5 حرف تشکیل شده است که حرف 6 آن همان کاراکتر تهی است. پس لطفا در صورتیکه از این روش استفاده می‌کنید حتما به نکته ای که گفته شد دقت کنید.

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

روش دوم

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

خب برای اینکه درک بهتری از این نوع کد داشته باشیم نیاز است به تصویری که در ادامه قرار می‌دهیم دقت کنید.

رشته ها در زبان C و کاربرد آنها

اگر به تصویر دقت کنید می‌بینید که خود کامپایلر به صورت خودکار کاراکتر تهی را قرار داده است و در بخش آدرس‌های حافظه نیز به صورت پشت سر هم قرار گرفته‌اند.

تعریف آرایه‌ای از رشته‌ها

اگر بخواهیم متغیری را تعریف کنیم که چندین رشته را در خود قرار دهد باید آرایه ای از رشته ها را تعریف کنیم. که باید به صورت زیر عمل کنیم.

آرایه از رشته ها در زبان C

تعریف اصولی آرایه‌ای از رشته‌ها در زبان

روش اول

در این روش باید طول هر رشته و تعداد رشته را حتما مشخص کنیم.

 در طول رشته کاراکتر تهی را فراموش نکنید.

روش دوم

در این روش نیازی به تعیین طول رشته‌ها نیست البته دقت کنید که حتما باید تعداد آن‌ها ذکر شود.

معرفی توابع کاربردی کتابخانه String.h

تابع    strcpy
این تابع کار کپی کردن مقادیر را انجام می‌دهد. به عبارت ساده تر مقدار S2 را جای S1 قرار می‌دهد. برای درک بهتر به همراه استفاده آن در برنامه‌نویسی به مثال زیر توجه کنید.
خروجی برنامه به صورت زیر است.
تابع    strcat
این تابع کار الحاق رشته‌ها را به یک دیگر انجام می‌دهد برای درک بهتر به مثال زیر توجه کنید.
خروجی برنامه به صورت زیر است.
تابع    strlen
از این تابع برای بدست آوردن طول رشته استفاده می‌شود برای درک بهتر به مثال زیر توجه کنید.
توصیه: به نحوه برنامه‌نویسی دقت کنید چون علاوه بر اینکه کار با تابع موردنظر را یاد می‌گیرید طرز صحیح تعریف متغیر و استفاده از سایر دستورات را هم می‌آموزید که فکر نمی‌کنیم خالی از لطف باشد.

خروجی برنامه به صورت زیر است.

تابع  strcmp

این تابع کار مقایسه بین دو مقدار S1 و S2 را انجام می‌دهد که خروجی آن از سه حالت زیر خارج نیست.

حالت اول   (0>):

زمانیکه مقدار S1 کوچکتر از مقدار S2 باشد که در این حالت خروجی نادرست است.

حالت دوم     (0):

زمانیکه مقدار  S1 و S2 برابر باشند که در این حالت مقدار خروجی درست است.

حالت سوم (0<):

زمانیکه مقدار S1 بزرگتر از مقدار S2 باشد که در این حالت هم خروجی نادرست است.

برای درک بهتر به مثال زیر دقت کنید.

در این مثال یک رشته که نام آن apple انتخاب شده است در اول برنامه تعریف شده است و در نهایت برنامه ای نوشته شده است که در صورتیکه رشته ای برابر با apple وارد شود در خورجی عبارتی مبنی بر صحیح بودن جواب می‌بینیم در غیر اینصورت پاسخی مبنی بر صحیح بودن جواب دریافت نخواهیم کرد.

خروجی برنامه به صورت زیر است.

تابع   strchr

این تابع در واقع تعداد موجود بودن یا نبودن یک کاراکتر را در یک جمله تعیین می‌کند. برای درک بهتر به مثال زیر توجه کنید.

برنامه چون واضح نوشته شده فکر نمی‌کنیم که نیاز به توضیح داشته باشد.

خروجی برنامه به صورت زیر است.

تابع    strstr

این تابع در واقع به جستجو رشته موردنظر در یک عبارت می‌گردد. برای درک بهتر به مثال زیر دقت کنید.

خروجی برنامه به صورت زیر است.

دقت کنید که برای اینکه درک بهتری از کتابخانه های استفاده شده در زبان C داشته باشید توصیه میکنیم اینجا کلیک کنید.

امیدوارم که این آموزش هم مورد توجه شما مخاطبین عزیز قرار گرفته باشد.


انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.  همکاری با سیسوگ

 
BLO OM

درباره BLO OM

«السَّلَامُ عَلَیْکَ یَا أَبَا عَبْدِ اللَّهِ، السَّلَامُ عَلَیْکَ وَ رَحْمَهُ اللَّهِ وَ بَرَکَاتُهُ».

نوشته های مشابه

پاسخی بگذارید

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

2 دیدگاه

  1. Avatar مجید گفت:

    سلام
    دستان درد نکند از اینکه زحمت می کشید و مطالب آموزشی زبان سی را منتشر می کنید .
    من زبان سی را با کامپیوتر 80286 و با کامپایلر توربو سی شروع کردم و از آن زمان تا حالا هم برای میکرو های مختلف از 8051 تا ARM از آن استفاده کرده و می کنم .
    با وجود این مقاله های شما را از قسمت اول تا الان خواندم در من شوق دوباره خوانی اصول و روش های برنامه نویسی به زبان سی زنده کرد و مطالبی بود که یا فراموش کرده بودم یا فکر کرده بودم که زیاد لازم نباشد و از آن ها استفاده نمی کردم .
    متوجه شدم که باید زودتر این کار را می کردم .
    این را به شما مدیونم .
    خیلی خیلی سپاسگزارم از اینکه قبول زحمت کردین و این مطالب را تهیه می کنید .
    مطمئن باشید که سطر به سطر این مطالب را خواندم و خواهم خواند.
    با تشکر مجدد
    مجید

    1. BLO OM BLO OM گفت:

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