گام ششم آموزش برنامه نویسی C++
اهداف کلی:
تمایزحلقه های تودرتو از چندین حلقه درمسئله
اهداف رفتاری و عمکردی:
در این جلسه پس ازنوشتن برنامه هایی با حلقه های تودرتو با ساختارالگوریتمی این برنامه ها آشنا می شوید و می توانید درحل مسئله های موجود ساختارحلقه تودرتو را درک نمایید و هم چنین با یادگیری مختصات قطبی برنامه هایی کاربردی قشنگ تری را بنویسید.
سرفصل های تئوری:
- توضیح حلقه تکرار تو در تو
-توضیح درمورد مختصات قطبی
- درک نحوه تغییر شمارنده های حلقه های تو در تو
- نوع شمارشی enum
- تبدیل نوع، گسترش نوع
سرفصل های عملی :
- محاسبة ریشه های یك چند جمله ای از درجة 3
- جدول ضرب 10×10
- حركت ماه به دور زمین به دور خورشید
- مساحت اشغال شده توسط یک عبارت
مواد و تجهیزات لازم برای گام:
حلقه های تودرتو
اگردرحلقه تکراری یکی ازدستورات ما خود نیزیک حلقه تکرارباشد به آن حلقه تکرار یک حلقه تکرار تودرتو می گویند به مثال توجه کنید:
برنامه زیر یك جدول ضرب چاپ میكند:
#include
#include
#include
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
#include
#include
#include
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
#include
#include
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
#include
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
#include
#include
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;
}