Midterm exam.pdf

‫ﺑﻪ ﻧﺎم ﺧﺪا‬
‫اﻣﺘﺤﺎن ﻣﻴﺎن ﺗﺮم ﭘﺎﺳﻜﺎل‪ ،‬ﮔﺮوه ‪ ، 4‬ﺣﺴﻴﻨﻲ ﻓﺮح آﺑﺎدي‪86/9/3 ،‬‬
‫‪ -1‬ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪد ﺻﺤﻴﺢ ﻣﺜﺒﺖ ‪ n‬را از ورودي ﮔﺮﻓﺘﻪ‪ ،‬ﺗﻤﺎم زﻳﺮﻣﺠﻮﻋﻪﻫﺎي ﻣﺠﻤﻮﻋﺔ }‪ {1,2,3,…,n‬را ﭼﺎپ ﻛﻨـﺪ‪ .‬ﺑـﺮاي‬
‫ﻧﻤﺎﻳﺶ ﻣﺠﻤﻮﻋﻪ ‪ Ø‬ﻣﻲﺗﻮاﻧﻴﺪ ‪) 0‬ﺻﻔﺮ( ﭼﺎپ ﻛﻨﻴﺪ‪ 15) .‬اﻣﺘﻴﺎز( راﻫﻨﻤﺎﻳﻲ‪ :‬اﺑﺘﺪا ﻣﺠﻤﻮﻋﻪي ﺗﻬﻲ را در ﻧﻈﺮ ﻣﻲﮔﻴﺮﻳﻢ‪ .‬ﺳﭙﺲ در ﻫﺮ ﻣﺮﺣﻠـﻪ‪ ،‬ﻛﻮﭼـﻚﺗـﺮﻳﻦ ‪i‬اي‬
‫را ﭘﻴﺪا ﻣﻲﻛﻨﻴﻢ ﻛﻪ ﻣﺘﻌﻠﻖ ﺑﻪ ﻣﺠﻤﻮﻋﻪ ﻧﺒﺎﺷﺪ‪ .‬اﻳﻦ ‪ i‬را ﺑﻪ ﻣﺠﻤﻮﻋﻪ اﺿﺎﻓﻪ ﻣﻲﻛﻨﻴﻢ‪ ،‬و ﻫﻤﻪي ﻋﺪدﻫﺎي ﻛﻮﭼﻚﺗﺮ از ‪ i‬را از ﻣﺠﻤﻮﻋﻪ ﺣـﺬف ﻣـﻲﻛﻨـﻴﻢ‪ .‬اﮔـﺮ ﺑـﻪ ﻫﻤـﻴﻦ ﺻـﻮرت اداﻣـﻪ‬
‫دﻫﻴﻢ‪ ،‬در ﻫﺮ ﻣﺮﺣﻠﻪ زﻳﺮﻣﺠﻤﻮﻋﻪاي ﺟﺪﻳﺪ ﺑﻪ دﺳﺖ ﻣﻲآورﻳﻢ‪....‬‬
‫‪ -2‬ﺧﺮوﺟﻲ )ﺗﻤﺎم ﻣﻘﺎدﻳﺮ ﻣﺘﻐﻴﺮ آراﻳﻪي ‪ (a‬ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﭘﺲ از اﺟﺮا ﭼﻪ ﻣﻲﺑﺎﺷﺪ؟ )ﻣﻘﺎدﻳﺮ ﻫﺮ ﺳﻠﻮل آراﻳﻪ را ﺑﻪ ﺗﻔﻜﻴﻚ ﻫﺮ ﻣﺮﺣﻠﻪ اﺟﺮاي ﺣﻠﻘﻪ‬
‫ﺑﻴﺮوﻧﻲ )ﺣﻠﻘﻪ ‪ (i‬ﻣﺎﻧﻨﺪ ﺟﺪول زﻳﺮ ﺑﻨﻮﻳﺴﻴﺪ‪ 20) (.‬اﻣﺘﻴﺎز(‬
‫]‪A[6‬‬
‫?‬
‫]‪A[5‬‬
‫?‬
‫]‪A[4‬‬
‫?‬
‫]‪A[3‬‬
‫?‬
‫]‪A[2‬‬
‫?‬
‫]‪A[1‬‬
‫?‬
‫‪i‬‬
‫‪1‬‬
‫‪..‬‬
‫‪Const‬‬
‫; ‪Size = 6‬‬
‫‪var‬‬
‫;‪a: array[1..Size] of Integer‬‬
‫;‪i, j, tmp: Integer‬‬
‫‪begin‬‬
‫;‪a[1] := -23‬‬
‫;‪a[2] := 45‬‬
‫;‪a[3] := -12‬‬
‫;‪a[4] := 56‬‬
‫;‪a[5] := -34‬‬
‫;‪a[6] := 10‬‬
‫‪for i := 1 to Size-1 do‬‬
‫‪for j := 1 to Size-i do‬‬
‫‪if a[j] > a[j + 1] then‬‬
‫‪begin‬‬
‫;]‪tmp := a[j‬‬
‫;]‪a[j] := a[j + 1‬‬
‫;‪a[j + 1] := tmp‬‬
‫;‪end‬‬
‫‪end.‬‬
‫‪ -3‬ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻋﺪد ﻣﺜﺒﺖ و ﺻﺤﻴﺢ ‪ N‬را از ورودي ﮔﺮﻓﺘﻪ و ﺣﺎﺻﻞ ﺳﺮي زﻳﺮ را در ﺧﺮوﺟﻲ ﭼﺎپ ﻛﻨﺪ‪ 20) .‬اﻣﺘﻴﺎز(‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪−‬‬
‫‪+‬‬
‫‪− ... ±‬‬
‫‪2‬‬
‫‪2‬‬
‫‪3‬‬
‫‪2‬‬
‫‪x x + 2x‬‬
‫‪x + 2 x + 3x‬‬
‫‪x + 2 x + 3 x 3 + ... + Nx N‬‬
‫‪ -4‬ﻳﻚ آراﻳﻪ را ‪ Bitanic‬ﻣﻲﮔﻮﻳﻴﻢ ﻫﺮﮔﺎه از ﻋﻨﺼﺮ اول ﺗﺎ ﻋﻨﺼﺮ ‪-i‬م ﺻﻌﻮدي و ﺳﭙﺲ از ﻋﻨﺼﺮ ‪-i‬م ﺗﺎ ﻋﻨﺼﺮ ﭘﺎﻳﺎﻧﻲ ﻧﺰوﻟﻲ ﺑﺎﺷﺪ‪ .‬ﻣﺜﻼً آراﻳﻪ ﺑﺎ‬
‫‪1 3 6 9 12 5 3 0 -4 -8 -20‬‬
‫ﻋﻨﺎﺻﺮ زﻳﺮ ‪ Bitanic‬ﻣﻲﺑﺎﺷﺪ‪:‬‬
‫ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ دو آراﻳﻪ ‪ ) Bitanic‬از اﻋﺪاد ﺻﺤﻴﺢ( از ورودي ﺑﮕﻴﺮد و ﻳﻚ آراﻳﻪ ‪ Bitanic‬ﺑﻪ ﻋﻨﻮان ﺧﺮوﺟﻲ ﭼﺎپ ﻛﻨﺪ‪) .‬در ﻫﻨﮕﺎم‬
‫درﻳﺎﻓﺖ ورودي‪ ،‬ﻋﺪد ‪ -32768‬ﺑﻪ ﻋﻨﻮان ﭘﺎﻳﺎن ورودي آراﻳﻪ ﻣﺤﺴﻮب ﻣﻲﺷﻮد‪ 30) (.‬اﻣﺘﻴﺎز( ﻣﺜﺎل‪:‬‬
‫‪Input‬‬
‫‪1 3 6 9 14 5 3 0 -4 -8 -20 -32768‬‬
‫‪5 6 8 12 9 1 -24 -32768‬‬
‫‪Output‬‬
‫‪1 3 5 6 6 8 9 12 14 9 5 3 1 0 -4 -8 -20 -24‬‬
‫‪١‬‬
‫‪ -5‬ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ اﺑﺘﺪا ﻋﺪد ﻣﺜﺒﺖ و ﺻﺤﻴﺢ ‪ N‬را از ورودي ﮔﺮﻓﺘﻪ و ﭘﺲ از آن ‪ 2N‬ﻋﺪد ﺻﺤﻴﺢ دﻳﮕﺮ از ورودي درﻳﺎﻓﺖ ﻛﺮده و‬
‫ﻣﺸﺨﺺ ﻛﻨﺪ ﻛﻪ آﻳﺎ ﻣﻲﺗﻮان اﻋﺪاد وارد ﺷﺪه را ﺑﻪ دو ﮔﺮوه ‪ N‬ﺗﺎﻳﻲ ﺑﻪﮔﻮﻧﻪاي ﺗﻘﺴﻴﻢ ﻛﺮد ﻛﻪ ﻣﺠﻤﻮع اﻋﺪاد اﻳﻦ دو ﮔﺮوه ﺑﺎ ﻫﻢ ﻳﻜﺴﺎن‬
‫ﺑﺎﺷﻨﺪ ﻳﺎ ﺧﻴﺮ‪ 25) .‬اﻣﺘﻴﺎز( ﻣﺜﺎل‪:‬‬
‫‪Input‬‬
‫‪Input‬‬
‫‪3‬‬
‫‪4‬‬
‫‪10 6 5 2 3 4‬‬
‫‪80 1000 34 4 53 10 1000 -1‬‬
‫‪Output‬‬
‫‪Impossible‬‬
‫‪Output‬‬
‫‪10+2+3 = 6+5+4‬‬
‫ﻣﺴﺌﻠﻪ اﺿﺎﻓﻪ‪:‬‬
‫ﻣﻲﺧﻮاﻫﻴﻢ ﻋﺪد ‪ n‬را ﺑﻪ ﺗﻌﺪادي ﻋﺪد اﻓﺮاز ﻛﻨﻴﻢ )ﻣﺠﻤﻮع اﻳﻦ اﻋﺪاد ﺑﺮاﺑﺮ ‪ n‬ﺑﺎﺷﺪ( ﺑﻪ ﻃﻮريﻛﻪ ﺣﺎﺻﻞﺿﺮب اﻳﻦ اﻋﺪاد ﻣﺎﻛﺰﻳﻤﻢ ﺷـﻮد‪.‬‬
‫ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﺪ ﻛﻪ ﺑﺎ درﻳﺎﻓﺖ ﻋﺪد ‪ ، n‬ﻣﺎﻛﺰﻳﻤﻢ ﺣﺎﺻﻞﺿﺮب اﻓﺮازﻫﺎي آن را ﭼﺎپ ﻛﻨﺪ‪ 20) .‬اﻣﺘﻴﺎز( ﻣﺜﺎل‪ :‬اﻳﻦ ﻣﺎﻛﺰﻳﻤﻢ ﺑـﺮاي ‪، n = 6‬‬
‫ﺑﺮاﺑﺮ ‪ 9‬و ﺑﺮاي ‪ n = 7‬ﺑﺮاﺑﺮ ‪ 12‬ﺧﻮاﻫﺪ ﺑﻮد )دارﻳﻢ ‪ 6 = 3 + 3‬و ‪.(7 = 4 + 3‬‬
‫ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ‪.‬‬
‫ﺣﺴﻴﻨﻲ ﻓﺮح آﺑﺎدي‬
‫‪٢‬‬