به نام آن که جان رافکرت آموخت چراغ دل به نورجان برافروخت
سلام . اخرین قسمت از فصل ارایه ها :
در جلسه آخر از این فصل آموزشمان میخواهیم ارایه ها را با حل کردن مسائل مختلفی یاد بگیریم ! امیدوارم که دو جلسه پیش را مطالعه کرده باشید و حالا با یک آمادگی به سراغ این جلسه خیز برداشته باشید
خب اولین مثالی که میخواهیم حل کنیم یک برنامه ی ساده که توان اعداد ۰ تا ۱۰ را محاسبه میکند ! ابتدا کد را مشاهده کنیم :
#include<stdio.h>
#define MAX_ITEM 11
int main(void)
{
int i , squar[MAX_ITEM] ;
for(i=0 ; i< MAX_ITEM ; ++i)
{
squar[i] = i * i ;
printf("squar of Number %d : %d\n", i,squar[i] ) ;
}
}
همانطور که گفته شد میخواهیم توان اعداد ۰ تا ۱۰ را محاسبه کنیم و اگر به خاطر داشته باشید ارایه ها بصورت n-1 عمل میکنند یعنی اگر بخواهیم عدد ۱۰ را هم محاسبه کنیم باید مقدار دهی اولیه خود را که در اینجا MAX_ITEM میباشد را عدد ۱۱ بگذاریم در غیر این صورت یعنی اگر ۱۰ را قرار دهیم تنها تا عدد ۹ را محاسبه میکند !
در ادامه ،در تابع اصلی خود یک ارایه به نام square تعریف کردهایم که سایزش را معادل MAX_ITEM قرار دادهایم چرا که میخواهیم نتیجه ی هر توان را در یک خانه ی حافظه ای قرار دهیم ! یک متغیر I هم تعریف کردهایم که متغیر کنترل کننده حلقه ما است .
پس از این تعریف متغیر و ارایه یک حلقه ی for داریم که نقدار دهی اولیه آن ۰ است و باید تا MAX_ITEM اجرا شود !
در داخل حلقه هم تعریف کردهایم که هر خانهی حافظه متعلق به حاصل ضرب i * I باشد .
سپس با استفاده از تابع خروجی ،خروجی را به کاربر نشان میدهیم
حالا یک مثال نسبتاً خوب حل کنیم تا خیلی با C حال کنیم
در آمار تفاضل بین دادهها و میانگین گرفتن از دادهها را داشتیم که میخواهیم به سادهترین شکل ممکن این برنامه را بنویسیم
ابتدا کد را ببینیم و سپس درباره برنامه حرف بزنیم
:
#include<stdio.h>
#include<math.h>
#define MAX_ITEM 8
int main(void)
{
double x[MAX_ITEM],mean , st_dev , sum , sum_sqr ;
int i ;
printf("Enter %d numbers seprated by blank or <return>s\n ",MAX_ITEM) ;
for(i = 0; i < MAX_ITEM ; ++i)
scanf("%lf", &x[i]);
sum = 0;
sum_sqr = 0;
for(i = 0 ; i < MAX_ITEM; ++i)
{
sum += x[i] ;
sum_sqr += x[i] * x[i] ;
}
mean = sum / MAX_ITEM;
st_dev = sqrt(sum_sqr / MAX_ITEM - mean * mean) ;
printf("The mean is %.2f.\n" , mean);
printf("The standard devation is %.2f.\n",st_dev);
printf("\nTable of the diffrences between data values and mean\n");
printf("Index Item diffrence\n");
for( i = 0 ; i<MAX_ITEM ; ++i)
printf("%3d%4c%9.2f%5c%9.2f\n",i,' ',x[i],' ',x[i] - mean);
return (0);
}
ثابت ماکرو MAX_ITEM اندازه ارایه را تعیین میکند. از متغیر I در هر حلقه ، به عنوان متغیر کنترل حلقه و اندیس ارایه ها استفاده شده است .
حلقه for اول :
for(i = 0; i < MAX_ITEM ; ++i)
scanf("%lf", &x[i]);
در هر عضو ارایه x ، یک مقدار ذخیره میکند . برای هر مقدار I از ۰ تا ۷ ، احضار تابع scanf تکرار میشود و هر بار یک داده جدید از ورودی خوانده شده و در x
ذخیره میشود . اندیس I تعیین میکند کدام عضو ارایه مقدار داده ی بعدی را دریافت میکند .
حلقه for دوم مجموع تمام مقادیر ذخیره شده در این ارایه را در sum انبار (ذخیره) می کند. این حلقه ، مجموع مربعات تمام مقادیر عضو های این ارایه را نیز در sum_sqr انبار(ذخیره) میکند.
اندکی بعد این حلقه به طور مشروح و با جزئیات کامل بررسی میشود . آخرین حلقه for :
for( i = 0 ; i<MAX_ITEM ; ++i)
printf("%3d%4c%9.2f%5c%9.2f\n",i,' ',x[i],' ',x[i] – mean);
جدول را چاپ میکند . در هر خط از این جدول ، اندیس ارایه یعنی عضو ارایه و تفاضل بین آن عضو و میانگین دادهها یعنی x
-mean باعث میشود . توجه دارید که حافظه ی نگهدارنده ی رشته فورمت در احضار تابع ()printf باعث میشود در بالای هر ستون از مقادیر داخل جدول خروجی ، عنوان ستون مربوطه چاپ میشود . اکنون که برنامه را به طور کامل ملاحظه کردهاید ،نکاهی دقیقتر به محاسبه ی حلقه ی for می افکنیم :
sum = 0;
sum_sqr = 0;
for(i = 0 ; i < MAX_ITEM; ++i)
{
sum += x[i] ;
sum_sqr += x[i] * x[i] ;
}
این حلقه حاصل جمع هر هشت عضو ارایه x را در متغیر sum ذخیره میکند . در هر بار از اجرای بدنه ی حلقه ، عضو بعدی ارایه x به sum اضافه میشود . پس از آن مقدار این عضو ارایه به توان ۲ میرسد و توان دوم آن در نگهدارندهی مجموع مربعات (توان) عضو ها یعنی sum_sqr ذخیره میشود .
انحراف معیار ، مجموعهای از دادهها ، مقیاسی برای پراکندگی مقادیر دادهها در اطراف میانگین است . انحراف معیار کوچک ، معرف آن است مه تمام مقادیر دادهای به فاصله ی نسبتاً نزدیکی از مقدار میانگین قرار دارند .
فرمول محاسبه انحراف معیار در اینجا :
st_dev = sqrt(sum_sqr / MAX_ITEM - mean * mean) ;
مثالهای ارایه های یک بعدی به اتمام رسید در ادامه با یک مثال ساده برای ارایه های چندبعدی با طرز کار این ارایه ها آشنا می شویم :
ساخت جدول ضرب اعداد با ارایه دو بعدی :
#include<stdio.h>
int main(void)
{
int table[10][10] , i , j;
for(i = 0; i < 10 ; i++)
for(j=0;j<10;j++)
table[i][j] = (i+1) * (j+1) ;
for(i = 0 ; i< 10 ; i ++){
for(j = 0 ; j < 10 ; j++)
printf("%4d",table[i][j]);
printf("\n");
}
}
در تابع اصلی ما یک ارایه دو بعدی با سایز ۱۰ میسازیم همچنین دو متغیر I , j هم میسازیم که متغیر های کنترل حلقه ی ما هستند .
حلقه for تو در تو اول :
for(i = 0; i < 10 ; i++)
for(j=0;j<10;j++)
table[i][j] = (i+1) * (j+1)
;
اعداد ۱ – ۱۰ را (بخاطر قرار دادن i+1 و j+1 ) در یکدیگر ضرب میکند
پ حلقه for تو در تو دوم :
for(i = 0 ; i< 10 ; i ++){
for(j = 0 ; j < 10 ; j++)
printf("%4d",table[i][j]);
printf("\n");
نتیجه محاسبه حلقه اول را در خروجی چاپ میکند .
امیدوارم تا اینجا از زبان C لذت برده باشید
- بعد از تمام شدن جلسات متنی ، آموزشها را بصورت ویدیو (با صدا) هم خواهم ساخت تا هم افرادی که دوست دارند که آموزش متنی داشته باشند (که خودم یکی از این افراد هستم ) و هم افرادی که علاقهمند به آموزش ویدیویی هستند از این زبان جذاب بهره مند شوند
- بعد از تمام شدن آموزشهای زبان C دیگر زبانهای برنامه نویسی را هم در انجمن کار خواهیم کرد
(انجمن برنامه نویسی رو رونق بدیم و گسترشش بدیم)
- نظرات خود را برای من در شخصی ارسال کنید و سؤال و یا نکته ی ابهامی هم وجود داشت سؤال کنید .
به این آموزشها قناعت نکنید و دیگر منابع خارجی مثل :
این آموزشها را هم بخوانید
شاد و پیروز باشید / یا حق