مرجع 0 تا 100 زبان C به همراه آموزش

مدیر انجمن: parse

ارسال پست
نمایه کاربر
metra70

نام: مصطفی

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۸۷/۱۰/۸ - ۱۳:۵۵


پست: 398

سپاس: 96

جنسیت:

مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط metra70 »

با عرض سلام بر همه شما دوستان عزیز
در این تاپیک قصد داریم به مرور مطالبی در باره زبان C بنویسم تا مرجعی برای زبان C درست کنیم ، این تاپیک به مرور زمان تکمیل میشود
بحث را زیاد کش نمیدهیم و یک راست به سراغ اصل مطلب میرویم منتها قبل از آن سعی بر رعایت دو نکته داشته باشید :
اول آنکه کامنت اسپم نکنید و دوم آنکه تا حد امکان سوالات خود را در تاپیک جداگانه پرسید
- برای تمرین زبان سی میتوانید از نرم افزار کم حجم notepad++ استفاده کنید
- در ابتدا کامپایلر Turbo را که حجم آن کمتر از 5 مگابایت است را دانلود کنید؛ تا برنامه های خود را در این کامپایلر بنویسیم
فهرست
انواع داده در زبان C -------------------------------------اینجا
آخرین ویرایش توسط metra70 سه‌شنبه ۱۳۹۲/۱۱/۱ - ۱۰:۲۵, ویرایش شده کلا 1 بار
تصویر

ضعيف‌الاراده كسي است كه با هر شكستي بينش او نيز عوض شود. (ادگار‌ آلن‌پو)

***

میترا از ایزدان باستانی ایرانیان پیش از روزگار زرتشت است، که معنی عهد و پیمان و محبت و خورشید نیز می‌دهد. نماد او خورشید می‌باشد،انتخاب نام کاربری بنده هم به همین سبب است،با عرض معذرت؛ خواهشمند است عده ای از دوستان پیغام های بیهوده نگذارند
درباره خدایان باستانی بیشتر بخوانید

نمایه کاربر
metra70

نام: مصطفی

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۸۷/۱۰/۸ - ۱۳:۵۵


پست: 398

سپاس: 96

جنسیت:

Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط metra70 »


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

بعد از خواندن مطالب بالا حتما متوجه قضیه شده اید؛ حالا میخواهیم شروع کینم
- برای آشنایی با مفهوم Bit اینجارا مطالعه کنید
توجه داشته باشید که :
word = 2 byte = 16 bit
Dword = 2 Word
Qword =2 Dword = 4 word
هر برنامه C از یک بدنه اصلی یا یک تابع اصلی به نام Main تشکیل شده
int Main()
هر تابع یا متغییر دارای نوع هست، به عنوان مثال : تابعی میتواند از نوع Int باشد و تابع دیگری از نوع float و....
انواع داده ها در زبان سی بطور کلی از انواع int یا float یا char یا double است.
داده int برای داده های صحیح بدون اعشار است و داده char برای داده های حروفی (کد اسکی) و float وdouble برای داده های اعشاری

همانطور که در بالا نوشته شد انواع داده چهار دسته می باشند که به ترتیب :
Int )integer): برای اعداد صحیح بدون اعشار به کار میرود و اندازه یا بازه قابل قبول برای آنها را میتوان با استفاده از ترکیب کلمه های کلیدی Short , long,.... تغییر داد
char : که در زبان C برای متغییر هایی از جنس حرف ( کد اسکی ) می باشد و اندازه یا بازه قابل قبول برای آنها را میتوان با استفاده از ترکیب کلمه های کلیدی Short , long,.... تغییر داد
float : که در زبان C برای متغییر های اعشاری با هفت رقم دقت اعشار بکار می رود
doubole :که در زبان C برای داده هایی با حداقل 15 رقم اعشار به کار میرود

اندازه این توابع را با استفاده از متغییر ها long ,short ,singed , unsinged و... میتوان تغییر داد ،نمونه ای از این تغییرات در اندازه متغییر ها را برای شما نوشته ام؛ که عدد داخل <> حداکثر طول بازه ها را نشان میدهد و بیت روبه روی آن حداکثر بیت اشغالی در حافظه را
در جاهایی که OR دارد با توجه به نوع کامپیوتر که چند بیتی است داده طول بازه مشخص میشود
char <-127,+127> 8 bit
unsigned char <0,255> 8 bit ;

signed char <-127,127> 8 bit ;

int <+-32767> 32 or 16 bit ;

unsigned char <0,65535> 16 or 32 bit ;

short int <+-32767> 16 bit ;

unsigned short int <0,65535> 16 bit;

signed short int <-+32767> 16 bit ;

signed int <0-32767> 16 or 32 bit ;

long int <-+2147483647> 32 bit ;

float --->A / XXXXXXX (7 number definitude & A->8 Bit definitude ) 32 bit ;

doubole A / XXXXXXXXXXXXXXX (15 num definitude ) 64 bit ;

long doubole (19 num definitude ) 80 bit ;
به عنوان مثال :
X یک متغییر از نوع Int است که در آن فقط اعداد صحیح میتواند قرار بگیرد
int x ;
نکته : در انتهای هر خط از برنامه زبان C باید " ; "قرار بگیرد
و یا y متغییر از نوع float می باشد که توانایی قرار گرفتن داده های اعشاری را در خود دارد
float y ;
تصویر

ضعيف‌الاراده كسي است كه با هر شكستي بينش او نيز عوض شود. (ادگار‌ آلن‌پو)

***

میترا از ایزدان باستانی ایرانیان پیش از روزگار زرتشت است، که معنی عهد و پیمان و محبت و خورشید نیز می‌دهد. نماد او خورشید می‌باشد،انتخاب نام کاربری بنده هم به همین سبب است،با عرض معذرت؛ خواهشمند است عده ای از دوستان پیغام های بیهوده نگذارند
درباره خدایان باستانی بیشتر بخوانید

نمایه کاربر
metra70

نام: مصطفی

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۸۷/۱۰/۸ - ۱۳:۵۵


پست: 398

سپاس: 96

جنسیت:

Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط metra70 »

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

اما قبل از آن ببینیم متغییر چیست وچگونه تعریف میشود ؟
نوع متغییر مقادیری را که متغییر میتواند بپذیرد واعمالی را که میتواند بروی این مقادیر انجام شوند را مشخص میکند و تعیین نوع متغییر را تعریف متغییر میگویند و به این صورت تعریف میگردد
<نام متغییر> <نوع متغییر> ;
به عنوان مثال X را می خواهیم از نوع متغییری تعریف کنیم که بر روی آن اعمال اعشاری انجام گردد :
float X ;
و همین ترتیب برای انواع داده میتوان این شیوه را بکار برد

*ذکر این نکته حائز اهمیت است که میتوان متغییر را در همان ابتدای تعریف مقدار دهی کرد و این مقدار در طول برنامه و با اعمالی که روی متغییر انجام میشود قابل تغییر است که مثلا در مثال قبل ما میخواهیم X علاوه بر نوع در ابتدا دارای مقدار 3.14 باشد بنابراین به شیوه زیر این متغییر را مقدار دهی می کنیم
float X= 3.14 ;
توجه گردد که چند متغییر را که دارای یک نوع هستند را میتوان در یک خط برنامه داد و آن را میتوان برای متغییر ها ساختار زیر را در نظر گرفت.
1-<type> <name>=<vaule> ; for example : int X= 10;
or
2-<type> <name0> ,<name1> ,... ; for example : int x, y;
ثوابت

همانطور که در طول برنامه متغییر هایی را تعریف میکنیم تا بر روی آن های اعمالی را انجام شود ؛ مقادیر ثابتی هستند که میخواهیم دائما از آن ها در طول برنامه استفاده کنیم و مانند عدد" پی" یا "سرعت نور" یا.... به همین ترتیب در طول برنامه ثوابت را به دو شکل زیر تعریف میکنیم که نوع اول باید قبل از تابع اصلی ( Main ) تعریف گردد و نوع دوم آن میتواند هم قبل از Main و هم بعد از آن و هم در توابع دیگر (آموزش در قسمت های بعدی) تعریف گردد
1- #defined <name> <value> for example : #define C 30000000
OR
2- const <Type data(int,float,...)> <name> = <value> ; for example : const long int C = 30000000 ;
که در هر دو مثال بالا هرگاه ثابت C بیاید مقدار 3000000 به جای آن قرار خواهد گرفت
----------------------------------------------------------------------------------------------------------------------
مثال : میخواهیم مساحت دایره ای را با استفاده از شعاع آن بدست بیاریم برنامه آن در زبان C به یکی از دو شیوه زیر امکان پذیر است
شیوه اول r شعاع و S مساحت دایره :
float r,s ;
s =(3.14) *(r^2) ;
شیوه دوم r شعاع و S مساحت دایره :
float r,s ;
const float pi =3.14 ;
s= pi *(r^2) ;
البته باید به این نکته توجه کرد که برنامه بالا فعلا کارائی ندارد و صرفا جهت آموزش است، برای کارائی بیشتر این برنامه نیاز به یادگیری بخش های بعد نیز می باشد.
تصویر

ضعيف‌الاراده كسي است كه با هر شكستي بينش او نيز عوض شود. (ادگار‌ آلن‌پو)

***

میترا از ایزدان باستانی ایرانیان پیش از روزگار زرتشت است، که معنی عهد و پیمان و محبت و خورشید نیز می‌دهد. نماد او خورشید می‌باشد،انتخاب نام کاربری بنده هم به همین سبب است،با عرض معذرت؛ خواهشمند است عده ای از دوستان پیغام های بیهوده نگذارند
درباره خدایان باستانی بیشتر بخوانید

نمایه کاربر
metra70

نام: مصطفی

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۸۷/۱۰/۸ - ۱۳:۵۵


پست: 398

سپاس: 96

جنسیت:

Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط metra70 »

برای اجرای کد های C نیازمند محیطی هستیم تا با نوشتن کد در آن بتوانیم کد های خود را به شکل یک فایل اجرایی در بیاوریم، به این محیط کامپایلر میگوییم؛ در مورد کامپایلر بیشتر بدانید
همانطور که در پست اول اشاره شد ما از محیط برنامه Turbo استفاده میکنیم ؛ علت استفاده از این محیط برای کد نویسی به علت مزایایی آن می باشد :
- حجم کم و سادگی محیط آن
- به علت نداشتن کتابخانه پیشنهاد دهنده؛باعث تسلط افراد مبتدی بر روی کدنویسی می شود
-و...
***توجه کنید که در اینجا هدق ما آموزش زبان C است بعد از یادگیری ای میتوان برای تمامی کامپایر های C دیگر نیز با همین قواعد دستور نوشت مثلا برای طراحی سایت یا برای ایجاد یک نرم افزار کامپیوتر یا ایجاد یک رابط کاربری برای یک دستگاه صنعتی و... ***
در این قسمت میخواهیم نصب و آشنایی با محیط ساده این نرم افزار را به شما آموزش دهیم
1-نرم افزار Turbo را دانلود کنید؛ بعد از دانلود این نرم افزار با پوشه ای مواجه میشوید که در آن چندین پوشه به نام های Bin , include , Lib و.... وجود دارد، پیشنهاد بنده این است که این پوشه اصلی را در هارد اصلی خود یعنی C کپی کنید
2-بعد از کپی کردن پوشه درون هارد خود به داخل پوشه و سپس به داخل پوشه Bin رفته و فایل TC.EXE را اجرا کنید (( کسانی که از سیستم های 64 بیتی استفاده می کنند؛ ابتدا راهنما را در آخر همین پست مطالعه کنند))
3- بعد از اجرای TC.EXE با محیط زیر رو به رو میشوید
تصویر
4-با انتخاب گزینه NEW محیطی شبیه زیر باز میگردد که در این محیط کد نویسی خواهیم کرد
تصویر
5- سپس به بقیه Tab های برنامه نگاهی می اندازیم
تصویر
در قسمت سرچ چند گزینه Find برای پیدا کردن کلمه ای خاص درون کد و Replace برای عوض کردن یک کلمه خاص در کل دستورات برنامه نویسی می باشد و....
6- RUN در این tab ما کد هایی را که درون قسمت مربوط به کد نویسی نوشته ایم میتوانیم Run و اجرا کنیم
تصویر
7- در بخش کامپایل کردن،کد نوشته شده علاوه بر اجرا و خطا یابی ، بصورت یک نرم افزار در آمده و در محیطی که در بخش بعد نشان خواهیم داد ذخیره می شود؛ اما بخش Make تنها کد نوشته شده را در محل مورد نظر بصورت یک فایل اجرایی EXE ذخیره میکند
تصویر
8- tab Debug : این تب جهت پیدا کردن خطاهای برنامه نویسی استفاده می شود
9- تب Option : برای نصب صحیح نرم افزار انجام کارهای زیر ضروری است با باز کردن تب Option برروی گزینه Dirctories رفته و سپس در فیلد اول را مطابق شکل زیر آدرس پوشه Include را از روی هارد خود بدهید
در فیلد دوم آدرس پوشه LIB را از روی هارد خود بدهید
و در فیلد سوم مکانی را که مشخص میکنید فایل های ایجاد شده توسط گزینه Compile در این محیط ذخیره میشوند
فیلد چهارم هم فعلا برای ما اهمیتی نداره
برای پیدا کردن آدرس پوشه ها به کادر بالا سمت چپ توجه شود

تصویر
با انجام کارهای بالا کد های نوشته شده ی ما قابلیت اجرا را پیدا خواهند کرد؛ درصورتی که مراحل بالا انجام نشود، کدهای نوشته شده اجرا نخواهد شد.
10- اگر از زبان انگلیسی خوبی بهره مند هستید حتما از گزینه مناسب HELP استفاه کنید !
تصویر
********************

راهنمای استفاده برای سیستم 64 بیتی : برای استفاده در سیستم های 64 بیتی باید از نرم افزار DOS BOX استفاده کنید راهنمای کار با DOs BoX را میتوانید در این وبلاگببینید
تصویر

ضعيف‌الاراده كسي است كه با هر شكستي بينش او نيز عوض شود. (ادگار‌ آلن‌پو)

***

میترا از ایزدان باستانی ایرانیان پیش از روزگار زرتشت است، که معنی عهد و پیمان و محبت و خورشید نیز می‌دهد. نماد او خورشید می‌باشد،انتخاب نام کاربری بنده هم به همین سبب است،با عرض معذرت؛ خواهشمند است عده ای از دوستان پیغام های بیهوده نگذارند
درباره خدایان باستانی بیشتر بخوانید

نمایه کاربر
metra70

نام: مصطفی

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۸۷/۱۰/۸ - ۱۳:۵۵


پست: 398

سپاس: 96

جنسیت:

Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط metra70 »

خوب در پست قبل با برنامه ی کامپایلر C آشنا شدیم ؛ برنامه های زیادی وجود دارند که توسط آنها می توان زبان C را کامپایل کرد و با آشنایی با یکی از آنها با طرز کار بقیه آشنا میشوید
در این قسمت میخواهیم در مورد بدنه "اصلی" و "هدر ها" و معرفی "کلمات کلیدی در زبان C "بحث کنیم
تابع Main ( بدنه اصلی)
هر برنامه را در یک بدنه اصلی به نام Main مینویسند؛همانطور که دیدم Main را تابع نامیدیم؛ تابع ها هم دارای نوع هستند، تابع ها میتوانند مقدار بگیرند برای همین باید برای تابع نوع تعریف کرد ( int , float , void و.. ) که ما در اینجا فعلا توابع را از نوع void یعنی تهی تعریف میکنیم، زیرا نمیخواهیم بدنه اصلی ما دارای مقداری باشد و تنها میخواهیم برنامه درون آن اجرا شود و یا مثلا اگر بخواهیم تابع main ما دارای مقداری صحیح باشد باید تابع را از نوع int تعریف کنیم بعدا بیشتر در این مورد حرف خواهیم زد
بدنه اصلی بصورت زیر تعریف میشود
void main ()
{
دستوراتی که باید اجرا شود
}
کلمات کلیدی در زبان C

کلمات کلیدی در زبان C بصورت زیر است به شما پیشنهاد میکنم جهت یادگیری این کلمات دوبار از روی آنها تایپ کنید تا در ادامه به مشکل برنخورید
#intrrupt
#asm
volatile --- void --- unsigned ----switch ----static----- sizeof -----signed ------short
return-----long ---int ----if -----goto----float----else-----double-----do----default
char----const ---char---case --break ---
در به مرور با هر یک از این کلمات آشنا بیشتر می شویم

هدر ها

در زبان C یک سری توابعی وجود دارد که دارای کاربرد های خاصی می باشنداین توابع درون هدر ها قرار دارند به عنوان مثال تابعی با نام Printf() وجود دارد که توسط آن میتوان متنی را برروی صفحه نمایش تایپ کرد، این تابع در هدر stdio.h قرار دارد
هدر ها را در اول برنامه نویسی و قبل از تابع main بصورت زیر تعریف میکنند
#include<HEADER>
به عنوان مثال
#include<stdio.h>
پس بنابراین شکل ظاهری یک برنامه کاربردی در زبان C مثلا بصورت زیر است
#include<stdio.h>
Void main()
{
دستورات ;
}
نمونه ای از توابع مفید درون هدر ها را در قسمت بعد معرفی خواهیم کرد
تصویر

ضعيف‌الاراده كسي است كه با هر شكستي بينش او نيز عوض شود. (ادگار‌ آلن‌پو)

***

میترا از ایزدان باستانی ایرانیان پیش از روزگار زرتشت است، که معنی عهد و پیمان و محبت و خورشید نیز می‌دهد. نماد او خورشید می‌باشد،انتخاب نام کاربری بنده هم به همین سبب است،با عرض معذرت؛ خواهشمند است عده ای از دوستان پیغام های بیهوده نگذارند
درباره خدایان باستانی بیشتر بخوانید

zoomtech

نام: hadi

عضویت : شنبه ۱۳۹۵/۱/۱۴ - ۲۱:۳۷


پست: 1




تماس:

Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط zoomtech »

metra70 نوشته شده:با عرض سلام بر همه شما دوستان عزیز
در این تاپیک قصد داریم به مرور مطالبی در باره زبان C بنویسم تا مرجعی برای زبان C درست کنیم ، این تاپیک به مرور زمان تکمیل میشود
بحث را زیاد کش نمیدهیم و یک راست به سراغ اصل مطلب میرویم منتها قبل از آن سعی بر رعایت دو نکته داشته باشید :
اول آنکه کامنت اسپم نکنید و دوم آنکه تا حد امکان سوالات خود را در تاپیک جداگانه پرسید
- برای تمرین زبان سی میتوانید از نرم افزار کم حجم notepad++ استفاده کنید
- در ابتدا کامپایلر Turbo را که حجم آن کمتر از 5 مگابایت است را دانلود کنید؛ تا برنامه های خود را در این کامپایلر بنویسیم

فهرست

انواع داده در زبان C -------------------------------------اینجا

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

moradi777

نام: مرادی

عضویت : شنبه ۱۳۹۵/۱/۲۸ - ۱۷:۰۴


پست: 1




تماس:

Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط moradi777 »

زبان c زبان بسیار کاربردی هست از شما ممنونم لینک دانلود نیز عالی بود.

alimseoyab

عضویت : شنبه ۱۳۹۵/۱/۲۸ - ۱۷:۰۹


پست: 1




تماس:

Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط alimseoyab »

ممنون از آموزش کامل و جامع شما

نمایه کاربر
metra70

نام: مصطفی

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۸۷/۱۰/۸ - ۱۳:۵۵


پست: 398

سپاس: 96

جنسیت:

Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط metra70 »

alimseoyab نوشته شده:ممنون از آموزش کامل و جامع شما
moradi777 نوشته شده:زبان c زبان بسیار کاربردی هست از شما ممنونم لینک دانلود نیز عالی بود.
zoomtech نوشته شده:
metra70 نوشته شده:

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

با سلام ممنون از شما، به خاطر عمل جراحی که برام پیش اومد، از این تاپیک غافل شدم انشالله دوباره بعد 20 اردیبهشت تاپیک رو پیگیری میکنم، بابت این تاخیر طولانی شرمنده.

اگر امکان دارد پرسش ها و بقیه حرف های خود را در تاپیک جداگانه ایجاد کنید و پیگیری کنید smile072 smile072 smile072
تصویر

ضعيف‌الاراده كسي است كه با هر شكستي بينش او نيز عوض شود. (ادگار‌ آلن‌پو)

***

میترا از ایزدان باستانی ایرانیان پیش از روزگار زرتشت است، که معنی عهد و پیمان و محبت و خورشید نیز می‌دهد. نماد او خورشید می‌باشد،انتخاب نام کاربری بنده هم به همین سبب است،با عرض معذرت؛ خواهشمند است عده ای از دوستان پیغام های بیهوده نگذارند
درباره خدایان باستانی بیشتر بخوانید

نمایه کاربر
metra70

نام: مصطفی

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۸۷/۱۰/۸ - ۱۳:۵۵


پست: 398

سپاس: 96

جنسیت:

Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط metra70 »

بیشتر بدانید:

آرژنا نوشته شده:سلام.
ممنون از پست های مفیدی که در مورد برنامه نویسی C گذاشته بودید.

من برنامه ی توربو c رو روی لپتاپم نصب کردم و باهاش برنامه هم نوشتم (برای درس برنامه نویسی توی دانشگاه ) اما هروقت که این برنامه رو باز میکنم با اینکه حجمش خیلی کمه اما فن های لپتاپم روشن میشه و احساس میکنم خیلی به لپتاپم فشار میاد.
این برام خیلی عجیبه چون CPU لپتاپم core i7 هست و رم اش هم 8گیگه. تازه نرم افزار های دیگه ای مثل matlab روش نصب کردم اصلا سرعتش نیومد پایین و مشکلی نداشت. کلا لپتاپم قویه و تاحالا هنگ نکرده. سه ساله دارمش.

به نظر شما علتش چیه؟ با اینکه فن هاش روشن میشه اما بازم داغ میکنه. غیر از این مورد سابقه نداشته اینجوری بشه.
چیکارش کنم؟

قبل از اینکه بخواهیم به این سوال بصورت واضح جواب دهیم از شما اجازه میخواهم اول مفایم 64 بیتی و 32 بیتی و معماری RISC و CISC را کمی شرح بدهم:
----------------------------------------------بند 1------------------------------------------

در چند سال پیش(حدودا 50 60 سال پیش که تازه کامپیوتر اختراع شده بود) سرعت حافظه اصلي رو به افزايش بود و زبان هاي سطح بالا (High Level Language : HLL) در حال جايگزين شدن با زبان اسمبلي بودند. در اين راستا طراحي هاي اوليه معماري CISC به مرور کنار گذاشته شد و طراحان به دنبال روش هايي بودند که با استفاده از آن ها کارآيي کامپيوتر افزايش يابد. همانطوري که مي دانيم جنبه مهمي از معماري کامپيوتر ، طراحي مجموعه دستورالعمل ها براي پردازنده است. مجموعه دستورالعمل هاي انتخاب شده براي پردازنده اي خاص ، نحوه ساخت برنامه هاي زبان ماشين آن پردازنده را تعيين مي کند. پردازنده هاي اوليه ، مجموعه دستورالعمل هاي کوچک داشتند که دليل آن بيشتر تمايل به کاهش سخت افزار مورد استفاده براي پياده سازي بود. در زمانيکه هزينه ساخت سخت افزار کمي با ظهور مدارهاي مجتمع کاهش يافت، دستورالعمل هاي پردازنده از نظر تعداد و پيچيدگي رو به افزايش گذاشت. مجموعه دستورالعمل هاي بسياري از پردازنده ها در آن زمان شامل100 وگاهي اوقات بيش از200 دستورالعمل بود. اين نوع پردازنده ها از گستره اي از انواع داده ها و شيوه هاي آدرس دهي متعدد پشتيباني مي نمودند. دلايل زيادي را جهت سير حرکت به سوي پيچيدگي سخت افزار در آن زمان مي توان در نظر گرفت،که عبارتند از:
1-ارتقاء مدل هاي موجود در آن زمان براي فراهم نمودن برنامه هاي کاربرد بيشتر
2-اضافه نمودن دستورالعمل هايي که ترجمه از زبان هاي سطح بالا به زبان ماشيني ساده نمايد.
3-همه ماشين هايي که توابع را به جاي پياده سازي نرم افزاري به صورت سخت افزاري پياده سازي نمايند. پردازنده اي که تعداد دستورالعمل هاي آن زياد باشد به عنوان مجموعه دستورالعمل هاي پيچيده يا پر دستور(CISC) اين طبقه بندي قرار مي گيرند.


معماريCISC:
هدف اصلي از معماريCISC تلاش در تهيه يک دستور ماشين به ازاء سطح بالاست. بنابراين در اين روش براي ساده دتر کردن معماري از ريز دستورالعمل (micro-operation)استفاده مي شود.در يک سيستم ريز برنامه شده ROM ، شاهد يک گروه از دستورالعمل هاي ريز برنامه هستيم که با دستور العمل زبان ماشين پردازنده مطابقت دارد.در معماريCISC وجود ريز برنامه ،به عنوان يک لايه بين دستورالعمل و سخت افزار الکترونيکي پردازنده است که سعي در بهبود بخشيدن روند اجراء دارد. با استفاده از ريز عمل تعداد ترانزيستورهاي کمتري استفاده مي شود.

معماري RISC :
معماريRISc فناوري براي طراحي واحد پردازش مرکزي(Central Processing Unit:CPU) است که جهت فراهم آوردن سرعت بيشتر و هزينه کمتر در مقابل معماري CISC بکار مي رود. اين فناوري براي اولين بار توسط شرکت IBM بکار گرفته شد.
ايده اساسي در معماري RISC ساده سازي منطق لازم براي پياده سازي يک پردازنده بود که قادر به اجراي فقط دستورالعمل ها و مدل هاي آدرس دهي ساده باشد. بنابراين پردازنده مي تواند کوچک تر ، کم هزينه تر و سريعتر با توان مصرفي کمتر باشد. معماري RISC از برنامه هاي مترجم به صورت بهينه و هوشمندتر استفاده مي کند. پردازنده هاي RISC داراي حالت کاري تقليد هستند که آن ها را قادر مي سازد تا کد ترجمه شده ديگر پردازنده هاي غيرRISC را اجرا نمايند.
مجموعه کوچک دستورالعمل هاي يک پردازنده RISC نوعي، عمدتاً از عمليات ثبات به ثبات تشکيل مي شود و فقط براي عمل هاي ذخيره و باردهي ساده به حافظه مراجعه مي شود.هر يک عملوندها با يک دستورالعمل باردهي به داخل يکي از ثبات هاي پردازنده آورده مي شود.همه محاسبات روي داده هاي ذخيره شده در ثبات هاي پردازنده انجام مي شود.نتايج محاسبات با استفاده از دستورالعمل ذخيره به حافظه منتقل مي شود.اين ويژگي معماري، مجموعه دستورالعمل ها را ساده مي کند و موجب تشويق بهينه سازي عمليات دستکاري داده ها در ثبات ها مي شود. در ماشين RISC نيز مجموعه دستورالعمل ها ساده هستند.دستورهاي اصلي و پايه قابل ترکيب براي توليد دستورهاي پيچيده مي باشد.طول يکسان دستورها:با استفاده از قالب نسبتاً ساده اي براي دستورالعمل ها ، طول دستورالعمل ها مي تواند ثبات و محدود به مرزهاي کلمات باشد.
جنبه مهمي از قالب دستورالعمل هاي RISC اين است که کدگشايي آن ساده است. بنابراين واحد کنترل مي تواند به طور همزمان به کد عمل و ميدان هاي ثبات دست يابد. با ساده کردن دستورالعمل ها و قالب آن ها ، مي توان مدار کنترل را ساده کرد.هر دستور،داراي طول يکساني با ديگر دستورها است به طوريکه واکشي آن در يک عمل مجزا امکانپذيرمي باشد.
تصویر

هميشه بحث بر سر اين است که کدام بهتر است: RISC يا CISC؟
فروشندگان ، سازندگان و عرصه کنندگان RISC هميشه گفته اند که تراشه هاي آن ها سريعتر و توانمندتر از تراشه هاي CISC بوده است.
اما اينتل و ديگر سازندگان کامپيوترهاي مبتني بر رهيافت CISC ادعائي خلاف اين را داشته اند. پردازنده هاي RISC که تعداد کمتري از دستورها را پشتيبان مي کنند، در مقايسه با پردازنده هاي غير RISC برنامه ها را سريعتر به اجرا در مي آورند. اما آيا واقعاً اين تمام ماجرا است؟ اگر چنين باشد به اين معني نخواهد بود که يک پردازنده RISC نرم افزار را کندتر اجرا مي کند، زيرا بايد براي به اجرا در آوردن وظيفه هاي پيچيده مانند محاسبه مقادير سلولها در يک صفحه گسترده و يا کشيدن يک تصوير گرافيکي در يک صفحه نمايش ويرايشگر ، از تعداد دستورالعمل هاي بيشتري استفاده کند. بنابراين واقعا مزيت مجموعه دستورالعمل هاي کوچک چيست؟ همين که واژه RISC به گوش مي رسد نخستين چيزي که به ذهن تداعي مي شود، کاهش تعداد دستورالعمل هايي است که CPU پشتيباني مي کند و در نتيجه پيچيدگي تراشه پردازنده کاهش پيدا مي کند.

بنابراين امکان پذير است که دستور مستقل سريعتر اجرا مي شوند و يک بهره مناسب با کارائي در هنگام اجراي يک وظيفه در قياس با يک معماري با دستورهاي بيشتر حاصل گردد. هر دستورالعمل فرماني است که در کسري از زمان رمزگشايي مي شود ودر اندک زماني CPU آن را مي نويسد ، برنامه مترجم(کمپايلر) هر جمله را با يک يا چند دستورالعمل ريز پردازنده ترجمه و تبديل مي کند. به طوري که برنامه نويساني که مي خواهند اين دستورهاي ريزپردازنده را ببينند مجبور به غوطه خوردن در زمان هاي ناچيز رمزگشايي و يا اجرا نيستند. دستورالعمل با يادمانهايشان داده مي شوند. يادمان ها بيشتر شبيه مخفف کلمات انگليسي مي باشند و خواندن و فهميدن برنامه را آسانتر مي سازد. مانند MOV که مخفف MOVE است و يادآور انتقال يک مقدار از يک مکان به مکان ديگر است و يا ADD که سبب جمع دو مقدار با يکديگر مي شود. از آنجائيکه که ثبات ها بخشي از ريز پردازنده هستند، دستيابي به ثبات ها بسيار سريعتر از دستيابي به حافظه مي باشد. هر برنامه اي که پيچيده نباشد، اين دستورها را به مجموعه از بيت ها تبديل مي کند.و بيشتر برنامه هاي. کاربردي پيشرفته شامل صدها و هزاران خط از چنين کدهايي هستند. سيستم عامل حتي از اين هم پيچيده تر مي باشد. به عنوان نمونه
سيستم عامل قديمي Windows 95 شامل 10 ميليون خط است که بيشتر آن به زبان C نوشته شده است. هنگامي که برنامه اي به اجرا در مي آيد ، ريز پردازنده دستورها را مي خواند يا يکي را واکشي و اجرا مي کند. ريز پردازنده به زماني براي واکشي دستور و به زمان بيشتري براي رمزگشايي (کدگشايي) اين که دستور چه مي خواهد، نياز دارد. به محض اين که اجراي دستور آغاز شود،تعداد مشخصي از سيکل هاي ساعت براي تکميل دستور استفاده مي شوند .سيکل ساعت بيانگر ضربان نوسانگري است که ريز پردازنده را راه اندازي مي کند. يک روش براي داشتن ريز پردازنده اي که نرم افزارها را سريعتر به اجرا در آورد، افزايش تعدادپالس هاي ساعتي که براي اجراي يک دستور لازم هستند، مي باشد. البته توجه داشته باشيد که اين افزايش فرکاني داراي حد مرزي است(به دليل عدم وجود وسايل خنک کننده مناسب). با در نظر گرفتن برابري ديگر پارامترهاي سيستم در ريز پردازنده اي با سرعت1GHZ تنها نيمي از کارايي يک پردازنده2GHZرا تحويل مي دهد. اگر پردازنده يک گيگاهرتزي براي اجراي دستوري به 4 پالس ساعت نياز داشته باشد، پردازنده دو گيگاهرتزي تنها به يک پالس ساعت نياز دارد. در ضمن پردازنده هاي CISC مانند x86 نيازمند يک تا بيش از 100 سيکل ساعت براي تکميل يک دستور هستند.
تصویر

درنتیجه CISC دستورات پیچیده هستند بنابراین طول برنامه کوتاه می شه و در RISC تعداد دستورات کاهش یافته اند (Reduced) بنابراین با دستورات بیشتری نسبت به CISC باید کار مشخصی را انجام داد، لذا طول برنامه بیشتر می شه.
چون در CISC دستورات پیچیده ترند، تعداد کلاک بیشتری برای اجرای دستور نیازه.
چون دستورات CISC پیچیده ترند، لذا حجم پردازنده نسبت به تراشه هم باید بیشتر باشه و مجبورا Cache کوچکتری داریم. (دقیقا برعکس RISC)
لازم به ذکر است که کامپیوترهایی که CISC و RISC محض باشند نداریم.

-----------------------------------بند 2-----------------------------------


لپ تاپ ها(یا سیستم هاX64) معمولا برای طراحی CPU خود از معماری CISC و بعضیها هم RISC استفاده میکنند. و باس آنها به جای 32 بیت 64 بیت به CPU وارد شده است.
پس نگران نباشید، چون باس های لپ تاپ 64 بیتی هست، در حالی که نرم افزار مذکور بسیار قدیمی است و تنها روی سیستم های 32 بیتی اجرا میگردد، برای همین هنگامی که از این کامپایلر با استفاده از نرم افزار های مخصوص تبدیل برنامه به 64 بیتی و اجرا روی لپ تاپ استفاده میکنیدکه باعث میشود تا پروتکل سیستم شما را به شکل نرم افزاری به 32 بیت تغییر دهد، اینکار در عین بیان ساده آن بسیار پیچده هست و چرا که برای سوئیچ از معماری RICS به SISC وبر عکس (X86<-->X64) حجم پردازشی بسیار زیادی باید انجام شود که باعث کار کردن لپ تاپ به خصوص CPU شما در ماکزیمم توان خود میشود.
این بحث کاملا مفصل است و چند سال بصورت آکادمیک طول میکشد تا کاملا بر بحث مسلط شد اما برای اطلاعات بیشتر میتونید کتاب معماری کامپیوتر سپید نام رو مطالعه کنید.(البته بصورت مستقیم توضیح نداده است.)
تصویر

ضعيف‌الاراده كسي است كه با هر شكستي بينش او نيز عوض شود. (ادگار‌ آلن‌پو)

***

میترا از ایزدان باستانی ایرانیان پیش از روزگار زرتشت است، که معنی عهد و پیمان و محبت و خورشید نیز می‌دهد. نماد او خورشید می‌باشد،انتخاب نام کاربری بنده هم به همین سبب است،با عرض معذرت؛ خواهشمند است عده ای از دوستان پیغام های بیهوده نگذارند
درباره خدایان باستانی بیشتر بخوانید

نمایه کاربر
metra70

نام: مصطفی

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۸۷/۱۰/۸ - ۱۳:۵۵


پست: 398

سپاس: 96

جنسیت:

Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط metra70 »

با سلام، بابت تاخیر طولانی مدت از شما عذر خواهی میکنم، در این پست قصد داریم با بررسی یک مثال از زبان سی کمی با شیوه کد نویسی در زبان سی آشنا شوید.
مثال اول
در ابتدا برنامه ای ساده ای در زبان سی خواهیم نوشت که توسط این برنامه شما مقدار پولی را وارد میکنید و این برنامه به شما می گویید که پول شما چند سکه 2 تومنی چند سکه 5 تومنی و چند اسکناس 10 تومنی و اسکناس 20 تومنی و 50 تومنی می شود. دقیقا مشابه آنچه که در دستگاه های عابر بانک رخ میدهد، شما مقداری را وارد می کنید و دستگاه به شما پول را با اسکناس های کوچکتر تحویل میدهد
کد زیر حتما خودتان تایپ کنید:

کد: انتخاب همه

#include <stdio.h>
#include <conio.h>
int main()
{
 int i2,i5,i10,i20,i50,money,count=0,sum;
 clrscr();
 printf("Enter your Money=");
 scanf("%d",&money);
 for (i2=0;i2<=100;i2++){
  for (i5=0;i5<=40;i5++){
   for (i10=0;i10<=20;i10++){
    for (i20=0;i20<=10;i20++){
     for (i50=0;i50<=4;i50++){
      sum=2*i2+5*i5+10*i10+20*i20+50*i50;
      if(sum==money){
       printf("2Rials=%d\t,5Rials=%d\t,10Rials=%d\t,",i2,i5,i10);
       printf("20Rials=%d\t,50Rials=%d\n",i20,i50);
       count++;
      }
      else
      sum=0;
     }
    }
   }
  }
 }
 printf("Number of Correct Times:%d",count);
 getch();
 return 0;
}

سپس از منو گزینه RUN را انتخاب کنید و RUN را بزنید، برنامه اجرا می شود و از شما مقداری را به عنوان ورودی می خواهد. مثلا من عدد 15 را انتخاب کردم و کلید ENTER را زدم و نتیجه حاصل بصورت زیر شد:

تصویر

اکنون شما یک نرم افزار بانکی ساختید!

تحلیل برنامه:
اکنون بصورت ریز به ریز و جز به جز به تحلیل برنامه نوشته شده خواهیم پرداخت:
برنامه ی از سه قسمت ساخته شده:
1- سربرگ ها یا هدر ها:

کد: انتخاب همه

#include <stdio.h>
#include <conio.h>

توسط این قسمت ما مشخص میکنیم که به چه هدر هایی نیازمند هستیم و زمانی که این هدر ها را فراخوانی کردیم به این معنی است که ما به توابع این هدرها نیازمندیم، هدرها بصورت مفصل در پست های قبلی شرح داده شده.
2- برنامه اصلی ما:

کد: انتخاب همه

int main()
{
 int i2,i5,i10,i20,i50,money,count=0,sum;
 clrscr();
 printf("Enter your Money=");
 scanf("%d",&money);
 for (i2=0;i2<=100;i2++){
  for (i5=0;i5<=40;i5++){
   for (i10=0;i10<=20;i10++){
    for (i20=0;i20<=10;i20++){
     for (i50=0;i50<=4;i50++){
      sum=2*i2+5*i5+10*i10+20*i20+50*i50;
      if(sum==money){
       printf("2Rials=%d\t,5Rials=%d\t,10Rials=%d\t,",i2,i5,i10);
       printf("20Rials=%d\t,50Rials=%d\n",i20,i50);
       count++;
      }
      else
      sum=0;
     }
    }
   }
  }
 }
 printf("Number of Correct Times:%d",count);

این قسمت برنامه اصلی ما می باشد.
در قسمت اول برنامه int main را مشاهده میکنید که در پست:
posting.php?mode=reply&f=41&t=32357#pr503999
بصورت کامل در مورد آن توضیح داده شده است.
در خط بعد عبارت :
int i2,i5,i10,i20,i50,money,count=0,sum;
را می بینید، در این دستور ما به تعریف متغییر هایی به نام i2,i5,i10,i20,i50 کرده ایم، که بعد ها مقدار ورودی ما خورد می شود درون این متغییر ها قرار میگیرد و همچینن در ادامه متغییرهای money,count=0,sum را نیز تعریف کرده ایم. که مقدار count صفر تعریف شده است، لازم به ذکر است که اگر مقدار اولیه ای برای متغییر تعریف نگردد سیستم عامل خود مقدار متغییر را صفر در نظر میگیرد.
سپس توسط دستور clrscr(); صفحه نمایش کاملا از اطلاعات، اشکال و کارکترهای قبلی پاک می شود.
سپس توسطprintf که یک تابع می باشد، عبارتی را بروی صفحه چاپ میکند که از شما مقداری را درخواست میکند وظیفه تابعprintf نمایش یک عبارت برروی صفحه نمایش است، که در اینجا عبارت: Enter your Money را نمایش میدهد
این تابع را باید به صورت:

کد: انتخاب همه

printf("عبارت")

بکار برد.سپس با scanf مواجه می شوید این دستور مانند دستور بالا است هنگامی که شما عبارتی را برروی صفحه نمایش تایپ میکنید و کلید ENTER را میزنید عبارت تایپ شده درون متغییر scanf قرار میگیرد که در

کد: انتخاب همه

scanf("%d",&money);

money متغییر ماست و عبارت d% به معنای این است که عبارت وارد شده درون متغییر money قرار بگیرد.
سپس با حلقه For مواجه می شویم که قبلا درباره آن توضیح داده شده است میتوانید دوباره در زیر شرح آن را بخوانید:
*******************

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

for (initialize_variables; conditions; expression)
{
statements;
}
حلقه for دارای سه قسمت است: قسمت initialize_variables برای مقداردهی اولیه متغیرهای حلقه به کار می‌رود؛ عبارت conditions شرط ادامه حلقه است و قسمت بعدی یعنی expression یک دستور C++ است که معمولا کار تغییر مقدار متغیر حلقه را انجام می‌دهد. اگر یک قسمت دارای چند عبارت باشد در این صورت می‌توان آنها را با علامت "," از هم جدا کرد.

اگر قسمت‌های مختلف حلقه for را خالی بگذاریم؛ در این صورت یک حلقه بی‌نهایت ایجاد کرده‌ایم:

for (;;)
{
statements;
}

مثال زیر اعداد فرد بین 1 تا 10 را در خروجی چاپ می‌کند:

int i;
for (i = 1; i <= 10; i++)
{
if (i % 2)
cout << i << endl;
}

به نمایه از : http://professionalcpp.blogfa.com/post/24
*******************

در خط بعدی باز با دستور printf مواجهه می شویم و سپس با دستور Count++ که توسط این دستور مقدار count یه یک واحد به آن اضافه می شود.
3-قسمت توابع وانتهای برنامه:

کد: انتخاب همه

 getch();
 return 0;

مقداری برای توضیح دادن در مورد مقادیر return و getch زود می باشد و در آینده درباره اینها بیشتر صحبت میکنیم

برنامه چگونه کار میکند؟
اساس برنامه به این صورت است که از شما یک مقدار را میگیرید و سپس آن را در متغییری ذخیره میکند و سپس آن را توسط حلقه های تو در تو می شمارد و سپس حاصل را در خروجی نمایش می دهد.
تصویر

ضعيف‌الاراده كسي است كه با هر شكستي بينش او نيز عوض شود. (ادگار‌ آلن‌پو)

***

میترا از ایزدان باستانی ایرانیان پیش از روزگار زرتشت است، که معنی عهد و پیمان و محبت و خورشید نیز می‌دهد. نماد او خورشید می‌باشد،انتخاب نام کاربری بنده هم به همین سبب است،با عرض معذرت؛ خواهشمند است عده ای از دوستان پیغام های بیهوده نگذارند
درباره خدایان باستانی بیشتر بخوانید

uraniburg

عضویت : پنج‌شنبه ۱۳۹۲/۱۰/۵ - ۲۲:۵۰


پست: 1



Re: مرجع 0 تا 100 زبان C به همراه آموزش

پست توسط uraniburg »

کسی پایه هس واسه یادگیری سی؟

ارسال پست