1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

شروع موضوع توسط minaaa ‏10/11/11 در انجمن C #C++

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    [h=2]معرفي زبان c[/h]
    زبان C(سی)
    C
    C یک زبان برنامه نویسی سطح میانی و ساخت یافته می باشد. در علوم کامپوتری، سطوح زبانهای برنامه نویسی را به سه دسته اصلی تقسیم می کنند:
    1- سطح بالا.
    2- سطح میانیC و ++C
    3- سطح پایین.

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

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

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

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

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]آشنايي با الگوريتم و فلوچارت[/h]
    الگوريتم ها
    برای حل مسائل مختلف توسط کامپيوتر بايد اين مسائل را به صورت مراحل عملياتی و تصميم گيری ساده ای که کامپيوتر قادر به اجرای آن باشد تبديل کرد. بدين ترتيب ليست مرتبی از مراحل عملياتی بدست می آيد که اجرای مرتب آنها منجر به حل مسئله توسط کامپيوتر می شود. اين ليست مرتب از مراحل عملياتی و تصميم گيری ، الگوريتم ناميده می شود.

    در حالت کلی الگوريتم ها بايد ويژگی های زير را داشته باشند:
    الف) الگوريتم بايد ما را به نتيجه مورد نظر برساند.
    ب) در زمان محدود پايان يابد.
    ج) دستورالعملها بايد به ترتيب منطقی پشت سرهم قرار گيرند.
    د) جملات الگوريتم ها بايد به صورت امری ، سؤالی باشند.
    ه) هر الگوريتم بايد نقطه آغاز و پايان داشته باشد.

    يکی از توانايی هايی که در کامپيوتر وجود دارد استفاده از خانه های حافظه است که می توان در آن اطلاعات را قرار داد و در هر لحظه از اجرای الگوريتم می توان محتويات آن را تغيير داده و مقدار جديدی را در آن قرار دهيم اين ويژگی کارايی ما را برای حل مسائل پيچيده تر افزايش می دهد


    مثال : الگوريتم تعويض چرخ پنچر شده يک اتومبيل.

    0- شروع.
    1- جک را زير اتومبيل بگذاريد.
    2- پيچهای چرخ پنچر شده را باز کنيد.
    3- چرخ را خارج کنيد.
    4- چرخ يدک را به جای چرخ پنچر شده بگذاريد.
    5- پيچها را ببنديد.
    6- اگر پيچها سفت نشده اند به مرحله 5 برو.
    7- جک را پايين بياوريد.
    8- چرخ پنچر شده را در صندوق عقب اتومبيل بگذاريد.
    9- پايان.


    مثال : الگوريتمی بنويسيد که دو عدد از ورودی دريافت شود و سپس تعيين شود که مجموع دو عدد بزرگتر از 20 است يا نه.
    0- شروع .
    1- دو عدد a و b را از ورودی در يافت کن.
    2- a+b را محاسبه کن.
    3- آيا a+b>20 است؟ اگر بلی به مرحله 6 برو.
    4- بنويس خير.
    5- به مرحله 7 برو.
    6- بنويس بلی.
    7- پايان.



    با برنامه ريزی و ساماندهی دقيق می توان به راه حلی مناسب جهت حل يک مسئله به کمک کامپيوتر رسيد. هرگونه کم توجهی و بی دقتی در نوشتن الگوريتم ضمن بروز مشکلات بسيار، برنامه نويس را نيز از هدف خود دور خواهد کرد؛ لذا برای به هدف رسيدن بايد درک صحيح و کاملی از صورت مسئله داشت و سپس راه حل مورد نظر را به صورت الگوريتم بنويسيم. و در نهايت الگوريتم مورد نظر را به زبان برنامه نويسی مورد نظر تبديل کنيم. برای درک بهتر شيوه حل مسائل و نوشتن الگوريتم به مثالهای زير توجه کنيد:


    مثال : الگوريتمی بنويسيد که مجموع اعداد طبيعی مضرب 7 و کوچکتر از 50 را حساب کند.
    برای نوشتن اين الگوريتم به دو خانه حافظه نياز داريم.
    0- شروع.
    1- در خانه حافظه sum عدد صفر را قرار بده.
    2- در خانه حافظه index عدد 7 را قرار بده.
    3- مقدار index را با مقدارsum جمع کن
    و حاصل را در sum قرار بده.
    4- مقدار 7 را با مقدار index جمع کن
    و حاصل را در index قرار بده.
    5- آياindex بزگتراز 50 است،اگر خير به مرحله 3 برو.
    6- محتوای sum را چاپ کن.
    7- پايان.



    در الگوريتم فوق مقادير حافظه sum و index تغيير می کند، تا اينکه سرانجام شرط " آيا index بزرگتر از 50 است " بلی می شود لذا محتوای sum در خروجی چاپ خواهد شد و الگوريتم به پايان می رسد. اما در مراحل قبلی شرط فوق خير می باشد، لذا الگوريتم ادامه پيدا می کند.


    مثال : الگوريتمی بنويسيد که 1000 عدد را از ورودی دريافت کرده و کوچکترين را چاپ کند.
    فرض کنيد که به شما ليستی از اعداد را می دهند، برای پيدا کردن کوچکترين عدد در ليست اولين عدد را به عنوان کوچکترين در نظر می گيريد سپس عدد بعدی را با آن مقايسه می کنيد، اگر عدد جديد از عدد قبلی کوچکتر بود عدد جديد را به عنوان کوچکترين در نظر می گيريد و گر نه همان عدد قبلی کوچکترين خواهد بود. اين روند را تا انتهای ليست ادامه می دهيد؛ در پايان عددی که در هر بررسی به عنوان کوچکترين عدد بود، جواب مورد نظر ما خواهد بود. توجه کنيد که در اين روال شما همواره يک عدد را در ذهن خود در نظر گرفته بوديد، برای نوشتن الگوريتم مورد نظر ما يک خانه حافظه را به کوچکترين عدد درهر مرحله اختصاص می دهيم.

    0- شروع.
    1- min را دريافت کن.
    2- i =1 .
    3- a را دريافت کن.
    4- اگر a<min آنگاه min = a .
    5- i = i + 1 .
    6- اگر i>=1000 به مرحله 8 برو.
    7- به مرحله 3 برو.
    8- min را چاپ کن.
    9- پايان.



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


    مثال : الگوريتمی بنويسيد که سه عدد از ورودی دريافت شود و تعيين شود که اين اعداد می توانند اضلاع مثلث باشند يا خير.

    0- شروع.
    1- a وb وc را از ورودی بگير.
    2- اگر a>b+c به 7 برو.
    3- اگر b>a+c به 7 برو.
    4- اگرc>a+b به 7 برو.
    5- بنويس " بلی ".
    6- به 8 برو.
    7- بنويس " خير ".
    8- پايان.


    فلوچارت
    در عمل برای نمايش الگوريتم از يک فلوچارت ( شمای جريان عمليات ) استفاده می شود. در حقيقت فلوچارت روش تصويری و استاندارد نمايش الگوريتم است.
    در رسم فلوچارت علائم و نمادهای استانداردی به کار می رود که هر کدام دارای معانی ويژه ای هستند.
    از شکل بيضی افقی برای شروع و پايان عمليات استفاده می شود.
    از شکل مستطيل برای نمايش مراحل پردازشی استفاده می شود و در داخل آن عمل مورد نظر نوشته می شود. اين نماد ممکن است چندين ورودی داشته باشد ولی تنها يک خروجی دارد.



    از نماد لوزی برای نشان دادن مراحل تصميم گيری استفاده می گردد و شرط يا سؤال مورد نظر در داخل لوزی نوشته می شود.

    از متوازی الاضلاع برای نشان دادن ورودی يا خروجی استفاده می شود.
     
    3 نفر از این پست تشکر کرده اند.
  3. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]ساختار و معماری زبان ++c[/h]
    ساختار و معماری زبان ++C

    اولین باری که به یک برنامه ++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) تابع مشخص می شود. بعد نام تابع مشخص می شود. و بدنبالش آرماگون ها و آخر بدنه تابع مشخص می شود(میان دو آکولاد {}). ​
     
    2 نفر از این پست تشکر کرده اند.
  4. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]روند ورود متن و خروج(کامپایل) برنامه[/h]
    روند ورود متن و خروج(کامپایل) برنامه
    وقتی برنامه ای را تایپ می کنید، یک فایل منبع(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). ​
     
    2 نفر از این پست تشکر کرده اند.
  5. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]انواع داده ها در زبان ++c[/h]
    متغيير
    ما در برنامه نويسی نياز به خانه های حافظه داريم. كه به ان هر يك از خانه هاي حافظه هاي متغيير گفته مي شود در تعريف خانه حافظه يا متغير بايد نام و نوع اطلاعاتی که در آن قرار می گيرد معين شود.

    [​IMG]


    دستور فوق سه خانه حافظه با نامهای i1 وi2 وindex از نوع اعداد صحيح تعيين می کند، يعنی در هر کدام از خانه های حافظه فوق می توان يک عدد صحيح در بازه 32767 تا 32768- قرار داد. نوع داده int به دو بايت حافظه نياز دارد.
    نکته :
    ·هر خط دستور زبان ++C به ; ختم می شود.
    ·برای نام گذاری خانه های حافظه فقط می توان از حروف، اعداد و ... استفاده کرد و نيز حرف اول نام يک متغير بايد يک حرف باشد. به عنوان مثال نامهای 1test و test!num و mark.1 اسامی غير مجاز می باشند.
    ·بين حروف نام متغير نمی توان از کاراکتر فاصله استفاده کرد.
    ·زبان ++C دارای تعدادی کلمات کليدی است که نمی توان از اين کلمات به عنوان نام متغير استفاده کرد. کلمات کليدی زبان ++C عبارتند از:



    [​IMG]

    ·زبان ++C نسبت به حروف حساس است يعنی بين حروف کوچک و بزرگ تفاوت قائل می شود. در اين زبان تمام کلمات کليدی با حروف کوچک نوشته می شوند، به عنوان مثال short يک کلمه کليدی می باشد ولی SHORT يا shoRT کلمات کليدی نيستند. توصيه می شود که تمام برنامه های اين زبان با حروف کوچک نوشته شوند.
    در زبان ++C چهار نوع داده اصلی وجود دارد که عبارتند از :

    1- char : اين نوع داده برای ذخيره داده های کاراکتری مانند 'a' ، '1' ، '.' به کار می رود و بازه قابل قبول آن از 128- تا 127 می باشد. در حقيقت خانه های char نيز از نوع اعداد صحيح می باشند که يک بايت طول دارند و کد اسکی کاراکتر مورد نظر را در خود حفظ می کنند. به عنوان مثال کد اسکی کاراکتر A عدد 65 می باشد.
    2- int : اين نوع داده برای ذخيره اعداد صحيح مانند 1300، 32000 ، 850- به کار می رود و بازه قابل قبول آن 32768- تا 32767 می باشد.
    3- float : اين نوع داده برای ذخيره اعداد اعشاری مانند 12.5241 ، 1501.3- ، 1415.1234 به کار می رود و دقت آن تا 7 رقم اعشاری می باشد.
    4- double : اين نوع داده برای ذخيره سازی اعداد اعشاری بزرگ به کار می رود و دقت آن از float بيشتر می باشد.

    باکلماتی مانند signed ( علامت دار) ، unsigned ( بدون علامت)، short (کوتاه) و long ( بلند) انواع داده های جديدی می توان ايجاد کرد. نوع int با هر چهار کلمه فوق می تواند مورد استفاده قرار گيرد. نوع char می تواند با signed و unsigned به کار رود و نوع double می تواند با long به کار رود. به جدول زير توجه کنيد:

    [​IMG]

    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.
  6. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]انواع داده ها در زبان ++c - قسمت دوم[/h]
    انواع داده ها/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 بیت خالی، + یا - بودن عدد(که برابر با همان کاراکتر هست) را نشان می دهد. ​
     
    2 نفر از این پست تشکر کرده اند.
  7. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]متغیر ها و ثوابت(کار با داده ها)[/h]
    متغیر ها و ثوابت(کار با داده ها)
    متغیر ها:
    در زبان های برنامه نویسی، برای استفاده از داده ها باید اسمی برای داده مشخص کرد. این اسم کلمه ای برای حافظه است. اسم می تواند ترکیبی از حروف(کوچک و بزرگ)، اعداد و _(یا همون خط ربط)، بطول 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 اسم ماکروی موردنظر می باشد. این اسم باید در برنامه موجود باشد.
    دستور نابود سازی ماکرو با علامت ; پایان نمی گیرد.

    گردآورنده: طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.
  8. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]عملگرهاي رياضی و محاسباتی[/h]
    اعمال رياضی و محاسباتی
    در مبحث حافظه با انواع داده و شيوه اختصاص دادن حافظه به متغيرها آشنا شديم حال می توانيم متغيرها را در محاسبات به کار ببريم. برای نيل به اين هدف ++C عملگرهايی را در اختيار ما قرار داده است.
    عملگر انتساب (=)
    این عملگر به معنای تساوی نیست بلکه برای قرار دادن متغیر سمت راست تساوی در متغیر سمت چپی است یعنی عملگر تساوی جهت اختصاص دادن يک مقدار به يک متغير به کار می رود ، مانند a = 5 که عدد 5 را به متغير a تخصيص می دهد. جزئی که در سمت چپ تساوی قرار دارد همواره بايد نام يک متغير باشد، وجزء سمت راست تساوی می تواند يک عدد، يک متغير و يا ترکيبی از هر دو باشد. مانند: a=b+5 ، که در ايجا حاصل b + 5 در متغير a قرار می گيرد. توجه داشته باشيد که همواره مقدار سمت راست تساوی در مقدار سمت چپ قرار می گيرد. به دستورات زير توجه کنيد.



    کد:

    int a,b;​
    a = 10;​
    b = 4;​
    a = b;​
    b = 7;​



    اگر از دستورات فوق استفاده کنيم در نهايت مقدار a برابر 4 و مقدار b برابر 7 خواهد بود. ++C قابليتهای زيادی دارد يکی از اين قابليتها اينست که می توانيم چند دستور را در يک دستور خلاصه کنيم ، به عنوان مثال دستور :



    کد:

    a = 2 + (b = 5);

    برابر است با: کد:

    b = 5;​
    a = 2 + b;​



    که هر دو عبارت در نهايت عدد 7 را در متغير a قرار می دهند.
    ضمناً استفاده از عبارت زير نيز در ++C مجاز می باشد:



    کد:

    a = b = c = 5

    عبارت فوق عدد 5 را به سه متغير a و b و c اختصاص می دهد.


    عملگر های محاسباتی
    پنج عملگر محاسباتی که قابل استفاده در زبان ++C هستند عبارتند از:
    + جمع
    - تفريق
    * ضرب
    / تقسيم
    % باقيمانده تقسيم

    تنها عملگری که ممکن است برای شما ناشناس باشد عملگر % است. اين عملگر باقيمانده تقسيم دو عدد صحيح را به ما می دهد، به عنوان مثال اگر از دستور زير استفاده کنيم:

    کد:

    a = 11 % 3; ​


    متغير a حاوی عدد 2 خواهد شد. چون عدد 2 باقيمانده تقسيم 11 بر 3 می باشد.


    عملگر های انتساب مرکب
    عملگرهای انتسال مرکب عبارتند از =+ ، =- ، =* ، =/ ، =% .اين عملگرها دو کار را با هم انجام می دهند و در کم شدن کد نويسی به ما کمک می کنند، به جای توضيح اضافی به مثال های زير که فهم مطلب را ساده تر می کند توجه کنيد:


    [​IMG]


    عملگرهای افزايش و کاهش
    گونه ای ديگر از عملگرها که در کم شدن کد نويسی به ما کمک می کنند عملگر افزايش(++) و عملگر کاهش(--) می باشند. عملگر افزايش(++) يک واحد به مقدار قبلی که در متغير بود اضافه می کند و عملگر کاهش(--) يک واحد از مقدار قبلی که در متغير بود کم می کند.



    کد:

    ++a; a++; a += 1; a = a + 1;

    هر چهار دستور فوق يک واحد به مقدار قبلی متغير اضافه می کنند.


    کد:

    --a; a--; a -= 1; a = a - 1;

    هر چهار دستور فوق يک واحد از مقدار قبلی متغير کم می کنند.


    اگر از دستورات ++a و a++ به تنهايی استفاده کنيم فرقی ندارد که ++ قبل از متغير قرار گيرد يا بعد از متغير. اما اگر از ++ در کنار عملگرهای ديگر استفاده شود، اگر ++ قبل از متغير قرار گيرد ابتدا يک واحد به متغير اضافه شده سپس در محاسبه استفاده می شود، ولی اگر ++ بعد از متغير قرار گيرد ابتدا متغير در محاسبه استفاده می شود سپس يک واحد به آن اضافه می شود. همين روال برای عملگر -- نيز برقرار است. به مثال های زير توجه کنيد:


    [​IMG]
    در مثال سمت چپ ابتدا يک واحد به b اضافه می شود، يعنی b مقدار 4 را می گيرد سپس عدد 4 در a قرار می گيرد؛ اما در مثال سمت راست ابتدا مقدار b يعنی عدد 3 در a قرار می گيرد سپس يک واحد به b اضافه می شود و مقدار 4 را می گيرد.

    در اين مثال عدد 6 در m قرار می گيرد:

    کد:

    a = 2;​
    b = 3; m = ++a + b--; ​


    b مقدار 2 و a مقدار 3 را می گيرد.


    حال که با انواع عملگرهای محاسباتی آشنا شديد عبارت زير را در نظر بگيريد.
    QUOTE]y = 5 * 3 + 2 - 1 * 3 / 2;] مقداری که در y قرار می گيرد چه عددی می تواند باشد؟ 30 يا 24 يا 15.5 يا 17.5 . نظر شما چيست؟ شما مقدار y را چگونه حساب می کنيد؟
    کامپيوتر برای بررسی و محاسبه چنين عبارتی برای اينکه با چندين جواب مواجه نشود قواعدی را در نظر می گيرد و طبق قوانين تقدم عملگرها عمل می کند. اين قوانين که مشابه قوانين جبر می باشند به ترتيب عبارتند از:
    1- عملگرهايی که درون پرانتز قرار دارند اول محاسبه می شوند. در صورتی که پرانتزها تودرتو باشند ابتدا داخلی ترين پرانتز مورد بررسی و محاسبه قرار می گيرد.
    2- اگر عبارتی حاوی * ، / و % باشد پس از پرانتز اين عملگرها در اولويت قرار دارند. اگر عبارتی حاوی ترکيبی از اين عملگرها باشد چون اين عملگرها در تقدم يکسانی نسبت به يکديگر قرار دارند، محاسبه به ترتيب از چپ به راست انجام می شود.
    3- اعمال + و - در انتها انجام می شوند. اگر عبارتی شامل ترکيبی از اين دو عملگر باشد چون اين دو عملگر در تقدم يکسانی نسبت به هم هستند، محاسبه به ترتيب از چپ به راست انجام می شود.
    با توجه به قواعد گفته شده حاصل عبارت فوق عدد 15.5 خواهد بود.


    [​IMG]
    به مثال های زير توجه کنيد:



    [​IMG]



    عبارات منطقی يک عبارت منطقی، عبارتی است با مقدار درست يا نادرست. به عنوان مثال 5 بزرگتر از 3 است، يک عبارت منطقی است با مقدار درست و 5 کوچکتر از 3 است، نيز يک عبارت منطقی است اما با مقدار نادرست. در کامپيوتر نتيجه عبارات منطقی درست عدد يک و نتيجه عبارات منطقی نادرست عدد صفر خواهد بود.
    ضمناً کامپيوتر هر عدد مخالف صفر را به عنوان يک عبارت منطقی درست در نظر می گيرد.
    عملگرهای رابطه ای
    برای مقايسه دو متغير يا دو عبارت از عملگرهای رابطه ای استفاده می کنيم که همانطور که گفته شد دارای نتيجه درست يا نادرست می باشد. عملگرهای رابطه ای عبارتند از ==( مساوی )، =!( مخالف )، <(بزرگتر از )، >( کوچکتر از )، =<( بزرگتر مساوی از )، =>( کوچکتر مساوی از ). به مثال های زير توجه کنيد.
    ضمناً به جای اينکه فقط از اعداد در عبارتهای رابطه ای استفاده کنيم می توانيم از عبارتهايی شامل متغيرها و يا ترکيبی از متغيرها و اعداد استفاده کنيم به عنوان مثال فرض کنيد a = 2 و b=3 و c=6 خواهيم داشت:


    [​IMG]

    توجه کنيد که عملگر = همانند عملگر == نمی باشد. اولی عملگر انتساب است که مقدار سمت راست را در متغير سمت چپ قرار می دهد و ديگری عملگر رابطه ای است که برابر بودن يا نبودن دو مقدار را با هم مقايسه می کند. بنابراين در عبارت ((b=2)==a)) ما ابتدا مقدار 2 را در متغير b قرار داديم سپس آن را با a مقايسه کرديم، لذا نتيجه اين مقايسه درست بود.


    عملگرهای منطقی
    عملگرهای منطقی عبارتند از ! ، || و && . نتيجه عملگر ! (NOT) وقتی درست است که عبارتی که اين عملگر بر روی آن عمل می کند نادرست باشد و نتيجه هنگامی نادرست است که عملوند آن درست باشد. ضمناً اين عملگر تنها يک عملوند دارد. در حقيقت اين عملگر نقيض عملوند خود را به عنوان نتيجه می دهد.
    شما برای اینکه به دستگاه بگوئید a از 5 کوچکتر و از ۱/۰ بزرگتر است نمی توانید بنویسید 5>a>ا/۰ زیرا کامپایلر متوجه نشده و پیغام خطا خواهد داد . حال شما برای فهماندن این موضوع به دستگاه باید اینگونه بنویسید: a>0.1 && a<5
    که در انجا && همان معنی (و) در جمله(( a از 5 کوچکتر و از ۱/۰ بزرگتر است)) را داراست.
    علامت || نیز معنی (یا) را دارد a==1 || a==2 یعنی مقدار a برابر 2 یا برابر 1 باشد.


    به مثال های زير توجه کنيد:
    [​IMG]


    عملگرهای &&(AND) و ||(OR) هنگامی مورد استفاده قرار می گيرند که بخواهيم از دو عبارت يک نتيجه را بدست آوريم. نتيجه اين عملگرها بستگی به ارتباط بين دو عملوندشان طبق جدول زير دارد:
    [​IMG]


    به مثال های زير توجه نمائيد:


    [​IMG]

    در مثال های زير به جای اعداد از متغير نيز استفاده شده است ( فرض کنيد a=1 و b=2 وc=3)
    [​IMG]


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


    [​IMG]

    اگر شرط برقرار باشد نتيجه 1 به عنوان خروجی خواهد بود در غير اين صورت نتيجه 2 به عنوان خروجی در نظر گرفته می شود. به مثال های زير توجه نماييد:

    [​IMG]


    همانطور که در عملگرهای محاسباتی ديديم درک تقدم عملگرها، اهميت ويژه ای داشت در اينجا نيز دانستن اين تقدم از اهميت خاصی برخوردار می باشد، تقدم عملگرهای رابطه ای ، منطقی و شرطی به ترتيب عبارتند از:
    1- !
    2- => > =< <
    3- =! ==
    4- &&
    5- ||
    6- :?



    به عنوان مثال مراحل بررسی عبارت مقابل به صورت زير می باشد:

    [​IMG]

    پيشنهاد می شود برای جلوگيری از پيچيدگی فهم عبارتهای منطقی و يا محاسباتی تقدم های مورد نظر را با به کار بردن پرانتز کاملاً مشخص کنيم ، به عنوان مثال عبارت فوق را به صورت زير مورد استفاده قرار دهيم:

    کد:

    (((2 >= 3) && (2 == 2)) || (2 != 3))

    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.
  9. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]عملگرها - قسمت دوم[/h]
    عملگرها
    به علائمی که عملیاتی را بر روی داده ها انجام می دهند عملگر(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

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

    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.
  10. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]تبدیل نوع[/h]
    تبدیل نوع
    هر داده ای که نرم افزارها استفاده می کنند دارای نوع هستند. نوع تعیین می کند داده چه محتوایی دارد و چه محتوایی می تواند بپذیرد.
    مثلاً داده های نوع 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)
    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.