آموزش برنامه نویسی به زبان ساده
آموزش برنامه نویسی گام اول
موضوع این گام:
اهداف کلی : آشنایی با تاریخچه و مزایای زبان برنامهنویسی ++C و بیان مفاهیم بنیادی شیگرایی و عناصر مهم برنامههای ++C
اهداف رفتاری و عمکردی:
انتظار میرود پس از پایان این جلسه بتوانید:
- مزایای زبان ++C را بر زبانهای مشابه ذکر کرده و تفاوت آن را با زبان C بیان کنید.
- شرح مختصری از روند پیشرفت زبانهای برنامهنویسی را بیان کرده و مشکلات هر دوره را به اختصار شرح دهید.
- مزایای شیگرایی در تولید نرمافزار را برشمارید.
- قالب کلی برنامههای ++C را بشناسید و بتوانید برنامههای کوچک را نوشته و آزمایش کنید.
- عملگر ورودی و خروجی را در ++C شناخته و از آنها در برنامهها استفاده کنید.
- نحوه اعلان متغیرها و شیوه مقداردهی به آنها را بدانید.
- علت و شیوههای افزودن توضیح به کد برنامه را شرح دهید.
- علت و شیوه معرفی ثابتها در برنامه را شرح دهید.
سرفصل های تئوری:
سرفصل های عملی:
- نشان دادن یک برنامه گرافیکی ساده
- تغییر وعوض کردن دستورات گرافیکی مثال اول
- نوشتن برنامه علامت المپیک
مزیت استفاده از زبان C:
زبان C یک زبان همه منظوره است. در این زبان عملگرهایی تعبیه شده که برنامهنویسی سطح پایین و به زبان ماشین را نیز امکانپذیر میسازد.
چون C عملگرهای فراوانی دارد، کد منبع برنامهها در این زبان بسیار کوتاه است.
زبان C برای اجرای بسیاری از دستوراتش از توابع کتابخانهای استفاده میکند و بیشتر خصوصیات وابسته به سختافزار را به این توابع واگذار مینماید برنامه مقصدی که توسط کامپایلرهای C ساخته میشود بسیار فشردهتر و کمحجمتر از برنامههای مشابه در سایر زبانها است.
ساختار کلی یک برنامه با یک مثال:
اولین خط از کد بالا یک «راهنمای پیشپردازنده» است. راهنمای پیشپردازنده شامل اجزای زیر است:
کاراکتر # که نشان میدهد این خط، یک راهنمای پیشپردازنده است. این کاراکتر باید در ابتدای همه خطوط راهنمای پیشپردازنده باشد.
عبارت include که نام یک «فایل کتابخانهای» که میان دو علامت <> محصور شده است بعد آن قراردارد.
باید بدانیم که:
هر برنامه فقط باید یک تابع main() داشته باشد و دستورات در زبان سی باید با علامت سمی کالن پایان یابند.
با استفاده از دو علامت اسلش "//" هر متنی که بعد از دو علامت اسلش بیاید تا پایان همان سطر یک توضیح تلقی میشود و هر متنی که با علامت /* شروع شود و با علامت */ پایان یابد یک توضیح تلقی میشود.
عملگر خروجی:
علامت << عملگر خروجی در ++C نام دارد (به آن عملگر درج نیز میگویند).
عملگر خروجی، مقادیر موجود در سمت راستش را به خروجی سمت چپش میفرستد.
دستور cout معمولا به صفحهنمایش اشاره دارد. در نتیجه مقدار روی صفحه نمایش درج میشود.
یک «لیترال» رشتهای از حروف، ارقام یا علایم چاپی است که میان دو علامت نقل قول " " محصور شده باشد.
یک «کاراکتر» یک حرف، رقم یا علامت قابل چاپ است که میان دونشانه ' ' محصور شده باشد. پس 'w' و '!' و '1' هر کدام یک کاراکتر است.
به تفاوت سه موجودیت «عدد» و «کاراکتر» و «لیترال رشتهای» دقت کنید: 6 یک عدد است، '6' یک کاراکتر است و "6" یک لیترال رشتهای است.
متغیرها و نحوه تعریف یک متغیر در زبان ++C:
«متغیر» مکانی در حافظه است که چهار مشخصه دارد: نام، نوع، مقدار، آدرس. وقتی متغیری را تعریف میکنیم، ابتدا با توجه به نوع متغیر، آدرسی از حافظه در نظر گرفته میشود، سپس به آن آدرس یک نام تعلق میگیرد. ( درابتدای گام ما صحبتی از آدرس حافظه نمی کنیم. )
باید بدانید در ++C قبل از این که بتوانیم از متغیری استفاده کنیم، باید آن را اعلان نماییم.
نحوه اعلان یک متغیر:
نام نوع
نوع متغیر:
به کامپایلر اطلاع میدهد که این متغیر چه مقادیری میتواند داشته باشد و چه اعمالی میتوان روی آن انجام داد.
نام متغیر :
اسامی متغیرها با مسما باشد. این نام حداکثر میتواند 31 کاراکتر باشد، نباید با عدد شروع شود، علایم ریاضی نداشته باشد و همچنین «کلمه کلیدی» نیز نباشد. کلمات کلیدی کلماتی هستند که به عنوان دستور در این زبان مورد استفاده قرار می گیرند.
دستور زیر تعریف یک متغیر صحیح را نشان میدهد:
جدول زیرنوع های موجود در زبان ++C را نشان می دهد.
عملگرهای حسابی ساده
نماد در ++ C | نماد ریاضی | کاربرد |
+ | + | جمع |
- | - | تفریق |
* | × | ضرب |
/ | + | تقسیم (صحیح) |
% | mod, ≡ | باقی مانده |
نکته: با استفاده از این عملگرها روی متغیرها، اعداد و عبارات، محتوی خود متغیر تغییری نمی کند. برای ذخیره سازی حاصل عبارت باید از عملگر انتساب (=) استفاده شود.
ابتدا حاصل عبارت سمت راست محاسبه شده و سپس با دستور انتساب در x ریخته می شود.
نکته: (Operator Precedence, Associatively) در عبارت ابتدا عملیات أ— و أ· و باقی مانده و پس از آن + و – انجام می شود. برای عوض کردن این ترتیب باید از پرانتز استفاده شود. (کروشه [ ] قابل استفاده نیست.) در جاهایی که تقدم بین عملگرها وجود ندارد عبارت از چپ به راست ارزیابی می شود.
در بسیاری از موارد بهتر است متغیرها را در همان محلی که اعلان میشوند مقداردهی کنیم. استفاده از متغیرهای مقداردهی نشده ممکن است باعث ایجاد دردسرهایی شود.
دردسر متغیرهای مقداردهی نشده وقتی بزرگتر میشود که سعی کنیم متغیر مقداردهی نشده را در یک محاسبه به کار ببریم. مثلا اگر x را که مقداردهی نشده در عبارت y = x + 5; به کار ببریم، حاصل y غیر قابل پیشبینی خواهد بود. برای اجتناب از چنین مشکلاتی عاقلانه است که متغیرها را همیشه هنگام تعریف، مقداردهی کنیم.
مثال:
در بعضی از برنامهها از متغیری استفاده میکنیم که فقط یک بار لازم است آن را مقداردهی کنیم و سپس مقدار آن متغیر در سراسر برنامه بدون تغییر باقی میماند. مثلا در یک برنامه محاسبات ریاضی، متغیری به نام PI تعریف میکنیم و آن را با 3.14 مقداردهی میکنیم و میخواهیم که مقدار این متغیر در سراسر برنامه ثابت بماند. در چنین حالاتی از «ثابتها» استفاده میکنیم. یک ثابت، یک نوع متغیر است که فقط یک بار مقداردهی میشود و سپس تغییر دادن مقدار آن در ادامه برنامه ممکن نیست.
تعریف ثابتها مانند تعریف متغیرهاست با این تفاوت که کلمه کلیدی const به ابتدای تعریف اضافه میشود.
مثال:
مراحل دریافت و نصب برنامه »
1- فایل نصب برنامه CodeBlocks را از سایت www.ctalk.ir دانلود نمایید.
2- برای این منظور پس از ورود به سایتwww.ctalk.ir نشانگر ماوس را بر روی قسمت ((ویرایشگر)) قرار دهید.
3- بر روی لینکی که دارای عبارت Download Code Blocks می باشد کلیک راست نموده گزینه save target as و یا save link as را انتخاب میکنیم با انتخاب نام فایل و مسیر عمل دانلود شروع میگردد.
4- حال مراحل نصب برنامه را دنبال می کنیم.
مراحل نصب برنامه
1- روی فایل دانلود شده دوبار کلیک نموده مراحل نصب را مطابق تصاویر زیر دنبال کنید.
|
|
|
|
|
|
|
|
مراحل نوشتن یک برنامه نمونه
1- پس از باز شدن برنامه بر روی قسمت Create a new project کلیک نمایید.
2- برای نوشتن برنامه های معمولی (غیر گرافیکی) بر روی قسمت Ctalk Console و برای نوشتن برنامه های گرافیکی بر روی قسمت Ctalk Graphic کلیک نموده دکمه Go را بزنید.
3- در پنجره های ظاهر شده دو بار دکمه Next را بزنید.
4- در پنجره ظاهر شده زیر نامی دلخواه برای پروژه برگزینید. هم چنین مسیر ذخیره سازی فایل پروژه را در صورت نیاز تغییر دهید.
5- در آخرین پنجره دکمه Finish را بزنید.
6- محیط ویرایشگر برنامه CodeBlocks باز می شود. به ترتیب بر روی قسمت Sources و main.cpp دابل کلیک نمایید.
7- متن برنامه مانند یکی از شکل های زیر به طور پیش فرض باز می شود. کافیست برنامه خود را درون آن بنویسید و پس از Save as نمودن فایل پروژه و فایلSource با زدن دکمه F9 برنامه را اجرا نمایید.
آموزش برنامه نویسی گام دوم
موضوع این گام:
اهداف کلی: معرفی انواع متغییرها و نحوۀ بهکارگیری آنها در برنامههای C++
اهداف رفتاری و عمکردی:
انتظار میرود پس از پایان این جلسه بتوانید:
- انواع عددی صحیح در C++ را نام ببرید و متغیرهایی از این نوعها را در برنامهها به کار ببرید.
- انواع عددی ممیز شناور در C++ را نام ببرید و متغیرهایی از این نوعها را در برنامهها به کار ببرید.
- نوع بولین را تعریف کرده و متغیرهایی از این نوع را در برنامهها به کار ببرید.
- نوع شمارشی را شناخته و متغیرهایی از این نوع را در برنامهها به کار ببرید.
- مفاهیم «تبدیل نوع» و «گسترش نوع» را شناخته و انواع مختلف را به یکدیگر تبدیل نمایید.
- علت خطاهای «سرریزی عددی» و «گردکردن» را دانسته و بتوانید محل وقوع آنها را کشف کنید.
- عملگرهای حسابی و افزایشی و کاهشی و مقدارگذاری مرکب را در برنامهها به کار ببرید.
نام منبع یا منابع پیوسته با ذکر صفحه:
Ctalk.ir و firststep.ir
سرفصل های تئوری:
- توضیح دستورات cout, cin
- توضیح: صفحه متنی وگرافیکی
- ادامه بحث متغیرها و عملگرهای حسابی
- انواع داده ی عددی
متغیر عدد صحیح
- محاسبات اعداد صحیح
- عملگرهای افزایشی و کاهشی
- عملگرهای مقدارگذاری مرکب
- انواع ممیز شناور
تعریف متغیر ممیز شناور
- شکل علمی مقادیر ممیز شناور
- نوع بولین bool
- نوع کاراکتری char
- نوع شمارشی enum
- تبدیل نوع، گسترش نوع
سرفصل های عملی:
- نوشتن برنامه چاپ ارقام یک عدد سه رقمی به صورت معکوس
- نوشتن برنامه که دمایی را بر حسب درجة فارنهایت از ورودی بگیرد و آن را به درجه ی سانتی گراد تبدیل کند.
- نوشتن برنامه که مختصات گوشه بالا و چپ پرچم ایران را از کاربر بگیرد و آن را رسم کند. (ابعاد پرچم از پیش تعیین شده است.)
- نوشتن برنامه swap با متغیر کمکی و بدون
- برنامه رسم مثلث و میانه
عملگر ورودی
برای این که بتوانیم هنگام اجرای برنامه مقادیری را وارد کنیم از عملگر ورودی استفاده میکنیم.
; نام متغیر << cin
برنامه ی زیر یک عدد از کاربر گرفته و همان عدد را دوباره در خروجی نمایش میدهد:
عملگر ورودی و عملگر خروجی به شکل جریانی رفتار میکنند. یعنی در عملگر خروجی میتوانیم چند عبارت را با استفاده از چند عملگر << به صورت پشت سر هم چاپ کنیم، در عملگر ورودی نیز میتوانیم با استفاده از چند عملگر >> چند مقدار را به صورت پشت سر هم دریافت کنیم. مثلا با استفاده از دستور:
cin >> x >> y >> z;
سه
مقدار x و y و z به ترتیب از ورودی دریافت میشوند. برای این کار باید بین
هر ورودی یک فضای خالی (space) بگذارید و پس از تایپ کردن همۀ ورودیها،
کلید enter را بفشارید.
توضیح: صفحه متنی (Text) از 25 سطر و 80 ستون
تشکیل شده است که هر حرف یا عدد (کلا کاراکتر) در یک خانه صفحه جای می
گیرد. این 80 ستون از لحاظ منطقی به 10 قسمت 8 ستونی تقسیم شده است که با
چاپ \t دستور cout مکان نما را به ابتدای قسمت بعدی می برد (یا در صورت
لزوم به ابتدای سطر بعد)
در C++ دو نوع اصلی داده وجود دارد: «نوع صحیح» و «نوع ممیز شناور». همۀ انواع دیگر از روی این دو ساخته میشوند (به شکل زیر دقت کنید).
نوع
صحیح برای نگهداری اعداد صحیح (اعداد 0 و 1 و 2 و ...) استفاده میشود.
این اعداد بیشتر برای شمارش به کار میروند و دامنه محدودی دارند.
نوع
ممیز شناور برای نگهداری اعداد اعشاری استفاده میشود. اعداد اعشاری بیشتر
برای اندازهگیری دقیق به کار میروند و دامنۀ بزرگتری دارند. یک عدد
اعشاری مثل 187/352را میتوان به شکل 18/7352×10 یا 102×1/87352 یا
1873/52 ×10-1 یا 18735/2 ×10-2 و یا ... نوشت.
به
این ترتیب با کم و زیاد کردن توان عدد 10 ممیز عدد نیز جابهجا میشود. به
همین دلیل است که به اعداد اعشاری «اعداد ممیز شناور» میگویند.
C++ شش
نوع متغیر عدد صحیح دارد تفاوت این شش نوع مربوط به میزان حافظه ی مورد
استفاده و محدودۀ مقادیری است که هر کدام میتوانند داشته باشند.
آموزش برنامه نویسی گام سوم
موضوع این گام:
اهداف کلی: شناخت انواع دستورالعملهای انتخاب و شیوه بهکارگیری هر یک
اهداف رفتاری و عمکردی:
انتظار میرود پس از پایان این جلسه بتوانید:
- نحوه دستور if..else را شناخته و آن را در برنامهها به کار ببرید.
- از ساختار else..if در تصمیمگیریهای پیچیده استفاده کنید.
- عملگرهای مقایسهای و عملگر عبارت شرطی را در دستورات شرطی به کار ببرید.
- از شرطهای مرکب استفاده کرده و ارزیابی میانبری را شرح دهید.
نام منبع یا منابع پیوسته با ذکر صفحه:
سرفصل های تئوری:
1- دستور if
2- دستور if..else
3- عملگرهای مقایسهای
4- بلوکهای دستورالعمل
5- شرطهای مرکب
6- ارزیابی میانبری
7- توضیح درباره عملگرها
8- شرط های های تو در تو
9- وجود عبارتهای منطقی درگزاره شرط
سرفصل های عملی :
-نوشتن برنامه با ساختار شرط برای رسم خط و دایره در وسط صفحه
- رسم برنامه ای که مختصات سه نقطه را بگیرد و در صورت تشکیل مثلث، آن را رسم کند. در غیر این صورت پیام مناسبی را نمایش دهد.
مواد و تجهیزات لازم برای گام:
در
این جلسه نشان داده میشود چگونه از دستورالعملهای انتخاب جهت
انعطافپذیری بیشتر برنامه استفاده کنیم. دستور if موجب میشود برنامه به
شکل شرطی اجرا شود. نحوه آن به گونه ی زیر است:
Condition
که شرط نامیده میشود یک عبارت صحیح است (عبارتی که با یک مقدار صحیح
برآورد میشود) و statement میتواند هر فرمان قابل اجرا باشد. Statement
وقتی اجرا خواهد شد که condition مقدار غیر صفر داشته باشد. دقت کنید که
شرط باید درون پرانتز قرار داده شود
مثال: یافتن بزرگ ترین عدد از میان سه عدد.
#include <conio.h>
using namespace std;
int main()
{
int a, b, c, max;
cin >> a >> b >> c;
max = a;
if (ma x < b) max = b;
if (max < c) max = c;
cout << max;
return 0;
}
مثال: بررسی قرار داشتن یک عدد در یک بازه
#include <conio.h>
using namespace std;
int main()
{
int a;
cin >> a;
cout << “fail”;
cout << “invalid”;
if (a <= 20)
cout << “pass”;
return 0;
}
در C++ شش عملگر مقایسهای وجود دارد: < و > و => و <= و == و != هر یک از این شش عملگر به شکل زیر به کار میروند:
عدم استفاده از = به جای ==
دقت
کنید که در ++C عملگر جایگزینی با عملگر برابری فرق دارد. عملگر جایگزینی
یک مساوی تکی " = " است ولی عملگر برابری، دو مساوی " = = " است. مثلا
دستور x == 33; مقدار 33 را در x قرار میدهد ولی دستورx == 33; بررسی میکند که آیا مقدار x با 33 برابر است یا خیر. درک این تفاوت اهمیت زیادی دارد.
یک بلوک دستورالعمل زنجیرهای از دستورالعملهاست که درون براکت {} محصور شده، مانند :
int temp=x;
x = y;
y = temp;
}
در برنامههای ++C یک بلوک دستورالعمل مانند یک دستورالعمل تکی است.
مثال:این برنامه دو عدد صحیح را گرفته و به ترتیب بزرگتری، آنها را چاپ میکند:
#include <conio.h>
using namespace std;
int main()
{ int x, y;
cout << "Enter two integers: ";
cin >> x >> y;
if (x > y) { int temp = x;
x = y;
y = temp;
} //swap x and y
cout << x << " <= " << y << endl;
شرط مرکب:
شرط
هایی مانند n%d و x>=y میتوانند به صورت یک شرط مرکب با هم ترکیب
شوند. این کار با استفاده ازعملگرهای منطقی && (and) و || (or) و !
(not) صورت میپذیرد. این عملگرها به شکل زیر تعریف میشوند:
سه عملگر منطقی && (and) و || (or) و ! (not) معمولا با استفاده از جداول درستی به گونه ی زیر بیان میشوند.
چون همۀ مقادیر صحیح ناصفر به معنای درست تفسیر میشوند، عبارات منطقی اغلب تغییر قیافه میدهند. برای مثال دستور
if (n) cout << "n is not zero";
وقتی n غیر صفر است عبارت n is not zero را چاپ میکند زیرا عبارت منطقی (n) وقتی مقدار n غیر صفر است به عنوان درست تفسیر میگردد.
استفاده از پرانتزها به دور هر شرط برای پرهیز از اشتباه در اولویت عملگرها کار خوبی است هرچند ضروری نیست.
عدم استفاده از دو عملگر مقایسه ای در یک شرط نتیجه اشتباهی می دهد: مثلا 5<=x<=10 یک عبارت همیشه درست است در حالی که (5<=x && x<=10) بسته به مقادیر مختلف x نتایج متفاوتی دارد.
مثال: بررسی قرار داشتن یک عدد در یک بازه
#include <conio.h>
using namespace std;
int main()
{ int a;
cin >> a;
if (a < 10)
cout << “fail”;
if (a > 20)
cout << “invalid”;
if (a >= 10)
if (a <= 20)
cout << “pass”;
return 0;
}
مثال: بررسی قرار داشتن یک عدد در چند بازه
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{ int a;
cin >> a;
if (((10<=a)&&(20>=a))||(100 < a))
cout << “accepted”;
return 0;
}
if..elseدستور
دستور
if..else تودرتو، اغلب برای بررسی مجموعهای از حالتهای متناوب یا موازی
به کار میرود. در این حالات فقط عبارت else شامل دستور if بعدی خواهد بود.
این قبیل کدها را معمولا با ساختار else if میسازند.
وقتی دستور if..else به شکل تو در تو به کار میرود، کامپایلر از قانون زیر جهت تجزیه این دستورالعمل مرکب استفاده میکند:
« هر else با آخرین if تنها جفت میشود.
مثال: برنامه ای که دو عدد را بگیرد و بسته به خواسته کاربر، جمع یا تفریق آن ها را چاپ کند.
هدف: تمرین if و else
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char ch; // amal
int a, b, c; // adaad va hasel
cin >> a >> ch >> b;
if (ch == ‘+’) // jam’
c = a+b;
else
if (ch == ‘-’)
c = a-b;
cout << “= “ << c << endl;
return 0;
}
تذکر: گذاشتن سمیکالن (;) قبل از else درست نیست
برنامه
ای برای رسم یک دایره و یک خط افقی در وسط صفحه، بنویسید. کاربر در ابتدا
مشخص می کند که قرار است دایره رسم شود یا خط. در صورت نیاز به رسم دایره،
شعاع آن و در صورت نیاز به رسم خط، طول آن پرسیده شود.
#include <conio.h>
using namespace std;
int main()
{
int gd, gm = DETECT;
int radius; // shoa-ye dayere
int d; // tool-e khat
char ch; // voroodi
initwindow(800,600);
// gereftan-e voroodi
cout << “Press ‘c’ to draw a Circle\nPress ‘l’ to draw a
cin >> ch;
// rasm
if ( ch == ‘c’ )
{
cout << “Radius? “;
cin >> radius;
x = getmaxx() / 2;
y = getmaxy() / 2;
circle(x, y, radius);
}
else
{
cout << “Length? “;
cin >> d;
x = ( getmaxx() – d ) / 2;
y = getmaxy() / 2;
line(x, y, x+d, y);
}
getch();
closegraph();
return 0;
}
برنامه ای بنویسید که یک عدد از کاربر بگیرد و در صورتی که این عدد از اعداد دو رقمی بود، پیام خاصی را روی صفحه چاپ کند.
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{ int a;
cin >> a;
if ( a >= 10 && a <= 99 )
cout << “accepted” << endl;
else
cout << “rejected” << endl;
return 0;
}
// mohasebe-ye markaz
cx = getmaxx() / 2;
cy = getmaxy() / 2;
// rasme dayere
circle(cx, cy, radius);
// yaftan-e noghteye tasadofi
cout << “Enter x y: “;
cin >> x << y;
putpixel(x,y,WHITE);
// yaftan-e fasele az markaz
d = (x–cx)*(x-cx) + (y-cy)*(y-cy);
// ta’yeen-e vaziat
if ( d < radius*radius )
cout << “Daroon-e dayere.”;
if ( d == radius*radius )
cout << “Roo-e dayere.”;
if ( d > radius )
cout << “Biroon-e dayere.”;
cout << endl;
getch();
closegraph();
return 0;
}
تمرین آموزش گام سوم در برنامه نویسی ++C
شناخت انواع دستورالعملهای انتخاب و شیوۀ بهکارگیری هر یک را آموختیم در ادامه به ارایه ی چند تمرین در این زمینه می پردازیم...
تمرین 1: مثال کتاب1 (صفحه 36)
برنامه ای بنویسید که یک عدد سه رقمی از ورودی دریافت کند و مشخص کند که آن عدد ده تاب است یا خیر؟
#include <iostream>
#include <conio.h>
using namespace std;
main()
{
int a,b,c,s=0;
cout << "Enter a number (3 digits):" << endl;
cin>>a;
c=a%10;
a=a/10;
b=a%10;
a=a/10;
s=a+b+c;
if(s==10)
{
cout<<"Dahtab!";
}
else
{
cout<<"Dahtab nist!";
}
getch();
}
تمرین 2: [مثال کتاب2 (صفحه 46)]
مثال کتاب2 (صفحه 46)برنامه ای بنویسید که 3 عدد از ورودی دریافت کند و مشخص کند که آیا این سه عدد تشکیل یک مثلث را می دهد یا خیر؟
#include <iostream>
#include <conio.h>
using namespace std;
main()
{
int a,b,c;
cout << "Enter lenght of side 1:" ;
cin>>a;
cout << "Enter lenght of side 2:" ;
cin>>b;
cout << "Enter lenght of side 3:" ;
cin>>c;
if(a<b+c && b<a+c && c<a+b)
{
cout<<"Yes!";
}
else
{
cout<<"No!";
}
getch();
}
تمرین 3:[ چالش 1]
توضیح سوال
حتما
همه شما خاطره کلاس اول ابتدایی، معلم این کلاس و چیزهایی که یاد گرفتید
را هنوز هم در یاد دارید. مثل مثال های مختلفی که معلم تان برای یادگیری
چهارعمل اصلی می زد تا شما درک بهتری از جمع و ضرب و تفریق و تقسیم داشته
باشید. در این کلاس درس هم معلم کلاس دست به یک ابتکارجالبی زده و برای
یادگیری بهتر سعی کرده دانش آموزان را به گروه های چهارنفره تقسیم کند. به
دانش آموز نفراول ودوم هر گروه گفته شده که یک عدد صحیح دلخواه انتخاب کند،
سپس دانش آموزسوم باید یک عدد ازحاصل محاسبه این دو عدد بگوید و دانش
آموزچهارم باید فورا با اعلام کاراکترa,b,c,d عادل (+،- ،*،/) بگوید. (به
ترتیب a معادل جمع و ...) چه عملیاتی بر روی این دوعدد صورت گرفته است.
ورودی
اگر نفر اول عدد 60 را وارد کرد و دانش آموز دوم عدد 25 را وارد کرد و دانش آموزی سوم عدد 35 را وارد کرد.
خروجی
برنامه جواب را برای دانش آموز چهارم که کاراکتر b است، اعلام کند.
ورودی و خروجی های نمونه
ورودی نمونه 1 ورودی نمونه 2
19 3 57 45 5 9
خروجی نمونه 1 خروجی نمونه 2
C d
#include <iostream>
#include <conio.h>
using namespace std;
main()
{
int s1,s2,s3,d;
cout << "Enter number student1:" ;
cin>>s1;
cout << "Enter number student2:" ;
cin>>s2;
cout << "Enter number student3:" ;
cin>>s3;
if(s3=s1+s2)
{
cout<<"student4: a";
}
if(s3==s1-s2 || s3==s2-s1)
{
cout<<"student4: b";
}
if(s3==s1*s2)
{
cout<<"student4: c";
}
if(s3==s1/s2 || s3==s2/s1)
{
cout<<"student4: d";
}
getch();
}
تمرین 4: [چالش 2 ]
توضیح سوال
شرکت
"جدول گستر" قراردادی با شهرداری بسته تا جدول های شهر را رنگ آمیزی کند.
شهرداری در قرارداد بسته شده ذکرکرده است که پس از کنترل ترتیب رنگ آمیزی
مبلغ توافق شده را پرداخت کند. شرکت جدول گستر تصمیم گرفت برای جلب رضایت
شهرداری و در راستای شاد کردن فضای شهر، هم از رنگ های متنوع استفاده کند و
هم از قانون شهرداری تبعیت کند. (قانون می گوید که از هر دو جدولِ کنارِ
هم، باید یکی به رنگِ روشن باشد و یکی به رنگِ تیره). مامور شهرداری برای
کنترل رنگ آمیزی، به صورتِ تصادفی چهار رنگِ کنارِ هم را یادداشت می کند.
به این ترتیب که به هر رنگ ِ روشن یک عددِ فرد و به هر رنگِ تیره یک عدد
زوج نسبت می دهد (کد هر رنگ بین 1 تا 1000 می باشد). شهرداری از ما می
خواهد که برنامه ای برای کنترل این رنگ ها بنویسیم.
ورودی
یک خط که در آن چهار عدد به عنوان کد رنگ های چهار جدول کنار هم داده می شود.
خروجی
اگر
رنگ آمیزیِ این چهار جدول طبق قانون بود برنامه خروجی ok را چاپ کند و اگر
غیر قانونی بود deny را چاپ کند. (خروجی باید با حروف کوچک باشد)
ورودی و خروجی های نمونه
ورودی نمونه 1 ورودی نمونه 2
22 42 31 45 31 66 83 2
خروجی نمونه 1 خروجی نمونه 2
deny
ok
#include <iostream>
#include <conio.h>
using namespace std;
main()
{
int a,b,c,d;
cout << "Enter number a:" ;
cin>>a;
cout << "Enter number b:" ;
cin>>b;
cout << "Enter number c:" ;
cin>>c;
cout << "Enter number d:" ;
cin>>d;
if(a%2==0 && b%2!=0 && c%2==0 && d%2!=0)
{
cout<<"Yes!";
}
else if(a%2!=0 && b%2==0 && c%2!=0 && d%2==0)
{
cout<<"Yes!";
}
else
{
cout<<"No!";
}
getch();
}
تمرین 5: [تمرین کتاب1]
برنامه ای بنویسید که یک عدد سه رقمی بگیرد و مشخص کند آن عدد آرمسترانگ می باشد یا خیر؟
#include<conio.h>
using namespace std;
main ()
{
int a,b,c,d,A;
cin>>a;
A=a;
b=A%10;
a=A/10;
c=A%10;
A=A/10;
d=(A*A*A)+(b*b*b)+(c*c*c);
if(d==a)
{
cout<<"armestrang ast.";
}
else
{
cout<<"armestran nist.";
}
getch ();
}
تمرین 6: [ تمرین کتاب2]
برنامه ای بنویسید که دو عدد چهار رقمی دریافت کند و سپس برای هر عملگر جمع، تفریق، ضرب و تقسیم به ترتیب اعداد 1 تا 4 را دریافت کند و حاصل را محاسبه و نمایش دهد:
#include <iostream>
using namespace std;
int main()
{
int n1,n2,a=0;
cout<<"Enter number1: ";
cin>>n1;
cout<<"Enter number2: ";
cin>>n2;
cin>>a;
if(a==1)
cout<<n1+n2;
if(a==2)
cout<<n1-n2;
if(a==3)
cout<<n1*n2;
if(a==4)
cout<<n1/n2;
}
گام چهارم در برنامه نویسی ++C
موضوع این گام:
اهداف کلی: شناخت ساختار تکرار for و نحوه نوشتن آن در برنامه نویسی و تشخیص نوشتن برنامه با while یا for باید بنویسد.
اهداف رفتاری و عمکردی:
- نحوه دستور for را شناخته و از آن برای ایجاد حلقه استفاده کنید.
نام منبع یا منابع پیوسته با ذکر صفحه:
Ctalk. ir و firststep. ir
سرفصل های تئوری:
- توضیح حلقه for
- تفاوت و شباهت های حلقه while و for
- نکات حلقه for و علت نیاز به این حلقه تکرار
- شرح سری و چند جمله ای ها
- شرح جدول تعقیب
سرفصل های عملی:
- نوشتن برنامه محاسبه سری تا جمله ی معین
- نوشتن مثلث سرپینسکی
مواد و تجهیزات لازم برای گام:
{
دستورات ;
}
سه قسمت داخل پرانتز، حلقه را کنترل می کنند.
عبارت مقدار اولیه
برای اعلان یا مقداردهی اولیه به متغیر کنترل حلقه استفاده می شود. این
عبارت اولین عبارتی است که ارزیابی می شود پیش از این که نوبت به تکرارها
برسد.
عبارت شرط ادامه حلقه برای تعیین این که آیا
حلقه باید تکرار شود یا خیر به کار می رود. یعنی این عبارت، شرط کنترل حلقه
است. اگر این شرط درست باشد دستور اجرا می شود.
عبارت افزایش برای پیش بردن متغیر کنترل حلقه به کار می رود. این عبارت پس از اجرای شرط ادامه حلقه ارزیابی می گردد.
مثال: استفاده از حلقه ی for برای محاسبه ی مجموع اعداد صحیح متوالی
#include <conio.h>
#include <iostream>
int main()
{ int n;
cout << "Enter a positive integer: ";
cin >> n;
long sum=0;
for (int i=1; i <= n; i++)
sum += I;
cout << "The sum of the first " << n << " integers is "
<< sum;
}
می توان یک یا چند قسمت از "افزایش، شرط ادامه حلقه مقدار دهی اولیه" حلقه را خالی گذاشت.
بخش
افزایشی می تواند کارکردهای دیگری به جز افزایش نیز داشته باشد. در حقیقت
وظیفه این قسمت، مقدار دهی مجدد (Reinitialization) است.
می توان دو یا چند متغیر کنترل کننده حلقه وجود داشته باشد. (ترکیبی از یک شرط و شمارش) به " ; "ها توجه شود.
به جایگاه هر قسمت در for توجه شود.
شمارنده حلقه لزوما عدد صحیح نیست.
در C++
استاندارد وقتی یک متغیر کنترل درون یک حلقه ی for اعلان می شود (مانند i
در مثال بالا) حوزه ی آن متغیر به همان حلقه ی for محدود می گردد. یعنی آن
متغیر نمی تواند بیرون از آن حلقه استفاده شود.
نتیجه ی دیگر این است که می توان از نام مشابهی در خارج از حلقه ی for برای یک متغیر دیگر استفاده نمود.
مثال: یک حلقه ی for نزولی برنامه ی زیر ده عدد صحیح مثبت را به ترتیب نزولی چاپ می کند:
#include <conio. h>
#include <iostream>
int main()
{ for (int i=10; i > 0; i--)
cout << " " << i;
}
بیشتر از یک متغیر کنترل در حلقه ی for
مثال: حلقه ی for در برنامه ی زیر دو متغیر کنترل دارد:
#include <conio. h>
#include <iostream>
int main( )
{ for (int m=95, n=11, m%n > 0; m -= 3, n++)
cout << m << "%" << n << " = " << m%n << endl;
}
جدول تعقیب
در
بسیاری موارد و برای تجزیه و تحلیل عملکرد یک برنامه، نیاز داریم که
مقادیر متغیرها و شمارنده حلقه ها را زیر نظر بگیریم. برای این کار از جدول
تعقیب یا جدول trace
استفاده می کنیم. در این جدول به ازای هر متغیر یک ستون در نظر گرفته شده
است و با اجرای سطر بعدی( یا اجرای یک دور حلقه)، مقادیر جدید متغیرها در
یک سطر جدید نوشته می شوند. می توان ستون های دیگری نیز برای یادداشت شماره
سطر و. . . در نظر گرفت.
- برنامه زیر چه کاری انجام می دهد؟
int main()
{
long i, j = 0;
cin>>i;
for(j = 0; i > 0; i /= 10)
j = j*10+i%10;
cout<<j;
}
جواب: چاپ کردن معکوس یک عدد.
دستور break بقیه ی دستورهای درون بلوک حلقه را نادیده گرفته و به اولین دستور بیرون حلقه پرش می کند. دستور continue نیز شبیه همین است اما به جای این که حلقه را خاتمه دهد، اجرا را به تکرار بعدی حلقه منتقل می کند.
مثال: با استفاده از دستورهای break و continue دراین برنامه سعی کنید بفهمید که برنامه زیرچه کاری انجام می دهد.
#include <conio. h>
#include <iostream>
int main()
{ int n = 1;
char c;
for( ; ;n++ )
{ cout << "\nLoop no: " << n << endl;
cout << "Continue? <y|n> ";
cin >> c;
if (c = = 'y') continue;
break;
}
cout << "\nTotal of loops: " << n;
}
تمرین:
سعی کنید با استفاده ازبرنامه نویسی، شکل زیررا رسم نمایید.
یکی از کاربردهای بسیار مهم رایانهها، «شبیهسازی»
سیستمهای دنیای واقعی است. تحقیقات و توسعههای بسیار پیشرفته به این
راهکار خیلی وابسته است. به وسیله ی شبیهسازی میتوانیم رفتار سیستمهای
مختلف را مطالعه کنیم بدون این که لازم باشد واقعا آنها را پیادهسازی
نماییم. در شبیهسازی نیاز است «اعداد تصادفی» توسط رایانهها تولید شود تا نادانستههای دنیای واقعی مدلسازی شود.
رایانهها
«ثابتکار» هستند یعنی با دادن دادههای مشابه به رایانههای مشابه، همیشه
خروجی یکسان تولید میشود. با وجود این میتوان اعدادی تولید کرد که به
ظاهر تصادفی هستند؛ اعدادی که به طور یکنواخت در یک محدوده ی خاص
گستردهاند و برای هیچکدام الگوی مشخصی وجود ندارد. چنین اعدادی را «اعداد شبهتصادفی» مینامیم.
مثال: تولید اعداد شبه تصادفی
این برنامه از تابعrand() برای تولید اعداد شبه تصادفی استفاده می کند:
#include<cstdlib>//defines the rand() and RAND_MAX
#include <iostream>
int main()
{ // prints pseudo-random numbers:
for (int i = 0; i < 8; i++)
cout << rand() << endl;
cout << "RAND_MAX = " << RAND_MAX << endl;
}
هر بار که برنامه ی بالا اجرا شود، رایانه هشت عدد صحیح unsigned تولید می کند که به طور یکنواخت در فاصله ی 0 تا
RAND_MAX گسترده شده اند. .است 2,147,483,647 در این رایانه برابر با RAND_MAX
تمرین آموزش گام چهارم در برنامه نویسی ++C
در جلسه گذشته مطالی در رابطه با شناخت ساختار تکرار و نحوه نوشتن آن در برنامه نویسی و ... آشنا شدیم. در این جلسه به تمرین در این زمینه می پردازیم.
تمرین 1: [مثال کتاب 1 (صفحه 84)]
برنامه ای بنویسید که عددی از ورودی دریافت کند و مشخص کند که آیا آن عدد اول است یا خیر؟
#include <iostream>
#include <conio.h>
using namespace std;
main( )
{
int a,j=0;
cout << "Enter a number to check prime:"<<endl ;
cin>>a;
for(int i=1;i<=a;i++)
j++;
if(j==2)
cout<<"prime";
else
cout<<"Not prime";
getch();
}
تمرین 2: [ مثال کتاب 2 (صفحه 48)]
برنامه ای بنویسید که 60 عدد از ورودی بگیرد و بزرگ ترین عدد را مشخص کند.
#include <iostream>
#include <conio.h>
using namespace std;
main( )
{
int a=0;max1=0;
cout << "Enter number "<<"1"<<":";
cin>>max1;
for(int i=2;i<=10;i++)
{
cout << "Enter number "<<i<<":";
cin>>a;
if(max1<a)
max1=a;
}
cout<<"Max: "<<max1;
getch( );
}
تمرین 3 :[ چالش 1]
توضیح سوال
علیرضا می خواهد با N بازی کند. بازی هپ به این صورت است که همه ی بازیکنان دور یک دایره » هُپ « نفر از دوستانش می نشینند و یک نفر بازی را با گفتن عدد یک شروع می کند. از این پس در هر مرحله، هر کس نفر سمت چپی اش در مرحله قبل عدد t را گفته باشد، او در این مرحله عدد t+1 را می گوید. و هر کس که در نوبتش باید عددی را می گفت که بر 5 اولین عدد را همیشه علیرضا می گوید و بازی .» هُپ « بخش پذیر بود، باید به جای آن بگوید k مرحله ادامه پیدا می کند. شما مثلاً بازی علیرضا، جواد و مهرداد در 66 مرحله ی اول به این صورت است: .» هُپ « باید بگویید علیرضا کلا چند بار گفته است.
مهرداد: 9 | جواد: هپ | علیرضا: 1 |
علیرضا: هپ | مهرداد: 6 | جواد: 2 |
جواد: 11 | علیرضا: 7 | مهرداد: 3 |
جواد: 8 | علیرضا: 4 |
ورودی
در ورودی به ترتیب عدد N (تعداد دوستان علیرضا) و عدد K (تعداد مراحل انجام بازی) با فاصله آمده اند. N و K هر دو عدد طبیعی و کمتر از 1000 هستند.
خروجی
در یک خط تعداد بارهایی که علیرضا هپ می گوید را چاپ کنید.
ورودی و خروجی های نمونه
ورودی نمونه 1
92 0
خروجی نمونه 1 ورودی نمونه 2
53 1
خروجی نمونه 2
#include <iostream>
using namespace std;
main()
{
int ans=0;
int nafar=0;
int n;cin>>n;//doostan
n++;
int k;cin>>k;//marahel
for(int i=1;i<=k;i++)
{
nafar++;
if(nafar>n)
nafar=1;
if(i%5==0&&nafar==1)
ans++;
}
cout<<ans;
return 0;
}
تمرین 4: [چالش 2]
توضیح سوال
پادشاهی لاینیار دقیقا 6 خط برای متروها دارد. n ایستگاه وجود دارد که به ترتیب حرکت مترو از 6 تا n نام گذاری شده اند.
در ایستگاه i ام ai نفر از مترو خارج می شوند و bi نفر وارد آن می گردند. مترو قبل از رسیدن به ایستگاه اول کاملا خالی است و در ایستگاه آخر هم تمامی مسافران موجود در مترو پیاده می شوند.
کار شما این است که کمترین مقدار ظرفیت مترو را به طوری که افراد داخل مترو هیچگاه از این تعداد بیش تر نشوند محاسبه
کنید. توجه کنید که در هر ایستگاه ابتدا کسانی که می خواهند پیاده شوند پیاده می شوند سپس افراد دیگر سوار می شوند.
ورودی
خط اول ورودی شامل عدد (n (2 ≤ n ≤ 1000 – تعداد ایستگاه های مترو می باشد.
سپس n خط دیگر به عنوان ورودی داده می شود که هر کدام از دو عدد صحیح ai و bi (0 ≤ ai, bi ≤ 1000) - افرادی که در ایستگاه i ام از مترو خارج می شوند و افرادی که به آن وارد می شوند تشکیل شده است. ایستگاه ها به ترتیبی که مترو از آن ها عبور می کند، داده می شوند.
خروجی
یک عدد چاپ کنید – تعداد حداکثر دومینوهایی که می توانند در صفحه با شرایط فوق قرار بگیرند.
• در ایستگاه آخر همه ی مسافران پیاده می شوند و مترو خالی می گردد؛
• هیچ مسافری در ایستگاه آخر وارد مترو نمی شود؛
در مثال زده شده، ظرفیت بهینه ی مترو 6 است:
• در ایستگاه دوم، 2 نفر از قطار خارج می شوند ( 1نفر می ماند). سپس 5 نفر وارد قطار می شوند؛ در نتیجه 6نفر در
قطار حاضر هستند.
• در ایستگاه سوم، , 4 نفر از قطار خارج می شوند ( 2نفر باقی می مانند). سپس 2 نفر وارد مترو می شوند؛ در نتیجه , 4 نفر در قطار حاضر هستند.
• در ایستگاه آخر، همه ی مسافرین از مترو خارج می شوند.
با توجه به این که تعداد مسافرین موجود در مترو هیچگاه از 6 بیشتر نمی شود، ظرفیت بهینه برابر 6 است.
ورودی و خروجی های نمونه
ورودی نمونه
4
30
5 2
2 4
04
خروجی نمونه
6
#include <iostream>
using namespace std;
int main( )
{
int n;
cin>>n;int ans = 0;int m = 0;
for(int i = 0;i<n;i++)
{
int a,b;
cin>>a>>b;
m-=a;
m+=b;
ans = max(ans,m);
}
cout<<ans;
}
تمرین 5: [تمرین کتاب 1 ]
برنامه ای بنویسید که دو عدد بگیرد و اعداد زوج مابین این دو عدد را چاپ کند.
#include <iostream>
using namespace std;
int main()
{
int n1,n2,t=0;
cout<<"Enter number1: ";
cin>>n1;
cout<<"Enter number2: ";
cin>>n2;
if(n1>n2)
{
t=n1;
n1=n2;
n2=t;
}
for(int i=n1;i<n2;i++)
{
if(i%2==0)
cout<<i<<endl;
}
}
تمرین 6: [تمرین کتاب 2 ]
برنامه ای بنویسید که تمام اعداد دو رقمی که بر مجموع ارقامشان بخش پزیر است را چاپ کند.
#include <iostream>
using namespace std;
int main( )
{
int a,b,t=0;
for(int i=10;i<100;i++)
{
a=i%10;
b=i/10;
if(i%(a+b)==0)
cout<<i<<endl;
}
}
آموزش برنامه نویسی گام پنجم
موضوع این گام:
اهداف کلی: شناخت ساختار تکرارwhile و نحو نوشتن آن دربرنامه نویسی
اهداف رفتاری و عمکردی:
انتظار میرود پس از مطالعه این جلسه بتوانید:
- نحو دستورwhile را شناخته و از آن برای ایجاد حلقه استفاده کنید.
- نحو دستور do..while را شناخته و تفاوت آن با دستور while را بیان کنید
نام منبع یا منابع پیوسته با ذکر صفحه:
Ctalk.ir و firststep.ir
سرفصل های تئوری:
- کاربرد while توضیح و عملکرد آن با فلوچارت
- روش کنترول حلقه while دربرنامه ها و خاتمه دادن به یک حلقه
- الگوریتم تجزیه عدد
- توضیح متغیربانک
- توضیح حرکت شکل وروش نمایش دادن آن
- دستور do..while
سرفصل های عملی:
- نوشتن برنامه ساده با استفاده از دستورحلقه while
- نوشتن برنامه ب.م.م و ک.م.م با الگوریتم نردبانی
- برنامه های گرافیکی حرکت اشکال دوبعدی با حلقه تکرار
مواد و تجهیزات لازم برای گام:
نحو دستور while
while (شرط اجرای حلقه)
{
دستورات;
}
به جای شرط اجرای حلقه، یک شرط قرار میگیرد و به جای دستورات، دستوری که باید تکرار شود قرار میگیرد. اگر مقدار شرط، صفر(یعنی نادرست) باشد، statement نادیده گرفته میشود و برنامه به اولین دستور بعد از while پرش میکند.
اگر مقدار شرط ناصفر(یعنی درست) باشد، statement اجرا شده و دوباره مقدار شرط بررسی میشود. این تکرار آن قدر ادامه مییابد تا این که مقدار شرط صفر شود.
مثال: برنامهای بنویسید که یک دایره رنگی کوچک را در وسط صفحه ترسیم کند و به مرور زمان دایره شروع به بزرگ شدن کند. بزرگ شدن تا موقعی که کاربر کلیدی را فشار نداده است ادامه پیدا می کند.
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
int main()
{
int errorcode;
int k,midx,midy;
initwindow(800,600);
midx=getmaxx( )/2;
midy=getmaxy( )/2;
k=1;
setcolor(2);
circle(midx,midy,k);
while ( !kbhit( ) )
k++;
circle(midx,midy,k);
delay(100);
}
closegraph();
return 0;
}
مثال: محاسبه حاصل جمع اعداد صحیح متوالی با حلقه while این برنامه مقدار1 + 2 + 3 + … + n را برای عدد ورودی n محاسبه میکند:
#include <conio.h>
#include <graphics.h>
int main( )
{ int n, i=1;
cout << "Enter a positive integer: ";
cin >> n;
long sum=0;
while (i <= n)
sum += i++;
cout << "The sum of the first " << n << " integers is "
<< sum;
}
مثال:
توپ متحرک: در این برنامه یک توپ از وسط صفحه شروع به حرکت می کند و در هر مرحله، مختصات آن مقداری تغییر می کند. توپ وقتی به حاشیه های صفحه می رسد، جهت خود را عوض می کند. حرکت توپ تا موقعی که کاربر کلیدی را نزده است ادامه می یابد.
.
#include <graphics.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
int main ()
{
initwindow(800,600);
int maxx,maxy;
int radius = 15;
int length = 50;
char ch;
maxx=getmaxx( );
maxy=getmaxy( );
int i=radius;
int j=radius;
int x, Tx=0;
x=(maxx-length)/2;
int dx=1,dy=1;
setfillstyle(1,BLACK);
setcolor(WHITE);
while (!kbhit())
{
bar(i-radius,j-radius,i+radius,j+radius);
i+=dx;
j+=dy;
circle(i,j,radius);
delay(3);
if ((i>=maxx-radius)||(i<=radius)) dx=-dx;
if ((j<=radius) || (j>= maxy - radius)) dy=-dy;
}
getch ();
closegraph ();
return 0;
}
دستور do..while
ساختار do..while روش دیگری برای ساختن حلقه است. نحو آن به صورت زیر است:
به جای condition یک شرط قرار میگیرد و به جای statement دستور یا بلوکی قرار میگیرد که قرار است تکرار شود.
این دستور ابتدا statement را اجرا میکند و سپس شرط condition را بررسی میکند. اگر شرط درست بود حلقه دوباره تکرار میشود وگرنه حلقه پایان مییابد.
مثال: محاسبه حاصل جمع اعداد صحیح متوالی با حلقه do..while
این برنامه همان تأثیر مثال 1-5 را دارد:
#include <iostream>
#include <conio.h>
int main()
{ int n, i=0;
cout << "Enter a positive integer: ";
cin >> n;
long sum=0;
do
sum += i++;
while (i <= n);
cout << "The sum of the first " << n << " integers is " << sum;
getch();
}
تمرین آموزش برنامه نویسی گام پنجم
در جلسه گذشته گام پنجم برنامه نویسی را آموختیم. در این جلسه به چند تمرین می پردازیم.
تمرین ١: [مثال کتاب1 (صفحه 88) ]
برنامه ای بنویسید که یک عدد را از ورودی بگیرد و مجموع ارقام آن عدد را چاپ کند.
#include <iostream>
#include <conio.h>
using namespace std;
main()
{
int n,c,s=0;
cout << “Enter number: “<<endl;
cin>>n;
while(n>0)
{
c=n%10;
n=n/10;
s=s+c;
}
cout<<”sum digit à”<<s;
getch();
}
تمرین 2: [مثال کتاب1 (صفحه 99) ]
برنامه ای بنویسید که کاربر جمله ای را وارد کند و در خروجی تعداد کلمه ها را چاپ کند.
#include <iostream>
#include <conio.h>
using namespace std;
main( )
{
char ch=0;
int i=1;
while(ch!=’.’)
{
ch=getch();
cout<<ch;
if(ch==’ ‘)
i++;
}
cout<<endl<<i<<” words “;
getch();
}
توضیح سوال
سیمون و آنتیسیمون در حال بازی کردن هستند. اول هر بازیکن یک عدد صحیح مثبت تعیین شده دریافت می کند که در طول بازی تغییر نمی کند. به سیمون عدد a و به آنتیسیمون عدد b می رسد. به آن ها توده ای شامل n سنگ نیز داده داده می شود. سیمون بازی را شروع می کند و هر بازیکن به نوبت بازی می کنند. در هر حرکت، بازیکن باید به تعداد بزرگ ترین مقسوم علیه مشترک عدد خود و تعداد سنگ های باقی مانده، سنگ بردارد. یک بازیکن در صورتی که نتواند تعداد سنگ هایی که باید را بردارد می بازد.
مشخص کنید با a و b و n داده شده، چه کسی برنده می شود.
ورودی ورودی شامل اعداد صحیح a, b, n (1 ≤ a, b, n ≤ 100) به ترتیب است.
خروجی اگر سیمون برنده می شود، 0 و درغیر این صورت 1 چاپ کنید.
ورودی و خروجی های نمونه
ورودی نمونه 1
953
خروجی نمونه 1
0
ورودی نمونه 2
10011
خروجی نمونه 2
1
تمرین3 : [تمرین کتاب1]
می دانیم که عملیات تقسیم را می توان با کم کردن پی در پی دو عدد از هم ایجاد کرد. برنامه ای بنویسید که دو عدد از کاربر گرفته و عملیات تقسیم آن دو را به کمک تفاضل های متوالی انجام داده و خارج قسمت و باقیمانده را اعلام کند.
#include <iostream>
#include <conio.h>
using namespace std;
main( )
{
int a,b,c=0;
cout<<"do adad vared konid"<<"\n";
cin>>a>>b;
while(a>0)
{
a=a-b;
c=c+1;
}
cout<<"kharej ghesmat ="<<c;
cout<<"baghimande ="<<a;
getch();
}
تمرین4: [تمرین کتاب1]
برنامه ای بنویسید که یک عدد صحیح با تعداد ارقام نامعلوم از کاربر دریافت کند و آن را برعکس کرده و به صورت یک عدد چاپ نماید.
#include <iostream>
#include <graphics.h>
using namespace std;
main( )
{
int a,b;
cout<<"yek adad vared konid"<<"\n";
cin>>a;
while(a>0)
{
b=a%10;
a=a/10;
cout<<b;
}
getch();
}
گام ششم آموزش برنامه نویسیC++
اهداف کلی:
تمایزحلقه های تودرتو از چندین حلقه درمسئله
اهداف رفتاری و عمکردی:
در این جلسه پس ازنوشتن برنامه هایی با حلقه های تودرتو با ساختارالگوریتمی این برنامه ها آشنا می شوید و می توانید درحل مسئله های موجود ساختارحلقه تودرتو را درک نمایید و هم چنین با یادگیری مختصات قطبی برنامه هایی کاربردی قشنگ تری را بنویسید.
نام منبع یا منابع پیوسته با ذکر صفحه (در صورت وجود):
Ctalk.ir و firststep.ir
سرفصل های تئوری:
- توضیح حلقه تکرار تو در تو
-توضیح درمورد مختصات قطبی
- درک نحوه تغییر شمارنده های حلقه های تو در تو
- نوع شمارشی enum
- تبدیل نوع، گسترش نوع
سرفصل های عملی :
- محاسبة ریشه های یک چند جمله ای از درجة 3
- جدول ضرب 10*10
- حرکت ماه به دور زمین به دور خورشید
- مساحت اشغال شده توسط یک عبارت
مواد و تجهیزات لازم برای گام:
حلقه های تودرتو
اگردرحلقه تکراری یکی ازدستورات ما خود نیزیک حلقه تکرارباشد به آن حلقه تکرار یک حلقه تکرار تودرتو می گویند به مثال توجه کنید:
برنامه زیر یک جدول ضرب چاپ میکند:
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
int main()
{ for (int x=1; x <= 10; x++)
{ for (int y=1; y <= 10; y++)
cout << setw(4) << x*y;
cout << endl;
}
getch();
Return 0;
}
حال برای فهم بیشترمفهوم آرایه دوبعدی مثال زیر را نوشته وسپس آن را کامپایل نمایید و به حرکت دایره های آن دقت کنید این مثال شاید به فهم شما در مسایلی که با آرایه دوبعدی سرکاردارید کمک می کند
-مربع ها و دایره هایی که به دور آنها می چرخند:
#include <iostream>
#include <iomanip>
#include <graphics.h>
#include <math.h>
using namespace std;
int main()
{
int i, j;
int x, y, x1, y1, c;
c = 5;
initwindow(800,600);
setfillstyle(1, 12);
for(i = 4; i >= 0; i--)
{
x1 = 320;
y1 = i*90+60;
bar(x1-15 , y1-15, x1+15, y1+15);
}
delay(1500);
for(i = 4; i >= 0; i--)
{
x1 = 320;
y1 = i*90+60;
for(j = 0; j < c; j++)
{
x = x1+35*cos(j*(360/c)*3.14/180);
y = y1+35*sin(j*(360/c)*3.14/180);
circle(x, y, 5);
delay(1000/c);
}
}
getch();
return 0;
}
میدانیم که یک نقطه از صفحه را میتوان به وسیله یک دستگاه مختصات مشخص کرد اینگونه مختصات به مختصات دکارتی موسوم هستند که به افتخار ریاضیدان و فیلسوف فرانسوی رنه دکارت (974-1028) که این روش را برای مشخص کردن یک نقطه در صفحه کشف کرد نامگذاری شده است. طریقه دیگری برای مشخص کردن محل یک نقطه در صفحه ، مختصات قطبی است.
مثال: برنامه ای بنویسید که رشته “C++” را روی صفحه چاپ کند و با استفاده از getpixel و bar آن را به صورت بزرگ تری رسم نماید.
//Generating graphical characters
#include <iostream>
#include <stdio.h>
#include <graphics.h>
using namespace std;
int main()
{
int x, y, c;
initwindow(800,600);
cout<<"C++";
setfillstyle(1, 2);
for (x = 0; x < 24; x++)
for (y = 1; y < 12; y++)
{
c = getpixel(x, y);
if (c != 0)
bar((x-1)*10+20, (y-1)*10+10, x*10+20, y*10+10);
}
getch();
return 0;
}
مثال: به کمکgetpixel و حلقهfor تودرتو مساحت اشغال شده توسط عبارت “Hello World!” بر روی صفحه را محاسبه کنید.
#include <iostream>
#include <graphics.h>
using namespace std;
int main (void)
{
initwindow (800,600);
cout<<"Hello World!\n”);
int x, y;
// area in pixels
int area = 0;
for (y = 0; y <= getmaxy (); y ++)
for (x = 0; x <= getmaxx (); x ++)
if (getpixel (x, y) != 0)
area ++;
cout<<"nArea is”;
getch();
return 0;
}
مثال: برنامه ای بنویسید که حرکت ماه دور زمین و زمین دور خورشید را شبیه سازی کند.
هدف: بعضی مسایل ظاهر حلقه تو در تو دارند ولی ماهیت تو در تو ندارند.
توضیح: سیارات و مسیر حرکت آن ها را دایره ای فرض کنید.
// Rotate the Moon around the earth
#include <iostream>
#include <graphics.h>
#include <math.h>
using namespace std;
int main()
{
int i, x, x1, y, y1,xm,ym, r1, r2;
initwindow(800,600);
r1 = 200;
r2 = 200;
x1 = 320;
y1 = 240;
moveto(x1+r1+100,y1);
setcolor(3);
for (i = 0; i < 360; i++)
{
x = r1*cos(i*3.14/180);
y = r2*sin(i*3.14/180);
putpixel( x+x1, y+y1, WHITE);
xm = x+ 100*cos(i*3.14/10);
ym = y +100*sin(i*3.14/10);
lineto(xm+x1,ym+y1);
delay(10);
}
lineto(x1+r1+100,y1);
getch();
return 0;
}
- ۹۳/۰۶/۲۳