Introduction to Programming Assignment 5 Due: 11:59 pm, Sunday, December 26, 2010 (5/10/1389). By: Sahar Harati BoshraTaheri 1 Fall 2010 Sharif University of Technology ﺗﻮﺿﻴﺤﺎت ﻗﺒﻞ از ﺷﺮوع ﻣﻮارد زﻳﺮ را ﺑﻪ دﻗﺖ ﺑﺨﻮاﻧﻴﺪ: در ﻫﺮ ﻳﻚ از ﺑﺮﻧﺎﻣﻪﻫﺎ ﺷﻤﺎرهي داﻧﺸﺠﻮﻳﻲ ﺧﻮد را ﺑﻪ ﺻﻮرت زﻳﺮ ﺑﻨﻮﻳﺴﻴﺪ: //ID: your student ID ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل: //ID:89654321 ﺑﻌﺪ از ﻧﻮﺷﺘﻦ ﻫﻤﻪي ﺑﺮﻧﺎﻣﻪﻫﺎ ،ﻓﺎﻳﻞ .cppﻫﻤﻪي آنﻫﺎ را در ﻳﻚ ﭘﻮﺷﻪ ﺑﺎ ﻧﺎم assignment#5_stdIDﻗﺮار دﻫﻴﺪ )ﻛﻪ در آن stdIDﺷﻤﺎرهي داﻧﺸﺠﻮﻳﻲ ﺷﻤﺎﺳﺖ(؛ ﻣﺜﻼ .assignment#5_89654321ﺳﭙﺲ اﻳﻦ ﭘﻮﺷﻪ را ﻓﺸﺮده ﻛﻨﻴﺪ .ﻓﺎﻳﻞ ﻓﺸﺮده ﺷﺪه را ﺑﻪ آدرس [email protected]ارﺳﺎل ﻧﻤﺎﻳﻴﺪ. Sharif University of Technology Fall 2010 2 ﺗﻮﺿﻴﺤﺎت )اداﻣﻪ( ﻋﻨﻮان اﻳﻤﻴﻞ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت assignment#5_stdIDﺑﺎﺷﺪ ،ﻛﻪ در آن stdIDﺷﻤﺎرهي داﻧﺸﺠﻮﻳﻲ ﺷﻤﺎﺳﺖ. ﻧﺤﻮهي ورودي ﮔﺮﻓﺘﻦ و ﺧﺮوﺟﻲ دادن ﺑﺮﻧﺎﻣﻪي ﺷﻤﺎ ﺑﺎﻳﺪ دﻗﻴﻘﺎ ﺑﻪ ﺻﻮرت ﮔﻔﺘﻪ ﺷﺪه در ﻣﺴﺄﻟﻪ ﺑﺎﺷﺪ) .ﻣﺜﻼ ﺑﻪ ﻓﺎﺻﻠﻪﻫﺎ و ﺑﺰرگ و ﻛﻮﭼﻚ ﺑﻮدن ﺣﺮوف دﻗﺖ ﻛﻨﻴﺪ(. ﺑﻪ ﻫﺮ ﻳﻚ از ﺑﺮﻧﺎﻣﻪﻫﺎي ﺷﻤﺎ ﺗﻌﺪادي ﺗﺴﺖ داده ﺧﻮاﻫﺪ ﺷﺪ .ﺗﻮﺻﻴﻪ ﻣﻲﺷﻮد ﻛﻪ ﺣﺘﻤﺎ ﻳﻚ ﺑﺎر ﺗﺴﺖﻫﺎي ﻧﻤﻮﻧﻪ را ﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎﻳﺘﺎن ﺑﺪﻫﻴﺪ. ﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﺸﺎﺑﻪ ﺑﻪ ﻣﻴﺰان ﻧﻤﺮهي ﺳﺆال ،ﻧﻤﺮهي ﻣﻨﻔﻲ ﺗﻌﻠﻖ ﺧﻮاﻫﺪ ﮔﺮﻓﺖ. ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ Sharif University of Technology Fall 2010 3 ﻣﺴﺄﻟﻪي اول )ﻧﺎم ﻓﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ(ExpressionCheck.cpp : Stackﻳﻜﻲ از ﺳﺎﺧﺘﻤﺎن دادهﻫﺎي ﭘﺮﻛﺎرﺑﺮد در ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ اﺳﺖ ﻛﻪ در ذﺧﻴﺮه ﻛﺮدن و ﺧﻮاﻧﺪن اﻃﻼﻋﺎت از آﻧﻬﺎ از ﺳﻴﺎﺳﺖ LIFO (Last In First ) Outاﺳﺘﻔﺎده ﻣﻲ ﺷﻮد .ﺑﻪ اﻳﻦ ﻣﻌﻨﺎ ﻛﻪ آﺧﺮﻳﻦ ﻋﻨﺼﺮي را ﻛﻪ در آن ذﺧﻴﺮه ﻛﻨﻴﺪ اوﻟﻴﻦ ﻋﻨﺼﺮ ﻗﺎﺑﻞ ﺑﺎزﻳﺎﺑﻲ از آن ﺧﻮاﻫﺪ ﺑﻮد. از ﻛﺎرﺑﺮدﻫﺎي Stackدر ﺗﻌﻴﻴﻦ ﻣﺘﻮازن ﺑﻮدن ﻳﺎ ﻧﺒﻮدن ﻳﻚ ﻋﺒﺎرت رﻳﺎﺿﻲ اﺳﺖ .ﻋﺒﺎرت ﻣﺘﻮازن ﻋﺒﺎرﺗﻲ اﺳﺖ ﻛﻪ ﻫﺮ زﻳﺮ ﻋﺒﺎرﺗﻲ از آن ﻛﻪ ﺑﺎ ﻳﻚ ‘( ’ﻳﺎ ‘{ ’ﻳﺎ ‘[’ آﻏﺎز ﺷﺪه ﺑﺎﺷﺪ ،ﺑﺎ ﻳﻚ ‘) ‘ﻳﺎ ‘} ‘ﻳﺎ ‘]‘ )ﺑﻪ ﺗﺮﺗﻴﺐ( ﭘﺎﻳﺎن ﻳﺎﻓﺘﻪ ﺑﺎﺷﺪ .ﻛﻨﺘﺮل ﻣﺘﻮازن ﺑﻮدن ﻳﻚ ﻋﺒﺎرت ﺑﺎ اﺳﺘﻔﺎده از Stackﺳﺎده اﺳﺖ. Sharif University of Technology Fall 2010 4 ﻣﺴﺄﻟﻪي اول )اداﻣﻪ( ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ ﻳﻚ ﻋﺒﺎرت رﻳﺎﺿﻲ را ﺑﻪ ﻋﻨﻮان ورودي ﺑﮕﻴﺮد و ﺑﻪ ﻋﻨﻮان ﺧﺮوﺟﻲ ﻋﺒﺎرت ”) “Balancedدر ﺻﻮرت ﻣﺘﻮازن ﺑﻮدن ﻋﺒﺎرت( و “Not ”) balancedدر ﺻﻮرت ﻧﺎﻣﺘﻮازن ﺑﻮدن ﻋﺒﺎرت( را ﭼﺎپ ﻛﻨﺪ. راﻫﻨﻤﺎﻳﻲ :رﺷﺘﻪ ورودي را از ﭼﭗ ﺑﻪ راﺳﺖ ﭘﻴﻤﺎﻳﺶ ﻛﻨﻴﺪ .در ﻃﻲ اﻳﻦ ﭘﻴﻤﺎﻳﺶ از ﺗﻤﺎم ﻛﺎراﻛﺘﺮﻫﺎ ﺑﻪ ﺟﺰ ")" "]" ،"{" ،"}" ،"(" ،و "[" ﺻﺮفﻧﻈﺮ ﻛﻨﻴﺪ ،ﻛﺎراﻛﺘﺮﻫﺎي ( { ،و [ را در ،Stackﻗﺮار دﻫﻴﺪ ) pushﻛﻨﻴﺪ(. ﺑﺮاي ﻫﺮ ﻳﻚ از ﻛﺎراﻛﺘﺮﻫﺎي ) } ،ﻳﺎ ] ﻳﻚ ﻛﺎراﻛﺘﺮ را از روي Stackﺑﺮدارﻳﺪ ) popﻛﻨﻴﺪ( و ﻛﻨﺘﺮل ﻛﻨﻴﺪ ﻛﻪ آﻳﺎ اﻳﻦ دو ﻛﺎراﻛﺘﺮ ﻣﺘﻨﺎﻇﺮ ﻫﺴﺘﻨﺪ ﻳﺎ ﻧﻪ .اﮔﺮ ﻛﺎراﻛﺘﺮﻫﺎ ﻣﺘﻨﺎﻇﺮ ﻧﺒﺎﺷﻨﺪ و ﻳﺎ Stackﺧﺎﻟﻲ ﺑﺎﺷﺪ ،ﻋﺒﺎرت ﻣﺘﻮازن ﻧﻴﺴﺖ. ﺧﺮوﺟﻲ Not balanced Sharif University of Technology ورودي [(3+a)*4}/r Fall 2010 5 ﻣﺴﺄﻟﻪي دوم )ﻧﺎم ﻓﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ(MergeSort.cpp : ﻫﺪف ﻣﺮﺗﺐ ﻛﺮدن آراﻳﻪ ﺑﺎ روش ادﻏﺎم اﺳﺖ اﻳﻦ ﺗﺎﺑﻊ ﺑﺎﻳﺪ ﺑﻪ ﺷﻴﻮه ﺑﺎزﮔﺸﺘﻲ ﭘﻴﺎده ﺳﺎزي ﺷﻮد .ﺷﻴﻮه ﻛﺎر ﺑﻪ اﻳﻦ ﺻﻮرت اﺳﺖ ﻛﻪ اﺑﺘﺪا ﻧﻴﻤﻪ اول و ﺳﭙﺲ ﻧﻴﻤﻪ دوم آراﻳﻪ ﻣﺮﺗﺐ ﻣﻲ ﺷﻮد و ﺳﭙﺲ اﻳﻦ دو ﺑﺨﺶ در ﻳﻜﺪﻳﮕﺮ ادﻏﺎم ﻣﻲ ﺷﻮﻧﺪ .ﺷﻜﻞ زﻳﺮ اﺟﺮاي اﻳﻦ اﻟﮕﻮرﻳﺘﻢ را ﺑﺮاي آراﻳﻪ اي ﻫﻔﺖ ﻋﻨﺼﺮي ﻧﻤﺎﻳﺶ ﻣﻲ دﻫﺪ. Sharif University of Technology Fall 2010 6 (ﻣﺴﺄﻟﻪي دوم )اداﻣﻪ 7 Fall 2010 Sharif University of Technology ﻣﺴﺄﻟﻪي دوم )اداﻣﻪ( ﻋﻤﻞ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ ﺑﻪ ﺻﻮرت ﺑﺎزﮔﺸﺘﻲ آﻧﻘﺪر اداﻣﻪ ﭘﻴﺪا ﻣﻲ ﻛﻨﺪ ﺗﺎ ﺑﻪ آراﻳﻪ اي ﺗﻚ ﻋﻀﻮي ﺑﺮﺳﻴﻢ .ﺷﻴﻮه ادﻏﺎم ﺑﻪ اﻳﻦ ﺻﻮرت اﺳﺖ ﻛﻪ ﺑﺎ داﺷﺘﻦ اﺷﺎره ﮔﺮ ﺑﻪ آﻏﺎز ﻫﺮ ﻧﻴﻤﻪ ﻣﺮﺗﺐ ﺷﺪه ،ﻣﻲ ﺗﻮان ﺑﺎ ﭘﻴﻤﺎﻳﺶ دو آراﻳﻪ ،ﻫﺮﻛﺪام ﻛﻪ ﻣﻘﺪار ﻛﻮﭼﻜﺘﺮي دارد در آراﻳﻪ ﺟﺪﻳﺪ ﻗﺮار داد و اﺷﺎره ﮔﺮش را ﺑﻪ ﺟﻠﻮ ﺑﺮد . اﻳﻦ ﻛﺎر را ﺗﺎ آﺧﺮ اداﻣﻪ ﻣﻲ دﻫﻴﻢ ﺗﺎ دو آراﻳﻪ ادﻏﺎم ﺷﻮﻧﺪ. )void MergeSort(int *array, int size ﺑﺮاي اﻳﻦ ﻛﻪ ﺑﻬﺘﺮ روش ﻛﺎر اﻳﻦ اﻟﮕﻮرﻳﺘﻢ رو ﺑﻔﻬﻤﻴﺪ ،ﺑﻪ آدرس زﻳﺮ ﻣﺮاﺟﻌﻪ ﻛﻨﻴﺪ )ﺗﻮﺿﻴﺤﺎت ﺧﻮﺑﻲ ﻧﻮﺷﺘﻪ:(. http://www.algorithmdesign.net/handouts/MergeSort.pdf Sharif University of Technology Fall 2010 8 ﻣﺴﺄﻟﻪي ﺳﻮم )ﻧﺎم ﻓﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ(Minesweeper.cpp : آﻳﺎ ﺗﺎ ﺑﻪ ﺣﺎل ﺑﺎزي Minesweeperرا ﺑﺎزي ﻛﺮده اﻳﺪ؟ ﻫﺪف از اﻳﻦ ﺑﺎزي ﻳﺎﻓﺘﻦ ﻣﺤﻞ ﻫﻤﻪ ي ﺑﻤﺐ ﻫﺎ در ﻳﻚ ﺻﻔﺤﻪ ي m×nاﺳﺖ .در اﻳﻦ ﺑﺎزي ﻋﺪدي ﻛﻪ در ﻳﻚ ﻣﺮﺑﻊ ﻧﺸﺎن داده ﻣﻲ ﺷﻮد ﺑﺮاﺑﺮ ﺗﻌﺪاد ﺑﻤﺐ ﻫﺎﻳﻲ اﺳﺖ ﻛﻪ در اﻃﺮاف آن وﺟﻮد دارﻧﺪ .ﻫﺮ ﻣﺮﺑﻊ ﺣﺪاﻛﺜﺮ ﺑﺎ 8ﺧﺎﻧﻪ ﻫﻤﺴﺎﻳﻪ اﺳﺖ. در ﻧﻤﻮﻧﻪاي ﻛﻪ در اداﻣﻪ ﻣﻲآﻳﺪ ﻣﺮﺑﻊ 4×4ورودي داراي 2ﺑﻤﺐ اﺳﺖ .ﺑﻤﺐ ﻫﺎ را ﺑﺎ * ﻧﺸﺎن ﻣﻲ دﻫﻴﻢ. Sharif University of Technology Fall 2010 9 ﻣﺴﺄﻟﻪي ﺳﻮم )اداﻣﻪ( ورودي: ﺧﻂ اول ورودي ﺷﺎﻣﻞ 2ﺗﺎ ﻋﺪد nو (0<m, n<=100) mﻛﻪ ﻧﺸﺎن دﻫﻨﺪه ي ﺗﻌﺪاد ﺳﻄﺮﻫﺎ) (nو ﺳﺘﻮنﻫﺎي) (mﻣﺮﺑﻊ ﻫﺴﺘﻨﺪ .ﻫﺮ ﻳﻚ از nﺧﻂ ﺑﻌﺪي دﻗﻴﻘﺎً ﺷﺎﻣﻞ mﻛﺎراﻛﺘﺮ اﺳﺖ .ﻣﺮﺑﻊ اﻣﻦ ﺑﺎ – و ﻣﺮﺑﻌﻲ ﻛﻪ ﺷﺎﻣﻞ ﺑﻤﺐ اﺳﺖ ﺑﺎ * ﻧﺸﺎن داده ﻣﻲ ﺷﻮد .ﭘﺎﻳﺎن ورودي ﻫﺎ ﺑﺎ 0 0ﻧﺸﺎن داده ﻣﻲ ﺷﻮد. ﺧﺮوﺟﻲ: ﺑﻪ ازاي ﻫﺮ ﻣﺮﺑﻊ ﭘﻴﺎم Field #x:را در ﻳﻚ ﺧﻂ ﭼﺎپ ﻛﻨﻴﺪ ﻛﻪ xﺷﻤﺎرهي ﻣﺮﺑﻊ ورودي اﺳﺖ ﻛﻪ از 1ﺷﺮوع ﻣﻲ ﺷﻮد n .ﺧﻂ ﺑﻌﺪي ﺑﺎﻳﺪ ﺑﻪ ﺟﺎي ﻛﺎراﻛﺘﺮ – ﺗﻌﺪاد ﺑﻤﺐ ﻫﺎي اﻃﺮاف آن و ﺑﻪ ازاي ﻛﺎراﻛﺘﺮ * ﺧﻮد آن )*( ﻗﺮار داده ﺷﻮد و ﺑﻴﻦ ﻫﺮ دو ﺧﺮوﺟﻲ ﻳﻚ ﺧﻂ ﻓﺎﺻﻠﻪ ي ﺧﺎﻟﻲ ﻗﺮار داده ﺷﻮد. Sharif University of Technology Fall 2010 10 ورودي 44 *------*----35 **-------*--00 11 Fall 2010 ﺧﺮوﺟﻲ Field #1: *100 2210 1*10 1110 Field #2: **100 33200 1*100 Sharif University of Technology ﻣﺴﺄﻟﻪي ﭼﻬﺎرم )ﻧﺎم ﻓﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ(Sort.cpp: ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻗﺎﺑﻠﻴﺖ ﻣﺮﺗﺐﺳﺎزي ﺑﺮ ﺣﺴﺐ اﻧﻮاع ﻣﺨﺘﻠﻒ دادهﻫﺎ را داﺷﺘﻪ ﺑﺎﺷﺪ! ﺑﺮاي ﻣﺮﺗﺐ ﺳﺎزي از ﻫﺮ اﻟﮕﻮرﻳﺘﻢ ﻣﺮﺗﺐﺳﺎزي ﻣﻲﺗﻮاﻧﻴﺪ اﺳﺘﻔﺎده ﻛﻨﻴﺪ. ﺑﺮاي اﻳﻦ ﻛﺎر اﺑﺘﺪا ﺳﻪ ﺗﺎﺑﻊ زﻳﺮ را ﭘﻴﺎدهﺳﺎزي ﻛﻨﻴﺪ: ;)][ bool cmpStr(char s1[],char s2 ;) bool cmpDouble(double d1,double d2 ﻫﺮ دو اﻳﻦ ﺗﻮاﺑﻊ ﺗﻨﻬﺎ زﻣﺎﻧﻲ Trueﺑﺮﻣﻲﮔﺮداﻧﻨﺪ ﻛﻪ آرﮔﻮﻣﺎن اول اﻛﻴﺪا ﺑﺰرﮔﺘﺮ از آرﮔﻮﻣﺎن دوم ﺑﺎﺷﺪ. Sharif University of Technology Fall 2010 12 ﻣﺴﺄﻟﻪي ﭼﻬﺎرم )اداﻣﻪ( ورودي :در ﺧﻂ اول nرا ﺑﮕﻴﺮﻳﺪ ﻛﻪ ﺗﻌﺪاد دادهﻫﺎﻳﻲﺳﺖ ﻛﻪ ﺑﺎﻳﺪ ﻣﺮﺗﺐ ﺷﻮﻧﺪ. در ﻫﺮ ﻳﻚ از nﺧﻂ ﺑﻌﺪي اﻃﻼﻋﺎت ﻳﻚ داﻧﺸﺠﻮ را ﺑﮕﻴﺮﻳﺪ .اﻳﻦ اﻃﻼﻋﺎت ﺑﻪ ﺷﺮح زﻳﺮ ﻫﺴﺘﻨﺪ: ﺷﻤﺎرهي داﻧﺸﺠﻮﻳﻲ ﻧﺎم ﺧﺎﻧﻮادﮔﻲ داﻧﺸﺠﻮ )ﻧﺎم داﻧﺸﺠﻮ ﺣﺘﻤﺎ ﻳﻚ ﻛﻠﻤﻪاي اﺳﺖ و ﺑﺎ ﺣﺮف ﺑﺰرگ ﺷﺮوع ﻣﻲﺷﻮﻧﺪ(. ﻣﻌﺪل داﻧﺸﺠﻮ ><stdID> <name> <GPA در آﺧﺮﻳﻦ ﺧﻂ ورودي ﻳﻜﻲ از ﺳﻪ ﻛﻠﻤﻪي ﻛﻠﻴﺪي زﻳﺮ را ﺑﮕﻴﺮﻳﺪ: : -nورودي را ﺑﺮﺣﺴﺐ ﻧﺎم داﻧﺸﺠﻮﻫﺎ ﻣﺮﺗﺐ ﻛﻨﻴﺪ. : -gورودي را ﺑﺮﺣﺴﺐ ﻣﻌﺪل داﻧﺸﺠﻮﻫﺎ ﻣﺮﺗﺐ ﻛﻨﻴﺪ. : -iورودي را ﺑﺮﺣﺴﺐ ﺷﻤﺎرهي داﻧﺸﺠﻮﻳﻲ داﻧﺸﺠﻮﻫﺎ ﻣﺮﺗﺐ ﻛﻨﻴﺪ. ﺧﺮوﺟﻲ :در ﺧﺮوﺟﻲ ،ﻣﺮﺗﺐﺷﺪهي دادهﻫﺎ را در nﺧﻂ ﭼﺎپ ﻛﻨﻴﺪ. Sharif University of Technology Fall 2010 13 (ﻣﺴﺄﻟﻪي ﭼﻬﺎرم )اداﻣﻪ ورودي 5 89765432 Sohrabi 18.34 89765433 Mohammadi 17.68 89765434 Rezaee 18.01 89765435 Javadi 16.47 89765436 Mohammadzadeh 18.20 -n ﺧﺮوﺟﻲ 89765435 Javadi 16.47 89765433 Mohammadi 17.68 89765436 Mohammadzadeh 18.20 89765434 Rezaee 18.01 89765432 Sohrabi 18.34 .* ﺑﻴﻦ وروديﻫﺎ در ﻫﺮ ﺧﻂ ﻳﻚ ﻓﺎﺻﻠﻪ وﺟﻮد دارد 14 Fall 2010 Sharif University of Technology
© Copyright 2026 Paperzz