آموزش C از پایه

شروع موضوع توسط dark-man ‏26 سپتامبر 2005 در انجمن برنامه‌نویسی C و هم خانواده‌هایش

وضعیت موضوع:
موضوع بسته شده است.
  1. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    __________________________________________

    اضافه شده توسط : مدیر انجمن : Doste
    __________________________________________
    آموزش برنامه نویسی به زبان C
    مقدمه

    همانطور که میدانید زبان C در سال 1972 توسط آقای ریچی طراحی شد ..علت نامگذاری زبان C این است که چون بعد از زبان B طراحی شده است آن را C نامیده اند .
    برنامه نویسان زبان های برنامه نویسی را به سه دسته مختلف زبان های سطح بالا . زبان های میانی و زبان های سطح پایین طبقه بندی می کنند . زبان C در این طبقه بندی در جمع زبانهای میانی قرار می گیرد علت آن هم این است که چون همانند زبان های سطح پایینی مثل زبان اسمبلی می تواند مستقیما به حافظه دسترسی داشته باشد و همچون زبان سطح بالای پاسکال قابلیت خوانایی بالایی دارد ...
    زبان C جزو یکی از قدرتمند ترین زبان های موجود می باشد (بوده و هست )..قابلیت های انعطاف بالای این برنامه قابلیت بهره برداری از سخت افزار و... جزو عوامل قدرتمند نگه داشتن این زبان می باشند .
     
    نوشته شده توسط dark-man در ‏26 سپتامبر 2005
    LinzY، SA3iDi، azarYAS و 6 نفر دیگر از این ارسال تشکر کرده اند.
  2. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    اصول کلی در نوشتن یک برنامه

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

    1-تعین نیازهای برنامه
    2-تحلیل برنامه
    3-طراحی الگوریتم برنامه
    4-پیاده سازی الگوریتم
    5-تست و کنترل برنامه
    6-ذخیره برنامه

    ----------------------------------------------------------------------------------
    یک مثال : فرض کنید از ما می خواهند برنامه ای بنویسیم تا میانگین دو عدد را پیدا کند ؟

    مراحلی که طی می کنیم به شرح زیر است :
    ابتدا پیش خود کمی فکر می کنیم و به این نتیجه می رسیم که برای اینکه روی این دو عدد عملیاتی انجام دهیم لازم است این برای این دو عدد حافظه ای را در نظر بگیریم (این دو عدد را داخل متغیر هایی از جنس آن عدد قرار دهیم ).سپس باید روی این دو عمل اعمال محاسباتی خود را انجام دهیم (که در این مثال باید آن دو را با هم جمع کرد و تقسیم بر 2 کرد ). اکنون نوبت این است که جواب بدست آمده برای این محاسبه در حافظه ذخیره شود تا بتوان از آن استفاده کرد (پس باید یک متغیر دیگر از نوع جواب محاسبات انجام شده تعریف کرد و این نتیجه را درون آن متغیر ریخت ... سپس بر طبق دستور با حافظه خود(متغیر سوم ) به دلخواه رفتار می کنیم ..(یعنی می توان آن را چاپ کرد .. وارد برنامه ای دیگر کرد و...)
    --------------------------------------------------------------------------------
    همانطور که می بینید این گونه ای از پیاده سازی یک طرح برای برنامه(الگوریتم برنامه ) است که سپس می توان آن را به شکل کد در آورد و پیاده سازی کرد ....
    آیا به نظرتان این طرح (الگوریتم )نمی تواند در تمام برنامه ها یکسان باشد؟
     
    نوشته شده توسط dark-man در ‏26 سپتامبر 2005
    LinzY، SA3iDi، S.E و 4 نفر دیگر از این ارسال تشکر کرده اند.
  3. maryam_ir

    maryam_ir New Member

    ارسال‌ها:
    4
    تشکر شده:
    8
    امتیاز دستاورد:
    1
    ‍c

    اگر اجازه بدهيد من هم 2 نكته را درباره C اضافه كنم.يكي از بهترين مشخصه هاي اين زبان اين است به هيچ سخت افزار يا سيستمي بسته نيست.اين باعث مي شود تا برنامه هايي بنويسيد كه بدون هيچ تغييري در تمام ماشين ها اجرا ميشود.در واقع اين زبان داراي مشخصه ي "قابليت حمل"است.مثلا شما برنامه هايي را به اين زبان در يك نوع كامپيوتر مثل Ibm نوشته شده اند؛بدون انجام تغييرات يا تغييارات اندك در كامپيوترهاي ديگر قابل استفاده اند.
    ‍c ساخته شده،تاثير گرفته و تست شده به وسيله كار برنامه نويسان است.نتيجه آخر اين است كه C برنامه اي را مي دهد كه برنامه نويس مي خواهد.
    ببخشيد اگه وسط حرفتون پريدم.:)
     
    نوشته شده توسط maryam_ir در ‏26 سپتامبر 2005
    LinzY، S.E، hamed.f و 5 نفر دیگر از این ارسال تشکر کرده اند.
  4. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    طراحی الگوریتم :
    در مثال بالا یک نوع پیاده سازی الگوریتم را مشاهده کردید ....برای طراحی الگوریتم لازم است دستورات قدم به قدم طراحی شوند و محاسبه شود که الگوریتم به درستی کار می کند یا نه ....
    اجازه دهید یک مقدار ساده تر بگویم : فرض کنید یک معلم به ما یک مسئله ریاضی داده است .راه حل این مسئله را الگوریتم آن به حساب می آوریم. اگر این راه حل ما را به جواب درست رساند این راه حل را در ورقه پاکنویس می کنیم ولی اگر راه جواب اشتباهی به ما داد باید مقداری به راه حل مسئله نگاه کنیم و ایراد های ان را بر طرف کنیم ...
    در نوشتن یک برنامه نیز ما به همین شکل برخورد خواهیم کرد یعنی طرح آن را پیاده می کنیم و اگر آن ما را به مطلوبمان رساند آن طرح را انتخاب می کنیم ولی اگر این چنین نشد در طرح مقداری تغییرات ایجاد کرده تا به هدف خود برسیم .

    دقت داشته باشید که اغلب الگوریتم ها مراحل زیر را شامل می شوند :

    1-خواندن داده ها (ورودی ها به برنامه)
    2-انجام عملیات ( مثل محاسبات . حلقه ها . شروط و...)
    3-چاپ نتایج


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

    ((( پیوست 1 را مشاهده کنید )))
    همانطور که در شکل بالا مشاهده می کنید برای طراحی یک فلوچارت از سه شکل استفاده می شود که کاربرد هر کدام در مقابل آن شرح داده شده است ...
    -------------------------------------------
    مثال : فلوچارتی رسک کنید ماکسیمم دو عدد را پیدا کند ..

    برای حل فرض می کنیم آن دو عدد 5 و 7 هستند

    ((( پیوست 2 را مشاهده کنید )))

    همانطور که ملاحظه می فرمایید ابتدا دو عدد را درون متغیر هایی به نام A و B می ریزیم و بعد یک شرط ایجاد می کنیم که آیا A از B کوچکتر است یا خیر ..در تصویر مشاهده می شود که فلوچارت را به گونه ای طراحی کرده ایم که اگر جواب شرط ما درست بود(یعنی اگر A کوچکتر از B باشد ) B را در MAX بریزد و اگر جواب شرط غلط بود ( یعنی اگر A بزرگتر از B باشد ) A را در MAX بریزد و سپس به پایان برود ....

    اشتباه
    یک نکته در این سوال به کار برده شده است ..اگر در صورت مسئله دقت بیشتری داشته باشید خواهید دید که در انتها از ما خواسته شده تا ماکسیمم را چاپ کنیم ولی ما در فلوچارت خود اشاره ای به این مسئله نکردیم (اینجا همان جایی است که باید الگوریتم را بررسی می کردیم تا ببینیم به مطلوب ما می رسد یا خیر .... ) پس ما باید فلوچارت خود را به گونه مناسب تغیر دهیم ....

    (((پیوست 3 را مشاهده کنید )))

    اکنون که با این شیوه طراحی الگوریتم آشنا شدید خود را با حل 2 تمرین آماده تر کنید
    تمرین اول بسیار آسان و تمرین دوم نیاز به کمی فکر دارد ..
    البته می دانم که برای بچه های گل مجید آن لاین این تمرین ها مثل آب خوردن است (فقط برای اینکه این مقاله خالی از تمرین هم نباشد این 2 تمرین را می گذارم )

    1-فلوچارتی طراحی کنید که ماکسیمم 3 عدد را بدست آورد
    2-فلوچارتی طراحی کنید که میانگین 50 عدد را بدست آورد

    جواب تمرین ها را هم در پیت های بعدی به صورت تصویری خواهم داد
    موفق باشید
     

    پیوست ها:

    • 01.jpg
      01.jpg
      اندازه فایل:
      کیلوبایت 26.9
      نمایش ها:
      248
    • 02.jpg
      02.jpg
      اندازه فایل:
      کیلوبایت 34.7
      نمایش ها:
      217
    • 03.jpg
      03.jpg
      اندازه فایل:
      کیلوبایت 37.1
      نمایش ها:
      226
    نوشته شده توسط dark-man در ‏27 سپتامبر 2005
    LinzY، SA3iDi، hamed.f و 5 نفر دیگر از این ارسال تشکر کرده اند.
  5. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    آشنایی با زبان سی :

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

    خوب همانطور که می دانید زبان سی شامل یک سری دستورات خاص می باشد که یک برنامه نویس که قصد برنامه نویسی به زبانی مثل سی را دارد کد های بر نامه را نوشته سپس توسط ادیتور یا همان کامپایلر ( توربو سی یا ویژوال سی پلاس پلاس ) آن را کامپایل می کند ....

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

    کامپایل کردن یعنی اینکه دستورات ما (که به زبان سی نوشته شده اند )توسط یک برنامه (که به آن کامپایلر گویند ) به زبان ماشین ترجمه شود تا برای ماشین قابل درک شود و دستگاه بتواند آن را به اجرا در آورد ....


    ما در ابتدا با یک سری از ابتدایی ترین دستورات زبان سی آشنا خواهیم شد و قدم به قدم پیش خواهیم رفت .
    ------------------------------------------------
    باز کردن و بستن برنامه : همانند تمام زبان های دیگر برای شروع باید برنامه باز شود و در انتها نیز باید برنامه بسته شود

    ما برای شروع از دستور } و برای خاتمه از دستور { استفاده می کنیم ..

    یعنی فرض کنید ما می خواهیم یک برنامه بنویسیم که حاوی 5 خط کد نویسی است برنامه باید به این شکل باشد :

    }
    خط اول کد نویسی
    خط دوم کد نویسی
    خط سوم کد نویسی
    خط چهارم کد نویسی
    خط پنجم کد نویسی
    {

    همانطور که ملاحظه می کنید باید تمام کد نویسی مابین } و { قرار گیرد

    ---------------------------

    دستور خواندن از صفحه کلید : برای اینکه برنامه عددی .حرفی .رشته ای یا ... را از صفحه کلید بخواند از دستور () scanf استفاده می شود توجه داشته باشید که داخل پرانتز متغیری که می خواهیم چیزی که وارد می شود در آن قرار گیرد باید گذاشته شود ...

    یک نمونه :
    (scanf("%d",&i

    -------------------------

    دستور چاپ بر روی صفحه نمایش : برای اینکه متغیری یا عبارت ثابتی را بر روی صفحه نمایش چاپ کنیم از دستور () printf استفاده می کنیم ... توجه داشته باشید اگر بخواهیم عبارتی عینا بر روی صفحه نمایش چاپ شود به صورت ("عبارت مورد نظر ")printf عمل خواهیم کرد ...

    دو نمونه :

    ("printf("DrEaMeR
    (printf("%d",i



    نکته 1:شاید بعضی از دستورات بکار برده در نمونه ها برایتان نامفهوم باشد مثل d%و یا i& و.. با این دستورات در ادامه کار آشنا خواهید شد ..

    نکته2: توجه کنید باید در انتهای هر خط کد نویسی در زبان سی باید ; به کار رود (بجز در مواردی که ذکر خواهد شد )..

    -------------------------------------
    توجه کنید به دستوراتی مثلprintf یا scanf توابع کتابخانه ای گویند ...این بدین معنا است که زبان سی این چنین توابعی را در خود برنامه برای استفاده کاربر قرار داده .... نکته مهم در اینجا این است که برای استفاده از این دستورات ( توابع کتابخانه ای ) ما باید این توابع را به برنامه بشناسانیم (یعنی به برنامه بگوییم آقا تو یک همچین دستوری را به صورت پیش فرض داری که فلان کار را انجام می دهد ) این کار را در زبان سی توسط HEADER FILE ها انجام می دهیم (فایل های سر آیند )


    نحوه تعریف کردن این توابع هم به برنامه بدین شکل است که در ابتدای کد نویسی حتی قبل از } باید دستور(دستورات) include# را به کار برد .... در ادامه بیشتر با فایل های سر آیند آشنا می شویم ....
     
    نوشته شده توسط dark-man در ‏27 سپتامبر 2005
    LinzY، aliflashi، hamed.f و 4 نفر دیگر از این ارسال تشکر کرده اند.
  6. MnavidM

    MnavidM Active Member

    ارسال‌ها:
    2,962
    تشکر شده:
    506
    امتیاز دستاورد:
    36
    آموزش C و دوستانش

    سلام.

    در این تاپیک به آموزش و معرفی منبع C می پردازیم.

    شما هم در هر چه بهتر شدن آن مارا یاری کنید .

    مطالب خود را در تاپیک (اینجا) بنویسید .

    مطالب گلچین شده و در این تاپیک قرار میگیرد.

    شروع : دوشنبه 04-07-84
     
    نوشته شده توسط MnavidM در ‏27 سپتامبر 2005
    LinzY، tajerman و senjin از این ارسال تشکر کرده اند.
  7. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    اولین برنامه :
    در پست های قبل تا حدودی با الگوریتم و طرح آشنا شدیم و چند دستور پایه ای زبان سی را فرا گرفتیم .در این پست قصد دارم تا با نوشتن اولین برنامه شما را تا حدی با دستورات گفته شده آشنا کنم ..
    همانند اکثر آموزش زبان های برنامه نویسی ما هم اولین برنامه خود را با برنامه hello world آغاز خواهیم کرد ..در این برنامه ما قصد داریم تا تنها یک نوشتهhello world را در خروجی چاپ کنیم .

    کد (Text):
    [COLOR="Red"]
                                                                             [LEFT]#include <stdio.h>
    void main()
    {
      printf("hello world");
    }[/LEFT]
     [/COLOR]    
    کد نویسی این برنامه به صورتی که من در بالا نوشته ام است.من با دادن توضیحات شما را با تک تک کد های این برنامه آشنا می کنم .
    خوب ببینید همانطور که گفتیم ما می خواهیم برنامه ای بنویسیم که یک نوشته را در صفحه خروجی عینا چاپ کند ... همانطور که به یاد دارید گفتم برای چاپ بر روی صفحه نمایش از دستور printf استفاده می کنیم (و متذکر شدم که اگر بخواهیم عبارتی عینا چاپ شود باید مابین "" قرار گیرد ).

    یادتان می آید که گفتم هر تابعی که در برنامه می نویسیم (مثل همین printf ) باید به برنامه تعریفش کنیم که آقا این تابع فلان کار را انجام میدهد ... (البته نگران نباشید ما نباید برای برنامه این تعریفات را بنویسیم خود نویسنده برنامه این کار را انجام داده ..تنها لازم است ما جای این تعریفات را به برنامه بگوییم ..... دقت کنید هر تابع(هر چند تابع ) در یک فایل سرآیند قرار دارد که داخل آن فایل ها این تعریفات تابع به برنامه قرار دارد..پس فقط لازم است تا اسم این فایل (یا فایل های ) سرآیند را با توجه به تابع مربوطه به اول کد نویسی اضافه کنیم ) ...

    اسم فایل سرآیند(header file) ای که در آن تعریفات printf (و چند تابع دیگر ) وجود دارد stdio است ..
    طریقه معرفی این فایل هم بدین گونه است که قبل از شروع برنامه بنویسید <include <stdio.h#

    دقت کنید جمله include# در تعریف همه این فایل های سرآیند ثابت است تنها جمله بین <> بسته به نوع تابع ها تغیر می کند ...

    مورد دیگر نیز h. بعد از stdio است که آن نیز به برنامه میگوید این فایل از نوع فایل سرآیند است (header file ) پس باید بعد از قرار دادن نام هر کدام از فایل های سر آیند بین <> یک h. نیز بعد از نام آن فایل سرآیند بگذاریم

    ;("printf("hello world

    این هم کد چاپ کردن نوشته ما است .. همانطور که گفتم باید در زبان سی در انتهای هر خط کد نویسی (بجز بعضی مورد ها ) باید یک ; بگذاریم

    خوب اگر دقت کنید دیگر چیز خاصی در کد نویسی این برنامه نمی ماند بجز یک خط و آن هم
    ()void main است ....این دستور چیست؟؟؟

    دقت کنید زبان سی به صورت پیش فرض دوست دارد تا به شکل تابعی عمل کند (در این مورد بعدا مفصل بحث خواهیم کرد) و تمایل دارد یک مقدار را به جایی برگرداند ..ما فعلا نمی خواهیم تا یک همچین اتفاقی رخ دهد پس با نوشتن این یک خط مانع از این کار می شویم (تا به توضیحاتش برسیم یادتان باشد فعلا در ابتدای هر برنامه {مابینinclude# و } در یک خط این دستور را بنویسید )

    خوب برنامه اول ما تمام شد

    شاید بگویید ::وای یه نوشتن hello world این قدر مکافات داشتش خدا بخیر کنه :: و ممکن است کمی دلسرد شوید و بگویید باید خیلی سخت باشد اما باور کنید بسیار آسان تر از چیزی که شنا فکر می کنید است این فقط تعریفاتش بود تا با کار آشنا شوید وگر نه از این به بعد که فهمیدیم چه هست دیگر آسان می شود
     

    پیوست ها:

    • 01.txt
      اندازه فایل:
      63 بایت
      نمایش ها:
      157
    نوشته شده توسط dark-man در ‏28 سپتامبر 2005
    LinzY، hamed.f، tajerman و 2 نفر دیگر از این ارسال تشکر کرده اند.
  8. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,539
    تشکر شده:
    1,313
    امتیاز دستاورد:
    113

    يك سئوال داشتم.
    وقتي ما فايلي را بالاي برنامه include مي كنيم يعني چه؟
    چرا براي كامپايلر ، سيستمي طراحي نكرده اند كه وقتي printf را ببينه ، خودش بفهمه كه اين تابع درون كدام فايله و برود آن فايل را خودش پيدا كنيد و كارهاي لازم را انجام بدهد.
    فلسفه طراحي چنين سيستمي چيه؟
    در عالم برنامه نويسي هر چيزي را ميشه اتوماتيك كرد. پس چرا اين كار را اتوماتيك نكرده اند؟ مگر ما چند تابع و چند فايل داريم؟ نوشتن برنامه اي كه تابعهايي كه ما در برنامه استفاده كرده ايم را به فايلهاي مادرشان مربوط كنه كه كاري نداره.

    .
     
    آخرین ویرایش: ‏1 اکتبر 2005
    نوشته شده توسط saalek110 در ‏28 سپتامبر 2005
    LinzY، tajerman و senjin از این ارسال تشکر کرده اند.
  9. MnavidM

    MnavidM Active Member

    ارسال‌ها:
    2,962
    تشکر شده:
    506
    امتیاز دستاورد:
    36
    سلام.

    بله این مورد برای همه زبان های برنامه نویسی که من دیدم , هم برقرار هست .

    اما در یک سری برنامه های ویژوال مثلا دلفی وقتی شما یه کامپوننت رو روی فرم میارید خود به خود فایل های مربوط به اون اضافه میشه .

    نکته : در دلفی به جای include از uses استفاده میشه .

    به نظر من :

    ببینید اگر این خود به خود بود برای ما مشکل ساز می شد , می دونید چه طوری ؟

    مثلا من یه تابع به اسم Addx می نویسم که کار که مد نظرم هست رو انجام میده .

    حالا به فرض یه تابع هم در خود کتابخانه C داریم که اسمش همین Addx هست .

    حالا اگه خود C بیاد این وسط باید کدوم رو انتخاب کنه ؟

    (البته میشه برای اینم یه راهایی پیدا کرد که مشکلی پیش نیاد) .

    یه چیز دیگه که در دلفی دیدم اینکه به فرض وقتی ما 2 تا فرم و :

    در فرم 2 یه تابع تعریف کردم و بعد می خوام از اون استفاده کنم , باید فرم 2 رو در uses قرار بدم .

    اما اگر این کار رو نکنم , و بعد در فرم 1 , تابع موجود در فرم 2 رو فراخوانی کنم :

    دلفی یه پنجره باز میکنه و می پرسه :

    میگی شما از یه تابع استفاده کردید که در فرم2 هست می خواید فرم 2 به uses اضافه بشه ؟
    و بقیه ماجرا.


    امیدوارم مفید واقع بشه .
    نوید.
     
    نوشته شده توسط MnavidM در ‏28 سپتامبر 2005
    LinzY، aliflashi، hamed.f و 3 نفر دیگر از این ارسال تشکر کرده اند.
  10. aira

    aira Member

    ارسال‌ها:
    219
    تشکر شده:
    71
    امتیاز دستاورد:
    16
    انواع داده ها

    در C
    پنج نوع داده اصلي وجود دارد كه عبارتند از : char، int،، float،، double، و void
    . در اين زبان اندازه و محدوده اي كه هر نوع داده اختيار مي كند بستگي به
    نوع پردازشگر (Processor) و نحوه پياده سازي كامپايلر دارد. شناسه هايي ( متغير
    برچسب ، اسامي توابع و ... ) كه از نوع char باشند براي ذخيره كردن مقاديري كه
    توسط كاراكترهاي اسكي تعريف شده اند به كار مي روند. شناسه هايي از نوع int براي
    ذخيره كردن مقادير صحيح ، و از نوع floatو doubleو براي ذخيره كردن اطلاعات عددي
    اعشاري به كار ميروند كه محدوده آنها توسط تعداد ارقام و دقت آنها مشخص ميشود.
    نوع void در مورد توباع به كار مي رود .
    نوعهاي داده اصلي ( به جز void ) مي توانند با عباراتي مثل signed، long، unsigned
    و shortو تركيب شده و نوع هاي ديگري را به وجود آورند . ( جدول (1) ).
    نوع | اندازه تقريبي به بيت | بازه قابل قبول |
    char
    |
    | 8 | 127- تا | 127 unsigned char
    |
    | 8 | 0 تا | 255 signed char
    |
    | 8 | 127- تا | 127 int
    |
    | 16 | 32767- تا | 32767 unsigned int
    |
    | 16 | 0 تا | 65525 signed int
    |
    | 16 | 32767- تا | 32767 short int
    |
    | 16 | 32767- تا | 32767 unsigned
    |
    | 16 | 0 تا | 65525 | | | short int |
    signed
    |
    | 16 | 32767- تا | 32767 | | | short int |
    long int
    |
    | 32 | َ2147483647- تا | 2147483647 |

    در مبحث بعدي هم خطاها رو ميگم
     
    نوشته شده توسط aira در ‏28 سپتامبر 2005
    LinzY، hamed.f، arman_p و 3 نفر دیگر از این ارسال تشکر کرده اند.
  11. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    آموزش کامپایل کردن برنامه اول توسط ویژوال سی پلاس پلاس :

    این بخش را برای دوستانی که بر روی دستگاهشان برنامه ++ Visual C را نصب کرده اند توضیح می دهم ...
    دقت داشته باشید که این روش کامپایل کردن برای تمامی برنامه های دیگری که می نویسید هم یکسان خواهد بود (البته شایان ذکر می شوم که این راه برای ابتدای کار است و در ادامه راه اصلی را به شما آموزش خواهم داد ..اما چون در حال حاضر تنها با سی کار داریم من این راه را برای جلوگیری از سردرگمی شما در برنامه ++ Visual C توصیه می کنم )

    فرض کنید ما کد برنامه خود را در محیطی مثل Notepad نوشته ایم ... گزینه Save As را که در بخش File است زده و برنامه را به نام دلخواه خود و با پسوند c در محلی که مورد نظرمان است ذخیره می کنیم فرضا من می خواهم اسم برنامه خود را با نام Dreamer ذخیره کنم پس باید به صورت Dreamer.c آن را ذخیره کنیم ...
    سپس به جایی که تعیین کرده ایم می رویم و مشاهده می کنیم که یک آیکون با شکل c در آن محل ذخیره شده ..بر روی آن دابل کلیک کرده تا برنامه ++Visual C باز شود ...برای کامپایل کردن برنامه به بخش Build که در نوار بالایی برنامه است می رویم و گزینه Compile را می زنیم تا برنامه ما را کامپایل کنید ( یا به جای طی این مراحل یک باره F7 + Ctrl را فشار دهیم ) .

    دقت کنید وقتی برنامه را کامپایل می کنیم برنامه به دنبال ایرادهای دستوری کدی که ما نوشته ایم می گردد و اگر برنامه بدون اشکال باشد در نوار سفیدی که در پایین برنامه است می نویسد



    و اگر برنامه دارای خطا باشد که تعداد خطا ها را می نویسد اگر Scrol کنار آن نوار را مقداری بالا تر ببرید می توانید ببینید که خطا های شما چه می باشد (و اگر روی خطا ها دابل کلیک کنید مکان خطا در کد شما را نشان می دهد )

    دقت داشته باشید تا زمانی که Error ها را به صفر نرسانید برنامه شما اجرا نمی شود ولیwarning ها مانعی برای اجرا نمی باشند (همانطور که از نامش پیداست فقط هشدار است )

    حال که برنامه را کامپایل کردیم وقت آن رسیده تا برنامه را به فایل EXE تبدیل کنیم برای این کار گزینه زیر کامپایل که همانBuild...exe را می زنیم ( یا F7 ) وقتی این کار را انجام دادیم و برنامه ایرادی نگرفت فایل EXE ما ساخته شده و ما می توانیم نتیجه زحمات خودمان را ببینیم ..
    به جایی که فایل خود را ذخیره کرده بودیم می رویم مشاهده می کنیم که چندین آیکون جدید نیز ساخته شده است در این میان یک پوشه (Folder) ساخته شده است به نام Debug خوب وارد این پوشه شوید و فایلی خود را که به همان نامی که دخیره کرده بودید را با پسوند EXE مشاهده کنید ...می توانید آن را اجرا کنید تا نتیجه کار خود را ببینید

    مراحل را نیز به صورت عکس ضمیمه کرده ام

    موفق باشید
     

    پیوست ها:

    • 01.jpg
      01.jpg
      اندازه فایل:
      کیلوبایت 26
      نمایش ها:
      87
    • 02.jpg
      02.jpg
      اندازه فایل:
      کیلوبایت 60.2
      نمایش ها:
      77
    • 03.jpg
      03.jpg
      اندازه فایل:
      کیلوبایت 40.6
      نمایش ها:
      70
    • 04.jpg
      04.jpg
      اندازه فایل:
      کیلوبایت 68.1
      نمایش ها:
      79
    • 05.jpg
      05.jpg
      اندازه فایل:
      کیلوبایت 30.7
      نمایش ها:
      72
    نوشته شده توسط dark-man در ‏28 سپتامبر 2005
    LinzY، hamed.f، arman_p و 3 نفر دیگر از این ارسال تشکر کرده اند.
  12. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    ببخشید تو پست قبلی نشد تا تمام عکسها را بگذارم ..در این پست عکسهای باقیمانده مربوط به پست قبل را قرار می دهم
     

    پیوست ها:

    • 06.jpg
      06.jpg
      اندازه فایل:
      کیلوبایت 22.3
      نمایش ها:
      54
    • 07.jpg
      07.jpg
      اندازه فایل:
      کیلوبایت 35.9
      نمایش ها:
      51
    • 08.jpg
      08.jpg
      اندازه فایل:
      کیلوبایت 32.8
      نمایش ها:
      50
    • 09.jpg
      09.jpg
      اندازه فایل:
      کیلوبایت 31.6
      نمایش ها:
      58
    نوشته شده توسط dark-man در ‏28 سپتامبر 2005
    LinzY، hamed.f، arman_p و 2 نفر دیگر از این ارسال تشکر کرده اند.
  13. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    یک مشکل :

    از دوستان خواهشمندم قبل از خواندن این پست و پست های بعدی حتما یک Compiler بر روی دستگاه خود نصب کنید تا به صورت عملی با مواردی که توضیح داده می شود آشنا شوید ...
    در بحث پیشین یاد گرفتیم تا برنامه اول خود را که نوشته ایم کامپایل کنیم و آنرا به صورت فایل اجرایی (EXE) در بیاوریم ...... دوستانی که این کار را انجام داده اند حتما متوجه یک نکته شده اند و آن هم این است که بعد از اینکه ما روی فایل اجرایی ای که ساختیم (EXE) دابل کلیک می کنیم یک صفحه به سرعت باز و بسته می شود و دیگر هیچ اتفاقی نمی افتد .....چرا؟؟؟

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

    این کار را با تابع ()getch انجام می دهیم کار این تابع این است که منتظر دریافت یک ورودی از صفحه کلید می ماند و تا زمانی که ورودی به آن وارد نشود منتظر خواهد ماند ... دقت کنید فایل سرآیند ( header file) این تابع conio.h است پس لازم است یک include# دیگر به قبل از } کد نویسی خود اضافه کنیم تا این دستور ما بدرستی کار کند ...

    کد نویسی جدید به صورت زیر خواهد بود


    کد (Text):

    [left]
    #include <stdio.h>
    #include <conio.h>
    void main()
    {
    printf("hello world");
    getch();
    }


    [/left]
     
     

    پیوست ها:

    • 00.jpg
      00.jpg
      اندازه فایل:
      کیلوبایت 33.6
      نمایش ها:
      75
    نوشته شده توسط dark-man در ‏28 سپتامبر 2005
    LinzY، arman_p و senjin از این ارسال تشکر کرده اند.
  14. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    جواب تمرین اول فلوچارت ها :


    فرض می کنیم سه عدد ما به ترتیب 3 و 5 و 8 می باشند
     

    پیوست ها:

    • 04.jpg
      04.jpg
      اندازه فایل:
      کیلوبایت 34.6
      نمایش ها:
      94
    نوشته شده توسط dark-man در ‏29 سپتامبر 2005
    LinzY، S.E، hamed.f و 3 نفر دیگر از این ارسال تشکر کرده اند.
  15. stranger_in_rain

    stranger_in_rain Member

    ارسال‌ها:
    183
    تشکر شده:
    27
    امتیاز دستاورد:
    16
    عبارات ورودی / خروجی - بخش 1 - printf

    عبارات ورودی / خروجی :
    توضیحات : برای بهتر دیدن مقاله فایل .rar رو که attach کردم، دانلود کنید.


    بخش اول : (printf())

    در C از دستور printf() برای چاپ خروجی بر روی صفحه نمایش استفاده میشود و همچنین از scanf() برای خواندن اطلاعات از ابزارهای ورودی مانند keyboard بهره گرفته میشود. اما در این بین نکاتی است که در این بخش به آنها اشاره میکنیم .

    عبارات خروجی :
    دستور printf() در تابع کتابخانه ای stdio.h قرار دارد. این تابع در صورت صحیح اجرا شدن تعداد کاراکترهای چاپ شده و در غیر این صورت عددی منفی را برمیگرداند. فرم کلی دستور printf() به صورت روبرو است :
    Printf( "< 1 >" , < 2 >);
    عبارت 1 : این بخش میتواند 3 حالت داشته باشد :
    1. یک متن خالص باشد : printf("Iran is my country");
    2. حاوی فرمت متغیرهایی باشد که در عبارت 2 آورده میشوند، مانند : printf("x=%d",x) . باید توجه داشت که فرمت های گوناگون که هر کدام با یک حرف (بعد از علامت % ) نشان داده میشوند، برای هر Data Type (مراجعه شود به پست انواع داده ها – نویسنده : aria ) فرق میکند. همگی فرمت ها با علامت % شروع میشوند . مثلا در مثال بالا %d بیان کننده ی data type عدد صحیح است (% نشان دهنده ی آغاز یک فرمت و d نماد اعداد صحیح است ). به جدول زیر توجه کنید :
    %c : کاراکتر
    %d : اعداد صحیح دهدهی + و -
    %i : اعداد صحیح دهدهی + و -
    %e : نمایش علمی عدد همراه حرف e
    %E : نمایش علمی عدد همراه حرف E
    %f : عدد اعشاری ممیز شناور
    %g : اعداد اعشاری ممیز شناور
    %G : اعداد اعشاری ممیز شناور
    %o : اعداد مبنای 8 مثبت
    %s :رشته ای از کاراکتر ها
    %u : اعداد صحیح بدون علامت
    %x : اعداد مبنای 16 مثبت با حروف کوچک
    %X : اعداد مبنای 16 مثبت با حروف بزرگ
    %p : Pointer (اشاره گر)
    %n :موجب میگردد تا تعداد کاراکترهایی که تا قبل از این فرمت چاپ شده است در متغیر متناظر با آن قرار گیرد.
    %% : علامت %
    %hd : برای چاپ اعداد از نوع long
    %ld : برای چاپ اعداد از نوع short
    3. حاوی کاراکترهای کنترلی باشد. به این صورت که با این کاراکتر ها میتوان محل چاپ،چاپ در سطر بعدی و ... را تنظیم کرد. این کاراکنر ها با "\" شروع میشوند و بعد از آن شناسه ی دیگر آن می آید(مانند کاراکترهای فرمت). در زیر اطلاعات تفصیلی در این باره آمده است :
    \f : موجب انتقال کنترل به صفحه ی جدید میشود.
    \n : موجب انتقال کنترل به خط جدید میشود.
    \t : انتقال به 8 محل بعدی صفحه نمایش.
    \" : چاپ (")
    \' : چاپ (')
    \\ : back slash
    \v : انتقال کنترل به 8 سطر بعدی
    \N : ثابت های مبنای 8 (N عددی مبنای 8 است)
    \xN : ثابت های مبنای 16 (N عددی مبنای 16 است)

    خوب حالا وحشت نکنید، الان مثال حل میکنیم تا مطلب جا بیفته ;) قبل از هر چیز باید بگم عبارات و جمله هایی که در برنامه بعد از "//" قرار میگیرند توسط کامپایلر اجرا نمیشوند و تنها جهت توضیح و خوانایی برنامه است.
    مثال 1: چاپ یک رشته ی معمولی با printf() :
    کد (Text):
    [LEFT]
    #include<stdio.h>// the library that printf is in that
    int main()
    {//Begin of program
    printf("C is a language"); // printing the text on the screen
    return 0;    //waits for a key press after the program is finished & wont jump out of it
    }   //End of program
    خروجی : C is a language
    [/LEFT]
    حالا اگر یک تغییرات کوچکی در برنامه ی بالا بدهیم و دو عبارت را چاپ کنیم :
    کد (Text):
    [LEFT]
    #include<stdio.h>
    int main()
    {
    printf("C is a language");
    printf("I like it"); //prints the second text
    return 0;    
    }  
    خروجی : C is a languageI like it
    [/LEFT]
    به خروجی بالا دقت کنید. دقیقا عبارت دوم بعد از عبارت اول چاپ شده است و بسیار ناخوانا است. اینجاست که بحث حالت سوم پیش ماید. یعنی کاراکترهای کنترلی.
    با نگاهی به این کاراکترها میبینیم که آنها میتوانند نیازهای ما را برطرف کنند. مثلا اگر من بخواهم جمله ی دوم من در خط بعدی چاپ شود، یا در 8 سطر بعدی چاپ شود، یا در 8 ستون بعدی(یک Tab) و ...
    .....
    Printf("C is a language/n"); // Control would be placed in next line
    printf("I like it");
    …..
    خروجی :
    C is a language
    I like it
    حال یک مثال دیگر :
    کد (Text):
    [LEFT]
    .....
    printf("C is a language /t"); // Control would be placed in next Tab
    printf("I like it");
    …..
    خروجی :
    C is a language I like it

    حال یک مثال دیگر :
    .....
    printf("/"Hello/"");
    …..
    خروجی :
    "Hello"[/LEFT]
    و بقیه نیز بر حسب کاربرد به اینگونه است ...

    کاراکترهای فرمت :
    خوب، با یک مثال شروع میکنیم. ما یک متغیر داریم که میخواهیم مقدار آن را در خروجی چاپ کنیم. نوع data type آن integer هستش و در هنگام تعریف کردن به آن مقدار اولیه 5 را داده ایم. خوب شروع میکنیم.
    کد (Text):
    [LEFT]
    #include<stdio.h>
    int main()
    {
    int x=5;
    printf("Our variable is called x & it is equal with %d",x);
    return 0;    
    }  
    خروجی :
    Our variable is called x & it is equal with 5
    [/LEFT]
    در مثال بالا دقت کنید . متن ها به صورت عینی چاپ میشوند و در جای %d عینا مقدار صحیح متناظر قرار میگیرد. به مثالی دیگر توجه کنید.
    کد (Text):
    [LEFT]
    #include<stdio.h>
    int main()
    {
    int x=5;
    float y=6.7;
    printf("Our variables are called x=%d \tand\t y=%f",x,y);
    return 0;    
    }  
    خروجی :
    Our variable are called x=5        and        y=6.7
    [/LEFT]
    بسیار خوب در این مثال ترکیبی از همه ی کارهای این بخش بود. \t ها باعث شد هنگام چاپ کنترل 8 کاراکتر به جلو بپرد و %d و %f هم که برای چاپ مقادیر صحیح و اعشاری int و float بودند.

    حالا میرسیم به این مبحث که ما این همه نوشتیم ، حالا چه جوری پاکش کنیم ؟!؟! یا اینکه چه جوری تو یه جای خاص از صفحه بنویسیم ؟ مثلا سطر 10 و ستون 20 .برای این کارها 2 تابع موجود است که هردو در فایل conio.h قرار دارد.

    تابعی که صفحه را پاک میکند clrscr() نام دارد. این تابع تمامی صفحه را پاک کرده و کنترل را به نقطه ی 0.0 منتقل میکند.
    تابع gotoxy(a,b) مکان نما را به نقطه ی a,b منتقل میکند و از این پس نوشتن را در آن محل انجام میدهد. به مثال زیر توجه کنید :
    کد (Text):
    [LEFT]....
    gotoxy(10,20);
    printf("C is a language");
    …..
    [/LEFT]
    با اجرای این مثال جمله ی بالا در مختصات 10و20 صفحه چاپ میشود.


    طول میدان :
    برای اینکه به تابع printf() طول میدان بدیم تا هرکاری خواست در هنگام چاپ انجام نده باید در کاراکترهای فرمت تغییراتی رو ایجاد کنیم.
    %5d
    این دستور نشان دهنده ی یک کاراکتر فرمت صحیح با طول میدان 5 عدد صحیح است.
    %5.3f
    این دستور نشان دهنده ی یک کاراکتر فرمت اعشاری است با طول میدان 5 عدد صحیح و سه عدد اعشار.

    پایان .

    در انتها باید بگویم در C++ به جای printf() از تابعی با نام cout استفاده میشود . در این تابع کاراکتر های ورودی نقشی ندارند ولی از کاراکترهای کنترلی پشتیبانی میشود. روش استفاده از آن در مثال زیر نشان داده میشود:
    کد (Text):
    [LEFT]#include<iostream.h>
    int main()
    {
    int x=5;
    cout<<"We are printing an integer variable : "<<x<<"\n";
    cout<<"again we are printing : "<<x<<endl;
    cout<<"Finished";
    return 0;    
    }  
    خروجی :
    We are printing an integer variable : 5
    Again we are printing : 5
    Finished
    [/LEFT]
    توجه کنید که endl (end line) همان کار \n را انجام میدهد.
     

    پیوست ها:

    • IO in C.rar
      اندازه فایل:
      کیلوبایت 7.7
      نمایش ها:
      125
    نوشته شده توسط stranger_in_rain در ‏1 اکتبر 2005
    LinzY، hamed.f، arman_p و 3 نفر دیگر از این ارسال تشکر کرده اند.
  16. stranger_in_rain

    stranger_in_rain Member

    ارسال‌ها:
    183
    تشکر شده:
    27
    امتیاز دستاورد:
    16
    عبارات ورودی / خروجی :
    توضیحات : برای بهتر دیدن مقاله فایل .rar را که attach کردم، دانلود کنید.


    بخش دوم : scanf()

    تابع scanf() اگر درست اجرا شود تعداد متغیرهایی را که از ورودی خوانده برمیگرداند و در غیر این صورت عبارت EOF ( با حروف بزرگ ) را برمیگرداند. صورت کلی scanf() به صورت زیر است :
    Scanf("<1>",<2>);
    عبارت <1> میتواند در برگیرنده ی 3 کاراکتر میتواند باشد :
    1. کاراکترهای فرمت که از آنها به تفصیل در بَخش 1 سخن گفته شد.
    2. space : که به آن فضای خالی گویند و گذاشتن حتی یک space سبب میگردد که در هنگام وارد کردن اطلاعات تمامی space ها ، Tab ها و new line ها نادیده گرفته شوند و اطلاعات خالص از صفحه کلید خوانده شود. مثلا اگر شما قبل از عدد ورودی 5 جای خالی بگذارید به دلیل وجود space در قسمت 1 نادیده گرفته میشوند و تنها عدد 5 خوانده میشود.
    3. کاراکترهایی غیر از فرمت و space . این کاراکتر ها اگر عینا در هنگام وارد کردن اطلاعات وارد شوند از آنها صرفنظر میشوند. به مثال رو به رو توجه کنید : "%d,%d"
    به کاما در بین دو کاراکتر فرمت توجه کنید. حال فرض کنید در ورودی اطلاعات به صورت زیر وارد شده : 5,10 در این حالت اعداد 5 و 10 خوانده میشوند و از کاراکتر کاما صرف نظر میشود.

    در قسمت <2>، متغیر ها با آدرسشان ذکر میشوند. توجه شود که هنگامی که علامت & قبل از نام متغیر می آید، نشان دهنده ی آدرس آن است. یعنی دستور &variable1 آدرس متغیر variable1 را برمیگرداند.
    scanf("%d%f", &x,&a);


    مثال : محیط و مساحت یک مستطیل :
    #include<stdio.h>
    #include<conio.h>
    int main()
    {
    int x,y,area,p;
    printf("Enter length & width : ");
    scanf("%d%d", &x, &y);
    area=x*y;
    p=(x+y)*2;
    printf(" Area = %d , p = %d", area,p);
    getch();
    return 0;
    }

    توابع خواندن کاراکتر از صفحه کلید :
    برای خواندن کاراکتر از صفحه کلید ، 2 تابع وجود دارد : getch() و getche() . که هر دو عمل خواندن کاراکتر را با اندکی تفاوت انجام میدهند. تابع getch() کاراکتری را که از keyboard میخواند را در صفحه نمایش نمیدهد در حالی که getche() این کار را میکند (نمایش دادن کاراکتر). تفاوت هردوی آنها با scanf() در این است که نیازی به فشردن کلید Enter پس از فشردن کاراکتر بر روی صفحه کلید ندارد. به طوری که به سرعت پس از فشردن کلید بر روی صفحه، کاراکتر آن در متغیر از جنس char ذخیره میشود.
    مثال getch() :
    #include<stdio.h>
    #include<conio.h>
    int main()
    {
    char ch;
    printf("Press a key : ");
    ch=getch();
    printf("You Pressed : ");
    printf(" %c",ch);
    getch();
    return 0;
    }
    خروجی : اگر فرض کنیم که کاربر کلید C را زده باشد داریم :
    C
    در این مثال تنها یک C چاپ میشود و آن نیز مقدار موجود در متغیر ch است. تابع getch() همانطور که میدانیم چیزی در صفحه نمایش چاپ نخواهد کرد.


    مثال getche() :
    #include<stdio.h>
    #include<conio.h>
    int main()
    {
    char ch;
    printf("Press a key : ");
    ch=getche();
    printf("\n You Pressed : ");
    printf(" %c",ch);
    getch();
    return 0;
    }
    خروجی : اگر فرض کنیم که کاربر کلید C را زده باشد داریم :
    C
    You Pressed :C
    در این مثال اولین C همانی است که از صفحه کلید خوانده شده و دومی مقدار موجود در متغیر ch است.




    C++
    در پایان باید گفت تابع scanf در c++ با تابعی به نام cin جانشین شده که مثال زیر استفاده از آن را نشان میدهد :
    #include<stdio.h>
    #include<conio.h>
    int main()
    {
    int a,b;
    cout<<"Enter 2 variables "<<endl;
    cin>>a>>b;
    cout<<"You entered : "<<a<<"\t"<<b;
    getch();
    return 0;
    }
    خروجی : با فرض اینکه ورودی های شما 10 و 15 باشند.
    Enter 2 variables
    10
    15
    You entered : 10 15
    همانطور که قبلا گفته شد، کاراکترهای کنترلی ( در اینجا Tab - \t) در C++ هم پشتیبانی میشوند.
     

    پیوست ها:

    نوشته شده توسط stranger_in_rain در ‏1 اکتبر 2005
    LinzY، hamed.f، arman_p و 2 نفر دیگر از این ارسال تشکر کرده اند.
  17. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,539
    تشکر شده:
    1,313
    امتیاز دستاورد:
    113
    تقديم به علاقه مندان سي و اسمبلي
    دو فايل زير را از حالت فشرده خارج سازيد و فايلهاي حاصل را ، همه را در يك پوشه بريزيد و فايل Helppc.com را اجرا كنيد.
    مجموعه اي از دستورات سي و اسمبلي و شرح آنها در سيستم عاملهاي مختلف.
    و دستورات مفيد ديگر ، مثل مودم و غيره.
    .

    ______________________
    فایل ها مفید و مورد تایید می باشد.

    مدیر انجمن (Doste)
    ______________________
     
    آخرین ویرایش: ‏1 اکتبر 2005
    نوشته شده توسط saalek110 در ‏1 اکتبر 2005
    LinzY، hamed.f، omid_4500 و 3 نفر دیگر از این ارسال تشکر کرده اند.
  18. stranger_in_rain

    stranger_in_rain Member

    ارسال‌ها:
    183
    تشکر شده:
    27
    امتیاز دستاورد:
    16
    این مطلب بین C و ++C مشترک است.

    برنامه های ساخت یافته :


    توابع :
    با استفاده از توابع میتوانیم برنامه را به بخش های کوچکتر شکسته و آن را بسیار خواناتر کنیم. باید گفت توابع قسمتی از برنامه هستند که از کد اصلی (بخش main ) حذف شده و به صورت یک قطعه برنامه نوشته میشود (مثلا فرض کنید عمل جمع در یک ماشین حساب از بدنه ی اصلی برنامه جدا شود و یک قطعه کد شود که دو عددی که باید جمع کند را به صورت ورودی بگیرد).یک کاربرد دیگر توابع این است که از دوباره نویسی کدهایی که کاربردشان زیاد است جلوگیری میکند. مثلا اگر تابع جمع ما در برنامه ی ماشین حساب در 5 جا باید نوشته شود، با یکبار نوشتن تابع، میتوان آن را در 5 جا صدا کرد ( فراخوانی،Call ) . وقتی یک تابع call میشود خط اجرای برنامه به آن تابع رفته و پس از اجرای کامل تابع به برنامه بازمیگردد.
    در زبانهای برنامه نویسی روال تابع ها معمولا بر این اساس است که 2 نوع تابع دارند که یک سری یک مقدار ( متغیر ) را به برنامه برمیگرداند و سری دیگر فقط یک سری دستورات را اجرا میکنند ( البته بعضی از توابع هیچ یک از این دو سری نیستند . مانند constructor در کلاس ها-بعدا در مبحث کلاس ها توضیح داده میشود ).

    نوع اول : تابع های دارای نوع .
    این تابع ها دارای نوع (data type ) هستند، به طوری که مقداری که تابع برمیگرداند از جنس یکی از data type ها است.( مثلا int,char,double ,... ). این نوع توابع را به صورت کلی زیر مینویسند :

    ;()نام تابع نام datatype

    کد (Text):

    [left]

    int function1();
    char function2();

    [/left]
     
    function1 : تابعی از جنس int ( یعنی مقدار بازگردانده شده به برنامه از نوع عدد صحیح خواهد بود )
    function2 : تابعی از جنس کاراکتر ( یعنی مقدار بازگردانده شده به برنامه از نوع کاراکتر خواهد بود )

    توابع نوع دوم : این توابع تنها یک سری دستورات را اجرا میکنند و از هیچ نوع data type خاصی هم نیستند. این نوع توابع را به صورت کلی زیر مینویسند :

    ;()نام تابع void

    مثال :
    کد (Text):

    [left]

    void function3();
    void function4();

    [/left]
     
    Function3 , function4 دارای هیچ نوعی نیستند و تنها یک سری دستورات را اجرا میکنند.

    حال برای توضیح بیشتر فرض میکنیم دو تابع برای دو دکمه ی ماشین (دکمه ی C یا reset و دگمه ی =) حساب نوشته ایم . در دکمه ی C همه ی اطلاعات پاک میشود و همه چیز به حالت اول برمیگردد و در این حالت نیازی نداریم چیزی را به ماشین حساب بازگردانیم. اما در مورد دکمه ی = باید مقداری که از عملیات ریاضی حاصل میشود را بر روی صفحه ی نمایش ماشین حساب نمایش داد. پس باید یک مقدار به ماشین حساب بازگردد.

    ادامه در پست بعدی ...
     
    نوشته شده توسط stranger_in_rain در ‏11 اکتبر 2005
    LinzY، hamed.f، omid_4500 و 3 نفر دیگر از این ارسال تشکر کرده اند.
  19. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    حلقه های تکرار

    حلقه های تکرار


    امروز قصد دارم تا شما را با حلقه های تکرار در سی آشنا کنم ...

    ما هنگامی که می خواهیم دستور ( یا دستورات ) معینی به تعداد مشخصی بار در برنامه اجرا شود از حلقه ها استفاده می کنیم

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

    1-حلقه for : این حلقه یکی از پرکاربرد ترین حلقه ها در زبان سی می باشد و شکل کلی نوشتن حلقه به صورت زیر می باشد
    کد (Text):

    [left]

    for(    نوع افزایش   ;    مقدار نهایی  ;  مقدار اولیه  )

    [/left]
     

    همانطور که در بالا می بینید برای تشکیل حلقه for ما نیاز به تعین سه چیز داریم ..(به ترتیب از سمت چپ ) ..در ابتدا باید نقطه شروع خود را به حلقه بگوییم (یا به عبارتی دیگر مقدار اولیه ) سپس باید نقطه پایان را به حلقه بگوییم (مقدار نهایی) و در پایان باید نحوه افزایش را برای حلقه مشخص کنیم (کاهشی یا افزایشی یا ....
    همانطور که می بینید برای تفکیک این دستورات از هم از ; استفاده می شود

    --- در زیر به عنوان مثال حلقه ای را می بینیم که از 1 شروع شده و تا 8 ادامه دارد و نحوه افزایش آن به صورت افزایشی (یک پله یک پله افزایش است )
    کد (Text):

    [left]

    for(i=1;i<8;i++)

    [/left]
     
    ---حلقه زیر هم حلقه ای است که از 4 شروع می شود و تا 1 ادامه دارد و نوع آن نیز کاهشی است
    کد (Text):

    [left]

    for(i=4;i>1;i--)

    [/left]
     
    نکته مهم در تعین افزایشی و کاهشی بودن این است که اگر شما بخواهید حلقه خود را افزایشی درست کنید باید مقدار اولیه خود را کمتر از مقدار نهایی بگذارید و اگر بخواهید حلقه تان کاهشی باشد باید مقدار اولیه بیشتر از مقدار نهایی باشد ....
    -------------------------------------------
    خوب حال که با نوشتن این حلقه آشنا شدید نحوه کار آن در برنامه را خدمتتان عرض خواهم کرد ...

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

    به عنوان مثال تکه کد زیر حلقه ای را نشان می دهد که به ازای a=0 تا a<10 واژه Dreamer را چاپ می کند یعنی اینکه در خروجی ما واژه ایران 10 بار چاپ می شود
    کد (Text):

    [left]

    for(a=0;a<10;a++)
    printf("Dreamer");

    [/left]
     
    حال اگر ما بیش از یک دستور برای تکرار شدن در این حلقه داشته باشیم باید این دستورات را در میان } و { قرار دهیم و در اتهای { نیز از ; استفاده کنیم ..برای مثال تکه کد زیر حلقه ای را نشان می دهد که به ازای a=1 تا a<5 واژه ایران را چاپ می کند و مقدار a را با sum جمع می کند
    کد (Text):

    [left]

    for(a=1;a<5;a++)
    {
    printf("IRAN");
    sum+=a;
    };

    [/left]
     
    (البته قابل ذکر است که برای یک دستور هم می توان از شیوه بالا استفاده کرد )
     
    نوشته شده توسط dark-man در ‏19 اکتبر 2005
    LinzY، hamed.f، arman_p و 2 نفر دیگر از این ارسال تشکر کرده اند.
  20. dark-man

    dark-man Member

    ارسال‌ها:
    679
    تشکر شده:
    144
    امتیاز دستاورد:
    16
    حلقه While

    حلقه While
    در درس قبلی نحوه کار با حلقه for را فرا گرفتید .در این جلسه شما را با حلقه While آشنا خواهم کرد

    شکل کلی حلقه به صورت زیر می باشد
    کد (Text):

    [left]

    while(    شرط    )
    دستور

    [/left]
     
    همانطور که ملاحظه می کنید در پرانتز شرط خود را قرار می دهیم و سپس در خط زیر دستور(یا دستورات ) خود را می نویسیم ...
    توجه داشته باشید که حلقه While در صورت درست بودن شرط اجرا می شود و اگر شرط ما دیگر صدق نکند کامپایلر حلقه را ترک خواهد کرد ...یعنی اینکه ابتدا کامپایلر ما به خطی می رسد که در آنWhile ما قرار دارد و بعد شرط را چک می کند و اگر شرط درست بود دستورات While را اجرا می کند و اگر شرط غلط بود از حلقه بیرون می آید ....
    برای درک بهتر تکه کد زیر را ملاحظه فرمایید

    کد (Text):

    [left]
    while(i<5)
    printf("Hello");

    [/left]
     

    کد بالا بیان می دارد که تا زمانی که i<5 است واژه Hello را چاپ کن ..حال اگر روال برنامه را طوری تعین کنیم که مقدار متغیر i بیشتر از 5 شود کامپایلر از حلقه بیرون خواهد آمد ...

    نکته مهم در دستور while این می باشد که چون ما افزایشگری را در درون while قرار نداده ایم باید یک افزایشگر (یا کاهشگر) در حلقه دستور ایجاد کنیم تا بعد از تعداد معینی از تکرار ازحلقه بیرون بیاییم .........
    به مثال زیر دقت فرمایید
    کد (Text):

    [left]

    i=0
    while(i<7)
    {
    printf("Majidonline");
    i++;
    }


    [/left]
     

    در کد بالا ابتدا مقدار i را 0 تعین کرده ایم و سپس دستور while را به گونه ای طراحی کرده ایم که تا زمانی که متغیر i ما کوچکتر از 7 است واژه Majidonline را چاپ کن و در ضمن هر بار یک رقم به i اضافه کن (با این فرض که ما متغیر I را از نوع integer در نظر گرفته ایم )..پس با توجه به این کد نویسی واژه Majidonline برای ما 7 بار چاپ می شود


    قابل ذکر است که در حلقه whileنیز همانند for ما می توانیم یک دستور را بدون استفاده از }و { استفاده کنیم ولی برای مقادیر بیش از یک دستور باید حتما از } و { در ابتدا و انتها استفاده کرد ...
    دقت داشته باشید هنگامی که چند دستور را در یک حلقه استفاده می کنیم تمامی این دستورات به تعداد تکرار های آن حلقه اجرا می شوند . مثال : برنامه ای بنویسید که سن شما را از ورودی خوانده و آن را 6 بار چاپ کند ....

    کد (Text):

    [left]

    #include <stdio.h>
    #include <conio.h>
    void main()
    {
    int a,i=0;
    printf("Enter You Age ");
    scanf("%d",&a);
    while(i<6)
    {
    printf("%d",a);
    i++;
    }
    getch();
    }

    [/left]
     
     
    نوشته شده توسط dark-man در ‏19 اکتبر 2005
    LinzY، hamed.f، arman_p و 3 نفر دیگر از این ارسال تشکر کرده اند.
وضعیت موضوع:
موضوع بسته شده است.

به اشتراک بگذارید