درس ششم - بخش اول
ﻣﻘﺪﻣﻪ :
اﮔﺮ ﻧﯿﺎز ﺑﺎﺷﺪ ﺗﺎ ﻗﻄﻌﻪ ای از ﻛﺪ ﺑﯿﺶ از ﻳﻜﺒﺎر اﺟﺮا ﺷﻮد ﻧﯿﺎز ﺑﻪ اﺳﺘﻔﺎده از ﺣﻠﻘـﻪ ھـﺎ ﻣـﻲ ﺑﺎﺷـﺪ. ﺑـﺮای ﻣﺜـﺎل ﻓـﺮض ﻛﻨﯿﺪ آراﻳﻪ ای ﺑﻪ ﻃﻮل ۱۰۰۰ ﺗﻌﺮﻳﻒ ﻛﺮده اﻳﺪ. اﻛﻨﻮن ﻣﻲ ﺧﻮاھﯿﺪ آﻧﺮا ﺑﺎ ھﺰار ﻋﺪد ﻣﺘﻮاﻟﻲ ﭘﺮﻛﻨﯿـﺪ. ﺑـﺪﻳﮫﻲ اﺳـﺖ ﻛـﻪ روش زﻳﺮ ﻛﺎرآﻣﺪ ﻧﯿﺴﺖ! :
;۰=[۰]intData
.
.
.
;۹۹۹=[۹۹۹]intData
ﻧﻮﺷﺘﻦ اﻳﻦ ﺧﻄﻮط ﻣﺘﻮاﻟﻲ اﺣﺘﻤﺎﻻ ﺑﺎ ﻛﭙﻲ و ﭘﯿﺴﺖ و اﺻﻼح آن ﺣﺪاﻗﻞ ﻧﯿﻢ ﺳﺎﻋﺖ ﻃﻮل ﻣﻲ ﻛﺸﺪ! ﺑﻨﺎﺑﺮاﻳﻦ ﻧﯿـﺎز ﺑـﻪ وﺳﯿﻠﻪ ای ﺣﺲ ﻣﻲ ﺷﻮد ﻛﻪ ﺑﺘﻮان ﺑﻮﺳﯿﻠﻪ ی آن اﻣﺜﺎل اﻳﻨﮕﻮﻧﻪ ﻛﺎرھﺎ را اﻧﺠﺎم داد.
ﺗﻌﺮﻳﻒ ﺣﻠﻘﻪ ھﺎ و اﺳﺘﻔﺎده از آﻧﮫﺎ :
ﺑﺮای ﺗﻌﺮﻳﻒ ﺣﻠﻘﻪ ھـﺎ اﺑﺰارھـﺎی ﻣﺘﻌـﺪدی ﻣﺎﻧﻨـﺪ while, do , for , foreach وﺟـﻮد دارﻧـﺪ. اﺳـﺘﻔﺎده و اﻧﺘﺨـﺎب آﻧﮫـﺎ ﺑﺴﺘﮕﻲ ﺑﻪ ﺳﻠﯿﻘﻪ ی ﺷﻤﺎ و ﻣﻨﻄﻖ ﺑﺮﻧﺎﻣﻪ دارد. در ھﺮ ﺣﺎل ﻳﻚ ﻣﺴﺎﻟﻪ ﺑـﺪﻳﮫﻲ اﺳـﺖ ﻛـﻪ ھﻤـﻮاره ﺑـﯿﺶ از ﻳـﻚ راه ﺣﻞ ﺑﺮای ﻳﻚ ﻣﺴﺎﻟﻪ وﺟﻮد ﺧﻮاھﺪ داﺷﺖ.
اﺳﺘﻔﺎده از ﺣﻠﻘﻪ ی : for
ﻋﻤﻮﻣﺎ ﻛﺪﻧﻮﻳﺴﻲ را ﺑﺎ ﻛﺪ ﻧﻮﻳﺴﻲ ﻣﻲ ﺗﻮان آﻣﻮﺧﺖ! ﺑﻨﺎﺑﺮاﻳﻦ در ﻣﻮرد اﻧﻮاع ﺣﻠﻘﻪ ھﺎ ﻣﺜﺎﻟﮫﺎﻳﻲ اراﺋﻪ ﺧﻮاھﺪ ﮔﺮدﻳﺪ.
ﻳﻚ ﺑﺮﻧﺎﻣﻪ ی ﺳﻲ ﺷﺎرپ ﺟﺪﻳﺪ consoleرا در VS.NETﺑﺎز ﻛﻨﯿﺪ و ﻧﺎم آﻧـﺮا دراﺑﺘـﺪا ex۷۰ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ. ﺳـﭙﺲ ﻛـﺪ
زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
namespace ex۷۰
}
class Class۱
}
[[STAThread
(static void Main(string[] args
}
;[۰۰۰۱]int[] intData = new int
( ++for ( int i=۰ ; i<۱۰۰۰ ; i
;intData[i]=i
(++for(int i=۰ ; i< intData.Length ; i
}
;[int j = intData[i
;(Console.WriteLine("intData[" + i + "]=" + j
{
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- ﺑﺮای ﺗﻌﺮﻳﻒ ﺣﻠﻘﻪ ی for ھﻤﺎﻧﻄﻮر ﻛﻪ ﻣﻲ ﺑﯿﻨﯿﺪ ﺑﺎﻳﺪ ﺗﻌﺪاد ﺑﺎر اﺟـﺮای ﺣﻠﻘـﻪ ( اﻳﻨﺠـﺎ از ۰ ﺗـﺎ ۹۹۹ اﺳـﺖ ) و ھﻤﭽﻨﯿﻦ ﻧﺤﻮه ی رﺳﯿﺪن از ۰ ﺑﻪ ۰۰۰۱ را ﻣﺸﺨﺺ ﻛﺮد ( در اﻳﻨﺠﺎ ++ iاﺳـﺖ ﻳﻌﻨـﻲ ھـﺮ ﺑـﺎر ﻳـﻚ واﺣـﺪ ﺑـﻪ ﺷﻤﺎرﺷﮕﺮ ﺣﻠﻘﻪ اﺿﺎﻓﻪ ﻣﻲ ﺷﻮد. )
٢- در زﺑﺎن ﺳﻲ ++ iﻳﻌﻨﻲ ۱+ i=iو -- iﻳﻌﻨﻲ ۱- i=iو ﻛـﻼ i-=n ﻳﻌﻨـﻲ i=i-n و ﺑـﻪ ھﻤـﯿﻦ ﺗﺮﺗﯿـﺐ. ﺑـﺮای ﻣﺜـﺎل i*=n ﻳﻌﻨﻲ i=i*n و i+=n ﻳﻌﻨﻲ i=i+n و ...
٣- اﮔﺮ ﭘﺲ از ﺣﻠﻘﻪ ی for ﻳﻚ ﺧﻂ ﻛﺪ داﺷﺘﻪ ﺑﺎﺷﯿﻢ ﻧﯿﺎزی ﺑﻪ آﻛﻮﻻد ﻧﯿﺴﺖ ( ﻣﺎﻧﻨﺪ ﻗﺴﻤﺖ اول ﻛﺪ ). وﻟﻲ اﮔـﺮ ﺗﻌﺪاد ﺧﻄﻮط ﻣﺮﺑﻮط ﺑﻪ ﺑﺪﻧﻪ ی for زﻳﺎد ﺑﻮد ﺑﺎﻳﺪ ﺣﺘﻤﺎ از آﻛﻮﻻد اﺳﺘﻔﺎده ﺷﻮد ( ﻣﺎﻧﻨﺪ ﻗﺴﻤﺖ دوم ﻛﺪ ). ( اﻳـﻦ ﻗﺎﻋﺪه ای ﻛﻠﻲ اﺳﺖ در زﺑﺎﻧﮫﺎی ﻣﺸﺘﻖ ﺷﺪه از زﺑﺎن ﺳﻲ در ﻣﻮرد ھﺮ ﭼﯿﺰی! )
۴- ﻓﺮض ﻛﻨﯿﺪ در ﻗﺴﻤﺖ اول ﻛﺪ ﺑﺎﻻ ﺑﺠﺎی ۱۰۰۰ ﻣﻲ ﻧﻮﺷﺘﯿﺪ ۱۰۰۱ . ﺳﺮﻳﻌﺎ ﺑﺎ ﻳﻚ ﺧﻄﺎی زﻣـﺎن اﺟـﺮا ﻣﻮاﺟـﻪ ﻣﻲ ﺷﺪﻳﺪ. زﻳﺮا ﻣﻲ ﺧﻮاﺳﺘﯿﺪ ﺑﻪ ﻋﻀﻮی از آراﻳﻪ دﺳﺘﺮﺳﻲ ﭘﯿﺪا ﻛﻨﯿـﺪ ﻛـﻪ ﺗﻌﺮﻳـﻒ ﻧـﺸﺪه اﺳـﺖ. راه ﻣـﺪرن ﭼﻚ ﻛﺮدن اﻳﻦ ﻣﺴﺎﺋﻞ اﺳﺘﻔﺎده از ﺧﺎﺻﯿﺖ Lengthآراﻳﻪ اﺳﺖ ﻛﻪ در ﻗﺴﻤﺖ دوم ﻛـﺪ در ﻋﻤـﻞ ﻣـﺸﺎھﺪه ﻣﻲ ﻧﻤﺎﻳﯿﺪ. ھﻤﯿﺸﻪ از اﻳﻦ روش اﺳﺘﻔﺎده ﻛﻨﯿﺪ.
۵- ﺣﻠﻘﻪ ی اول ﻳﻌﻨﻲ اﻳﻨﻜﻪ ﻛﺎر ﭘﺮ ﻛﺮدن آراﻳﻪ intData را از ﺻﻔﺮ ﺗﺎ ۹۹۹ ﻳﻜﻲ ﻳﻜﻲ ( ++ ( iاﻧﺠﺎم ﺑﺪه.
ﻳﻚ ﺑﺮﻧﺎﻣﻪ ی ﺳﻲ ﺷﺎرپ ﺟﺪﻳﺪ consoleرا در VS.NET ﺑﺎز ﻛﻨﯿﺪ و ﻧﺎم آﻧـﺮا دراﺑﺘـﺪا ex۸۰ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ. ﺳـﭙﺲ ﻛـﺪ
زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
namespace ex۸۰
}
class Class۱
}
[[STAThread
(static void Main(string[] args
}
;۱ = int n
(۶ < while (n
}
;(Console.WriteLine("Current value of n is {۰}", n
;++n
{
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- ﺣﻠﻘﻪ ی while در ﺑﺎﻻ ﻛﺎر اﻧﺠﺎم ﺣﻠﻘﻪ را ﺗﺎ ھﻨﮕـﺎﻣﻲ اﻧﺠـﺎم ﻣـﻲ دھـﺪ ﻛـﻪ ﺷـﺮط ذﻛـﺮ ﺷـﺪه در اﺑﺘـﺪای آن ﺻﺎدق و ﺑﺮﻗﺮار ﺑﺎﺷﺪ. ﻳﻌﻨﻲ در ﺣﻠﻘﻪ ی ﻓﻮق ﺗﺎ وﻗﺘﻲ ۶< nاﺳﺖ اﻳﻦ ﺣﻠﻘﻪ اداﻣﻪ ﺧﻮاھﺪ ﻳﺎﻓﺖ.
٢- ﺣﻠﻘﻪ ی while ﺻﻔﺮ ﻳﺎ ﺑﯿﺸﺘﺮ ﺑﺎر ﻣﻤﻜﻦ اﺳﺖ اﺟﺮا ﺷﻮد.
٣- در ﻛﺪ ﻓﻮق از {۰} اﺳﺘﻔﺎده ﮔﺮدﻳﺪه اﺳﺖ. ﻣﺘﺪ WriteLineﺑﻪ ﺷﻤﺎ اﻳﻦ اﺟﺎزه را ﻣﻲ دھﺪ ﻛـﻪ nﺗـﺎ آرﮔﻮﻣـﺎن ﺑﺮای آن ﺗﻌﺮﻳﻒ ﻛﻨﯿﺪ و ﻣﻘﺎدﻳﺮ ھﺮ ﻛﺪام را ﻛﻪ ﺧﻮاﺳﺘﯿﺪ در ﻛـﺪ ﻧﻤـﺎﻳﺶ دھﯿـﺪ از { {xاﺳـﺘﻔﺎده ﻛﻨﯿـﺪ. در اﻳـﻦ ﻣﻮرد ﻣﻘﺪار آرﮔﻮﻣﺎن xام ﻧﻤﺎﻳﺶ داده ﻣﻲ ﺷﻮد.