پاسخ : آموزش برنامه نویسی به زبان C

ساخت وبلاگ

به نام آن که جان رافکرت آموخت             چراغ دل به نورجان برافروخت

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

خب اولین مثالی که می‌خواهیم حل کنیم یک برنامه ی ساده که توان اعداد ۰ تا ۱۰ را محاسبه می‌کند ! ابتدا کد را مشاهده کنیم :

#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 : %dn", i,squar[i] ) ;
    }

}

همانطور که گفته شد می‌خواهیم توان اعداد ۰ تا ۱۰ را محاسبه کنیم و اگر به خاطر داشته باشید ارایه ها بصورت n-1 عمل میکنند یعنی اگر بخواهیم عدد ۱۰ را هم محاسبه کنیم باید مقدار دهی اولیه خود را که در اینجا MAX_ITEM می‌باشد را عدد ۱۱ بگذاریم در غیر این صورت یعنی اگر ۱۰ را قرار دهیم تنها تا عدد ۹ را محاسبه می‌کند !

در ادامه ،‌در تابع اصلی خود یک ارایه به نام square تعریف کرده‌ایم که سایزش را معادل MAX_ITEM قرار داده‌ایم چرا که می‌خواهیم نتیجه ی هر توان را در یک خانه ی حافظه ای قرار دهیم ! یک متغیر I هم تعریف کرده‌ایم که متغیر کنترل کننده حلقه ما است .
پس از این تعریف متغیر و ارایه یک حلقه ی for داریم که نقدار دهی اولیه آن ۰ است و باید تا MAX_ITEM  اجرا شود !
در داخل حلقه هم تعریف کرده‌ایم که هر خانه‌ی حافظه متعلق به حاصل ضرب i * I باشد .
سپس با استفاده از تابع خروجی ،‌خروجی را به کاربر نشان می‌دهیم :)

حالا یک مثال نسبتاً خوب حل کنیم تا خیلی با C حال کنیم :D
در آمار تفاضل بین داده‌ها و میانگین گرفتن از داده‌ها را داشتیم که می‌خواهیم به ساده‌ترین شکل ممکن این برنامه را بنویسیم :)
ابتدا کد را ببینیم و سپس درباره برنامه حرف بزنیم :)‌‌‌:

#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 <retu>sn ",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 meann");
    printf("Index   Item    diffrencen");
    for( i = 0 ; i<MAX_ITEM ; ++i)
        printf("%3d%4c%9.2f%5c%9.2fn",i,' ',x[i],' ',x[i] - mean);
    retu (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.2fn",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 دیگر زبان‌های برنامه نویسی را هم در انجمن کار خواهیم کرد :) (انجمن برنامه نویسی رو رونق بدیم و گسترشش بدیم)

- نظرات خود را برای من در شخصی ارسال کنید و سؤال و یا نکته ی ابهامی هم وجود داشت سؤال کنید .

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

این آموزش‌ها را هم بخوانید

شاد و پیروز باشید / یا حق

اوبونتو...
ما را در سایت اوبونتو دنبال می کنید

برچسب : نویسنده : استخدام کار ubuntu بازدید : 203 تاريخ : پنجشنبه 31 تير 1395 ساعت: 1:40