Assignment2.pdf

‫‪ ‬‬
‫‪ ‬‬
‫ﺗﻤﺮﻳﻦ ﺳﺮي دوم‬
‫درس ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﺷﻲءﮔﺮا‬
‫ﻣﻮﻋﺪ ارﺳﺎل‪ :‬ﺷﻨﺒﻪ ‪ 15‬ﻓﺮوردﻳﻦ ‪1388‬‬
‫ﻣﺤﻤﺪ دﺷﺘﻲ ‪ -‬اﻣﻴﺮ ﺷﻴﺨﻬﺎ‬
‫‪ ‬‬
‫‪ ‬ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا‬
‫‪ ‬ﻣﻬﻠﺖ ﺗﺤﻮﻳﻞ‪ :‬ﺷﻨﺒﻪ ‪ 15‬ﻓﺮوردﻳﻦ ‪1388‬‬
‫ﻧﻜﺎت ﻛﻠﻲ‬
‫‪ ‬ورودي ﺑﺮﻧﺎﻣﻪﻫﺎ ورودي اﺳﺘﺎﻧﺪارد )‪ (console‬و ﺧﺮوﺟﻲ آﻧﻬﺎ ﻧﻴﺰ ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد اﺳﺖ‪ .‬‬
‫ﺑﺮاي ﭼﺎپ در ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد از ﺗﻮاﺑﻌﻲ ﺷﺒﻴﻪ ﺑﻪ ‪ System.out.println‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫ﺑﺮاي ﺧﻮاﻧﺪن از ورودي اﺳﺘﺎﻧﺪارد ﻧﻴﺰ از ﻛﻼس ‪ Scanner‬ﻛﻤﻚ ﺑﮕﻴﺮﻳﺪ‪.‬‬
‫‪ ‬ﻣﺸﺨﺼﺎت ﻛﻠﻲ ﺗﻤﺮﻳﻦ ﻫﺎ ﺑﻪ اﻳﻦ ﺷﺮح اﺳﺖ‪:‬‬
‫ﻧﺎم ﻛﻼس‬
‫ﻧﺎم ﻓﺎﻳﻞ‬
‫ﻧﻤﺮه‬
‫ﺗﻤﺮﻳﻦ ‪1‬‬
‫‪Rational‬‬
‫‪Rational.java‬‬
‫‪25‬‬
‫ﺗﻤﺮﻳﻦ ‪2‬‬
‫‪ Polynomial‬‬
‫‪ Polynomial.java‬‬
‫‪25‬‬
‫ﺗﻤﺮﻳﻦ ‪3‬‬
‫‪Matrix‬‬
‫‪ Matrix.java‬‬
‫‪25‬‬
‫ﺗﻤﺮﻳﻦ ‪4‬‬
‫‪Projectile‬‬
‫‪Projectile.java‬‬
‫‪25‬‬
‫‪ ‬‬
‫‪ ‬ﻫﺪف از اﻳﻦ ﺗﻤﺮﻳﻦ‪ ،‬آزﻣﺎﻳﺶ درك ﺷﻤﺎ از ﻣﻔﻬﻮم ﺷﻲءﮔﺮاﻳﻲ و ﺑﻜﺎرﮔﻴﺮي اﻳﻦ ﻣﻔﻬﻮم در ﻋﻤﻞ اﺳﺖ‪ .‬ﭘﺲ از اﻳﻦ‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎ ﺑﺎﻳﺪ ﺑﺮاﺣﺘﻲ ﺑﺘﻮاﻧﻴﺪ ﻣﺪﻟﻬﺎي ﺳﺎده ﺟﻬﺎن واﻗﻌﻲ را ﺑﺼﻮرت ﺷﻲء ﮔﺮا ﻣﺪل ﻛﻨﻴﺪ‪ .‬‬
‫‪ ‬ﺑﺮاي ارﺳﺎل ﺗﻤﺮﻳﻦ ﺑﻪ آدرس زﻳﺮ ﻣﺮاﺟﻌﻪ ﻛﻨﻴﺪ‪ :‬‬
‫‪http://ce.sharif.edu/~m_jahangir/java882 ‬‬
‫ﺗﻮﺟﻪ ﻧﻤﺎﻳﻴﺪ ﻛﻪ ﺑﺎﻳﺪ ﻫﺮ ﻛﺪام از ﻓﺎﻳﻠﻬﺎي ‪ .java‬را ﺑﻄﻮر ﺟﺪاﮔﺎﻧﻪ ارﺳﺎل ﻧﻤﺎﻳﻴﺪ‪.‬‬
‫‪ ‬ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ ﺳﺎﻋﺖ ‪) 11:59‬ﻇﻬﺮ( روز ﺷﻨﺒﻪ ‪ 15‬ﻓﺮوردﻳﻦ ‪ 87‬ﺑﻮده و ﺑﻪ ﻫﻴﭻ ﻋﻨﻮان ﺗﻤﺪﻳﺪ ﻧﺨﻮاﻫﺪ ﺷﺪ‪.‬‬
‫‪ %20‬ﻧﻤﺮه‪ ،‬از ‪ 24‬ﺳﺎﻋﺖ ﺗﺎ ‪ 25‬ﺳﺎﻋﺖ‪ ،‬ﺑﻪ ازاي ﻫﺮ ‪ 2‬دﻗﻴﻘﻪ ﻣﻮﺟﺐ ﻛﺴﺮ ﺷﺪن ‪ %1‬ﻧﻤﺮهي دﻳﮕﺮ و ﺑﻴﻦ ‪ 25‬ﺳﺎﻋﺖ‬
‫ﺗﺎ ‪ 48‬ﺳﺎﻋﺖ ﺑﺎﻋﺚ ﻛﺴﺮ ﺷﺪن ‪ %50‬ﻧﻤﺮه ﻣﻲﺷﻮد‪ .‬ﺗﺄﺧﻴﺮ ﺑﻴﺸﺘﺮ از ‪ 48‬ﺳﺎﻋﺖ ﻗﺎﺑﻞ ﻗﺒﻮل ﻧﻴﺴﺖ‪ .‬‬
‫‪ ‬ﻗﻄﻊ ﺑﻮدن اﻳﻨﺘﺮﻧﺖ ﺧﻮاﺑﮕﺎه‪ ،‬ﻛﻨﺪي ﭘﺎﻳﮕﺎه اﻳﻨﺘﺮﻧﺘﻲ داﻧﺸﻜﺪه‪ ،‬ﺗﻤﺎم ﺷﺪن ﻛﺎرت اﻳﻨﺘﺮﻧﺖ و … ﻫﻴﭻﻛﺪام دﻟﻴﻞ‬
‫ﻣﻮﺟﻬﻲ ﺑﺮاي ﺗﺄﺧﻴﺮ ﻧﻴﺴﺘﻨﺪ‪ .‬ﺑﻨﺎﺑﺮاﻳﻦ ﭘﻴﺸﻨﻬﺎد ﻣﻲﺷﻮد ﺟﻮابﻫﺎي ﺧﻮد را در داﻧﺸﻜﺪه ارﺳﺎل ﻛﻨﻴﺪ‪ .‬‬
‫‪ ‬ﻫﺮﮔﻮﻧﻪ روﻧﻮﺷﺖ‪ ،1‬ﺑﺮاي ﻣﻨﺒﻊ روﻧﻮﺷﺖ و ﻫﻤﭽﻨﻴﻦ ﻧﺴﺨﻪﻫﺎي روﻧﻮﻳﺴﻲ ﺷﺪه ‪ -2‬ﻧﻤﺮه در ﭘﻲ ﺧﻮاﻫﺪ داﺷﺖ‪ .‬‬
‫‪ ‬‬
‫‪ 1‬ﻛﭙﻲ ﻳﺎ ﻫﻤﺎن ﻛُﭗ‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا‬
‫‪ ‬ﺗﺄﺧﻴﺮ ﺗﺎ ‪ 1‬ﺳﺎﻋﺖ‪ ،‬ﺑﻪ ازاي ﻫﺮ ‪ 3‬دﻗﻴﻘﻪ ﻣﻮﺟﺐ ﻛﺴﺮ ﺷﺪن ‪ %1‬ﻧﻤﺮه‪ ،‬از ‪ 1‬ﺳﺎﻋﺖ ﺗﺎ ‪ 24‬ﺳﺎﻋﺖ ﻣﻮﺟﺐ ﻛﺴﺮ ﺷﺪن‬
‫‪ 1‬‬
‫‪ ‬‬
‫‪ ‬ﺗﻼش ﺑﺮاي اﺳﺘﻔﺎده از ﻣﻨﺎﺑﻊ ﺳﻴﺴﺘﻢ ﻣﺎﻧﻨﺪ ﻛﺎرت ﺻﺪا و ﭘﺮﻳﻨﺘﺮ و ﻧﻮﺷﺘﻦ ﺑﻪ ﻓﺎﻳﻞ و ‪ ...‬ﻣﻨﺠﺮ ﺑﻪ درﻳﺎﻓﺖ ﻧﻤﺮهي‬
‫ﺻﻔﺮ در اﻳﻦ ﺗﻤﺮﻳﻦ ﻣﻲﺷﻮد‪ .‬‬
‫‪ ‬ﺳﻮاﻻت ﺧﻮد را ﺑﺎ ﻓﺮﺳﺘﺎدن اﻳﻤﻴﻞ ﺑﻪ آدرس ‪ javaTA882@GMail.com‬ﻳﺎ ﺑﺎ ‪ chat‬ﺑﺎ آﻳﺪيﻫﺎي‬
‫‪ java_ta‬ﻳﺎ ‪ ta.java‬ﻣﻄﺮح ﻛﻨﻴﺪ‪ .‬‬
‫‪ ‬ﻧﺤﻮه ﺗﺼﺤﻴﺢ ﺗﻤﺮﻳﻨﻬﺎي ‪ 1‬و ‪ 2‬و ‪ 3‬ﺑﺼﻮرت ﺑﺮﺧﻂ )‪ (Online Judge‬اﺳﺖ‪ .‬ﺗﻮﺟﻪ ﻓﺮﻣﺎﻳﻴﺪ ﻛﻪ ﺗﺤﻮﻳﻞ ﺣﻀﻮري‬
‫ﺑﺮاي اﻳﻦ ﺗﻤﺮﻳﻦﻫﺎ اﺟﺒﺎري اﺳﺖ و در ﺗﺤﻮﻳﻞ ﺣﻀﻮري‪ ،‬ﻓﻘﻂ ﻧﺤﻮه ﻛﺪﻧﻮﻳﺴﻲ و ﻣﻨﻄﻖ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﻣﻮرد ﭘﺮﺳﺶ‬
‫ﻗﺮار ﻣﻲﮔﻴﺮد و در ﺻﻮرﺗﻲ ﻛﻪ ﺷﻤﺎ ﻧﺘﻮاﻧﻴﺪ ﻣﻨﻄﻖ ﺧﻮد را ﺑﺪرﺳﺘﻲ ﺑﻴﺎن ﻛﻨﻴﺪ‪ ،‬ﻧﻤﺮه ﺗﻤﺮﻳﻦ ﻣﻮرد ﻧﻈﺮ را ﻧﺨﻮاﻫﻴﺪ‬
‫ﮔﺮﻓﺖ و اﻳﻦ ﺗﻘﻠﺐ ﻧﻴﺰ ﻣﺤﺴﻮب ﺧﻮاﻫﺪ ﮔﺮدﻳﺪ‪ .‬‬
‫‪ ‬در ﻣﻮرد ﺗﻤﺮﻳﻦ ‪ ،4‬ﺗﻤﺎﻣﻲ ﻧﻤﺮه در ﻫﻨﮕﺎم ﺗﺤﻮﻳﻞ ﺣﻀﻮري داده ﺧﻮاﻫﺪ ﺷﺪ‪ .‬ﺗﻮﺟﻪ ﻧﻤﺎﻳﻴﺪ ﻛﻪ ﻣﻌﻴﺎر ﺗﺤﻮﻳﻞ ﺗﻤﺮﻳﻦ‬
‫‪ 4‬ﺑﺮ اﺳﺎس درﺳﺘﻲ ﻛﺎرﻛﺮد ﻃﺒﻖ ﺻﻮرت ﺳﻮالﻫﺎ و وﺟﻮد ﻳﻚ واﺳﻂ ﮔﺮاﻓﻴﻜﻲ ﻛﻪ وﻳﮋﮔﻲﻫﺎي ﮔﻔﺘﻪ ﺷﺪه را داﺷﺘﻪ‬
‫ﺑﺎﺷﺪ‪ ،‬ﻣﻲﺑﺎﺷﺪ‪ .‬‬
‫‪ ‬ﺗﺎرﻳﺦ ﺗﺤﻮﻳﻞ ﺣﻀﻮري ‪ 17‬و ‪ 18‬ﻓﺮوردﻳﻦ ﻣﻲ ﺑﺎﺷﺪ‪ .‬‬
‫‪ ‬ﺗﻌﺪادي ﺗﻤﺮﻳﻦ ﺑﻪ ﺻﻮرت اﺧﺘﻴﺎري داده ﺷﺪه اﺳﺖ‪ .‬اﻳﻦ ﺗﻤﺮﻳﻦﻫﺎ ﻫﻴﭻ ﻧﻤﺮهاي ﻧﺪارﻧﺪ و ﺗﺼﺤﻴﺢ ﻧﺨﻮاﻫﻨﺪ ﺷﺪ‪.‬‬
‫اﮔﺮﭼﻪ اﻳﻦ ﺗﻤﺮﻳﻦﻫﺎ ﻫﻴﭻ ﻧﻤﺮهاي ﻧﺪارﻧﺪ‪ ،‬وﻟﻲ ﭘﻴﺸﻨﻬﺎد ﻣﻲﺷﻮد ﻛﻪ ﺑﺎ ﺣﻞ اﻳﻦ ﺗﻤﺮﻳﻦﻫﺎ‪ ،‬ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﺧﻮد را ﻗﻮي‬
‫ﻛﻨﻴﺪ‪ .‬‬
‫‪ ‬‬
‫‪ ‬ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا‬
‫‪ 2‬‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬‬
‫ﺗﻤﺮﻳﻦ ‪(Rational.java) 1‬‬
‫ﻛﻼﺳﻲ ﺑﺎ ﻧﺎم ‪ Rational‬ﺑﺼﻮرت زﻳﺮ ﭘﻴﺎده ﺳﺎزي ﻧﻤﺎﻳﻴﺪ‬
‫‪class Rational ‬‬
‫‪{ ‬‬
‫;)‪public Rational(int num, int denum‬‬
‫‪ ‬‬
‫‪public Rational(int num); ‬‬
‫‪ ‬‬
‫;)‪public Rational(Rational base‬‬
‫‪ ‬‬
‫;)(‪public Rational‬‬
‫‪ ‬‬
‫‪public Rational add(Rational num); ‬‬
‫‪ ‬‬
‫;)‪public Rational sub(Rational num‬‬
‫‪ ‬‬
‫‪public Rational mul(Rational num); ‬‬
‫‪ ‬‬
‫;)‪public Rational div(Rational num‬‬
‫‪ ‬‬
‫;)(‪public double toFloatingPoint‬‬
‫‪ ‬‬
‫‪public String toString(); ‬‬
‫‪ ‬‬
‫‪} ‬‬
‫اﻳﻦ ﻛﻼس ﺑﺎﻳﺪ ﻣﺤﺎﺳﺒﺎت رﻳﺎﺿﻲ را ﺑﺮ روي ﻛﺴﺮﻫﺎ اﻧﺠﺎم دﻫﺪ‪ .‬ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛـﻪ ﻫﻤﻴﺸـﻪ ﺑﺎﻳـﺪ ﻧﺘـﺎﻳﺠﻲ ﻛـﻪ در ﻣﺘﻐﻴﺮﻫـﺎي‬
‫دروﻧﻲ ﺧﻮد ذﺧﻴﺮه ﻣﻲ ﻛﻨﻴﺪ‪ ،‬در ﺣﺎﻟﺖ ﺳﺎده ﺷﺪه‪ ،‬ﺑﺎﺷﻨﺪ‪) .‬ﺑﺮاي ﻣﺜﺎل‪ ،‬ﻛﺴﺮ ‪ 2/4‬ﺑﺼﻮرت ﻳﻚ ﺷﻲء ذﺧﻴﺮه ﺧﻮاﻫﺪ ﺷﺪ ﻛـﻪ‬
‫ﺻﻮرت آن ‪ 1‬و ﻣﺨﺮج آن ‪ 2‬اﺳﺖ(‪.‬‬
‫ﭘﺎراﻣﺘﺮﻫﺎي ورودي ﻛﻪ ﻣﻲﮔﻴﺮد(‬
‫ﻳﻚ ﺳﺎزﻧﺪه ﺑﺪون آرﮔﻮﻣﺎن ﻧﻴﺰ ﻓﺮاﻫﻢ ﻛﻨﻴﺪ ﺗﺎ در ﺣﺎﻟﺘﻲ ﻛﻪ در اﺑﺘﺪا ﻣﻘﺪاري داده ﻧﻤﻲ ﺷـﻮد‪ ،‬ﻛﺴـﺮ ﺑﺼـﻮرت ﭘـﻴﺶ ﻓـﺮض‪،‬‬
‫ﻣﻘﺪار ﺻﻔﺮ را ﺑﮕﻴﺮد‪.‬‬
‫ﻳﻚ ﺳﺎزﻧﺪه ﻧﻴﺰ ﻓﺮاﻫﻢ ﻛﻨﻴﺪ ﻛﻪ از روي ﻳﻚ ﺷﻲء ‪ Rational‬دﻳﮕﺮ ﺑﺘﻮاﻧـﺪ ﺧـﻮد را ﺑﺴـﺎزد‪) .‬ﻳـﻚ ‪ Rational‬را ﺑﻌﻨـﻮان‬
‫آرﮔﻮﻣﺎن ﺑﮕﻴﺮد(‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا‬
‫ﻳﻚ ﺳﺎزﻧﺪه ﻓﺮاﻫﻢ ﻛﻨﻴﺪ ﺗﺎ ﺑﺘﻮان ﻳﻚ ﻧﻤﻮﻧﻪ از اﻳـﻦ ﺷـﻲء را ﻫﻨﮕـﺎم ﺳـﺎﺧﺘﻪ ﺷـﺪن‪ ،‬ﻣﻘـﺪاردﻫﻲ اوﻟﻴـﻪ ﻧﻴـﺰ ﻛـﺮد‪) .‬ﺗﻮﺳـﻂ‬
‫‪ 3‬‬
‫‪ ‬‬
‫ﻳﻚ ﺳﺮي ﻣﺘﺪﻫﺎي ‪ public‬ﺑﺮاي ﻫﺮ ﻛﺪام از اﻋﻤﺎل زﻳﺮ ﻗﺮار دﻫﻴﺪ‪:‬‬
‫‪ .1‬ﺟﻤﻊ ﻛﺴﺮ ﻓﻌﻠﻲ ﺑﺎ ﻳﻚ ﻛﺴﺮ دﻳﮕﺮ ﺑﻮﺳﻴﻠﻪ ﻣﺘﺪ ‪ .add‬‬
‫)‪public Rational add (Rational num‬‬
‫‪ .2‬ﺗﻔﺮﻳﻖ ﻛﺴﺮ ﻓﻌﻠﻲ از ﻳﻚ ﻛﺴﺮ دﻳﮕﺮ ﺑﻮﺳﻴﻠﻪ ﻣﺘﺪ ‪ .sub‬‬
‫)‪public Rational sub (Rational num‬‬
‫‪ .3‬ﺿﺮب ﻛﺴﺮ ﻓﻌﻠﻲ ﺑﺎ ﻳﻚ ﻛﺴﺮ دﻳﮕﺮ ﺑﻮﺳﻴﻠﻪ ﻣﺘﺪ ‪ .mul‬‬
‫)‪public Rational mul (Rational num‬‬
‫‪ .4‬ﺗﻘﺴﻴﻢ ﻛﺴﺮ ﻓﻌﻠﻲ ﺑﺎ ﻳﻚ ﻛﺴﺮ دﻳﮕﺮ ﺑﻮﺳﻴﻠﻪ ﻣﺘﺪ ‪ .div‬‬
‫)‪public Rational div (Rational num‬‬
‫ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ در ﺗﻤﺎﻣﻲ ﻣﺘﺪﻫﺎي ﺑﺎﻻ ﻧﺘﺎﻳﺞ در ﺷﻲء ﻛﻪ ﻣﺘﺪ ﺑﺮ روي آن ﺻﺪا زده ﺷﺪه اﺳﺖ‪ ،‬ذﺧﻴﺮه ﻧﻤـﻲ ﺷـﻮﻧﺪ‬
‫ﺑﻠﻜﻪ ﺑﺎﻳﺪ در ﻳﻚ ﺷﻲء ﻛﺴﺮ ﺟﺪﻳﺪ ذﺧﻴﺮه ﺷﻮﻧﺪ ﻛﻪ ﺗﻮﺳﻂ اﻳﻦ ﻣﺘﺪﻫﺎ ﺑﺮﮔﺮداﻧﺪه ﻣﻲ ﺷﻮد‪ .‬‬
‫ﺑﺮاي ﻣﺜﺎل اﮔﺮ اﻋﺪاد ﻛﺴﺮي ‪ x‬و ‪ y‬را داﺷﺘﻪ ﺑﺎﺷﻴﻢ و ﻣﻘﺪار اوﻟﻴﻪ ﻫﺮﻛﺪام از آﻧﻬﺎ ‪ 1/2‬ﺑﺎﺷﺪ‪ ،‬ﻋﻤﻞ )‪ x.add(y‬ﺑـﺮ‬
‫روي ﻣﻘﺎدﻳﺮ ‪ x‬و ‪ y‬ﺗﺄﺛﻴﺮي ﻧﺨﻮاﻫﺪ داﺷﺖ و ﻣﻘﺪار ﻫﺮ دوي آﻧﻬﺎ ‪ 1/2‬ﺑﺎﻗﻲ ﻣﻲ ﻣﺎﻧﺪ‪ .‬‬
‫‪ .5‬ﻳﻚ ﻋﺪد ﻛﺴﺮي را ﺑﻪ ﻓﺮﻣﺖ اﻋﺸﺎري ﺗﺒﺪﻳﻞ ﻛﻨﻴﺪ‪ ،‬ﺑﻮﺳﻴﻠﻪ ﻣﺘﺪ ‪ toFloatingPoint.‬‬
‫)‪public double toFloatingPoint (Rational num‬‬
‫‪ .6‬ﻳﻚ ﻋﺪد ﻛﺴﺮي را ﺑﻪ رﺷﺘﻪ ﻣﺘﻨﻲ ﺑﺎ ﻗﺎﻟﺐ "‪ "a/b‬ﺗﺒﺪﻳﻞ ﻛﻨﻴﺪ ﻛﻪ ‪ a‬ﺻﻮرت ﻛﺴﺮ و ‪ b‬ﻣﺨﺮج ﻛﺴﺮ اﺳﺖ‪ .‬‬
‫‪ ‬‬
‫‪ ‬ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا‬
‫‪ 4‬‬
‫‪ ‬‬
‫)( ‪public String toString‬‬
(Polynomial.java) 2 ‫ﺗﻤﺮﻳﻦ‬
:‫ را ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ ﻛﻪ ﺑﻪ ﺻﻮرت زﻳﺮ ﻣﻲ ﺑﺎﺷﺪ‬Polynomial ‫در اﻳﻦ ﺳﻮال ﺷﻤﺎ ﺑﺎﻳﺪ ﻛﻼس‬
class Polynomial { Polynomial(double[] coefficients); Polynomial(String str); double evaluate(double x); int degree(); Polynomial add(Polynomial p); Polynomial subtract(Polynomial p); Polynomial multiply(Polynomial p); Polynomial divide(Polynomial p); Polynomial differentiate(); Polynomial integral(double constant); double findRoot(double start, double end, double accuracy) double max(double start, double end, double accuracy) boolean equals(Polynomial p); String toString(); ‫ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا‬ } 5
.‫ اول آراﻳﻪ اي از ﺿﺮاﻳﺐ ﻣﻲ ﮔﻴﺮد و ﭼﻨﺪﺟﻤﻠﻪاي را ﻣﻲ ﺳﺎزد‬Constructor
(‫( )اﺧﺘﻴﺎري‬x^2+13x+1388 ‫ )ﻣﺜﻼ‬.‫ دوم ﻳﻚ رﺷﺘﻪ ﻣﻲ ﮔﻴﺮد و ﭼﻨﺪﺟﻤﻠﻪاي را ﻣﻲ ﺳﺎزد‬Constructor
‫ ﻣﻘﺪار داده ﺷﺪه را ﺑﻪ ﻣﺘﻐﻴﺮ ﭼﻨﺪﺟﻤﻠﻪاي ﻣﻨﺼﻮب ﻣﻲ ﻛﻨﺪ و ﺳﭙﺲ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ آن ﻣﻘﺪار ﭼﻨﺪﺟﻤﻠﻪاي را‬،evaluate ‫ﻣﺘﺪ‬
.‫ﺑﺪﺳﺖ ﻣﻲ آورد‬
.‫ درﺟﻪي ﭼﻨﺪﺟﻤﻠﻪاي را ﺑﺮﻣﻲﮔﺮداﻧﺪ‬،degree ‫ﻣﺘﺪ‬
.‫ ﭼﻨﺪﺟﻤﻠﻪ اي داده ﺷﺪه را ﺑﺎ ﭼﻨﺪﺟﻤﻠﻪاي ﻣﺎ ﺟﻤﻊ ﻣﻲ ﻛﻨﺪ و ﺣﺎﺻﻞ را ﺑﻌﻨﻮان ﺧﺮوﺟﻲ ﺑﺮﻣﻲ ﮔﺮداﻧﺪ‬،add ‫ﻣﺘﺪ‬
‫‪ ‬‬
‫ﻣﺘﺪ ‪ ،subtract‬ﭼﻨﺪﺟﻤﻠﻪ اي داده ﺷﺪه از ﭼﻨﺪﺟﻤﻠﻪ اي ﻣﺎ ﻛﻢ ﻣﻲ ﻛﻨﺪ و ﺣﺎﺻﻞ را ﺑﻌﻨﻮان ﺧﺮوﺟﻲ ﺑﺮﻣﻲ ﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،multiply‬ﭼﻨﺪﺟﻤﻠﻪ اي داده ﺷﺪه را در ﭼﻨﺪﺟﻤﻠﻪ اي ﻣﺎ ﺿﺮب ﻣﻲ ﻛﻨﺪ و ﺣﺎﺻﻞ را ﺑﻌﻨﻮان ﺧﺮوﺟﻲ ﺑﺮﻣﻲ ﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،divide‬ﭼﻨﺪﺟﻤﻠﻪ اي ﻣﺎ را ﺑﺮ ﭼﻨﺪﺟﻤﻠﻪ اي داده ﺷﺪه ﺗﻘﺴﻴﻢ ﻣﻲ ﻛﻨﺪ و ﺧﺎرج ﻗﺴﻤﺖ را ﺑﻌﻨﻮان ﺧﺮوﺟﻲ ﺑﺮﻣﻲ‬
‫ﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،differentiate‬ﻣﺸﺘﻖ ﭼﻨﺪﺟﻤﻠﻪ اي را ﺑﻌﻨﻮان ﺧﺮوﺟﻲ ﺑﺮﻣﻲ ﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،integral‬اﻧﺘﮕﺮال ﭼﻨﺪﺟﻤﻠﻪ اي را ﺑﺎ ﺟﻤﻠﻪ ي ﺛﺎﺑﺖ ‪ constant‬ﺑﺮﻣﻲ ﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،findRoot‬رﻳﺸﻪ ي ﭼﻨﺪﺟﻤﻠﻪ اي را از ‪ start‬ﺗﺎ ‪ end‬ﺑﺎ دﻗﺖ ‪ accuracy‬ﺑﺮﻣﻲ ﮔﺮداﻧﺪ‪ .‬در ﺻﻮرﺗﻴﻜﻪ رﻳﺸﻪ اي‬
‫ﭘﻴﺪا ﻧﺸﺪ‪ ،‬ﻣﻘﺪار ‪ end+1‬را ﺑﺮﻣﻲ ﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،max‬ﻣﻘﺪاري از ﻣﺘﻐﻴﺮ )از ‪ start‬ﺗﺎ ‪ end‬ﺑﺎ دﻗﺖ ‪ (accuracy‬ﻛﻪ در آن ﭼﻨﺪﺟﻤﻠﻪ اي ﻣﻘﺪار ﺑﻴﺸﻴﻨﻪ ي ﺧﻮد را‬
‫دارد‪ ،‬ﺑﺮﻣﻲ ﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،equals‬ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﭼﻨﺪﺟﻤﻠﻪ اي ﻣﺎ ﺑﺎ ﭼﻨﺪﺟﻤﻠﻪ اي داده ﺷﺪه ﺑﺮاﺑﺮ اﺳﺖ ﻳﺎ ﺧﻴﺮ‪.‬‬
‫ﻣﺘﺪ ‪ ،toString‬ﭼﻨﺪﺟﻤﻠﻪ اي را ﺑﺼﻮرت ﻳﻚ رﺷﺘﻪ ﺑﺮﻣﻲ ﮔﺮداﻧﺪ‪) .‬ﻣﺜﻞ ‪(x^2+13x+1388‬‬
‫‪ ‬‬
‫‪ ‬ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا‬
‫‪ 6‬‬
‫‪ ‬‬
‫‪ ‬‬
‫ﺗﻤﺮﻳﻦ ‪(Matrix.java) 3‬‬
‫در اﻳﻦ ﺳﻮال ﺷﻤﺎ ﺑﺎﻳﺪ ﻛﻼس ‪ Matrix‬را ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ ﻛﻪ ﺑﻪ ﺻﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﻨﺪ‪.‬‬
‫‪class Matrix ‬‬
‫{‬
‫‪Matrix(int rows, int cols); ‬‬
‫‪ ‬‬
‫;)‪Matrix(double[][] data‬‬
‫‪ ‬‬
‫;)‪Matrix add(Matrix m‬‬
‫‪ ‬‬
‫‪Matrix subtract(Matrix m); ‬‬
‫‪ ‬‬
‫‪Matrix multiply(Matrix m); ‬‬
‫‪ ‬‬
‫;)(‪Matrix transpose‬‬
‫‪ ‬‬
‫‪boolean equals(Matrix m); ‬‬
‫‪ ‬‬
‫‪String toString(); ‬‬
‫‪ ‬‬
‫‪} ‬‬
‫‪ Constructor‬اول‪ ،‬ﻣﺎﺗﺮﻳﺴﻲ ﺑﺎ ﺗﻌﺪاد ﺳﻄﺮ ‪ rows‬و ﺗﻌﺪاد ﺳﺘﻮن ‪ cols‬ﻣﻲﺳﺎزد‪.‬‬
‫‪ Constructor‬دوم‪ ،‬ﻣﺎﺗﺮﻳﺴﻲ ﺑﺎ دراﻳﻪﻫﺎي داده ﺷﺪه در آراﻳﻪي دوﺑﻌﺪي ‪ data‬ﻣﻲﺳﺎزد‪.‬‬
‫ﻣﺘﺪ ‪ ،add‬ﻣﺎﺗﺮﻳﺲ داده ﺷﺪه را ﺑﺎ ﻣﺎﺗﺮﻳﺲ ﻣﺎ ﺟﻤﻊ ﻣﻲﻛﻨﺪ و ﺣﺎﺻﻞ را ﺑﺮﻣﻲﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،subtract‬ﻣﺎﺗﺮﻳﺲ داده ﺷﺪه را از ﻣﺎﺗﺮﻳﺲ ﻣﺎ ﻛﻢ ﻣﻲﻛﻨﺪ و ﺣﺎﺻﻞ را ﺑﺮﻣﻲﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،transpose‬ﺗﺮاﻧﻬﺎدهي ﻣﺎﺗﺮﻳﺲ ﻣﺎ را ﺑﺮﻣﻲﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،equals‬ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ ﻣﺎﺗﺮﻳﺲ دادهﺷﺪه ﺑﺎ ﻣﺎﺗﺮﻳﺲ ﻣﺎ ﺑﺮاﺑﺮ اﺳﺖ ﻳﺎ ﺧﻴﺮ‪.‬‬
‫ܾ ܽ‬
‫‪ ቂ‬را ﺑﻪ رﺷﺘﻪي ”‪ “a b\nc d‬ﺗﺒﺪﻳﻞ‬
‫ﻣﺘﺪ ‪ ،toString‬ﻣﺎﺗﺮﻳﺲ ﻣﺎ را ﺑﻪ ﻳﻚ رﺷﺘﻪ ﺗﺒﺪﻳﻞ ﻣﻲﻛﻨﺪ‪ .‬ﻣﺜﻼ ﻣﺎﺗﺮﻳﺲ ‪ቃ‬‬
‫݀ ܿ‬
‫ﻧﻤﺎﻳﺪ‪ .‬ﺑﻄﻮر دﻗﻴﻖ ﺗﺮ‪ ،‬ﺑﺮاي ﻳﻚ ﻣﺎﺗﺮﻳﺲ ‪ Am*n‬ﺑﺎﻳﺪ اﺑﺘﺪا دراﻳﻪ ﻫﺎي ‪ A11‬و ‪ A12‬و ‪ ...‬و ‪ A1n‬را ﭼﺎپ ﻛﻨﺪ و ﺳﭙﺲ ﻳﻚ‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا‬
‫ﻣﺘﺪ ‪ ،multiply‬ﻣﺎﺗﺮﻳﺲ داده ﺷﺪه را در ﻣﺎﺗﺮﻳﺲ ﻣﺎ ﺿﺮب ﻣﻲﻛﻨﺪ و ﺣﺎﺻﻞ را ﺑﺮﻣﻲﮔﺮداﻧﺪ‪.‬‬
‫‪ 7‬‬
‫‪ ‬‬
‫ﻛﺎراﻛﺘﺮ ﺧﻂ ﺟﺪﻳﺪ‪ (\n) ‬را ﻧﻮﺷﺘﻪ و ﺳﭙﺲ ﺑﻪ ﺳﺮاغ ﺳﻄﺮ ﺑﻌﺪي ﺑﺮود و ﺑﻪ ﻫﻤﻴﻦ ﺗﺮﺗﻴﺐ ‪ m‬ﺳﻄﺮ را ﭼﺎپ ﻛﻨﺪ‪) .‬در اﻧﺘﻬﺎي‬
‫ﭼﺎپ ﺳﻄﺮ ‪m‬ام ﻫﻢ ﺑﺎﻳﺪ ﻳﻚ ‪ \n‬ﻧﻮﺷﺘﻪ ﺷﻮد‪(.‬‬
‫اﺧﺘﻴﺎري‪:‬‬
‫‪class SquareMatrix extends Matrix ‬‬
‫‪{ ‬‬
‫‪SquareMatrix(int n); ‬‬
‫‪ ‬‬
‫‪SquareMatrix inverse(); ‬‬
‫‪ ‬‬
‫‪double determinant(); ‬‬
‫‪ ‬‬
‫‪double eigenValues(double start, double end, double accuracy); ‬‬
‫‪ ‬‬
‫‪} ‬‬
‫‪ Constructor‬آن‪ ،‬ﻣﻘﺪار ‪ n‬را ﻣﻲﮔﻴﺮد و ﻣﺎﺗﺮﻳﺴﻲ ﻣﺮﺑﻌﻲ ﺑﻪ اﻧﺪازهي ﺳﻄﺮ و ﺳﺘﻮن ‪ n‬ﺗﻮﻟﻴﺪ ﻣﻲﻛﻨﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،inverse‬ﻣﻌﻜﻮس ﻣﺎﺗﺮﻳﺲ ﻣﺮﺑﻌﻲ ﻣﺎ را ﺑﺮﻣﻲﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،determinant‬دﺗﺮﻣﻴﻨﺎن ﻣﺎﺗﺮﻳﺲ ﻣﺮﺑﻌﻲ ﻣﺎ را ﺑﺮﻣﻲﮔﺮداﻧﺪ‪.‬‬
‫ﻣﺘﺪ ‪ ،eigenValue‬اوﻟﻴﻦ ﻣﻘﺪار وﻳﮋه‪2‬ي ﻣﺎﺗﺮﻳﺲ ﻣﺮﺑﻌﻲ ﻣﺎ را از ‪ start‬ﺗﺎ ‪ end‬ﺑﺎ دﻗﺖ ‪ accuracy‬ﺑﺮﻣﻲﮔﺮداﻧﺪ‪ .‬در‬
‫ﺻﻮرﺗﻴﻜﻪ ﻣﻘﺪار وﻳﮋهاي ﻧﺪاﺷﺖ‪ ،‬ﻣﻘﺪار ‪ end+1‬را ﺑﺮﻣﻲﮔﺮداﻧﺪ‪) .‬ﻣﻲﺗﻮاﻧﻴﺪ از ﻛﻼس ‪ Polynomial‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ(‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا‬
‫‪ 8‬‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬‬
‫‪2 ‬ﺑﻪ ﺻﻔﺤﻪي ‪ 454‬ﻛﺘﺎب رﻳﺎﺿﻲ ﻋﻤﻮﻣﻲ )‪ (2‬ﺧﻮد ﻣﺮاﺟﻌﻪ ﻓﺮﻣﺎﺋﻴﺪ‪.‬‬
‫‪ ‬‬
‫‪ ‬‬
‫ﺗﻤﺮﻳﻦ ‪(Projectile.java) 4‬‬
‫ﻳﻚ اﭘﻠﺖ ﺟﺎوا ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻛﺎرﺑﺮ ﺑﺘﻮاﻧﺪ ﺑﺎ ﻛﺸﻴﺪن ﻣﻮﺷﻮاره ﺑﺮ روي اﭘﻠﺖ‪ ،‬ﺑﺮدار ﺳﺮﻋﺖ اوﻟﻴﻪ ﻳﻚ ﭘﺮﺗﺎﺑﻪ را ﻣﺸﺨﺺ ﻛﻨﺪ‪.‬‬
‫ﺳﭙﺲ ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻛﻠﻴﺪ ﻣﻮﺷﻮاره رﻫﺎ ﺷﺪ؛ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺴﺘﻲ ﻣﺴﻴﺮ ﺣﺮﻛﺖ ﭘﺮﺗﺎﺑﻪ را ﺑﺮ روي ﺻﻔﺤﻪ اﭘﻠﺖ رﺳﻢ ﻛﻨﺪ‪ .‬در‬
‫ﺻﻮرت ﻧﻴﺎز‪ ،‬ﺿﺮﻳﺐ ﻣﻨﺎﺳﺒﻲ را ﺑﺮاي ﺳﺮﻋﺖ اوﻟﻴﻪ اﻧﺘﺨﺎب ﻛﻨﻴﺪ ﻛﻪ ﻣﺴﻴﺮ رﺳﻢ ﺷﺪه در ﺻﻔﺤﻪ اﭘﻠﺘﻲ ﺑﺎ اﻧﺪازه ﻣﻌﻘﻮل ﻗﺎﺑﻞ‬
‫ﻧﻤﺎﻳﺶ ﺑﺎﺷﺪ‪ .‬ﻧﻴﺎزي ﺑﻪ ﭘﻮﻳﺎﻧﻤﺎﻳﻲ‪ 3‬ﺣﺮﻛﺖ ﭘﺮﺗﺎﺑﻪ ﻧﻴﺴﺖ‪.‬‬
‫در ﭘﻴﺎده ﺳﺎزي ﺑﻪ ﻧﻜﺎت زﻳﺮ ﺗﻮﺟﻪ ﻧﻤﺎﻳﻴﺪ‪:‬‬
‫‪-‬‬
‫ﻣﺒﺪأ ﻣﺨﺘﺼﺎت اﭘﻠﺖ‪ ،‬ﮔﻮﺷﻪ ﺑﺎﻻي ﺳﻤﺖ ﭼﭗ اﺳﺖ‪ ،‬اﻣﺎ ﺷﻤﺎ در ﺷﺒﻴﻪ ﺳﺎزي ﺑﺎﻳﺪ ﮔﻮﺷﻪ ﭘﺎﻳﻴﻦ ﺳﻤﺖ ﭼﭗ را‬
‫ﺑﻌﻨﻮان ﻣﺒﺪأ ﻓﺮض ﻛﻨﻴﺪ‪ .‬‬
‫‪-‬‬
‫ﺑﺮاي ﻳﺎﻓﺘﻦ اﺑﻌﺎد اﭘﻠﺖ از ﻣﺘﺪﻫﺎي )(‪ getWidth‬و )(‪ getHeight‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪ .‬اﻳﻦ ﻣﺘﺪﻫﺎ از ‪ JApplet‬ﺑﻪ‬
‫اﭘﻠﺖ ﺷﻤﺎ ﺑﻪ ارث ﻣﻲ رﺳﻨﺪ‪ .‬‬
‫ﺗﻤﺮﻳﻦ ‪) (Projectile2.java) 5‬اﺧﺘﻴﺎري(‬
‫اﻳﻦ ﻣﺴﺌﻠﻪ ﺷﺒﻴﻪ ﺑﻪ ﻣﺴﺌﻠﻪ ﻗﺒﻞ اﺳﺖ‪ ،‬ﺑﺎ اﻳﻦ ﺗﻔﺎوت ﻛﻪ ﭘﺮﺗﺎﺑﻪ ﭘﺲ از ﺑﺮﺧﻮرد ﺑﺎ ﻛﻨﺎره ﭘﺎﻳﻴﻦ اﭘﻠﺖ‪ ،‬ﻣﺘﻮﻗﻒ ﻧﻤﻲ ﺷﻮد و ﺑﺎ‬
‫ﺣﻔﻆ ﺳﺮﻋﺖ اوﻟﻴﻪ ﻋﻤﻮدي ﺑﻪ ﺳﻤﺖ ﺑﺎﻻ و ﺑﺎ اﻧﺪازه ‪ 3/4‬اﻧﺪازه ﺳﺮﻋﺖ ﻋﻤﻮدي در ﻟﺤﻈﻪ ﺑﺮﺧﻮرد ﻣﻲ ﺷﻮد‪ .‬ﺣﺮﻛﺖ ﭘﺮﺗﺎﺑﻪ ﺗﺎ‬
‫زﻣﺎﻧﻴﻜﻪ ﺟﺰء ﺻﺤﻴﺢ اﻧﺪازه ﺳﺮﻋﺖ ﻋﻤﻮدي آن ﺻﻔﺮ ﺷﻮد اداﻣﻪ ﻣﻲ ﻳﺎﺑﺪ‪.‬‬
‫‪ ‬ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ‬
‫‪animation 3‬‬
‫‪ ‬‬
‫‪ ‬‬
‫‪ ‬ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا‬
‫‪ ‬‬
‫‪ 9‬‬