فرض کنید می خواهیم برنامه ای بنویسیم که یک کاراکتر * را در خروجی نمایش دهد. برای این کار به صورت زیر عمل میکنیم:
main()
{
cout<<"*";
cout<<endl;
getch();
}
خب در این برنامه دستور cout تنها یک بار اجرا می شوند. حال فرض کنیم بخواهیم برنامهی بالا را به این صورت تغییر دهیم که یک عدد n را از ورودی گرفته و به تعداد آن یعنی n بار کاراکتر * را در خروجی پشت سر هم در یک خط نمایش دهیم.
برنامه بالا به صورت زیر تغییر خواهد یافت:
main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"*";
}
cout<<endl;
getch();
}
تنها تفاوت این برنامه با برنامه ی قبلی در این است که کل کارهای برنامه ی اول را در یک حلقه قرار دادیم که این حلقه به تعداد n اجرا خواهد شد. پس از نمایش n کاراکتر * در خروجی، به ابتدای خط بعدی ( با استفاده از دستور cout<<endl ) می رویم.
خب، حالا فرض کنید میخواهیم دو عدد n و m را از ورودی گرفته و این بار n ستاره را در یک خط نمایش داده و همان خط را m بار تکرار کنیم. یعنی می خواهیم m خط را که در هر خط n ستاره وجود دارد، رسم کنیم.
خب با توجه به برنامه ی قبلی به این نتیجه می رسیم که باید برنامه ی بالا( که کشیدن یک خط از n ستاره است) را m بار تکرار کنیم. تا m خط که هر خط متشکل از n ستاره است را رسم کنیم.
برنامه ی بالا به صورت زیر تغییر خواهد کرد:
main()
{
int n,m;
cin>>n>>m;
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
{
cout<<"*";
}
cout<<endl;
}
getch();
}
در واقع ما در این برنامه از حلقه ی تو در تو استفاده کرده ایم!
توجه کنید که همیشه حلقه ی تو در تو از دو حلقه ی for تشکیل نشده است و می توان به جای for از while هم استفاده کرد!
main()
{
int n,m,j=0;
cin>>n>>m;
while(j<m)
{
for(int i=1;i<=n;i++)
{
cout<<"*";
}
cout<<endl;
j++;
}
getch();
}
در برنامه ی بالا حلقه ی بیرونی را از for به while تغییر داده ایم!
امیدوارم تا اینجای کار به این نتیجه رسیده باشید که در مواقع ضروری از حلقه ی تو در تو استفاده خواهیم کرد و برنامه ی بالا را می توان بدون حلقه ی تو در تو هم نوشت!
برای مثال چند نمونه از حلقه های تو در تو را با هم حل خواهیم کرد.
برنامه ای با استفاده از حلقه ی تو در تو بنویسید که شکل زیر را نمایش بدهد:
برنامه به صورت زیر نوشته می شود:
main()
{
for(int i=1;i<=10;i++)
{
for(int j=1;j<=i;j++)
{
cout<<'*';
}
cout<<endl;
}
getch();
}
برنامه ای بنویسید که شکل زیر را نمایش دهد:
برنامه به صورت زیر نوشته می شود:
main()
{
for(int i=1;i<=10;i++)
{
for(int j=1;j<=11-i;j++)
{
cout<<'*';
}
cout<<endl;
}
getch();
}
برنامه ای بنویسید که شکل زیر را نمایش دهد:
برنامه به صورت زیر نوشته میشود:
main()
{
for(int i=1;i<=10;i++)
{
for(int j=1;j<=i-1;j++)
{
cout<<" ";
}
for(int j=1;j<=11-i;j++)
{
cout<<"*";
}
cout<<endl;
}
getch();
}
این برنامه را به صورت زیر هم میتوان نوشت( چرا؟)
main()
{
for(int i=1;i<=10;i++)
{
for(int j=1;j<=i-1;j++)
{
cout<<' ';
}
for(int j=i;j<=11;j++)
{
cout<<'*';
}
cout<<endl;
}
getch();
}
برنامه ای بنویسید که شکل زیر را نمایش دهد:
برنامه به صورت زیر نوشته خواهد شد:
main()
{
for(int i=1;i<=10;i++)
{
for(int j=1;j<=10-i;j++)
{
cout<<' ';
}
for(int j=1;j<=i;j++)
{
cout<<'*';
}
cout<<endl;
}
getch();
}
برنامه ی بالا را می توان به صورت زیر هم نوشت. ( چرا؟)
main()
{
for(int i=1;i<=10;i++)
{
for(int j=i;j<=10;j++)
{
cout<<' ';
}
for(int j=1;j<=i;j++)
{
cout<<'*';
}
cout<<endl;
}
getch();
}
برنامه ای بنویسید که شکل زیر را نمایش دهد:
توجه کنید که این سوال ترکیب دو سوال آخر پشت سر هم هست.
برنامه ی آن به صورت زیر نوشته می شود:
main()
{
for(int i=1;i<=19;i++)
{
if(i<=10) //rasme 10 khate aval
{
for(int j=1;j<=10-i;j++)
{
cout<<' ';
}
for(int j=1;j<=i;j++)
{
cout<<'*';
}
}
else //rasme 9 khate ba'di
{
for(int j=1;j<=i-10;j++)
{
cout<<' ';
}
for(int j=1;j<=20-i;j++)
{
cout<<'*';
}
}
cout<<endl;
}
getch();
}
برنامه ای بنویسید که شکل زیر را نمایش دهد:
جواب سوال به صورت زیر خواهد بود:
int main()
{
for(int i=1;i<=19;i++)
{
if(i<=10) //rasme 10 khate aval
{
for(int j=1;j<=i;j++)
{
cout<<'*';
}
}
else //rasme 9 khate ba'di
{
for(int j=1;j<=20-i;j++)
{
cout<<'*';
}
}
cout<<endl;
}
getch();
}