تا اینجا با متغیرها و شرطها آشنا شدیم. حالا میخوایم وارد موضوع مهمی بشیم: آرایهها.
برای شروع، بیاییم یک برنامهی کوچک بنویسیم که تعداد دفعات تکرار هر رقم (۰ تا ۹)، کاراکترهای فاصله (Space، Tab، Enter) و سایر کاراکترها رو بشماره.
این مثال شاید یکم مصنوعی به نظر برسه، اما کمک میکنه چند ویژگی مهم زبان C رو همزمان یاد بگیریم.
کد برنامه: شمارش ارقام، فاصلهها و کاراکترهای دیگر
#include <stdio.h>
/* شمارش ارقام، فاصلهها و سایر کاراکترها */
main()
{
int c, i, nwhite, nother;
int ndigit[10];
/* مقداردهی اولیه شمارندهها */
nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[i] = 0;
/* خواندن ورودی و بررسی نوع کاراکتر */
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9') /* اگر کاراکتر رقم بود */
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t') /* اگر فاصله، اینتر یا تب بود */
++nwhite;
else /* سایر کاراکترها */
++nother;
/* چاپ نتایج */
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n", nwhite, nother);
}
خروجی برنامه
اگر همین برنامه رو روی خودش اجرا کنیم (یعنی سورس کد رو به عنوان ورودی بدیم)، چیزی شبیه این خروجی میگیریم:
digits = 9 3 0 0 0 0 0 0 0 1, white space = 123, other = 345
توضیح کد
۱. تعریف آرایه
int ndigit[10];
اینجا ما یک آرایه با ۱۰ خانه تعریف کردیم. هر خانه یک عدد صحیح (int) نگه میداره.
پس ndigit[0] تا ndigit[9] داریم.
نکته: در زبان C همیشه شمارهگذاری آرایهها از ۰ شروع میشه.
۲. استفاده از آرایه به جای متغیرهای جداگانه
فرض کن برای هر رقم (۰ تا ۹) یک متغیر جداگانه میذاشتیم! اونوقت ۱۰ خط اضافه فقط برای تعریف لازم بود.
ولی با آرایه همه چیز مرتب و سادهتر میشه.
۳. تشخیص نوع کاراکتر
با این شرطها مشخص میکنیم که هر کاراکتر ورودی به کدوم دسته تعلق داره:
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
-
اگر c یک رقم باشه → شمارندهی همون رقم زیاد میشه.
-
اگر فاصله، تب یا اینتر باشه → شمارندهی فاصلهها (nwhite) زیاد میشه.
-
در غیر این صورت → شمارندهی بقیه کاراکترها (nother) افزایش پیدا میکنه.
۴. نکته مهم درباره کاراکترها در C
تو C، کاراکترها در واقع اعداد صحیح کوچیک هستن. مثلا:
-
'0' یک عدد داره
-
'1' عدد بعدشه
-
...
-
'9' هم عدد آخر
یعنی '0' تا '9' پشت سر هم قرار گرفتن.
به همین خاطر وقتی مینویسیم:
c - '0'
اگه c برابر '3' باشه، نتیجه عدد ۳ میشه.
این عدد میتونه بهراحتی به عنوان ایندکس آرایه استفاده بشه.
۵. ساختار شرطی if – else if – else
این الگو رو زیاد میبینیم:
if (شرط۱)
دستور۱
else if (شرط۲)
دستور۲
...
else
دستور نهایی
برنامه از بالا شروع میکنه و شرطها رو یکییکی بررسی میکنه.
به محض اینکه یکی درست باشه، همون بخش اجرا میشه و بقیه نادیده گرفته میشه.
تمرینها
-
تمرین 1-13: برنامهای بنویسید که هیستوگرام طول کلمات ورودی رو چاپ کنه. (افقی راحتتره، ولی عمودی جذابتره!)
-
تمرین 1-14: برنامهای بنویسید که هیستوگرام فراوانی کاراکترهای مختلف ورودی رو چاپ کنه.
اینجا هم دیدیم که آرایهها چطور میتونن جای چندین متغیر رو بگیرن و برنامه رو سادهتر کنن.