حلقه ی تو در تو تمرینهای پیچیده تر
پنجشنبه, ۱۶ آذر ۱۳۹۱، ۰۶:۰۳ ب.ظ
ادامه ی تمرینها تا حدودی پیچیده تر است. اما لازم است آنها را به صورت کامل یاد بگیرید!
7- برنامه ای بنویسید که شکل زیر را نمایش دهد:
*********
*******
*****
***
*
برای تحلیل این سوال باید توجه کنیم که 5 خط داریم و در خط صفرم، صفر فاصله و 9 ستاره، در خط یکم، یک فاصله و 7 ستاره، در خط دوم، دو فاصله و 5 ستاره، در خط سوم، سه فاصله و 3 ستاره و در خط چهارم ، چهار فاصله و یک ستاره داریم.
پس واضح است که حلقه ی بیرونی که تعداد خطوط را نشان میدهد 5 بار تکرار میشود. اما حلقه های درونی( برای فاصله ها و ستاره ها) را چه جور تفسیر کنیم؟
حلقه ی درونی اول که برای رسم فاصله هاست، به تعداد i بار تکرار خواهد شد. ( کافی است به توضیحات بالا کمی توجه کنیم)
حلقه ی درونی دوم که برای رسم ستاره هاست را می توان به صورت روبه رو با استفاده از یک متغیر کمکی نوشت. به این صورت که متغیر a اول 9 باشد و هر بار 2 تا از آن کم شده و در حلقه ی درونی دوم هر بار a تا ستاره رسم بشود.
برنامه ی آن به صورت زیر خواهد بود:
#include <conio.h> #include <iostream.h> int main() { int a=9; for(int i=0;i<5;i++) //dar kol 5 khat darim { for(int j=0;j<i;j++) //rasme fasele ha { cout<<' '; } for(int j=0;j<a;j++) //rasme a ta setare { cout<<'*'; } a=a-2; // az a 2 ta kam mikonim baraye khate badi cout<<endl; } getch(); return 0; }
8- برنامه ای بنویسید که شکل زیر را نمایش دهد: ( وارونه ی شکل بالا)
*
***
*****
*******
*********
با توجه به شکا بالا می توانیم بفهمیم که کلا 5 خط داریم که در خط صفرم چهار فاصله و یک ستاره داریم. در خط یکم سه فاصله و سه ستاره داریم. در خط دوم دو فاصله و 5 ستاره داریم. در خط سوم یک فاصله و 7 ستاره داریم. در خط چهارم صفر فاصله و 9 ستاره داریم.
پس حلقه ی بیرونی 5 بار تکرا می شود.
حلقه ی درونی اول برای فاصله ها برای خط i ام 4 منهای i تا فاصله رسم می کند.
حلقه ی درونی دوم برای رسم ستاره ها برای خط i ام باز هم باید از متغیر کمکی استفاده کنیم که از اول a=1 باشد و هر بار 2 تا به a اضافه شود.
#include <conio.h> #include <iostream.h> int main() { int a=1; for(int i=0;i<5;i++) //dar kol 5 khat darim { for(int j=0;j<4-i;j++) //rasme fasele ha { cout<<' '; } for(int j=0;j<a;j++) //rasme a ta setare { cout<<'*'; } a=a+2; // be a 2 ta ezafe mikonim baraye khate badi cout<<endl; } getch(); return 0; }
9 - برنامه ای بنویسید که یک عدد n را از ووردی گرفته و n خط را به صورت زیر نمایش دهد: ( تمدید برنامه ی بالا)
*
***
*****
*******
*********
...
#include <conio.h> #include <iostream.h> int main() { int a=1,n; cin>>n; for(int i=0;i<n;i++) //dar kol n khat darim { for(int j=0;j<n-1-i;j++) //rasme fasele ha { cout<<' '; } for(int j=0;j<a;j++) //rasme a ta setare { cout<<'*'; } a=a+2; // be a 2 ta ezafe mikonim baraye khate badi cout<<endl; } getch(); return 0; }
تحلیل برنامه به عهده ی دانش آموز است.
10- برنامه ای بنویسید که n را از ورودی گرفته و 2n-1 خط زیر را رسم کند:
*
***
*****
*******
*********
... ( خط n ام که n تا ستاره دارد)
*********
*******
*****
***
*
#include <conio.h> #include <iostream.h> int main() { int a=1,n; cin>>n; for(int i=0;i<n-1;i++) //dar kol n-1 khate afzayeshi darim { for(int j=0;j<n-1-i;j++) //rasme fasele ha { cout<<' '; } for(int j=0;j<a;j++) //rasme a ta setare { cout<<'*'; } a=a+2; // be a 2 ta ezafe mikonim baraye khate badi cout<<endl; } for(int i=0;i<n;i++) //dar kol n khate kaheshi darim { for(int j=0;j<i;j++) //rasme fasele ha { cout<<' '; } for(int j=0;j<a;j++) //rasme a ta setare { cout<<'*'; } a=a-2; // az a 2 ta kam mikonim baraye khate badi cout<<endl; } getch(); return 0; }
تحلیل برنامه به عهده ی دانش آموز است.
11- به عنوان تمرین شکل زیر را رسم کنید: ( n را از ورودی بگیرید)
... ( خط n ام که n تا ستاره دارد)
*********
*******
*****
***
*
***
*****
*******
*********
... ( خط n ام که n تا ستاره دارد)
۹۱/۰۹/۱۶