انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: آموزش برنامه نویسی به زبان C  (دفعات بازدید: 11052 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین liniolon

  • Jr. Member
  • *
  • ارسال: 69
  • جنسیت : پسر
  • برنامه‌نویس و علاقه‌مند به دنیای آزاد
پاسخ : آموزش برنامه نویسی به زبان C
« پاسخ #15 : 10 تیر 1395، 10:09 ب‌ظ »
بنیاد سخن به نام حق، نه                       کزهرچه به است نام حق به

سلام به دوستان علاقه مند به زبان C ادامه اموزش ها رو با هم پیگیری میکنیم :

در ادامه فصل حلقه ها به حلقه ی for می‌رسیم :)
معمولاً از حلقه ی for زمانی استفاده میکنیم که تعداد تکرار دستورات برای ما مشخص باشد حلقه ی for از سه قسمت : اندیس حلقه ، شرط حلقه و گام حلقه تشکیل می‌شود.
ساختار کلی حلقه ی for : for(variable initialization; condition; variable update)
{
statement 1;
statement 2;
statement 3;
.
.
.
statement n;
}
یک مثال حل کنیم :) : برنامه‌ای بنویسید اعداد ۱ تا ۲۰ را چاپ کند:
#include<stdio.h>

int main(void)
{
    for(int i = 0; i< 20 ; i++)
    {
        printf("%d ",i);
    }
    printf("\n");
}
در تابع اصلی ما یک حلقه for داریم که مقداردهی اولیه آن ۰ است و شرط آن این است که حلقه ی ما ۲۰ بار اجرا شود و در قسمت گام حلقه ما برای حلقه معین کرده‌ایم که برنامه یک بار یک بار اجرا شود.
نکته : توجه کنیم که هنگام خروجی اگر با عدد ۱۹ مواجه شدیم و عدد ۲۰ را ندیدیم به این معنا نیست که برنامه ی ما اشتباه کرده است ! بلکه در کامپیوتر همه چیز از ۰ شروع می‌شود نه ۱ :D پس این نکته n-1 را در ذهنتان داشته باشید :)
و اگر بخواهیم که عدد ۲۰ را هم ببینیم باید در قسمت شرط، شرط حلقه را به صورت i<=20 تعریف کنیم :)   (اگر => را فراموش کرده‌اید به جلسات مربوط به دستورات شرطی مراجعه کنید)

نکته : اگر بخواهیم تنها اعداد مثبت این بازه نمایش داده شود باید در قسمت گام حلقه ، گام را به این صورت i+=2 تغییر دهیم ! می‌بینیم که برنامه دو تا دو تا اجرا می‌شود :D

یک مثال پیچیده‌تر حل کنیم : برنامه‌ای بنویسید که مدیر یک شرکت تعداد کارمندان خود را وارد کند و ساعت و تعداد روز های کاری انان را وارد کند و برنامه حقوق ماهانه هر کدام را محاسبه کند.
#include<stdio.h>
#define CONST_MONEY 78.34
int main(void)
{
    double get_money;
    int day , hours;
    int count;
    printf("Enter count of your clerck >");
    scanf("%d",&count);
    for(int i=0;i<count;i++)
    {
        printf("NO.%d : Enter days worked> ",i);
        scanf("%d",&day);
        printf("NO.%d : Enter hours worked> ",i);
        scanf("%d",&hours);
        get_money = day * hours * CONST_MONEY ;

        printf("Money of NO.%d is %.4f\n",i,get_money);
    }
    printf("\n\nGood job...Now ...Exit\n");
}
این برنامه به ساده‌ترین شکل ممکن نوشته شده است پس انتظار بالایی نداشته باشید :):D
ما در ابتدا یک هزینه دریافتی ثابت تعریف میکنیم تا مساوات رعایت شود :)
بعد ما در اینجا فرمول محاسبه ی حقوق ما : تعداد روز × ساعت کار کرد × هزینه دریافتی ثابت
تعداد کارمندان را شرط حلقه قرار داده‌ایم که تا زمانی که تعداد کارمندان به اتمام نرسیده است حلقه تکرار شود
و در ادامه تعداد ساعات و روز های مربوط به هر فرد را دریافت می‌کند و حقوق مربوط به او را محاسبه می‌کند و در خروجی چاپ می کند:)

حلقه ی for در اینجا به اتمام رسید :)
تمرین کردن فراموش نشه :D

تا آموزش بعدی در پناه حق :)
وبلاگ من :
http://amirkouhkan.ir
برنامه نویس و علاقه مند به دنیای آزاد

آفلاین liniolon

  • Jr. Member
  • *
  • ارسال: 69
  • جنسیت : پسر
  • برنامه‌نویس و علاقه‌مند به دنیای آزاد
پاسخ : آموزش برنامه نویسی به زبان C
« پاسخ #16 : 11 تیر 1395، 03:52 ب‌ظ »
تا که سخن از دل و از دلبر است              نام خدا ،زینت هر دفتر است
سلام . این درس بسیار کوتاه است و بریم که زود تند سریع یادش بگیریم  ::) :

در ادامه فصل حلقه ها به آخرین حلقه ای می‌رسیم که می‌خواهیم مورد بررسی قرار دهیم!
در این جلسه حلقه ی do-while را با هم یاد میگیریم ، معمولاً این حلقه را زمانی استفاده میکنیم که میخواهیم حداقل یکبار دستوراتمان را اجرا کنیم؛ و دلیل این امر هم این است که ما ابتدا دستورات خود را می نویسیم و سپس شرط را تعریف میکنیم !
ساختار کلی حلقه do-while :
do{
statement 1;
statement 2;
statement 3;
.
.
.
statement n;
}
while (condition);
مثالی برای حلقه do-while : برنامه‌ای بنویسید که سن کاربر را دریافت کند و تعداد روز های سن او را محاسبه کند :) و تا زمانی که شرط برقرار است سن دریافت کند.
#include<stdio.h>

int main(void)
{
    int age;
    double days;
    do{
        printf("Enter your age :");
        scanf("%d",&age);
        days = age * 365.6;

        printf("Days of you spend in your life is :%.2f\n",(double)days);
    }
    while(age >=1);
}
در این قطعه کد ما سن کاربر را بصورت صحیح دریافت میکنیم |‌تعداد روز ها را بصورت اعشاری می نویسیم | سپس یک حلقه تعریف میکنیم که سن را دریافت کند و سن را محاسبه می‌کند و تا زمانی که  سن ورودی برابر ۰ نشده است حلقه اجرا میشود.

این هم از درس کوتاه حلقه ی do-while :)

موفق باشید و سربلند.
وبلاگ من :
http://amirkouhkan.ir
برنامه نویس و علاقه مند به دنیای آزاد

آفلاین liniolon

  • Jr. Member
  • *
  • ارسال: 69
  • جنسیت : پسر
  • برنامه‌نویس و علاقه‌مند به دنیای آزاد
پاسخ : آموزش برنامه نویسی به زبان C
« پاسخ #17 : 12 تیر 1395، 03:44 ب‌ظ »
به نام خدایی که برذات وی                   محال است هرگز بردعقل،پی
این فصل هم در این جلسه به پایان می رسید :o 8) ::)
در آخرین بخش از این فصل از آموزشمان حلقه های تو در تو و دو دستور Continue و break را بررسی میکنیم . حلقه ها هم مانند دستورات شرطی قادرند که در داخل هم نوشته شوند !
از دستور while شروع میکنیم تا به do-while برسیم:
۱- ساختار کلی حلقه ی تو در تو while :
while (condition)
{
       .
       .
       while(condition)
       {
       }
       .
       .
       .
}
اگر شرط حلقه اول درست باشد حلقه ی درون while اجرا می‌شود و تا زمانی که شرط برقرار حلقه دوم برقرار است حلقه اول ادامه پیدا میکند :D و در غیر اینصورت ادامه حلقه ی اول ادامه پیدا میکند:)

مثال:برنامه ای بنویسید که یک عدد را دریافت کند که اگر کمتر از صفر یعنی منفی بود دوباره از کاربر سؤال کند که عددی را وارد کند اگر اینبار عددی مثبت وارد کرد به تعداد نصف آن پیامی برای ما چاپ کند.
#include<stdio.h>
int main(void)
{
    int number ;
   
    printf("Enter any number>");
    scanf("%d",&number);

    while(number < 0)
    {   
        printf("Enter number again >");
        scanf("%d",&number);
        int half = number / 2;
        while(half > 0)
        {
            printf("This is Msg.%d\n",half);
            half --;
        }
    }
}
توضیح این برنامه بطور کامل در سؤال موجود است  :D :D :D :D
مختصر توضیحی درباره این برنامه دهیم که بهتر این کد ها را  درک کنیم. ما در ابتدا از کاربر می‌خواهیم که عددی را وارد کند و در صورتی که این عدد مثبت بود برنامه برای ما ۲ پیام را چاپ نمیکند!!! چرا ؟‌ چون برنامه اصلاً وارد حلقه نمی‌شود ! پس برای اینکه برنامه برای به تعداد نصف عدد وارد شده پیام چاپ کند باید ابتدا عدد منفی وارد کنیم ! این مهمترین نکته ی این برنامه بود :)

۲- ساختار کلی حلقه تو در تو for :
for(initialization ; condition ; variable update)
{
    .
    .
    for(initialization ; condition ; variable update)
    {
    }
    .
    .
    .
}
توضیح تمام حلقه های تو در تو شبیه به هم است و تنها شکل نوشتن آن‌ها با هم فرق میکند.
مثال :‌ یک جدول ضرب ساده بنویسید :
#include<stdio.h>

int main(void)
{
    for(int i = 1;i<=10;i++)
    {
        for(int j = 1;j<=10;j++)
        {
            int f = i * j;
            printf("%d  ",f);
        }
        printf("\n");
    }
    printf("\n");
}
شاید سخت ترین قسمت کد دادن ستون و سطر به این جدول باشد و نه خود نوشتن برنامه :D:D
دو حلقه for تعریف کرده‌ایم که هر دو شامل اعداد ۱ – ۱۰ هستند و این اعداد را دو به دو با هم ضرب میکند و در متغیر f می‌ریزد و چاپ می‌کند به همین سادگی :):D

۳- حلقه ی تو در تو do-while :
تنها تفاوت این حلقه با سایر حلقه ها این است که حداقل یکبار  حلقه را اجرا می‌کند
مثال :‌ برنامه‌ای بنویسید که تا کاربر فرمان خروج را نداده است برنامه به تعداد دلخواه کاربر پیام چاپ کند.
#include<stdio.h>

int main(void)
{
   int n ;
   
   do
    {
        printf("Enter any number >");
        scanf("%d",&n);
        do{
           
            printf("Hello,This is msg.%d\n",n);
            n--; 
        }
        while(n>0);
        printf("If you want to try again enter a number exept zero / (Quit = 0)");
        scanf("%d",&n);
    }
    while(n != 0);
}
توضیح این برنامه هم به این شکل است که کاربر باید  عددی غیر از ۰ را وارد می‌کند و اگر عدد او نامساوی با۰ بود برنامه اجرا می‌شود و به تعداد عدد وارد شده پیام چاپ می‌کند و در ادامه اگر کاربر بخواهد که برنامه ادامه پیدا کند باید عددی غیر از ۰ را وارد کند و همینطور تا آخر :)

این هم از بحث حلقه های تو در تو .
دو دستور باقی‌مانده ‌continue و break هستند که در شرایطی می‌توانند بسیار از حجم کدنویسی ما کم کنند!
ابتدا break را بررسی می‌کنیم . همانطور که از نام این دستور پیدا است کار شکستن را بر عهده دارد و در دستورات شرطی و یا حلقه ها کاربرد زیادی دارد برای مثال در مثال قبل ما میخواهیم که اگر کاربر عددی غیر صفر وارد کند تا برنامه اجرا شود اما با دستور ‌break می‌توانیم تعیین کنیم که اگر کاربر عدد منفی را هم وارد کرد از برنامه خارج شود و برنامه را اجرا نکند :
#include<stdio.h>

int main(void)
{
   int n ;
   
   do
    {
        printf("Enter any number >");
        scanf("%d",&n);
        if(n < 0)
        {
            break;
        }
        do{
           
            printf("Hello,This is msg.%d\n",n);
            n--; 
        }
        while(n>0);
        printf("If you want to try again enter a number exept zero / (Quit = 0)");
        scanf("%d",&n);
    }
    while(n != 0);
}
می‌بینیم که تنها یک دستور شرطی if اضافه کرده‌ایم !
 در این صورت اگر کاربر عدد منفی را هم وارد کرد برنامه به طور کامل قطع می شود.

دستور continue هم همانند اسمش کار ادامه دادن را بر عهده دارد یعنی از دستورات بعد از continue صرف نظر می‌شود و نمایش داده نمی شود.
برای مثال یک حلقه تعریف میکنیم که وقتی به عدد ۸ رسید نمایش داده نشود :#include<stdio.h>

int main(void)
{
    for(int i = 0;i<10;i++)
    {
        if(i == 8)
        {
            continue ;
        }
        printf("Hello %d\n",i);
    }
    printf("Good bye \n");
}
:) خب اکثر مباحث مهم فصل حلقه ها گفته شد ،‌به نوشته‌های من قناعت نکنید !

تمرین کنید تمرین تمرین ….


موفق باشید.
وبلاگ من :
http://amirkouhkan.ir
برنامه نویس و علاقه مند به دنیای آزاد

آفلاین liniolon

  • Jr. Member
  • *
  • ارسال: 69
  • جنسیت : پسر
  • برنامه‌نویس و علاقه‌مند به دنیای آزاد
پاسخ : آموزش برنامه نویسی به زبان C
« پاسخ #18 : 15 تیر 1395، 02:28 ق‌ظ »
به نام آن که تن رانور جان داد                         خرد را سوی دانایی عنان داد

بریم که فصل جدید رو شروع کنیم  ;D:

در فصل جدید آموزش هایمان به مبحث آرایه ها می‌رسیم . مبحث جذاب ارایه ها :):):)
ارایه ها انواعی از داده‌ها هستند که می‌توانند داده‌هایی را بصورت دسته‌جمعی و منحصربه فرد ذخیره کنند.
ارایه ها را صورت زیر تعریف میکنیم :
type array_name[size] ;در قسمت type نوع داده‌ای خود را می نویسیم (int , float , …)
در قسمت array_name نام ارایه را می نویسیم که نام ارایه هم از قانون ANSI پیروی میکند
در قسمت size هم ما تعداد ارایه هایی را که نیاز داریم تعریف میکنیم.

برای مثال اگر بخواهیم در یک کلاس ۲۰ نفری ، نمره ۲۰ نفر را وارد کنیم کار غیر عاقلانه ای در اینجا میتوانیم انجام دهیم این است که ۲۰ متغیر تعریف کنیم ! اما کار بهتر و منطقی‌تر این است که ما یک ارایه تعریف کنیم و تنها با index (شماره هر خانه) به متغیر مورد نظر دسترسی پیدا کنیم :)

مثال ۱ – برنامه‌ای بنویسید که نمره ۱۰ نفر را ذخیره کند .
این مثال را به شکل‌های متفاوت می‌توان حل کرد که چندین نوع انرا بررسی میکنیم .
۱.۱ – نوع اول : در این نوع ما فقط می‌توانیم نمرات را خودمان به شکل دیکتاتوری بنویسیم :D .
#include<stdio.h>

int main(void)
{
    float scores[10];
    scores[0] = 13;
    scores[1] = 14;
    scores[2] = 18.25;
    scores[3] = 2.5;
    scores[4] = 13.75;
    scores[5] = 17.75;
    scores[6] = 11.5;
    scores[7] = 20;
    scores[8] = 7.75;
    scores[9] = 0;

    printf("This is Score of first man or woman :D>  %.2f\n",scores[4]);
}
۱.۲ – نوع دوم : با استفاده از توابع ورودی و خروجی با کاربر تعامل برقرار می کنیم.
#include<stdio.h>

int main(void)
{
    float scores[10];
    printf("Enter the 1.number : ");
    scanf("%f",&scores[0]);
    printf("Enter the 2.number : ");
    scanf("%f",&scores[1]);
    printf("Enter the 3.number : ");
    scanf("%f",&scores[2]);
    printf("Enter the 4.number : ");
    scanf("%f",&scores[3]);
    printf("Enter the 5.number : ");
    scanf("%f",&scores[4]);
    printf("Enter the 6.number : ");
    scanf("%f",&scores[5]);
    printf("Enter the 7.number : ");
    scanf("%f",&scores[6]);
    printf("Enter the 8.number : ");
    scanf("%f",&scores[7]);
    printf("Enter the 9.number : ");
    scanf("%f",&scores[8]);
    printf("Enter the 10.number : ");
    scanf("%f",&scores[9]);
    printf("This is list of your numbers :\n%f\n%f\n%f\n%f\n%f\n%f\n%f\n%f\n%f\n%f\n",scores[0],scores[1],scores[2],scores[3],scores[4],scores[5],scores[6],scores[7],scores[8],scores[9]);
}
در این روش ما بسیار کد های تکراری و خسته‌کننده نوشتیم ! :(

۱.۳ – نوع سوم : با استفاده از حلقه ی for براحتی با کاربر تعامل برقرار میکنیم و تعداد کد هایمان خیلی خیلی کم می‌شود :
#include<stdio.h>

int main(void)
{
    float scores[10];
    for(int i = 0;i < 10 ; i++)
    {
        printf("No.%d Enter your numbers> ",i);
        scanf("%f",&scores[i]);
    }
}
با یک حلقه for براحتی می‌توانیم به تمامی اعضای ارایه دسترسی پیدا کنیم .
با یک تیر چند نشان زدیم : حجم کد ها کم شد ، برنامه انعطاف پذیر شد ، با کاربر تعامل برقرار کرد و …

نکته : ایندکس ارایه ها هم از ۰ شروع می‌شود تا n-1 تعداد متغیر . در مثال قبل که ده نمره را دریافت کردیم خانه اول ارایه ها ۰ و خانه آخر ۹ است .

مثال۲ (پیچیده‌تر) : برنامه‌ای بنویسید که کاربر بتواند ۵ عددصحیح را وارد کند و آن اعداد را به ضورت معکوس وارد کند.
#include<stdio.h>

int main(void)
{
    int number[5] ;
    printf("Enter 5 numbers > \n");
    for(int i = 0; i <= 4 ; i++ )
    {
        scanf("%d", &number[i]);
    }
    printf("This inverse of your numbers > \n");
    for(int j = 4 ; j >= 0 ; j--)
    {
        printf("%d  ",number[j]);
    }

    printf("\n");
}
انواع شیوه‌های تعریف ارایه :

۱ – در این شیوه تنها سایز ارایه را مشخص میکنیم که چقدر ورودی دریافت کند :
int number[5] ;۲ – در این شیوه خانه‌های حافظه ای را هم مقدار دهی اولیه می‌کنیم :
int number[5] = {1,2,3,4,5} ;۳ – در این شیوه سایز خانه‌های حافظه ای مشخص نیست :
int number[] ;۴ – در این شیوه می‌توانیم سایزی مشخص نکنیم و به تعداد نیازمان مقدار اولیه در ارایه قرار دهیم:
int number = {1,2,3,4,54,5,6,6,34,34,34,213,324,453,546,546};
مبحث ارایه ها خیلی مبحث کاربردی و پیچیده‌ای هست و باید با احتیاط (!) :)‌ یاد گرفت :)

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

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

شاد و سربلند باشید
وبلاگ من :
http://amirkouhkan.ir
برنامه نویس و علاقه مند به دنیای آزاد

آفلاین liniolon

  • Jr. Member
  • *
  • ارسال: 69
  • جنسیت : پسر
  • برنامه‌نویس و علاقه‌مند به دنیای آزاد
پاسخ : آموزش برنامه نویسی به زبان C
« پاسخ #19 : 17 تیر 1395، 06:02 ب‌ظ »
به نام آن که جان رافکرت آموخت             چراغ دل به نورجان برافروخت 
سلام . ادامه ی اموزش ها را دنبال میکنیم  ::) :

در ادامه فصل ارایه ها به ایستگاه ارایه های دو بعدی و چند بعدی میرسیم :)
آرایه های چندبعدی معمولاً برای کارهایی محاسباتی مثل ماتریس کاربرد دارد .
ساختار کلی :ارایه های چند بعدی :
array_type   array_name [dimension_size 1][dimensio_size 2]…..[dimesion_size n] ;مثال :
int n[2][2] ;اما اول ارایه های دو بعدی را یاد بگیریم برای اینکه درک خوبی از ارایه های چند بعدی پیدا کنیم . در [] اول ما تعداد ردیف ها یا تعداد دسته‌ای که نیازمندیم را می نویسیم  و در [] دوم تعداد ستون‌ها و یا  تعداد اعضای هر دسته را مشخص میکنیم (اصطلاح صحیح ردیف و ستون هست اما من تعداد دسته و اعضای دسته را برای خودم در نظر گرفتم تا قابل فهم شود شما به هر شکلی می‌توانید روش‌هایی یا نامگذاری هایی را انتخاب کنید تا قابل فهم شود :)‌ ‌) .

به سه شکل می‌توانیم ارایه هایمان را مقدار دهی کنیم :

روش اول (مرسوم تر) – در این روش تعداد ردیف و ستون مشخص است و مقدار هر کدام نیز مشخص است .
Int n [2][2] = { {2,3} , {20,30} } ; در علامت {} اعضای هر دسته یا ستون‌های هر دسته را می نویسیم .
با علامت , دسته ها را از هم جدا میکنیم .

روش دوم – این روش برای زمانی مناسب است که یکی از دو مورد ستون یا ردیف مشخص نیست اما دیگری تعدادش مشخص است .
Int n[][3] = { {2,3,4} , {20,30,40} , {200,300,400} } ;در اینجا ما تعداد دسته ها یا ردیف هایمان مشخص نیست اما برایمان مشخص است که هر دسته ۳ عضو دارد :) ) .

روش سوم – در این روش ما از {}‌ برای جدا کردن هر دسته استفاده نمیکنیم :
int n[2][3] = {1,2,3,4,5,6} ;
برای دسترسی به هر کدام از خانه‌های حافظه ای ابتدا ردیف و سپس ستون را می نویسیم

مثال :int n [2][3] = { {2,4,5} , {4,5,6} } ;

printf("I selected this number > %d\n" , n[0][1] );
انتظار داریم که عدد ۴ را به ما برگرداند ! اگر تعجب کردید باید بگویم که ارایه ها هم مانند درسهای جلسات قبل که در مبحث حلقه ها بود است n – 1 . برای آدرس دهی باید ۱ عدد کمتر از مکان عدد مورد نظر باشد مثلاً ۴ عدد دوم است اما برای آدرس دهی باید ۱ را وارد کنیم . پس بطور کل شمارش خانه‌های حافظه ای بصورت 0 ,1 , 2 , … , n است !

ارایه های سه بعدی هم مانند ارایه های دوبعدی هستند اما با یک تفاوت که در با یک مثال با این تفاوت آشنا می‌شویم .
int n[2][3][3] = { { {1,2,3} , {4,5,6} , {7,8,9} } , { {10,20,30} , {40,50,60} , {70,80,90} } }  ;
printf("I select this number : %d\n" , n[0][1][1] )
;
در این مثال انتظار داریم که عدد ۵ را به ما نشان دهد !

می‌بینیم که یک [] به خانه‌ها اضافه شده که نشان دهنده این است که ستون و ردیف باید در یک دسته بزرگ‌تر قرار بگیرند . دو [] آخر مختص ردیف و ستون هستند که هر چقدر هم [] قبل از آن‌ها بیاید تغییری ایجاد نمیکند !


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

شاد و پیروز باشید .
وبلاگ من :
http://amirkouhkan.ir
برنامه نویس و علاقه مند به دنیای آزاد

آفلاین liniolon

  • Jr. Member
  • *
  • ارسال: 69
  • جنسیت : پسر
  • برنامه‌نویس و علاقه‌مند به دنیای آزاد
پاسخ : آموزش برنامه نویسی به زبان C
« پاسخ #20 : 21 تیر 1395، 04:38 ب‌ظ »
به نام آن که جان رافکرت آموخت             چراغ دل به نورجان برافروخت
سلام . اخرین قسمت از فصل ارایه ها :
در جلسه آخر از این فصل آموزشمان می‌خواهیم ارایه ها را با حل کردن مسائل مختلفی یاد بگیریم  ! امیدوارم که دو جلسه پیش را مطالعه کرده باشید و حالا با یک آمادگی به سراغ این جلسه خیز برداشته باشید :)

خب اولین مثالی که می‌خواهیم حل کنیم یک برنامه ی ساده که توان اعداد ۰ تا ۱۰ را محاسبه می‌کند ! ابتدا کد را مشاهده کنیم :
#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 حال کنیم :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 <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 دیگر زبان‌های برنامه نویسی را هم در انجمن کار خواهیم کرد :) (انجمن برنامه نویسی رو رونق بدیم و گسترشش بدیم)

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

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

شاد و پیروز باشید / یا حق
وبلاگ من :
http://amirkouhkan.ir
برنامه نویس و علاقه مند به دنیای آزاد

آفلاین liniolon

  • Jr. Member
  • *
  • ارسال: 69
  • جنسیت : پسر
  • برنامه‌نویس و علاقه‌مند به دنیای آزاد
پاسخ : آموزش برنامه نویسی به زبان C
« پاسخ #21 : 28 تیر 1395، 01:13 ب‌ظ »
به نام خدا

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

در زبان C ما مانند دیگر زبان‌های برنامه نویسی امروزی (python , perl , java , …) کار با رشته‌ها برایمان ساده نیست!

در فصل قبل ما ارایه ها را یاد گرفتیم که پیش نیاز یادگیری رشته هست ! اگر دقت کنید ما تنها از ارایه های از نوع صحیح و اعشاری استفاده کردیم و از ارایه های نوع char استفاده نکردیم !؟ درست حدس زدید ما با استفاده از ارایه char رشته‌ها را می‌سازیم :) در اصل رشته (ارایه ای از کاراکتر ها یا جمعی از کاراکتر هاست یا هر تعریف دیگری که داشته باشیم :))
تعریف رشته هم مثل یک ارایه از نوع صحیح یا اعشاری است . مثال :
char str[11] = "Hello World";برای نشان دادن متن در خروجی و دریافت متن از کاربر  از حافظه نگهدار s% استفاده میکنیم !
حالا یک نمونه ساده که نام و نام خانوادگی را از کاربر دریافت کند و آن را با پیام مناسب در خروجی نمایش دهد :
#include<stdio.h>

int main(void)
{
    char name[20] ;
    char family[25];
    printf("Enter your name> ");
    scanf("%s",name);
    printf("Enter your family> ");
    scanf("%s",family);

    printf("Hello,\nYour name is %s and your family is %s , and i glad to meet you :D \n",name,family);
}
تعریف رشته هم مثل ارایه است. اول نوع متغیر char  و بعد از آن نام ارایه (در اینجا رشته) و سپس مقدار دهی آن .
اگر دقت کنیم می‌بینیم که در اینجا برای دریافت از کاربر از کاراکتر & استفاده نکرده‌ایم ! پس ما برای چه دریافت و چه خروجی رشته از علامت & استفاده نمیکنیم.

نمونه دیگه تعریف رشته‌ها به صورت زیر است :
char *name ;(در فصل های بعد اشاره گر ها را هم بصورت مختصر یاد خواهیم گرفت)

اما آنچه که در اینجا وجود دارد این است که ما براحتی نمیتوانیم رشته‌های خود را مقداردهی کنیم پس برای اینکه کار ما راحت‌تر شود کتابخانه ای به نام string.h در کتابخانه‌های زبان C اضافه شد تا کار را برای ما راحت‌تر کند :)
در اینجا توابع مفید انرا بررسی خواهیم کرد .
تابع strcpy :
این تابع مخفف دو کلمه String Copy است که کار انتقال دادن رشته مقصد در مبدأ را بر عهده دارد شکل کلی این تابع بع شمل زیر است :
strcpy(Source,string);یعنی ما هر مقدار String را داشته باشیم این تابع در Source کپی میکند . مثال :
#include<stdio.h>
#include<string.h>

int main(void)
{
    char msg[50] ;
    strcpy(msg , "Hello,I am Amir Kouhkan ;D");   
    printf("my new string text is : \n%s\n",msg);
}
در خروجی مشاهده می‌کنید که رشته ای را که در قسمت دوم تابع strcpy تعریف کردیم به ما نشان داده است :)

تابع دیگری که C عزیز برایمان فراهم کرده تابع strcat است که برای ما رشته ی مقصد را در آخر رشته ی مبدأ اضافه می‌کند .
شکل کلی :‌
strcmp(Source , String); مثال :
int main(void)
{
    char msg[50] ;
    strcpy(msg , "Hello,I am Amir Kouhkan ;D");   
    strcat(msg , "And I like programming and share my information with other people :D");

    printf("my new string text is : \n%s\n",msg);
}
در خروجی می‌بینیم که رشته دوم در انتهای رشته اول اضافه شده است :)

تابع مفید دیگری که داریم تابع strcmp است که کار مقایسه کردن را بر عهده دارد.
شکل کلی :
strcmp(str1 , str2 );مثال :#include<stdio.h>
#include<string.h>

int main(void)
{
    char name[20] = "Amir";
    char name_1 [20] = "Alireza";

    printf("%d\n",strcmp(name,name_1));

}
این تابع دو رشته را دریافت می‌کند و در کل ۳ خروجی می‌تواند داشته باشد (-۱ و ۰ و ۱ ) .
۰ : اگر خروجی آن صفر بود یعنی تعداد کاراکتر های هر دو رشته با هم برابر است .
-۱ :‌ اگر خروجی ما -۱ بود یعنی تعداد کاراکتر های رشته اول بیشتر بوده است
۱ ‌: اگر خروجی ما ۱ بود یعنی تعداد کاراکتر های رشته دوم ما بیشتر بوده است .

تابع strlen :
این تابع مخفف دو کلمه String Length می‌باشد پس از نام تابع پیداست که وظیفه شمردن تعداد کاراکتر های رشته را بر عهده دارد . و خروجی آن یک خروجی از نوع صحیح است که میتوان با حافظه نگهدار d% از آن استفاده کرد .
شکل کلی ‌:
strlen(string);مثال :
#include<stdio.h>
#include<string.h>

int main(void)
{
    char name[20] = "Amir";
    printf("%d\n",strlen(name));

}
در آخر هم تعداد کاراکتر های رشته را در خروجی چاپ می‌کند که در اینجا ۴ است .

یک نکته ی خوب !
اگر ما رشته ی خودمان را بصورت char *string ; تعریف کنیم می‌توانیم بدون استفاده از تابع strcpy انرا مقدار دهی اولیه کنیم . مثال :#include<stdio.h>
#include<string.h>

int main(void)
{
    char *name ;
    name = "amir kouhkan";

    printf("My name is : %s\n",name);
}
امیدوارم ازین فصل اموزشمان هم بهره ی کافی را برده باشید .
نظرات خود را در خصوصی بفرستید .

موفق باشید./
وبلاگ من :
http://amirkouhkan.ir
برنامه نویس و علاقه مند به دنیای آزاد

آفلاین liniolon

  • Jr. Member
  • *
  • ارسال: 69
  • جنسیت : پسر
  • برنامه‌نویس و علاقه‌مند به دنیای آزاد
پاسخ : آموزش برنامه نویسی به زبان C
« پاسخ #22 : 30 تیر 1395، 09:59 ب‌ظ »
سلام . در ادامه آموزش‌های زبان C که کم کم داریم به آخر آن هم نزدیک می‌شویم می‌خواهیم درباره اشاره گر ها یا Pointers حرف بزنیم :)
اشاره گر ها در کل مفهوم ساده‌ای دارند اما اگر بخواهیم آن‌ها را خیلی پیچیده دنبال کنیم مبحث نسبتاً سنگینی هست به همین خاطر ما در این سری آموزش‌هابه گفتن کاربرد آن و چند مثال ساده بسنده می‌کنیم .
اشاره گر ها برای اجرا شدن بعضی از وظایف در زبان برنامه نویسی C بسیار کار را راحت‌تر کرده‌اند برای مثال :‌اختصاص دادن حافظه پویا (Dynamic Memory ) بدون استفاده از اشاره گر ها ممکن نیست .پس بهتر است که برنامه نویس زبان C با این مبحث آشنایی داشته باشد .
همانطور که می‌دانید متغیر ها مکان هایی از حافظه هستند و این حافظه ها دارای آدرسی هستند که ما در زبان C با استفاده از عملگر & می‌توانیم به آن‌ها دسترسی داشته باشیم .
مثال :
#include<stdio.h>

int main(void)
{
    int n = 5;
    printf("This is number %d \nand this is location of it in memory :%x\n",n , &n);
}
در این مثال مه یک متغیر از نوع صحیح (integer) تعریف کردیم که در خروجی مشاهده می‌کنید که خروجی اول مقدار متغیر و خروجی دوم آدرس حافظه ای متغیر است .

نکته ۱ : حافظه نگهدار اشاره گر ها x%  است.
نکته ۲ :‌ حتماً متغیر را برای دسترسی به مکان حافظه ای خود با عملگر & استفاده کنید .

واقعاً اشاره گر ها چه هستند ؟
یک اشاره گر یک متغیر است که مقدار آن آدرس یک متغیر دیگر است . مثلاً : آدرس مستقیم از مکان حافظه است . مانند هر متغیر و یا ثابت دیگری ابتدا باید اشاره گر را تعریف کرده و سپس مقدار دهی کنیم .

تعریف یک اشاره گر عموما به شکل زیر صورت میگیرد :
var_type *var_pointer_name ;var_type : نوع متغیری است که ما انتخاب میکنیم
* : برای فهماندن این موضوع که ما داریم اشاره گر تعریف میکنیم نه متغیر به کامپایلر از این علامت استفاده میکنیم .
var_pointer_name* : نام اشاره گر است
انواع اشاره گر ها :int *var_int;
float *var_float ;
double *var_double ;
char *var_char;
مقدار حقیقی انواع مختلف داده‌ها در اشاره گر ها از قبیل : Inteher , Float , Double , Char همگی مانند هم هستند و همگی آن‌ها یک عدد طولانی هگزادسیمال هستند که نشان دهنده محل حافظه هستند و تنها فرقشان هم در نوعشان است .

چگونه از اشاره گر ها استفاده کنیم ؟
مراحل استفاده از اشاره گر ها ، کاری که غالباً انجام می‌دهیم ۱- تعریف کردن یک اشاره گر ۲- نسبت دادن آدرس یک متغیر به یک اشاره گر و ۳- در آخر دادن دسترسی به مقدار (Value) که آدرس‌های قابل دسترسی در متغیر اشاره گر  را ذخیره کند .
مثال زیر را ببینیم :#include<stdio.h>

int main(void)
{
    int number = 34;
    int *value;
    value = &number;

    printf("This is Address of number in the MEMORY : %x\nAnd this is Address that stored in value :%x\nfinally this is real number that stroed in memory : %d\n",&number,value,*value);

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

نکته ۱ :‌ برای نشان دادن مقدار واقعی اشاره گر حتماً در خروجی از * استفاده کنید
نکته ۲ : برای نشان دادن آدرس اشاره گر در حافظه بدون هیچ کاراکتر اضافی استفاده می‌شود


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

شاد باشید و موفق ./
وبلاگ من :
http://amirkouhkan.ir
برنامه نویس و علاقه مند به دنیای آزاد

آفلاین liniolon

  • Jr. Member
  • *
  • ارسال: 69
  • جنسیت : پسر
  • برنامه‌نویس و علاقه‌مند به دنیای آزاد
پاسخ : آموزش برنامه نویسی به زبان C
« پاسخ #23 : 06 شهریور 1395، 02:30 ق‌ظ »
سلام. در این قسمت کار با Structure ها رو یاد خواهیم.
در هنگام برنامه نویسی، اغلب تعریف یک نوع متغیر آسان‌تر از آن است که دسته‌ای از داده‌های وابسته به هم را تعریف کنیم. Structures راه مناسبی برای تعریف کردن و ذخیره کردن انواع زیادی متغیر با نام مشابه با هم  را فراهم میکنند!
به این شکل برنامه‌ای که ما تعریف میکنیم اصطلاحاً modular تر می شود.بدلیل طراحی و ساختار جمع و جور این نوع تعریف داده برنامه ما ساده‌تر و خواناتر می شود.به طور عمومی strutures برای اینکه داده‌های زیادی را در خودشان بصورت گروهی با هم ذخیره کنند مفید هستند. برای مثال اگر ما بخواهیم اطلاعات را از یک دیتابیس یا از کاربر بگیریم میتوانیم از Strutures استفاده کنیم. مثلاً اگر بخواهیم یک برنامه بنویسیم که اطلاعاتی مانند نام و نام خانوادگی و شماره تلفن و شماره تلفن همراه و آدرس خانه را دریافت کند از Struture استفاده میکنیم :).
شکل کلی تعریف structure به این شکل است :
struct Tag {
  Members
};
که در اینجا tag  نام Structure میباشد و Member آنچه که ما در بدنه  structure مینویسم است:
struct Tag name_of_single_structure;
برای دسترسی به متغیر structure ما به روش زیر عمل میکنیم :
name_of_single_structure.name_of_variable;
برای مثال :
struct example {
  int x;
};
struct example an_example; /* Treating it like a normal variable type
                            except with the addition of struct*/
an_example.x = 33;          /*How to access its members
*/
در اینجا مثالی دیگر میزنیم :
struct database {
  int id_number;
  int age;
  float salary;
};

int main()
{
  struct database employee;  /* There is now an employee variable that has
                              modifiable variables inside it.*/
  employee.age = 22;
  employee.id_number = 1;
  employee.salary = 12000.21;
}
ما در structure database اعلام میکنیم که سه متغیر تعریف کرده‌ایم که یکی age, id_number, salary هستند. ما میتوانیم از این ساختار مانند متغیری مثل int استفاده کنیم.
ما میتوانیم structure ها برگشت(resturns) دهیم  را به تابعی با تعریف نوع برگشتیشان از یک نوع structure برگشت دهیم.
برای مثال :
struct database fn();درباره union ها هم مختصر توضیحی بدیم.
Union ها شبیه به structure ها هستن با این تفاوت که همه ی متغیر ها فضای مموری مشابهی را به اشتراک میگذارند. زمانی که یک union  اعلان می شودکامپایلر مقدارم حافظه ی مناسبی را برای ذخیره بزرگترین نوع داده union در نظر میگیرد که این مشابه یک جعبه ذخیره سازی غول پیکر است که ما میتوانیم بزرگترین ایتم خود را در آن ذخیره کنیم یا کوچیک ترین ایتم را خود را ذخیره کنیم اما نمیتوانیم که هر دو را ذخیره کنیم :).
عملگر . برای دسترسی به متغیرهای درون union کاربرد دارد.
و نکته آخر اینکه اگر میخوایم که یک اشاره گر به structure داشته باشیم، در‌واقع ما به اطلاعات ذخیره شده در structure اشاره میکنیم. برای اینکار از عملگر <- بجای .  استفاده میکنیم.
مثال :#include <stdio.h>

struct xampl {
  int x;
};

int main()

    struct xampl structure;
    struct xampl *ptr;

    structure.x = 12;
    ptr = &structure; /* Yes, you need the & when dealing with
                           structures and using pointers to them*/
    printf( "%d\n", ptr->x );  /* The -> acts somewhat like the * when
                                   does when it is used with pointers
                                    It says, get whatever is at that memory
                                   address Not "get what that memory address
                                   is"*/
    getchar();
}
پایان این قسمت.
در حقیقت این متن ترجمه ای سریع از این لینک میباشد:
http://www.cprogramming.com/tutorial/c/lesson7.html
فقط یه بخش دیگه از این اموزش ها باقی مونده که تا هفته اینده سعی میکنم اماده بشه.بدلیل مشغولیات زیاد نمیتونم اون متون مد نظر خودمو بنویسم بهمین خاطر این متن ها رو ترجمه میکنم و اواسط مهر آموزش‌های ویدیویی این سری از آموزش‌ها بهمراه GTK+ که منتشر میشه شما میتونین از آموزش‌های ویدیویی بهره مند بشین. ارادمتند امیر.
وبلاگ من :
http://amirkouhkan.ir
برنامه نویس و علاقه مند به دنیای آزاد

آفلاین liniolon

  • Jr. Member
  • *
  • ارسال: 69
  • جنسیت : پسر
  • برنامه‌نویس و علاقه‌مند به دنیای آزاد
پاسخ : آموزش برنامه نویسی به زبان C
« پاسخ #24 : 21 شهریور 1395، 03:15 ب‌ظ »
سلام. به ایستگاه آخر رسیدیم :) یعنی جایی که ما با FILE I/O آشنا می شویم.
باید این نکته رو هم اضافه کنم که به هیچ وجه به این نوشته‌‌های من راضی نباشید چرا‌که یا نواقصی دارند یا کامل نیستند!
این متن ترجمه ای از سایت خوب programiz.com و تجربیات خودم هست.

در برنامه‌نویسی به زبان C ، فایل مکانی از حافظه دیسک هست که مجموعه‌ای اطلاعات را ذخیره میکند.

چرا به فایل‌ها نیاز داریم ؟
وقتی‌که برنامه‌ای که نوشتیم را می‌بندیم تمام اطلاعات و متغیرهایی که با آن سر و کار داشته‌ایم را از بین برده‌ایم، اما اگر بخواهیم اطلاعات خود را ذخیره کنیم و هر وقت که به آن‌ها نیاز شد به آن دسترسی داشته باشیم ما باید از دیتابیس‌‌ها یا فایل‌ها استفاده کنیم.

تعداد زیادی Function در دنیای C هستند که وظیفه رسیدگی به فایل ورودی و خروجی (FILE I/O) را بر‌عهده دارند، اما ما در اینجا Standard I/O (High Level file functions) را بررسی میکنیم.

فایل‌های استاندارد سطح بالا را میتوانیم به دسته زیر طبقه‌بندی کنیم :
۱. فایل‌های متنی
۲. فایل‌های باینری

اعمال روی فایل :
۱. ساختن یک فایل جدید
۲. باز کردن یک فایل موجود
۳. خواندن و نوشتن اطلاعات از یک فایل
۴. بستن یک فایل

کار کردن با فایل‌ها :
برای کار کردن با فایل‌ها ما نیاز داریم یک اشاره‌گر از نوع FILE اعلان کنیم. این اعلان برای ارتباط بین فایل و برنامه لازم است.
FILE *ptr ;باز کردن یک فایل :
باز کردن یک فایل بوسیله تابع کتابخانه‌ای fopen() صورت میگیرد. ساختار کلی باز کردن یک فایل بصورت زیر است :
ptr = fopen(“fileopen”, “mode”); برای مثال :
fopen(“/tmp/text.txt”,”w”);در اینجا فایل  text.txt ساخته می‌شود.

بستن یک فایل :
یک فایل باید بعد از خواندن شدن و نوشته شدن بسته شود. بستن یک فایل با تابع کتابخانه‌ای fclose() بسته می‌شود.

توابع fprintf()  و fscanf() :

توابع fprinf() و fscanf() نسخه‌های مربوط به فایل printf() و scanf() هستند :)
تنها تفاوتی که وقتی از دو تابع fprintf() و fscanf() استفاده میکنیم این است که، آرگومان اول یک اشاره‌گر است که به FILE اشاره‌ میکند.

باز کردن یک فایل:
#include <stdio.h>
int main()
{
   int n;
   FILE *fptr;
   fptr=fopen("/tmp/file.txt","w");
   if(fptr==NULL){
      printf("Error!");             
   }
   printf("Enter n: ");
   scanf("%d",&n);
   fprintf(fptr,"%d",n);   
   fclose(fptr);
   return 0;
}
این برنامه یک عدد از کاربر دریافت میکند و سپس آنرا در یک فایل ذخیره میکند. یعد از اینکه برنامه را کامپایل و اجرا کردیم میتوانیم عددی را که وارد کردیم در فایل file.txt مشاهده کنیم.

تابع scanf() برای خواندن اطلاعات از فایل است.
خواندن فایل :
#include <stdio.h>
int main()
{
   int n;
   FILE *fptr;
   if ((fptr=fopen("/tmp/file.txt","r"))==NULL){
       printf("Error! opening file");
       exit(1);         /* Program exits if file pointer returns NULL. */
   }
   fscanf(fptr,"%d",&n);
   printf("Value of n=%d",n);
   fclose(fptr);   
   return 0;
}
اگر برنامه بالا را کامپایل و اجرا کنیم عددی را که در فایل file.txt نوشته بودیم دریافت میکنیم.


خب بطور خلاصه کار با FILE I/O رو یاد گرفتیم!
به همین راحتی :)

نسخه PDF این آموزش‌ها رو هم بزودی درست میکنم و منتشر میکنم.
از مهر ماه هم یه سری آموزش در رابطه با GTK+ منتشر میکنم :)

شاد و پیروز باشید
وبلاگ من :
http://amirkouhkan.ir
برنامه نویس و علاقه مند به دنیای آزاد