ﺑﺴﻤﻪ ﺗﻌﺎﻟﻲ
آزﻣﻮن ﻣﻴﺎنﺗﺮم درس ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪﺳﺎزي )ﮔﺮوه (7
ﻧﺎم:
14آذر 89
ﻧﺎمﺧﺎﻧﻮادﮔﻲ:
ﻣﺪت 2:15 :ﺳﺎﻋﺖ
ﺷﻤﺎره داﻧﺸﺠﻮﻳﻲ:
.1ﺧﺮوﺟﻲ ﻗﻄﻌﻪ ﻛﺪﻫﺎي زﻳﺮ را ﻣﺸﺨﺺ ﻛﻨﻴﺪ ) 20ﻧﻤﺮه(:
اﻟﻒ .دﻧﺒﺎﻟﻪي اﻋﺪادي ﻛﻪ از اﺟﺮاي ﻛﺪ زﻳﺮ در ﺧﺮوﺟﻲ ﭼﺎپ ﻣﻲﺷﻮﻧﺪ را ﺑﻨﻮﻳﺴﻴﺪ ) 5ﻧﻤﺮه(.
)for(int i=0;i<3;i++
{
;" " << cout << i
;continue
;" " << cout << 7
;break
)for(int j=0;j<1;j++
;" " << cout << 5
}
ب .ﺧﺮوﺟﻲ ﻛﺪ زﻳﺮ ﭼﻪ ﻋﺪدي اﺳﺖ؟ ) 5ﻧﻤﺮه(
>#include <iostream
>#include <iomanip.h
;int a = 0
;) void g(int
;)(int f
)(int main
{
;)(cout<<f
;return 0
}
)void g(int b
{
; b = 13
}
)(int f
{
; int a = 42
; ) g( a
; return a
}
ج .اﮔﺮ i = 5ﺑﺎﺷﺪ ،در ﺧﺮوﺟﻲ ﭼﻪ دﻧﺒﺎﻟﻪاي از اﻋﺪاد ﭼﺎپ ﺧﻮاﻫﺪ ﺷﺪ؟ ) 5ﻧﻤﺮه(
do
{
;" " << cout << (--i)--
;)} while(i>=2 && i < 5
1
د .ﻓﺮض ﻛﻨﻴﺪ ) func(5ﻓﺮاﺧﻮاﻧﻲ ﺷﺪه اﺳﺖ .ﺧﺮوﺟﻲ ﭼﻪ ﻋﺪدي ﺧﻮاﻫﺪ ﺑﻮد؟ ) 5ﻧﻤﺮه(
)int func(int x
{
)if(x>2
;)return x + func(x-1
else
;return 0
}
.2ﻣﺮﺗﺐﺳﺎزي درﺟﻲ ) 25) (Insertion sortﻧﻤﺮه(
ﻓﺮض ﻛﻨﻴﺪ آراﻳﻪاي از اﻋﺪاد ﺻﺤﻴﺢِ ﻧﺎﻣﺮﺗﺐ ﺑﻪ ﺻﻮرت ] A[nداﺷﺘﻪ ﺑﺎﺷﻴﻢ .در واﻗﻊ ] A[0], A[1], …, A[n-1ﺑﻪ دﻧﺒﺎﻟﻪاي از
اﻋﺪاد ﺻﺤﻴﺢ اﺷﺎره ﻣﻲﻛﻨﻨﺪ ﻛﻪ ﻣﺮﺗﺐ ﻧﻤﻲﺑﺎﺷﻨﺪ .ﻣﻲﺧﻮاﻫﻴﻢ اﻟﮕﻮرﻳﺘﻤﻲ ﺑﺮاي ﻣﺮﺗﺐﺳﺎزي اﻳﻦ آراﻳﻪ ﺑﻨﻮﻳﺴﻴﻢ .در اﺑﺘﺪا و
ﺑﻌﺪ از ﻫﺮ ﻣﺮﺣﻠﻪ ﺗﻜﺮار در اﻳﻦ اﻟﮕﻮرﻳﺘﻢ ،ﻛﻞ آراﻳﻪ را ﻣﻲﺗﻮان ﺑﻪ دو ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﺷﺪهي ] A[0], …, A[i-1و ﻧﻴﺰ ﻣﺮﺗﺐ
ﻧﺸﺪهي ] A[i], …, A[n-1ﺗﻘﺴﻴﻢ ﻛﺮد ﻛﻪ .i ∈ 1, … , n − 1ﺑﺮاي ﺟﺎﺑﺠﺎ ﻛﺮدن ﻋﻨﺼﺮ ] A[iاز ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﻧﺸﺪه ﺑﻪ
ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﺷﺪه ،اﻳﻦ ﻋﻨﺼﺮ ﺑﺎﻳﺪ ﺑﺎ ] A[i-2] ،A[i-1ﺗﺎ ] A[0ﻣﻘﺎﻳﺴﻪ ﺷﻮد و در ﻣﺤﻞ ﻣﺮﺑﻮط ﺑﻪ ﺧﻮد درج ﮔﺮدد .ﻣﺜﻼً اﮔﺮ
]A[jي ﭘﻴﺪا ﺷﺪ ﻛﻪ ] ،A[j] ≤ A[iﻋﻨﺼﺮ ] A[iﺑﻌﺪ از آن ﻗﺮار ﻣﻲﮔﻴﺮد و در ﻏﻴﺮ اﻳﻨﺼﻮرت ﻋﻨﺼﺮ ] A[iدر اﺑﺘﺪاي آراﻳﻪ درج
ﻣﻲﺷﻮد .ﭘﺲ از درج ] A[iدر ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﺷﺪه ،از ﻃﻮل ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﻧﺸﺪه ﻳﻚ واﺣﺪ ﻛﺎﺳﺘﻪ ﺷﺪه و ﺑﻪ ﻃﻮل ﻗﺴﻤﺖ
ﻣﺮﺗﺐ ﺷﺪه ﻳﻚ واﺣﺪ اﻓﺰوده ﻣﻲﺷﻮد .در ﻣﺮﺣﻠﻪي ﺑﻌﺪ A[i+1] ،ﺑﻪ ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﺷﺪه اﻓﺰوده ﻣﻲﺷﻮد و اﻳﻦ ﻋﻤﻠﻴﺎت ﺗﺎ
ﺟﺎﻳﻲ اداﻣﻪ ﻣﻲﻳﺎﺑﺪ ﻛﻪ ﻫﻤﻪي ﻋﻨﺎﺻﺮ ﺑﻪ ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﺷﺪه وارد ﺷﻮﻧﺪ .در واﻗﻊ در ﻫﻨﮕﺎم ﺷﺮوع اﻟﮕﻮرﻳﺘﻢ ،ﻓﻘﻂ ﻋﻨﺼﺮ
] A[0در ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﺷﺪه ﻗﺮار دارد و ﻋﻨﺎﺻﺮ ] A[1], A[2], …, A[n-1در ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﻧﺸﺪه ﻗﺮار دارﻧﺪ و در اﻧﺘﻬﺎي
اﻟﮕﻮرﻳﺘﻢ ،ﻫﻤﻪي ﻋﻨﺎﺻﺮ در ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﺷﺪه ﻗﺮار ﺧﻮاﻫﻨﺪ داﺷﺖ.
اﻟﮕﻮرﻳﺘﻢ ﻣﺮﺗﺐﺳﺎزي ﻓﻮق را ﺑﺮاي ﻣﺮﺗﺐﺳﺎزي آراﻳﻪي ] A[nو ﺑﺎ اﺳﺘﻔﺎده از ﺣﻠﻘﻪﻫﺎي ﺗﻜﺮار ﺑﻨﻮﻳﺴﻴﺪ.
)راﻫﻨﻤﺎﻳﻲ :ﺑﻪ ﻋﻨﻮان ﻧﻤﻮﻧﻪاي از اﺟﺮاي اﻟﮕﻮرﻳﺘﻢِ ﻓﻮق ،آراﻳﻪي } A[8]={5, 7, 0, 3, 4, 2, 6, 1را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ .ﺷﻜﻞ زﻳﺮ،
اﺟﺮاي اﻟﮕﻮرﻳﺘﻢ ﻓﻮق را ﺑﺮ روي آراﻳﻪي ] A[8و ﺑﻪ ﺻﻮرت ﻣﺮﺣﻠﻪ ﺑﻪ ﻣﺮﺣﻠﻪ ﻧﺸﺎن ﻣﻲدﻫﺪ .اﻋﺪاد ﻣﻮﺟﻮد در ﻗﺴﻤﺖ ﻣﺮﺗﺐ
ﺷﺪه در ﻫﺮ ﻣﺮﺣﻠﻪ از اﺟﺮاي اﻟﮕﻮرﻳﺘﻢ ،ﺑﻪ ﺻﻮرت ﭘﺮرﻧﮓ و اﻋﺪاد ﻣﻮﺟﻮد در ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﻧﺸﺪه ،ﺑﻪ ﺻﻮرت ﻛﻢرﻧﮓ ﻧﺸﺎن
داده ﺷﺪهاﻧﺪ .ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ "ﻣﺮﺣﻠﻪ اول" ﺧﻮد آراﻳﻪ را ﻧﺸﺎن ﻣﻲدﻫﺪ(.
)ﻣﺮﺣﻠﻪ اول(
1
6
2
4
3
0
7
5
)ﻣﺮﺣﻠﻪ دوم(
1
6
2
4
3
0
7
5
)ﻣﺮﺣﻠﻪ ﺳﻮم(
1
6
2
4
3
7
5
0
)ﻣﺮﺣﻠﻪ ﭼﻬﺎرم(
1
6
2
4
7
5
3
0
)ﻣﺮﺣﻠﻪ ﭘﻨﺠﻢ(
1
6
2
7
5
4
3
0
)ﻣﺮﺣﻠﻪ ﺷﺸﻢ(
1
6
7
5
4
3
2
0
)ﻣﺮﺣﻠﻪ ﻫﻔﺘﻢ(
1
7
6
5
4
3
2
0
)ﻣﺮﺣﻠﻪ ﻫﺸﺘﻢ(
7
6
5
4
3
2
1
0
2
.3ﺗﺮاﻧﻬﺎدهي ﻳﻚ ﻣﺎﺗﺮﻳﺲ ) 25ﻧﻤﺮه(:
ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﻣﺎﺗﺮﻳﺲ n × nرا از ورودي ﺧﻮاﻧﺪه و ﺗﺮاﻧﻬﺎدهي آنرا ﻣﺤﺎﺳﺒﻪ ﻧﻤﻮده و ﺳﭙﺲ ﺧﻮد ﻣﺎﺗﺮﻳﺲ و
ﺗﺮاﻧﻬﺎده آنرا در ﺧﺮوﺟﻲ ﻧﻤﺎﻳﺶ دﻫﺪ .ﺗﻮﺟﻪ ﻧﻤﺎﻳﻴﺪ ﻛﻪ nﻳﻚ ﻣﻘﺪار ﺛﺎﺑﺖ اﺳﺖ و در اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ ﻣﻲﺗﻮان آنرا ﺗﻌﺮﻳﻒ
ﻛﺮد )ﻣﺜﻼً ﻣﻲﺗﻮاﻧﻴﺪ nرا ﺑﺮاﺑﺮ 3ﺗﻌﺮﻳﻒ ﻛﻨﻴﺪ( .ﻫﻤﭽﻨﻴﻦ ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ دراﻳﻪﻫﺎي ﻣﺎﺗﺮﻳﺲ از ورودي ﺧﻮاﻧﺪه
ﻣﻲﺷﻮﻧﺪ و ﻛﺎرﺑﺮ ﺑﻌﺪ از وارد ﻛﺮدن ﻫﺮ دراﻳﻪ ،ﻳﻚ Enterﻣﻲزﻧﺪ.
راﻫﻨﻤﺎﻳﻲ :ﻳﻚ ﻧﻤﻮﻧﻪ از ورودي و ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ ﻣﻲﺗﻮاﻧﺪ ﺑﻪ ﺷﻜﻞ زﻳﺮ ﺑﺎﺷﺪ:
ورودي:
2
5
1
7
3
6
9
8
2
ﺧﺮوﺟﻲ:
1
6
2
2 5
7 3
9 8
The original matrix is:
9
8
2
2 7
5 3
1 6
Transpose of the matrix is:
.4ﻳﻜﻲ از دو ﺳﻮال زﻳﺮ ) .1.4ﻳﺎ (.2.4را ﺑﻪ اﺧﺘﻴﺎر ﺣﻞ ﻧﻤﺎﻳﻴﺪ.
.1.4ﻣﺴﺌﻠﻪي ﺑﺮج ﻫﺎﻧﻮي ) 30ﻧﻤﺮه(:
ﻓﺮض ﻛﻨﻴﺪ ﺳﻪ ﻣﻴﻠﻪ ﺑﻪ ﻧﺎمﻫﺎي B ،Aو Cوﺟﻮد دارﻧﺪ .ﺑﺮ روي ﻣﻴﻠﻪي ،Aﺑﻪ ﺗﻌﺪاد nﺣﻠﻘﻪ ،از ﺑﺰرگ ﺑﻪ ﻛﻮﭼﻚ ﭼﻴﺪه
ﺷﺪه اﺳﺖ .ﻫﺪف ﻣﺎ اﻧﺘﻘﺎل ﺗﻤﺎم ﺣﻠﻘﻪﻫﺎ از ﻣﻴﻠﻪي Aﺑﻪ ﻣﻴﻠﻪي Cاﺳﺖ ﺑﮕﻮﻧﻪاي ﻛﻪ در ﻃﻲ اﻳﻦ اﻧﺘﻘﺎﻻت؛
اﻟﻒ .در ﻫﺮ زﻣﺎن ﻓﻘﻂ ﻳﻚ دﻳﺴﻚ را ﻣﻲﺗﻮان ﺟﺎﺑﺠﺎ ﻧﻤﻮد،
ب .ﻧﺒﺎﻳﺪ در ﻫﻴﭻ زﻣﺎﻧﻲ ﺣﻠﻘﻪاي ﺑﺰرگ ﺑﺮ روي ﺣﻠﻘﻪاي ﻛﻮﭼﻚ ﻗﺮار ﮔﻴﺮد.
ﻫﺪف ﻣﺎ اراﺋﻪي اﻟﮕﻮرﻳﺘﻤﻲ اﺳﺖ ﻛﻪ ﻛﻤﺘﺮﻳﻦ ﺗﻮاﻟﻲ ﺣﺮﻛﺖﻫﺎ را ﺑﺮاي اﻧﺘﻘﺎل ﺣﻠﻘﻪﻫﺎ ﺑﻪ ﻣﺎ ﺑﺪﻫﺪ .ﻣﺜﻼ اﮔﺮ n=2ﺑﺎﺷﺪ ،ﺗﻮاﻟﻲ
ﺣﺮﻛﺖ ﺑﻪ ﺻﻮرت زﻳﺮ اﺳﺖ:
.1ﺣﻠﻘﻪي 1را از ﻣﻴﻠﻪي Aﺑﻪ ﻣﻴﻠﻪي Bﻣﻨﺘﻘﻞ ﻣﻲﻛﻨﻴﻢ.
.2ﺣﻠﻘﻪي 2را از ﻣﻴﻠﻪي Aﺑﻪ ﻣﻴﻠﻪي Cﻣﻨﺘﻘﻞ ﻣﻲﻛﻨﻴﻢ.
.3ﺣﻠﻘﻪي 1را از ﻣﻴﻠﻪي Bﺑﻪ ﻣﻴﻠﻪي Cﻣﻨﺘﻘﻞ ﻣﻲﻛﻨﻴﻢ.
3
ﺣﺎل ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﻌﺮﻳﻒ ﻣﺴﺌﻠﻪي ﻓﻮق ﺑﻪ ﺳﻮاﻻت زﻳﺮ ﺟﻮاب دﻫﻴﺪ.
اﻟﻒ .ﺗﺎﺑﻌﻲ ﺑﺎزﮔﺸﺘﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺗﻌﺪاد ﺣﻠﻘﻪﻫﺎ ) ،(nﻧﺎم ﻣﻴﻠﻪي ﻣﺒﺪأ ) ،(Aﻧﺎم ﻣﻴﻠﻪي ﻛﻤﻜﻲ ) (Bو ﻧﺎم ﻣﻴﻠﻪي ﻣﻘﺼﺪ
) (Cرا ﮔﺮﻓﺘﻪ و اﻧﺘﻘﺎﻻت و ﺗﻌﺪاد ﻛﻞ آﻧﻬﺎ را ﭼﺎپ ﻛﻨﺪ .ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ﺑﺮاي n=2ﻣﻲﺗﻮان ﺗﺎﺑﻊ را ﺑﺼﻮرت
) Hanoi (2, A, B, Cﻓﺮاﺧﻮاﻧﻲ ﻧﻤﻮده و ﺧﺮوﺟﻲ زﻳﺮ ﭼﺎپ ﺷﻮد ) 20ﻧﻤﺮه(.
A --> B
A --> C
B --> C
Number of total motions: 3
ب .ﺑﺪون اﺳﺘﻔﺎده از ﺗﻮاﺑﻊ ﺑﺎزﮔﺸﺘﻲ و ﺑﻪ ﻛﻤﻚ ﺣﻠﻘﻪﻫﺎي ﺗﻜﺮار ،ﺗﻌﺪاد ﻛﻞ اﻧﺘﻘﺎﻻت را ﺑﺮاي nﻣﺸﺨﺺ ﻛﻨﻴﺪ .در اﻳﻦ ﺑﺨﺶ
ﺑﺎ دادن ﻣﻘﺪار nﺑﻪ ﺑﺮﻧﺎﻣﻪي ﺷﻤﺎ ،ﻓﻘﻂ ﻛﺎﻓﻲ اﺳﺖ ﺗﻌﺪاد اﻧﺘﻘﺎﻻت ﭼﺎپ ﺷﻮد ،ﻣﺜﻼً ﺑﻪ ازاء n=1ﻋﺪد 1و ﺑﺮاي n=2ﻋﺪد 3
در ﺧﺮوﺟﻲ ﭼﺎپ ﻣﻲﺷﻮد ) 10ﻧﻤﺮه(.
.2.4ﻣﺤﺎﺳﺒﻪ ﺣﺠﻢ ﻳﻚ ﻛﺮه ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ 30) inlineﻧﻤﺮه(:
اﻟﻒ .ﻣﺰاﻳﺎ و ﻣﻌﺎﻳﺐ ﺗﻮاﺑﻊ inlineرا در ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﺗﻮاﺑﻊ ﻣﻌﻤﻮﻟﻲ ﺑﻴﺎن ﻧﻤﺎﻳﻴﺪ ) 10ﻧﻤﺮه(.
ب .ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪد از ﻛﺎرﺑﺮ ﺑﻪ ﻋﻨﻮان ﺷﻌﺎع ﻛﺮه ﺧﻮاﻧﺪه و ﺣﺠﻢ ﻛﺮه را ﻣﺤﺎﺳﺒﻪ ﻧﻤﻮده و در ﺧﺮوﺟﻲ ﭼﺎپ
ﻧﻤﺎﻳﺪ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر از ﻳﻚ ﺗﺎﺑﻊ ﺑﻪ ﺻﻮرت inlineاﺳﺘﻔﺎده ﻛﻨﻴﺪ ﻛﻪ ﺣﺠﻢ ﻛﺮه را ﻣﺤﺎﺳﺒﻪ ﻧﻤﺎﻳﺪ .ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ
ସ
ﺣﺠﻢ ﻛﺮه ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ (ଷ) × 3.14159 × r ଷﻛﻪ rﺷﻌﺎع ﻛﺮه ﻣﻲﺑﺎﺷﺪ ) 20ﻧﻤﺮه(.
ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ.
اﻧﺘﻈﺎري
4
© Copyright 2026 Paperzz