آموزش ++c.

Y.P.Y

Well-Known Member
زبان C(سی)
C یک زبان برنامه نویسی کامپیوتری هست که در سال 1972 توسط Dennis Ritchie برای سیستم عامل Unix نوشته شد.

C تکامل یافته زبان برنامه نویسی B می باشد و نامگذاری C که بعد از B بوجود آمد همین است.

C یک زبان برنامه نویسی سطح میانی و ساخت یافته می باشد. در علوم کامپوتری، سطوح زبانهای برنامه نویسی را به سه دسته اصلی تقسیم می کنند:
1- سطح بالا.
2- سطح میانی(C و ++C).
3- سطح پایین.
زبان C جزو دسته دوم می باشد. به این دلیل که قادر است مانند زبان اسمبلی مستقیماً با حافظه(بیت، بایت، آدرس و...) کار کند و از طرف دیگر نوشتن و خواندنش راحت می باشد(مانند زبان Pascal).

از جمله ویژگی های زبان C می توان به:
قابلیت انعطاف، زبان سیستمی، سطح میانی، قابل حمل، کامل و کوچک، سبک، سریع و قدرتمند بودنش اشاره کرد.

زبان ++C(سی پلاس پلاس)
در سالهای بین 1979 و 1983، زبان C توسط Stroustrup تکامل یافت. توانایی و قدرت این زبان چند برابر شد و زبان C جدید و بعد C کلاسدار و بعد ++C بوجود آمد. که اولین نگارش ++C در سال 1985 روانه بازار شد. http://en.wikipedia.org/wiki/C++

زبان ++C یک زبان برنامه‌نویسی کامپیوتری همه منظوره، شی گرا، سطح بالا و چندرگه، عمومی و با قابلیت‌های سطح بالا و سطح پایین می‌باشد.

ساختار این زبان شامل: دستورات پیش پردازنده(Preprocessor)، اعلانات سراسری(توابع، ماکروها، متغیر ها، ثوابت و...)(Global declaration)، تابع main و توابع تعریفی کاربر(user-defined function) می باشد.

منبع: http://www.IranPHP.org
 
آخرین ویرایش:

Y.P.Y

Well-Known Member
ساختار و معماری
اولین باری که به یک برنامه ++C نگاه می کنید، بنظر پیچیده می آید. شکل گرامری زبان ++C مختصر می باشد و همین مختصر بودن دلیل قدرت و انعطاف این زبان می باشد.

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

تمام برنامه های ++C از ساختار کلی/اساسی یکسانی پیروی می کنند. یعنی ساختار یک نرم افزار بزرگ و پیچیده برابر ساختار یک برنامه کوچک و ساده می باشد. که این اصل رو خودتون هم متوجه خواهید شد.

یک برنامه C/C++:
1- دستورات پیش پردازنده: شرطها، ضمیمه ها(include)، ماکروها...
2- اعلانات سراسری: متغیر ها، توابع، ثوابت...
3- main()
4- توابع تعریفی کاربر/برنامه نویس

برای درک بهتر این مسله به مثال زیر توجه کنید(تمامی دستورات بعداً مفصل شرح داده می شود):
کد:
// Test comment. Hello.
#ifndef _XXXXX_H
	#define _XXXXX_H
#else
	#define _ZZZZZ_H
#endif

#if !defined _YYYYY_H
	#define _YYYYY_H
#endif

#include <MyLibrary.h>
#include <MyClass.h>

#define false -1
#define number1 5
#define number2 10
#define MyDefine "test"
#define sum number1 + number2
#define MyMacroFunction(xxx) xxx * 22
//////////////////////////////////////////////////
int i= 0, j= 1000;
char c;
float f= 1;

void MyFunction(void);
int MyFunction2(int zzzzz);
//////////////////////////////////////////////////
main()
{
	//...
	MyFunction();
	#undef MyDefine
	//...
}
//////////////////////////////////////////////////
void MyFunction(void)
{
	//...
}

int MyFunction2(int zzzzz)
{
	//...
	return(zzzzz);
}
خط 1 توضیحات/نظرات می باشد. که در مورد برنامه/خط بعدی مطالبی رو مطرح می کند. توضیحات اجباری نمی باشد و هیچگونه کار و عملیات برنامه نویسی انجام نمی دهد. فقط برای فهم و یادآوری استفاده می شود.

در هر برنامه C/C++ اولین قسمتی که کار/عملیات انجام می دهد، دستورات پیش پردازنده می باشد. که با علامت # شروع می شوند.

1- دستورات پیش پردازنده
از خط 2 تا 10 دستورات ضمیمه شرطی(منطقی)(Conditional inclusion directive) قرار دارند(پیش پردازنده هستند). عبارت ndef و عبارت !defined هر دو یکی هستند. این دستورات قبل از انجام کامپایل، بررسی و اعمال می شوند. وظیفشون این هست که موضوعاتی رو چندین بار اعلام می کنند و یا از اعلام مجدد موضوعات جلوگیری می کنند. علامت ! به معنای Not منطقی می باشد و می تواند بطور دلخواه در عبارات استفاده شود.

خط 12 و 13 شامل فایل های Header(منبع) ضمیمه شده می باشد که به کامپایلر(Compiler) می گوید قبل از شروع کامپایل آنرا در برنامه ضمیمه کن. فایل های Header معمولاً شامل توابع تعریفی کاربر، تعاریف ماکروها و API ها می باشد. هر دستور include باعث یک توقف/Pause برای کامپایلر می شود تا زمانی که محتوای فایل ضمیمه شده بدقت خوانده و پردازش شود.

خط 15 تا 18 شامل تعاریف ماکرو های ثابت و خط 19 و 20 شامل تعاریف ماکروهای تابع می باشند. هر کجا که فراخوانی شوند، محتوای ماکرو جایگزین نام ماکرو در محل فراخوانی می شود.

2- اعلانات سراسری
خط 22 تا 27 شامل اعلانات سراسری می باشد. خط 22 تا 24 اعلانات متغیر های سراسری(Global) می باشد که در سرتاسر برنامه قابل دسترسی هستند(استفاده از متغیر های سراسری پیشنهاد نمی شود).
خط 26 و 27 هم شامل اعلانات توابع سراسری می باشد که در سرتاسر برنامه قابل دسترسی هستند. تابع اولی هیچ(void) مقداری را نمی گرداند و هیچ آرماگونی را هم نمی گیرد. ولی تابع دومی(MyFunction2) مقدار عددی صحیح برمیگرداند و آرماگون عددی بلند هم می گیرد.
کامپایلر ار اطلاعاتی در اعلان تابع استفاده می کند تا درستی فراخوانی(اعلان)های تابع را کنترل نماید. بعد از اینکه آنها را Pass کرد، آنهارا فراخوانی می کند تا صحت نوع داده ها را مشخص کند. در ضمن آرماگونها و مقدار اولیه و خروجی رو هم بررسی می کند.

3- main()
سومین قسمت اصلی هر برنامه، تابع main() است(همه برنامه ها این تابع رو دارن). اجرای برنامه از این تابع شروع می شود و معمولاً در همین تابع هم پایان می یابد(خط 29).
برخی برنامه ها ممکن است فقط یک تابع main() داشته باشند و این چیز طبیعیست. این تابع می تواند شامل فراخوانی ها، دستورات، شرط ها، حلقه ها، API ها و هر چیز ممکن در ++C باشد. در خط 33 همین تابع، یک دستور #undef قرار دارد. این دستور می تواند ماکروی تعریف شده را خنثی/نابود سازد.

4- توابع تعریفی کاربر
چهارمین قسمت اصلی هر برنامه، توابع تعریفی کاربر(user-defined function) می باشد. این توابع می توانند شامل هر دستوری باشد(مانند تابع main) و هر کاری انجام دهد.
در این مثال از خط 36 به بعد شامل این توابع می باشد. ابتدا نوع برگشتی(Return) تابع مشخص می شود. بعد نام تابع مشخص می شود. و بدنبالش آرماگون ها و آخر بدنه تابع مشخص می شود(میان دو آکولاد {}).

منبع: http://www.IranPHP.org
 

Y.P.Y

Well-Known Member
روند تولید(کامپایل) برنامه
وقتی برنامه ای را تایپ می کنید، یک فایل منبع(Source) ایجاد می کنید. یعنی صفحه ای با متونی شبیه به زبان لاتین که فقط برنامه نویس متوجه آن خواهد شد. این صفحه کاری نمی کند و کامپیوتر هم متوجه آن زبان نمی شود. باید پردازش و عملیاتی(ترجمه) انجام گیرد تا این صفحه تبدیل به زبانی شود که کامپیوتر بتواند آنرا درک کند و برنامه قابل اجرایی را تولید کند(مانند فایلهای سیستم تون).

اولین مرحله در پردازش(ایجاد برنامه)، استفاده از ویرایشگر متنی برای نوشتن کدهای ++C می باشد. شما فایل منبع(Source) را به زبان ++C که شبیه به معماری کامپیوتر هست را می نویسید(به لاتین). بعد باید آنرا به زبان و دستورالعمل های ماشینی(Machine language) تبدیل کنید. این کار بعهده کامپایلر می باشد. کامپایلر برای اینکار عملیات زیر را انجام می دهد:
(برای درک بهتر این موضوع، بر روی یک کامپایلر Open source(منبع باز/متن باز) کار کنید)

ابتدا فایل منبع(Source) خوانده می شود و به تعدادی علایم پیش پرازش(Preprocessor token)(عناصری که کامپایر می تواند با آنها کار کند. مثل عمگر ها، ثابتها، کلمات کلیدی و...) و کاراکتر های سفید(Blank)(شامل فضاهای خالی، Tab ها و Comment ها) تبدیل می شود. در این مرحله کاراکتر های ویژه(Special) تبدیل می شوند و دستورات جدا که دو یا چند خط اشغال نمودند به یکدیگر پیوند می خورند.

سپس دستورات پیش پردازنده(# دار ها) اجرا می گردند. این دستورات شامل include, define if و... می باشند. در این مرحله تمامی دستوات و ماکروها Expand می شوند و عملیات و ضمیمه های لازم انجام می گیرد.

بعد پردازش کاراکترها و رشته ها انجام می گیرد. در این مرحله برنامه برای صحت شکل گرامری(Syntax) و لغات، تجریه و تحلیل می شود(خطاها و هشدارهای Syntax در این مرحله نمایان می شود). اگر اشتباهات جدی(Fatal) پیدا نشود، یک فایل تجزیه/تحلیل شده(معمولاً با پسوند obj) تولید می گردد(تا با بقیه فایل ها ترکیب شود).

دستور پیش پردازنده include# در هر لحظه می تواند چندین فایل را داخل برنامه ادغام(Merge) کند. و هر بار که کامپایلر به این دستور برخورد می کند، به اندازه محتوایش موقتاً پردازش را متوقف(Halt) می کند(همینکار رو زبان های دیگه مثل PHP, ASP Net , Python, PERL و... انجام می دهند!).

در آخرین مرحله(ایجاد برنامه فابل اجرا)، پردازش فایل تولید شده(obj) توسط یک پیوند دهنده(Linker یا Link) انجام می شود. اکثر برنامه ها دارای رجوعاتی به روال(Routine) می باشند که در خارج از برنامه جاری وجود دارند. این روال ها باید آدرس یابی و به برنامه شما اتصال داده شوند تا بتوان با آنها کار کرد.
پیوند دهنده(Linker) تمامی فایلها را با هم ترکیب می کند و در نتیجه یک برنامه قابل اجرا تولید می شود.

تمامی این مراحل توسط کامپایلر انجام می شود. و شما فقط کد می نویسید و بعد با یک کلیک بر روی Build/Make برنامه تان را تولید می کنید(در کامپایلرهای GUI).

منبع: http://forum.IranPHP.org
 
آخرین ویرایش:

Y.P.Y

Well-Known Member
انواع داده ها/Data types
داده هایی(اطلاعاتی) که توسط یک برنامه استفاده می شود، توسط نوع آنها طبقه بندی می شوند. نوع یک داده بیانگر مقادیر و دامنه آن داده می باشد. داده ها اندازه و انواع مختلفی دارند و هر نوع داده برای ذخیره شدن نیاز به مقدار حافظه متفاوتی دارد.

کلیه برنامه هایی که نوشته می شوند بر روی برخی از انواع داده ها عملیاتی انجام می دهند. پس برنامه برای پردازش داده باید نوع آنها را شناسایی کند.
در زبان C سه نوع داده اصلی(اساسی) وجود دارد: Integer, Float, Character(معادل فارسی: عدد صحیح، شناور/ممیزی/اعشاری، کاراکتری). هز کدام از این نوعها شامل گونه های زیادی(ریز تری) هستند که دامنه وسعی از مقادیر را در بر می گیرند.

داده اعداد صحیح/Integer:
بیشترین نوع داده ها، عدد صحیح یا Integer می باشند. این نوع شامل داده های 9, 8, 7 ,6 ,5 ,4 ,3 ,2 ,1 ,0 , -1, -2 ,-3 ,-4 ,-5 ,-6 ,-7 ,-8 ,-9 می باشد و با کلمات کلیدی(رزرو شده) int, unsigned int, short int, long, unsigned long مشخص می شوند. تفاوت اینها در دامنه مقداری و حافظه اِشغالی می باشند:
int دامنه مقدارش از -32768 تا 32767 بوده و به 2 بایت حافظه نیاز دارد. صحیح.
unsigned int دامنه مقدارش از 0 تا 65535 بوده و به 2 بایت حافظه نیاز دارد. صحیح بدون علامت.
short int دامنه مقدارش از -32768 تا 32767 بوده و به 2 بایت حافظه نیاز دارد. صحیح کوتاه.
long دامنه مقدارش از -2147483648 تا 2144483647 بوده و به 4 بایت حافظه نیاز دارد. بلند.
unsigned long دامنه مقدارش از 0 تا 4294967295 بوده و به 4 بایت حافظه نیاز دارد. بلند بدون علامت.
توجه داشته باشید که اعداد صحیح، قسمت شناور/ممیزی/اعشاری ندارند.

داده اعداد شناور/ممیزی/اعشاری/Float:
دومین نوع داده ها، شناور/ممیزی/اعشاری یا Float می باشند. این نوع شامل داده های 9, 8, 7 ,6 ,5 ,4 ,3 ,2 ,1 ,0 , -1, -2 ,-3 ,-4 ,-5 ,-6 ,-7 ,-8 ,-9 بهمراه نقطه، ممیز، کسر، توان و... می باشد و با کلمات کلیدی(رزرو شده) float, double, long double مشخص می شوند. تفاوت اینها هم در دامنه مقداری و حافظه اِشغالی می باشند:
float دامنه مقدارش از 3.4x10 بتوان -38 تا 3.4x10 بتوان 38 بوده و به 4 بایت حافظه نیاز دارد. شناور/ممیزی/اعشاری. تا 7 رقم دقت.
double دامنه مقدارش از 1.7x10 بتوان -308 تا 1.7x10 بتوان 308 بوده و به 8 بایت حافظه نیاز دارد. مضاعف. تا 15 رقم دقت.
long double دامنه مقدارش از 3.4x10 بتوان -4932 تا 3.4x10 بتوان 4932 بوده و به 10 بایت حافظه نیاز دارد. مضاعف بلند. تا 19 رقم دقت.
قسمت شناور/ممیزی/اعشاری و قدرمطلق دارند و به اعداد حقیقی معروفند(Real numbers).

داده کاراکتری/Char:
سومین نوع داده ها، کاراکتری یا Char می باشد. این نوع داده بیشتر از یک کاراکتر نمی تواند درخود نگه دارد(در حالت عادی). این نوع می تواند شامل همه داده ها(اعداد، حروف، علائم، Symbols و..) باشد و با کلمه کلیدی(رزرو شده) char مشخص می شود. و 1 بایت حافظه اشغال می کند.

کامپیوتر(PC) داده ها و اطلاعات رو بصورت باینری(0 و 1) در خودش ذخیره می کند. پس ذخیره سازی مستقیم یک حروف، کلمه یا علامت غیر ممکن می باشد. برای حل این مسله از یک مقدار عددی برای ذخیره داده ها استفاده می کند. یعنی نوع داده کاراکتری، باطناً یک مقدار عددی برابر با همان کاراکتر می باشد(مثل دکمه های صفحه کلید که هر کدام برای کامپیوتر یک عدد هستند).

کامپیوتر(PC) ها از کد ASCII برای نمایش داده های کاراکتری استفاده می کنند. ASCII یک کد استاندارد جهانی شناخته شده است که 128 مقدار متفاوت را در بر دارد(و نمایش می دهد). در نوع داده کاراکتری از همین ASCII ها برای تبادل اطلاعات استفاده می شود.
وقتی داده ای رو در نوع کاراکتری ذخیره می کنید همیشه 1 بیت(با بایت اشتباه نگیرید) بصورت خودکار و مخفی خالی می ماند. و این 1 بیت خالی، + یا - بودن عدد(که برابر با همان کاراکتر هست) را نشان می دهد.

منبع: http://forum.IranPHP.org
 

Y.P.Y

Well-Known Member
متغیر ها و ثوابت(کار با داده ها)
متغیر ها:
در زبان های برنامه نویسی، برای استفاده از داده ها باید اسمی برای داده مشخص کرد. این اسم کلمه ای برای حافظه است. اسم می تواند ترکیبی از حروف(کوچک و بزرگ)، اعداد و _(یا همون خط ربط)، بطول 255 کاراکتر(در حالت معمول) باشد(اولین کاراکتر اسم نباید عدد باشد).
داده می تواند حاوی عدد، حروف، علامت، رشته، فایل و هر چیز دیگری باشد.

متغیر ها محلی برای ذخیره داده ها هستند و چون داده ها دارای نوع می باشند، متغیر ها هم باید دارای نوع باشند. و ممکن است نوع و محتوای متغیر ها در طول اجرا(یا نوشتن) برنامه توسط کاربر(یا برنامه نویس) تغییر کنند.
قبل از استفاده از متغیر ها، ابتدا باید نوع و بدنبالش اسم آنها را تعریف کرد. نوع متغیر ها مقادیری که می تواند بپذیرد و اعمالی که می تواند انجام دهد را مشخص می کند. به اصطلاح، تعیین نوع متغیر را تعریف(اعلان) متغیر می گویند.
متغیر را به دو روش تعریف می کنند:
کد:
Type Name;
یا
کد:
Type Name= Value;
Type نوع داده/متغیر می باشد. که با حروف کوچک نوشته می شود. و به برنامه می گوید n مقدار حافظه را برای نوع فلان مشخص کن. این نوع می تواند کلمه کلیدی(رزرو شده) int, long, float, double, unsigned int, short int, unsigned long, long double, char و... باشد.
Name اسم متغیر می باشد. این اسم میتواند ترکیبی از حروف(بزرگ و کوچک)، اعداد و _(یا همون خط ربط)، بطول 255 کاراکتر(در حالت معمول) باشد(اولین کاراکتر اسم نباید عدد باشد). مثل: test22, abc_22, a_Z, X_X_23434_XX, fff555_oiuuy و...
Value مقدار اولیه متغیر می باشد. این گزینه اختیاری می باشد. یعنی می توان مقدار اولیه ای برای متغیر مشخص نکرد. این مقدار می تواند عدد، حروف، علامت، رشته، فایل و هر نوع داده ای باشد.
در آخر تعریف متغیر یک علامت ; قرار می گیرد که به کامپایلر(Compiler) می گوید تعریف متغیر به پایان رسیده است. در صورت قرار ندادن این علامت، برنامه کامپایل نمی شود و خطا می دهد.

مثال هایی از تعریف(اعلان) متغیر:
یک متغیر از نوع عددی صحیح(int):
کد:
int x;
یک متغیر از نوع عددی صحیح(int) با مقدار اولیه:
کد:
int y= 165;
سه متغیر از نوع عددی صحیح(int):
کد:
int x, YYYYY, z;
یک متغیر از نوع کاراکتری(char):
کد:
char MyCharacter;
دو متغیر ار نوع مضاعف(double):
کد:
double count;
double numbers= 99999;
و...
وقتی برنامه با اسم متغیر برخورد می کند، ابتدا نوعش و سپس مقدارش را بررسی می کند. در آخر مقدار متغیر را جایگزین اسم متغیر می کند(در محل فراخوانی/استفاده شده) .
مقدار متغیرها را می توان مقایسه، ترکیب، جمع، تفریق، ضرب، تقسیم، کم و زیاد و... کرد که بعداً مفصل شرح داده خواهد شد.

ثابت ها:
ثوابت هم خصوصات متغیر ها رو دارند، با این تفاوت که مقادیرشون تغییر نمی کند. یعنی در تمام برنامه یک مقدار را دارند. مزایای ثوابت این است که: می توانند داده های(عدد، حروف، علامت، متن و...) کوتاه یا طولانی را در خود نگه دارند، که این در نوشتن مقادیر تکراری صرفه جویی می کند. مقادیر طولانی یا پیچیده را در سراسر برنامه در دسترس قرار می دهند(یعنی یک اسم بجای چندین مقدار در چندین محل). خطاهای گرامری/Syntax را کاهش می دهد(بدلیل نوشتن/تایپ کمتر). خواندن و درک برنامه را توسط برنامه نویس ساده تر می کند. سرعت پردازش اشکال زدایی(Debugging) را بالا می برند(چون پیش پردازنده مستقیماً مقدارش را جای بررسی مقدارش جایگزین می کند) و...
برای تعریف ثابت دو روش وجود دارد: دستور define# و دستور const.
دستور define# یک دستور پیش پردازنده و در همه جا قابل تعریف می باشد. بدان معنی که قبل از کامپایل(Compile/تولید) برنامه، خوانده و اعمال می شود. نام دیگر این نوع ثابت ماکرو می باشد. و بشکل زیر تعریف می شود:
کد:
#define Name Value
define# به پیش پردازنده می گوید که تعریف ماکرو آغاز می شود(با حروف کوچک نوشته می شود).
Name اسم ماکرو می باشد. این اسم می تواند ترکیبی از حروف(بزرگ و کوچک)، اعداد و _(یا همون خط ربط)، بطول 255 کاراکتر(در حالت معمول) باشد(اولین کاراکتر اسم نباید عدد باشد). معمولاً اسم ثابت ها را با حروف بزرگ مشخص می کنند.
Value مقدار ماکرو می باشد. این مقدار می تواند مانند متغیر ها حاوی هر نوع داده ای باشد.
برای تعریف مقدار ماکرو در چندین خط، می توان از علامت \ یا همون ممیز استفاده کرد.
تعریف ماکرو با علامت ; پایان نمی گیرد. اگر در تعریف ماکرو از این علامت استفاده کنید، پیش پردازنده آنرا به مقدار(Value) ماکرو اضافه می کند.

مثال هایی از تعریف ماکرو/ثابت:
کد:
#define x 25
#define IP 127.0.0.1
#define LEADER AlexAsghari
#define X_Z_H_H_Y_T_W_W 555.222.111
#define TAX 0.055
#define NoghteVirgools ;;;;;;;;;;;
#define MYNAME JohnAkabri
وقتی پیش پردازنده با اسم ماکرو در هر جایی از برنامه برخورد می کند، مقدار(Value) ماکرو را جایگزین اسم ماکرو می کند.

برای نابود سازی(از بین بردن) ماکرو می توان از دستور پیش پردازنده undef# استفاده کرد. یا به اصطلاح ماکرو را به حالت تعریف نشده(Undefine) در آورد. این عمل را وقتی کارتان کلاً با ماکرو به اتمام رسید انجام دهید.
شکل کلی این دستور بصورت زیر می باشد:
کد:
#undef MacroName
undef# دستوری پیش پردازنده برای نابود سازی ماکرو می باشد.
MacroName اسم ماکروی موردنظر می باشد. این اسم باید در برنامه موجود باشد.
دستور نابود سازی ماکرو با علامت ; پایان نمی گیرد.

منبع: http://forum.IranPHP.org
 
آخرین ویرایش:

Y.P.Y

Well-Known Member
عملگرها
به علائمی که عملیاتی را بر روی داده ها انجام می دهند عملگر(Operator) می گویند. و داده هایی که بر رویشان عملیات انجام می شود را عملوند(Operand) می گویند.
مثال: X + 10
در این مثال X و 10 عملوند، و + عملگر می باشد.

عملگرها در C/C++ به چهار دسته اصلی تقسیم می شوند که عبارتند از:
1- عملگرهای محاسباتی
2- عملگرهای مقایسه
3- عملگرهای منطقی
4- عملگرهای بیتی

و عملگرهای جایگزینی/ترکیبی، جداسازی، آدرس و...

عملگرهای محاسباتی
این دسته از عملگرها، عملیات محاسباتی(ریاضیات) بر روی یک یا چند عملوند(یا داده) انجام می دهند. که عبارتند از: + - * / % ++ --
مثال جمع: X + Y یا Y+ یا X + Y + Z و...
مثال تفریق: X - Y یا X- یا X - Y - Z و...
مثال ضرب: X * Y یا X * Y * Z و...
مثال تقسیم: X / Y یا X / Y / Z و...
مثال باقیمانده(قدرمطلق): X % Y یا X % Y % Z و...
مثال افزایشی: X++ یا ++X
مثال کاهشی: X-- یا --X
ممکن است در بعضی از عملیات(عبارات) از چندین عملگر و عملوند استفاده شود، اینجاست که تقدم عملگرها برای انجام عملیات به میان می آید(از بالاترین تقدم تا پایین ترین تقدم):
++ و --
* و / و %
+ و -

عملگرهای مقایسه
همانطور که از نامش پیداست جهت مقایسه یک یا چند عملوند(داده) مورد استفاده قرار می گیرد. که عبارتند از: > < >= => == =!
مثال بزرگتر: X > Y
مثال کوچکتر: X < Y
مثال بزرگتر یا مساوی: X >= Y
مثال کوچکتر یا مساوی: X <= Y
مثال متساوی: X == Y توجه: متساوی با مساوی متفاوت می باشد.
تقدم عملگرهای مقایسه به این ترتیب می باشند(از بالاترین تقدم تا پایین ترین تقدم):
> و < و >= و =>
== و =!

عملگرهای منطقی
این عملگرها بر روی یک یا دو عبارت منطقی(بله یا خیر/درست یا نادرست...) کار می کنند. هر عبارت منطقی دارای 2 بعد می باشد. بعد نادرست که با مقدار 0 و بعد درست که با مقدار غیر 0 مشخص می شود. و عبارتند از: || && ! که به لاتین می شوند OR منطقی، AND منطقی، NOT منطقی.
مثال یا: X || Y یا X || Y || Z و...
مثال و: X && Y یا X && Y && Z و...
مثال نقیض: X!
تقدم عملگرهای منطقی به این ترتیب می باشند(از بالاترین تقدم تا پایین ترین تقدم):
!
&&
||

عملگرهای بیتی(Bitwise)
حوزه عملیات این عملگرها بر روی بیت ها می باشد(بیشترین کاربرد را در کار با سخت افزار دارد). این عملگرها با انواع داده ها(Data types) کاری ندارند و فقط برای مقدار دهی، تست، جایگزینی/انتقال(Shift) بیت ها استفاده می شوند. که عبارتند از: & | ^ ~ >> << که به لاتین می شوند AND بیتی، OR بیتی، XOR بیتی، NOT بیتی، شیفت به چپ، شیفت به راست.
تقدم عملگرهای بیتی به این ترتیب می باشند(از بالاترین تقدم تا پایین ترین تقدم):
~
>> و <<
&
^
|

دیگر عملگرها
عملگرهای جایگزینی/ترکیبی/انتساب: از ترکیب عملگرهای محاسباتی و علامت = تشکیل می شوند و پایین ترین تقدم را دارند. که عبارتند از: =+ =- =* =/ =%
مثال انتساب جمع: X+= Y که معادل X= X + Y می باشد.
مثال انتساب تفریق: X-= Y که معادل X= X - Y می باشد.
مثال انتساب ضرب: X*= Y که معادل X= X * Y می باشد.
مثال انتساب تقسیم: X/= Y که معادل X= X / Y می باشد.
مثال انتساب باقیمانده(قدرمطلق): X%= Y که معادل X= X % Y می باشد.

عملگرهای آدرس: برای دسترسی به آدرس داده ها در حافظه استفاده می شود. که عبارتند از: & *
مثال &: ;X= &Y که آدرس Y در متغیر X قرار می گیرد.
مثال *: ;X= 10* که 10 در آدرس X قرار می گیرد.
مثال *: ;Z= *X که داده های آدرس X در متغیر Z قرار می گیرد.

عملگر جداسازی: از این نوع عملگرها برای جداسازی/تقدم دهی به عبارات استفاده می شود. که عبارتند از: ( ) , معادل لاتین پرانتز و کاما.
توجه: همیشه در عبارات مرکب(چند عملگر و عملوند) ابتدا عبارات داخل پرانتز بررسی و اعمال می شوند و بعد بقیه عبارات.
مثال ) و :) X = 5 + 10 / (30 + 15) % (10 + (5 + 40)) + 85
مثال ,: X= (Y + 5, Y % 25) + 50

تقدم کلی عملگرها:
( )
~ ! ++ --
* % /
<< >>
< > =< =>
== !=
&
^
|
&&
||
= =+ =- =* =/ =%

منبع: http://forum.IranPHP.org
 

Y.P.Y

Well-Known Member
تبدیل نوع
هر داده ای که نرم افزارها استفاده می کنند دارای نوع هستند. نوع تعیین می کند داده چه محتوایی دارد و چه محتوایی می تواند بپذیرد.
مثلاً داده های نوع int حاوی عددهای صحیح و داده های نوع char حاوی کاراکتر می باشد.

وقتی داده ای از یک نوع به نوع متفاوت دیگری تغییر می کند، تبدیل نوع اتفاق می افتد. این تبدیلات به دو روش خودکار یا دستی(توسط دستورات برنامه نویسی) انجام می گیرد. تبدیلاتی که خودکار صورت می گیرند را تبدیل نوع Implicit و تبدیلاتی که دستی صورت می گیرند را تبدیل توع Explicit می نامند.

تبدیل نوع Implicit
این نوع تبدیلات معمولاً توسط کامپایلر و بیشتر در عملیات ریاضی و محاسبات انجام می گیرند. چنین تبدیلاتی باعث می شوند داده های نوع پایین تر(کم ارزش) به نوع بالاتر(پر ارزش) تبدیل گردند. فایده دیگر این نوع تبدیلات، سازگاری در بررسی عبارات ریاضی می باشد.
تبدیلات خودکار بصورت های زیر انجام می گیرند:

نوع char به نوع int: با توجه به نوع char پیشفرض، بایت آخر صفر و یا علامتش گسترده می شود.
نوع unsigned char به نوع int: بایت آخری از صفر پر می شود.
نوع signed char به نوع int: علامتش گسترده می شود.
نوع short int به نوع int: همان مقدار.
نوع unsigned short به نوع unsigned int: همان مقدار.
نوع enum به نوع int: همان مقدار.
نوع long int به نوع int: همان مقدار.
نوع float به نوع int: مقدارش کسری یا همان می شود.
نوع double به نوع float: علائم کم می شوند و مقدارش دقیق(گرد) می شود.
نوع char به نوع signed char: اگر مقدارش بیش از 127 باشد، خروجی منفی می دهد.
نوع int به نوع char: 8/24 بیت بالا(پر ارزش) از بین می رود.
نوع int به نوع short int: همان مقدار.
(در اولین مرحله تبدیل نوع، داده های نوع short, char, enum و... به اعداد صحیح تبدیل می شوند.)

داده نوع char شامل یک بایت می باشد. اما وقتی که به داده نوع int تبدیل می شود، دو بایت استفاده می گردد. یعنی مقدار بایت پایین(کم ارزش) int جدید، همان مقدار بایت اصلی char می شود و مقدار بالایی(پر ارزش) بستگی به این دارد که نوع داده char علامتدار(signed) باشد یا بدون علامت(unsigned).
اگر بدون علامت باشد، بایت بالایی(پر ارزش) داده int صفر و اگر علامتدار باشد، بایت بالایی(پر ارزش) داده int -1 می شود.
(اگر در کامپایلر، داده اصلی نوع char باشد، پردازش تبدیل به شیوه Setup کردن کامپایلر بستگی دارد.)

تبدیل نوع Explicit
این نوع تبدیل توسط دستور مبدل نوع صریح(Typecasing) صورت می گیرد. از چنین تبدیلی می توان در تبدیل انواع داده ها با انعطاف پذیری بالایی استفاده نمود:
کد:
(TypeName)Expression

(TypeName) اسم یک نوع از داده ها می باشد که داخل پرانتز نوشته می شود. این اسم می تواند int, long, float, double و... باشد.
Expression می تواند دستور، متغیر و... باشد که بعد از بسته شدن پرانتز ها قرار می گیرد.
مثال:
کد:
int i;
float f= 36.125;

i= (int)f;
// 36

float f= 32336.12454545;

printf("%i", (int)f);
// 32336

long l;
float f= 5554545.33565656565653;

l= (long)f;

printf("%d", l);

// 5554545

Type MyFunction(int i)
{
int j;
j= (int)i;
}

float z= 22323.22322;
MyFunction((int)z)

منبع: http://forum.IranPHP.org
 

Y.P.Y

Well-Known Member
توابع کتابخانه ای(معرفی کلی)
توابع کتابخانه ای کامپایلرها با ارائه صدها نوع تابع/دستور آماده، به کمک برنامه نویسان آمده است تا کارهای اساسی و مشکل در برنامه نویسی را آسان کنند. این توابع برای اداره کردن کارهای مشکل و اساسی برنامه نویسی طراحی شده اند و یک رابط(Interface) مناسب به امکانات سیستم فراهم می کنند. توابع کتابخانه ای، برنامه نویس را از زحمت ایجاد توابعی که نیاز به برنامه نویسی سطح پایین(مثلاً زبان ماشین) داشته باشد، آسوده می سازد.
مثلاً توابع گرافیکی، سخت ترین عملیات کار با سخت افزار تصویری را با واسطه چند دستور انجام می دهند. و یا توابع شبکه(سوکت/Socket) عملیات دشوار ارتباط، ارسال و دریافت داده را از مودم(یا رابط سخت افزاری شبکه) را انجام می دهند.

بطور کلی توابع کتابخانه ای را به چند دسته اصلی(نسبت به هدف تابع) تقسیم می کنند که به شرح زیر می باشد:
توابع استاندارد: گروهی از دستورات کمکی و همه منظوره(General-purpose) می باشند که از قوانین C استاندارد پیروی می کنند. معمولاً در فایل StdLib.h یا StandardLibrary.h قرار دارند.
توابع ورودی-خروجی(IO): این توابع عملیات وارد و خارج کردن داده ها از از برنامه به عهده دارند. اغلب کامپایلر ها از دو نوع جریان(Stream) یا Console برای اینکار استفاده می کنند. معمولاً در فایل IO.h، StdIO.h، ConIO.h و ConsoleIO.h قرار دارند.
توابع طبقه بندی(Classification): این توابع به خانواده is_... معروفند و داده ها را طبقه بندی می کنند(مثلاً is_int is_char is_hex و...).
توابع تبدیل: همانطور که از نامش پیداست، دارای توابعی جهت تبدیل داده ها به انواع دیگر داده ها می باشد. معمولاً در فایل Convert.h، Types.h یا CType قرار دارند.
توابع تاریخ و زمان: این توابع اطلاعات تاریخ و زمان را اداره می کنند. معمولاً در فایل Time.h یا DateTime.h قرار دارند.
توابع اداره کردن خطا: توابعی هستند که تشخصی و برطرف کردن خطا/Bug را بعهده دارند. معمولاً در فایل Debug.h یا Error.h قرار دارند.
توابع دایرکتوری: توابعی و ساختمانهایی هستند که کار با مسیرها(Path) و پوشه ها را آسان می سازند. معمولاً در فایل Dir.h یا Directory.h قرار دارند.
توابع رابط/جریان: توابعی هستند که می توان مستقیماً با توابع BIOS و DOS/Console کار کرد. معمولاً در فایل Stream.h یا DOS.h قرار دارند.
توابع گرافیک: همانطور که از نامش پیداست جهت انجام عملیات گرافیکی استفاده می شوند. معمولاً در فایل Graphic.h قرار دارند.
توابع حافظه: شامل توابعی هست که کار با بلوک های حافظه و تخصیص حافظه را آسان می سازند. معمولاً در فایل Mem.h یا Memory.h قرار دارند.
توابع ریاضی یا محاسباتی: این توابع تقریباً همه عملیات محاسباتی را انجام می دهند. معمولاً در فایل Math.h یا Mathematical.h قرار دارند.
توابع پنجره های متنی: این توابع برای فرستادن اطلاعات به صفحه نمایش های متنی(مثل DOS یا Console) استفاده می شوند.
توابع شبکه یا سوکت: محموعه ای از توابع و ساختمانهایی که عملیات اتصال، ارسال و دریافت داده را از مودم(مثل اینترنت، LAN، هاست و...) انجام می دهند. معمولاً در فایل Nework.h یا Socket.h قرار دارند.
توابع متفرقه: تمام کارهای خرده/متنوع را انجام می دهند. معمولاً در فایل Misc.h یا Miscellaneous.h قرار دارند.

برای اطالاعات بیشتر در مورد توابع/ماکرو های کتابخانه ای کامپایلرتان، می توانید به مستندات(Docs) های کامپایلر مراجعه کنید.

منبع: http://forum.iranphp.org
 

جدیدترین ارسال ها

بالا