HW4.pdf

‫ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزی )‪(۴۰-۱۵۳) (C/C++‬‬
‫)‪Introduction to Programming (C/C++‬‬
‫ﺑﻪﻧﺎﻡ ﺧﺪﺍ ‪ ‬‬
‫‪ ‬‬
‫ﻣﺪرس‪ :‬ﺷﺮوﻳﻦ داﻧﺶﭘﮋوه‬
‫داﻧﺸﮑﺪهی ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﻴﻮﺗﺮ‬
‫‪ ‬‬
‫ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ‪ :‬ﺳﺎﻋﺖ‪ ،۱۵:۳۰‬روز ﭘﻨﺠﺸﻨﺒﻪ ‪ ۱۳۹۰/۱۰/۲۲‬‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره ‪۴‬‬
‫ﻧﺤﻮه ارﺳﺎل‬
‫ﻛﺪ ﻣﺮﺑﻮط ﺑﻪ ﻫﺮ ﺗﻤﺮﻳﻦ را در ﻳﻚ ﻓﺎﻳﻞ ﺑﻪ ﺻﻮرت ‪ HWxx.cpp ‬ﻗﺮار دﻫﻴﺪ ﻛﻪ ‪ xx‬ﺷﻤﺎره آن ﺗﻤﺮﻳﻦ ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﻣﺜﻼ ﻛﺪ ﺗﻤﺮﻳﻦ اول‬
‫در ﻓﺎﻳﻠﻲ ﺑﻪ ﻧﺎم ‪ HW01.cpp‬ﻗﺮار ﻣﻲ ﮔﻴﺮد‪ ،‬ﺳﭙﺲ ﺗﻤﺎﻣﻲ ﻛﺪﻫﺎي ﺧﻮد را ﻛﻨﺎر ﻫﻢ ﻗﺮار داده و آن ﻫﺎ را ‪ zip‬ﻧﻤﺎﻳﻴﺪ و اﺳﻢ ﻓﺎﻳﻞ‬
‫زﻳﭗ را ﺑﻪ ﺻﻮرت ‪ HW4_STDID.zip‬ﻗﺮار دﻫﻴﺪ‪ ،‬ﻛﻪ ‪ STDID‬ﺷﻤﺎره داﻧﺸﺠﻮﻳﻲ ﺷﻤﺎﺳﺖ ﻣﺜﻞ ‪ HW4_8912345.zip‬و آنرا‬
‫در ﻣﻮﻋﺪ ﻣﻘﺮر ﺑﻪ آدرس اﻳﻤﻴﻞ‪ [email protected] ‬ارﺳﺎل ﻧﻤﺎﻳﻴﺪ‪.‬‬
‫ﺗﻮﺟﻪ ‪ :1‬ﺑﻪ ﺗﻤﺮﻳﻨﺎﺗﻲ ﻛﻪ ﺑﻪ ﺻﻮرت ﻛﺎﻏﺬي ﺗﺤﻮﻳﻞ ﺷﻮﻧﺪ‪ ،‬ﻳﺎ اﺳﻜﻦ ﺷﻮﻧﺪ‪ ،‬ﻧﻤﺮهاي ﺗﻌﻠﻖ ﻧﺨﻮاﻫﺪ ﮔﺮﻓﺖ‪ .‬ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﺎﻳﺪ در ﻓﺮﻣﺖ ﻓﺎﻳﻞ‬
‫‪ cpp‬ﻧﻮﺷﺘﻪ ﺷﺪه و ﺑﺎ ﻳﻚ ﻛﺎﻣﭙﺎﻳﻠﺮ ‪ C/C++‬ﺗﺴﺖ و اﺟﺮا ﺷﺪه ﺑﺎﺷﻨﺪ‪.‬‬
‫ﺗﻮﺟﻪ ‪ :2‬از ارﺳﺎل ﻓﺎﻳﻞ اﺟﺮاﻳﻲ )‪ (.exe‬ﺑﻪ ﻫﻤﺮاه ﺳﻮرس‪ ،‬ﺧﻮدداري ﻛﻨﻴﺪ‪ .‬ﺳﻴﺴﺘﻢ ‪ gmail‬و اﻛﺜﺮ ﺳﺮوﻳﺲﻫﺎي اﻳﻤﻴﻞ از درﻳﺎﻓﺖ ﻓﺎﻳﻞ‬
‫اﺟﺮاﻳﻲ )ﺣﺘﻲ اﮔﺮ در داﺧﻞ ﻓﺎﻳﻞ ‪ .zip‬ﺑﺎﺷﻨﺪ( ﺧﻮدداري ﻣﻲﻛﻨﺪ‪ .‬ﺑﻨﺎﺑﺮاﻳﻦ ﻣﺴﺌﻮﻟﻴﺖ ﻧﺮﺳﻴﺪن ﭼﻨﻴﻦ اﻳﻤﻴﻞﻫﺎﻳﻲ ﺑﻌﻬﺪه داﻧﺸﺠﻮ اﺳﺖ‪.‬‬
‫ﺗﻮﺟﻪ ‪ :3‬از ارﺳﺎل ﺗﻤﺮﻳﻦﻫﺎ ﺑﻪ ﮔﺮوه درس ﺧﻮدداري ﻛﻨﻴﺪ! و ﺣﺘﻤﺎ ﺑﻪ ﻫﻨﮕﺎم وارد ﻧﻤﻮدن آدرس اﻳﻤﻴﻞ ﮔﻴﺮﻧﺪه )ﺑﺨﺼﻮص در ‪(gmail‬‬
‫دﻗﺖ ﻛﻨﻴﺪ‪ ،‬ﺗﺎ اﺷﺘﺒﺎﻫﺎ آدرس ﮔﺮوه ﺑﻪ ﺟﺎي آدرس اﻳﻤﻴﻞ ﺗﻤﺮﻳﻦﻫﺎ وارد ﻧﺸﺪه ﺑﺎﺷﺪ‪.‬‬
‫روش ارزﻳﺎﺑ‪‬‬
‫ارزﻳﺎﺑﻲ‬
‫ﻋﻨﻮان‬
‫*‬
‫‪%100‬‬
‫در زﻣﺎن ﻣﻘﺮر‬
‫*‬
‫‪%60‬‬
‫ﺗﺎ ‪ 1‬روز ﭘﺲ از زﻣﺎن ﻣﻘﺮر‬
‫*‬
‫‪%30‬‬
‫ﺑﻴﺶ از ﻳﻚ روز و ﺗﺎ ‪ 3‬روز ﭘﺲ از زﻣﺎن ﻣﻘﺮر‬
‫*‬
‫‪%20‬‬
‫ﺑﻴﺶ از ﺳﻪ روز و ﺗﺎ ﻳﻚ ﻫﻔﺘﻪ ﭘﺲ از زﻣﺎن ﻣﻘﺮر‬
‫*‬
‫‪%0‬‬
‫ﺑﻴﺶ از ﻳﻚ ﻫﻔﺘﻪ ﭘﺲ از زﻣﺎن ﻣﻘﺮر‬
‫)ﻧﻤﺮه ﻛﺎﻣﻞ ﺗﻤﺮﻳﻦ( * ‪-1‬‬
‫ﺗﻘﻠﺐ‪ ،‬ﻛﭙﻲ ﺑﺮداري و ﻣﻮاردي از اﻳﻦ ﻗﺒﻴﻞ‬
‫*درﺻﺪﻫﺎي ﻓﻮق ﻧﺴﺒﺖ ﺑﻪ ﻧﻤﺮه ﻛﺴﺐ ﺷﺪهي ﺗﻤﺮﻳﻦ ﺗﻮﺳﻂ داﻧﺶﺟﻮ ﻣﻲﺑﺎﺷﺪ‪.‬‬
‫ﺗﻮﺟﻪ‪ :‬اﻳﻦ ﺗﻤﺮﻳﻦ داراي ‪ 100‬ﻧﻤﺮه ﺑﻮده و ﺷﺎﻣﻞ ‪ 6‬ﺳﺆال اﺳﺖ‪.‬‬
‫‪ ‬‬
‫)‪ (1‬‬
‫ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزی )‪(۴۰-۱۵۳) (C/C++‬‬
‫)‪Introduction to Programming (C/C++‬‬
‫ﺑﻪﻧﺎﻡ ﺧﺪﺍ ‪ ‬‬
‫‪ ‬‬
‫ﻣﺪرس‪ :‬ﺷﺮوﻳﻦ داﻧﺶﭘﮋوه‬
‫داﻧﺸﮑﺪهی ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﻴﻮﺗﺮ‬
‫‪ ‬‬
‫ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ‪ :‬ﺳﺎﻋﺖ‪ ،۱۵:۳۰‬روز ﭘﻨﺠﺸﻨﺒﻪ ‪ ۱۳۹۰/۱۰/۲۲‬‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره ‪۴‬‬
‫ﺗﺬﻛﺮ ﻣﻬﻢ‪ :‬رﻋﺎﻳﺖ ﻣﻮارد زﻳﺮ اﻟﺰاﻣﻲ اﺳﺖ‪ .‬در ﺻﻮرت ﻋﺪم رﻋﺎﻳﺖ آﻧﻬﺎ‪ ،‬ﺣﺘﻲ در ﺻﻮرت درﺳﺖﺑﻮدن ﺑﺮﻧﺎﻣﻪ ﺑﻪ داﻧﺸﺠﻮ ﻧﻤﺮهاي ﺗﻌﻠﻖ ﻧﻤﻲﮔﻴﺮد‪:‬‬
‫‪‬‬
‫اﺳﻢ ﻓﺎﻳﻞ ‪ zip‬ﻫﻤﺎﻧﻄﻮر ﻛﻪ در ﺑﺨﺶﻫﺎي ﺑﺎﻻ ﺗﻮﺿﻴﺢ داده ﺷﺪ ﺑﺎﻳﺪ ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ﺑﻪ ﻓﺮﻣﺖ ‪ HW4_86202228.zip‬ﺗﻌﻴﻴﻦ ﺷـﻮد‪ .‬ﻫـﺮ‬
‫ﻳﻚ از ﻣﻮارد زﻳﺮ اﺷﺘﺒﺎه اﺳﺖ‪ :‬‬
‫‪ o‬ﺣﺮوف ﻛﻮﭼﻚ ﺑﺮاي ‪:HW‬‬
‫‪ hw4_86202228.zip‬‬
‫‪ o‬ﺧﻂ ﺗﻴﺮه ﺑﻪ ﺟﺎي ‪ HW4‐86202228.zip :underline‬‬
‫‪ HW4.zip o‬‬
‫‪ ... 86202228.zip o‬‬
‫‪‬‬
‫اﺳﺎﻣﻲ ﻓﺎﻳﻞﻫﺎي ﺗﻤﺮﻳﻦ ﻧﻴﺰ ﺑﺎﻳﺪ ﺑﺎ ﻓﺮﻣﺖ درﺳﺖ وارد ﺷﻮﻧﺪ‪ .‬ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل‪ . HW03.cpp :‬ﻣﻮارد زﻳﺮ ﺗﺼﺤﻴﺢ ﻧﻤﻲﺷﻮﻧﺪ‪ :‬‬
‫‪ hw03.cpp o‬‬
‫‪ HW3.cpp o‬‬
‫‪ HW03.c o‬‬
‫‪HW_03.cpp o‬‬
‫‪‬‬
‫‪ ....‬‬
‫ورودي و ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﺎﻳﺪ دﻗﻴﻘﺎً ﻫﻤﺎﻧﻄﻮر ﻛﻪ در ﺻﻮرت ﺳﺆال ﺗﻮﺿﻴﺢ داده ﺷﺪ ﺑﺎﺷﻨﺪ‪ .‬ﻫﻴﭻ ﺧﺮوﺟﻲ اﺿﺎﻓﻪاي ﻧﺒﺎﻳـﺪ ﭼـﺎپ ﺷـﻮد‪ .‬ﺑـﺮاي‬
‫ﺟﺪاﻛﺮدن دو ﻋﺪد ﭘﺸﺖ ﺳﺮ ﻫﻢ در ﺧﺮوﺟـﻲ‪ ،‬از ﻳـﻚ ﻓﺎﺻـﻪ )‪ (space‬اﺳـﺘﻔﺎده ﻛﻨﻴـﺪ‪ .‬ﺑـﺮاي ﭼـﺎپ ﺧﺮوﺟـﻲ در ﺳـﻄﺮ ﺟﺪاﮔﺎﻧـﻪ از ﻳـﻚ‬
‫‪ endl) newline‬ﻳﺎ ‪ (\n‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪ .‬ﭼﺎپ ﻣﻮاردي ﻣﺎﻧﻨﺪ »‪ «Enter a number:‬ﻳﺎ ﭼﺎپ دو ‪ \n‬اﺷﺘﺒﺎه اﺳﺖ‪ .‬‬
‫‪‬‬
‫ﭘﺲ از ﭼﺎپ ﺧﺮوﺟﻲ ﻣﻮرد ﻧﻈﺮ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻳﺪ ﺗﻤﺎم ﺷﻮد‪ .‬ﻫﺮ ﻳﻚ از ﻣﻮارد زﻳﺮ ﻣﻮﺟﺐ ﻏﻠﻂﺷﺪن ﺑﺮﻧﺎﻣﻪ ﺧﻮاﻫﺪ ﺷﺪ‪ :‬‬
‫‪ o‬اﺳﺘﻔﺎده از ‪ getch‬و ‪ system pause‬و ﻳﺎ ‪ cin‬در اﻧﺘﻬﺎي ﺑﺮﻧﺎﻣﻪ )در ﺻﻮرت اﺳﺘﻔﺎده‪ ،‬ﻗﺒﻞ از ارﺳﺎل ﺑﺮﻧﺎﻣﻪ آﻧﻬﺎ را ﭘﺎك‬
‫ﻛﻨﻴﺪ و ﻳﺎ ﻛﺎﻣﻨﺖ ﻛﻨﻴﺪ‪ (.‬‬
‫‪ o‬درﻳﺎﻓﺖ ورودي ﺑﻌﺪي ﺑﺮاي اﺟﺮاي ﻣﺠﺪد ‪ ‬‬
‫‪‬‬
‫ﻛﺪ ﺑﺎﻳﺪ ﻛﺎﻣﭙﺎﻳﻞ ﺷﻮد و ﺧﻄﺎي ﻧﺤﻮي )‪ (syntax‬ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ‪ .‬‬
‫‪‬‬
‫از ﻛﺘﺎﺑﺨﺎﻧﻪﻫﺎي ﻏﻴﺮاﺳﺘﺎﻧﺪارد ﻣﺎﻧﻨﺪ ‪ conio.h‬اﺳﺘﻔﺎده ﻧﻜﻨﻴﺪ‪ .‬‬
‫‪‬‬
‫در ﺻﻮرت وﺟﻮد دﺳﺘﻮر "‪ #include "stdafx.h‬در اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ‪ ،‬آﻧﺮا ﻗﺒﻞ از ارﺳﺎل ﺑﺮﻧﺎﻣﻪ ﺣﺬف و ﻳﺎ ﻛﺎﻣﻨﺖ ﻛﻨﻴﺪ‪ .‬‬
‫‪ ‬‬
‫)‪ (2‬‬
‫ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزی )‪(۴۰-۱۵۳) (C/C++‬‬
‫)‪Introduction to Programming (C/C++‬‬
‫ﺑﻪﻧﺎﻡ ﺧﺪﺍ ‪ ‬‬
‫‪ ‬‬
‫ﻣﺪرس‪ :‬ﺷﺮوﻳﻦ داﻧﺶﭘﮋوه‬
‫داﻧﺸﮑﺪهی ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﻴﻮﺗﺮ‬
‫‪ ‬‬
‫ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ‪ :‬ﺳﺎﻋﺖ‪ ،۱۵:۳۰‬روز ﭘﻨﺠﺸﻨﺒﻪ ‪ ۱۳۹۰/۱۰/۲۲‬‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره ‪۴‬‬
‫ﺗﻤﺮﯾﻦ اوّل ‪ -‬ﻫﻴﺴﺘﻮﮔﺮام ﻓﺮاواﻧ‪ ‬ﺣﺮوف )‪ ۱۵‬ﻧﻤﺮه(‪:‬‬
‫ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻧﺎم ﻳﻚ ﻓﺎﻳﻞ ﻣﺘﻨﻲ را از ورودي اﺳﺘﺎﻧﺪارد )‪ (cin‬درﻳﺎﻓﺖ ﻛﺮده و ﭘﺲ از ﺑﺎزﻛﺮدن ﻓﺎﻳﻞ ﻣﻮرد ﻧﻈﺮ‪ ،‬ﻧﻤﻮدار ﻓﺮاواﻧﻲ‬
‫ﺣﺮوف‪ ‬ﻣﺘﻦِ داﺧﻞ ﻓﺎﻳﻞ را در ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد )‪ (cout‬ﭼﺎپ ﻛﻨﺪ‪ .‬ﻓﺮض ﻛﻨﻴﺪ ﻓﺎﻳﻞ ﻣﻮرد ﻧﻈـﺮ ﺷـﺎﻣﻞ ﺣـﺪاﻗﻞ ‪ 0‬و ﺣـﺪاﻛﺜﺮ ‪1000‬‬
‫ﻛﺎراﻛﺘﺮ اﺳﺖ‪ .‬ﻫﻤﭽﻨﻴﻦ ﻣﺘﻦ ﺗﻨﻬﺎ از ﺣﺮوف ﻛﻮﭼﻚ اﻧﮕﻠﻴﺴﻲ ﺑﻪ ﻫﻤﺮاه ﻳﻚ ﺳﺮي ﻋﻼﺋﻢ ﻧﮕﺎرﺷﻲ ﻣﺎﻧﻨـﺪ ﻧﻘﻄـﻪ )‪ (.‬و وﻳﺮﮔـﻮل ﺗﺸـﻜﻴﻞ‬
‫ﺷﺪه اﺳﺖ‪ .‬ﺑﺮﻧﺎﻣﻪ ﺑﺎﻳﺪ ﻓﻘﻂ ﺣﺮوف اﻧﮕﻠﻴﺴﻲ را در ﻧﻈﺮ ﮔﺮﻓﺘﻪ و ﻋﻼﺋﻢ ﻧﮕﺎرﺷﻲ را ﻧﺎدﻳﺪه ﺑﮕﻴﺮد‪.‬‬
‫ورودي‪ :‬ﻧﺎم ﻓﺎﻳﻞ ﻣﺘﻨﻲ )ﻣﺜﻼ‪ (text.dat :‬ﺧﺮوﺟﻲ‪ :‬ﻫﻴﺴﺘﻮﮔﺮام ﻓﺮاواﻧﻲ ﺣﺮوف – در ﻫﺮ ﺳﻄﺮ اﺑﺘﺪا ﺑﺎﻳﺪ ﻧﺎم ﺣﺮف ﺳﭙﺲ ﻋﻼﻣﺖ "‪":‬‬
‫و ﺳﭙﺲ ﺑﻪ اﻧﺪازهي ﻓﺮاواﻧﻲ آن ﺣﺮف در ﻣﺘﻦ ﺳﺘﺎره ﭼﺎپ ﺷﻮد‪) .‬ﻫﻴﭻ ‪ space‬اي در ﺧﺮوﺟﻲ ﻧﺒﺎﻳﺪ ﭼﺎپ ﺷﻮد و ﭘﺲ از ﻫﺮ ﺧـﻂ ﺑﺎﻳـﺪ‬
‫ﻳﻚ ‪ newline‬زده ﺷﻮد( – ]ﻟﻄﻔﺎ ﻓﺮﻣﺖ ﺧﺮوﺟﻲ را ﻋﻴﻨﺎً رﻋﺎﻳﺖ ﻛﻨﻴﺪ‪[.‬‬
‫ﺧﺮوﺟﻲ ﻣﺘﻨﺎﻇﺮ‬
‫ﻣﺤﺘﻮاي ﻧﻤﻮﻧﻪ ﻓﺎﻳﻞ ‪text.dat‬‬
‫**********************************************‪a:‬‬
‫***********‬
‫******‪b:‬‬
‫***********************‪c:‬‬
‫***************‪d:‬‬
‫**********************************************‪e:‬‬
‫***************‬
‫**********‪f:‬‬
‫*************‪g:‬‬
‫****************‪h:‬‬
‫********************************‪i:‬‬
‫‪j:‬‬
‫*‪k:‬‬
‫***********************‪l:‬‬
‫******************‪m:‬‬
‫*********************************‪n:‬‬
‫*******************************‪o:‬‬
‫*******‪p:‬‬
‫***‪q:‬‬
‫************************************‪r:‬‬
‫*********************************‪s:‬‬
‫***********************************************‪t:‬‬
‫**********‪u:‬‬
‫*‪v:‬‬
‫***‪w:‬‬
‫*‪x:‬‬
‫**********‪y:‬‬
‫‪z:‬‬
‫‪in formal languages, which are‬‬
‫‪used in mathematical logic and‬‬
‫‪theoretical computer science, a‬‬
‫‪string is a finite sequence of‬‬
‫‪symbols that are chosen from a‬‬
‫‪set or alphabet.‬‬
‫‪in computer programming, a‬‬
‫‪string is traditionally a sequence‬‬
‫‪of characters, either as a literal‬‬
‫‪constant or as some kind of‬‬
‫‪variable. the latter may allow its‬‬
‫‪elements to be mutated and/or‬‬
‫‪the length changed, or it may be‬‬
‫‪fixed (after creation). a string is‬‬
‫‪generally understood as a data‬‬
‫‪type and is often implemented as‬‬
‫‪a byte (or word) array that stores‬‬
‫‪a sequence of elements, typically‬‬
‫‪characters, using some character‬‬
‫‪encoding.‬‬
‫‪ ‬‬
‫)‪ (3‬‬
‫ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزی )‪(۴۰-۱۵۳) (C/C++‬‬
‫)‪Introduction to Programming (C/C++‬‬
‫ﺑﻪﻧﺎﻡ ﺧﺪﺍ ‪ ‬‬
‫‪ ‬‬
‫ﻣﺪرس‪ :‬ﺷﺮوﻳﻦ داﻧﺶﭘﮋوه‬
‫داﻧﺸﮑﺪهی ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﻴﻮﺗﺮ‬
‫‪ ‬‬
‫ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ‪ :‬ﺳﺎﻋﺖ‪ ،۱۵:۳۰‬روز ﭘﻨﺠﺸﻨﺒﻪ ‪ ۱۳۹۰/۱۰/۲۲‬‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره ‪۴‬‬
‫ﺗﻤﺮﯾﻦ دوم ‪ -‬ﮐﻼس ﺑﺮای ﻣﺎﺗﺮﯾﺲﻫﺎ )‪ ۲۰‬ﻧﻤﺮه(‪:‬‬
‫ﻳﻚ ﻛﻼس ﺑﺮاي ﻋﻤﻠﻴﺎت ﺑﺮ روي ﻣﺎﺗﺮﻳﺲﻫﺎ ﺗﻌﺮﻳﻒ ﻛﻨﻴﺪ‪ .‬ﻋﻨﺎﺻﺮ اﻳﻦ ﻣﺎﺗﺮﻳﺲ اﻋﺪاد ﺻﺤﻴﺢ ﻫﺴﺘﻨﺪ‪ .‬ﺳﭙﺲ ﺑﺎ اﺳﺘﻔﺎده از اﻳـﻦ ﻛـﻼس‪،‬‬
‫ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ اﻃﻼﻋﺎت ﻣﺎﺗﺮﻳﺲﻫﺎ و ﻧﻮع ﻋﻤﻠﻴﺎت ﺑﺮ روي آﻧﻬﺎ را از ﻳﻚ ﻓﺎﻳﻞ ﻣﺘﻨﻲ ﺧﻮاﻧﺪه‪ ،‬ﻋﻤﻠﻴﺎت ﻣﻮرد ﻧﻈﺮ را ﺑـﺮ روي آﻧﻬـﺎ‬
‫اﻧﺠﺎم داده و ﻧﺘﻴﺠﻪ را در ﻳﻚ ﻓﺎﻳﻞ ﺧﺮوﺟﻲ ﺑﻨﻮﻳﺴﺪ‪.‬‬
‫‪ .1‬ﺗﻌﺮﻳﻒ ﻛﻼس ﻣﺎﺗﺮﻳﺲ‪ :‬ﻧﺎم اﻳﻦ ﻛﻼس را ‪ Matrix‬ﮔﺬاﺷﺘﻪ و ﺗﻮاﺑﻊ زﻳﺮ را در آن ﺗﻌﺮﻳﻒ ﻛﻨﻴﺪ‪:‬‬
‫‪Description ‬‬
‫ﺗﺎﺑﻊ ﺳﺎزﻧﺪهي ﻣﺎﺗﺮﻳﺲ‪ ،‬ﻛﻪ اﺑﻌﺎد ﻣﺎﺗﺮﻳﺲ را ﺑﻪ »ﺻﻔﺮ« ﻣﻘﺪاردﻫﻲ اوﻟﻴﻪ ﻣﻲﻛﻨﺪ‪.‬‬
‫‪Function Prototype ‬‬
‫‪Matrix (); ‬‬
‫ﺑﺎ اﺳﺘﻔﺎده از اﻳﻦ ﺗﺎﺑﻊ‪ ،‬ﻋﻨﺎﺻﺮ ﻣﺎﺗﺮﻳﺲ از ﻳﻚ ﻓﺎﻳﻞ ﻣﺘﻨﻲ ﺧﻮاﻧﺪه ﻣﻲﺷـﻮﻧﺪ؛ اﺑﺘـﺪا‬
‫دو ﻋﺪد از ﻓﺎﻳﻞ ورودي ﺧﻮاﻧﺪه ﻣﻲﺷﻮد )ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل و ( ﻛـﻪ ﺑـﻪ ﺗﺮﺗﻴـﺐ‬
‫ﻋﻨﺼـﺮ‪ ،‬از‬
‫ﺳﻄﺮ و ﺳﺘﻮن ﻣﺎﺗﺮﻳﺲ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﻨﺪ‪ .‬ﺳﭙﺲ ﺑـﻪ ﺗﻌـﺪاد‬
‫ﻓﺎﻳﻞ ﺧﻮاﻧﺪه ﻣﻲﺷﻮد‪.‬‬
‫‪void readFromFile (); ‬‬
‫اﻳﻦ ﺗﺎﺑﻊ ﻋﻨﺎﺻﺮ ﻣﺎﺗﺮﻳﺲ را در ﻳﻚ ﻓﺎﻳﻞ ﻣﺘﻨﻲ ﻣﻲﻧﻮﻳﺴـﺪ؛ اﺑﺘـﺪا دو ﻋـﺪد ﻣﻌـﺮف‬
‫ﺳﻄﺮ و ﺳﺘﻮن ﻣﺎﺗﺮﻳﺲ‪ ،‬و ﺑﻌﺪ از آن ﻋﻨﺎﺻﺮ ﻣﺎﺗﺮﻳﺲ در ﻓﺎﻳﻞ ﻧﻮﺷﺘﻪ ﻣﻲﺷﻮﻧﺪ‪ .‬‬
‫‪void writeToFile(); ‬‬
‫)‪10‬‬
‫‪,‬‬
‫‪(1‬‬
‫اﻳﻦ ﺗﺎﺑﻊ ﻣﺎﺗﺮﻳﺴﻲ ﺑﺎ ﻧﺎم ‪ matrix2‬را ﺑﻪ ﻋﻨﻮان آرﮔﻮﻣﺎن درﻳﺎﻓﺖ ﻛﺮده و ﻣـﺎﺗﺮﻳﺲ ‪Matrix sum (const Matrix& matrix2) ‬‬
‫‪const; ‬‬
‫ﻓﻌﻠﻲ را ﺑﺎ ‪ matrix2‬ﺟﻤﻊ ﻣﻲﻛﻨﺪ و ﻧﺘﻴﺠـﻪ را ﺑﺮﻣـﻲﮔﺮداﻧـﺪ‪) .‬ﺑـﺮ روي ﻣـﺎﺗﺮﻳﺲ‬
‫اﺻﻠﻲ ﺗﺎﺛﻴﺮ ﻧﻤﻲﮔﺬارد‪(.‬‬
‫در ﺻﻮرﺗﻲ ﻛﻪ اﺑﻌﺎد ﻣﺎﺗﺮﻳﺲ اﺻﻠﻲ ﺑـﺎ ‪ matrix2‬ﻧﺎﺳـﺎزﮔﺎر ﺑﺎﺷـﺪ )ﻳﻌﻨـﻲ ﺳـﻄﺮ و‬
‫ﺳﺘﻮن دو ﻣﺎﺗﺮﻳﺲ ﺑﺮاﺑﺮ ﻧﺒﺎﺷﻨﺪ(‪ ،‬ﺑﺎﻳﺪ ﭘﻴﻐﺎم ﺧﻄـﺎي ‪Dimensions mismatch‬‬
‫در ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد )‪ (cout‬ﭼﺎپ ﺷﺪه و ﺑﺮﻧﺎﻣﻪ ﺧﺎﺗﻤﻪ ﻳﺎﺑﺪ‪.‬‬
‫اﻳﻦ ﺗﺎﺑﻊ ﻣﺎﺗﺮﻳﺴﻲ ﺑﺎ ﻧﺎم ‪ matrix2‬را ﺑﻪ ﻋﻨﻮان آرﮔﻮﻣﺎن درﻳﺎﻓﺖ ﻛﺮده و ﻣـﺎﺗﺮﻳﺲ ‪Matrix multiply (const Matrix& ‬‬
‫‪matrix2) const; ‬‬
‫ﻓﻌﻠﻲ را در ‪ matrix2‬ﺿﺮب ﻣﻲﻛﻨﺪ و ﻧﺘﻴﺠﻪ را ﺑﺮﻣﻲﮔﺮداﻧﺪ‪.‬‬
‫در ﺻﻮرﺗﻲ ﻛﻪ اﺑﻌﺎد ﻣﺎﺗﺮﻳﺲ ﻓﻌﻠﻲ ﺑﺎ اﺑﻌﺎد ‪ matrix2‬ﻧﺎﺳﺎزﮔﺎر ﺑﺎﺷﺪ )ﻳﻌﻨﻲ ﺳـﺘﻮن‬
‫ﻣﺎﺗﺮﻳﺲ اول ﺑﺎ ﺳﻄﺮ ﻣﺎﺗﺮﻳﺲ دوم ﺑﺮاﺑﺮ ﻧﺒﺎﺷﺪ(‪ ،‬ﺑﺎﻳﺪ ﭘﻴﻐﺎم ﺧﻄﺎي ‪Dimensions ‬‬
‫‪ mismatch‬ﭼﺎپ ﺷﺪه و ﺑﺮﻧﺎﻣﻪ ﺧﺎﺗﻤﻪ ﻳﺎﺑﺪ‪.‬‬
‫‪Matrix transposed() const; ‬‬
‫اﻳﻦ ﺗﺎﺑﻊ ﺗﺮاﻧﻬﺎدهي ﻣﺎﺗﺮﻳﺲ ﻓﻌﻠﻲ را ﺑﺮﻣﻲﮔﺮداﻧﺪ‪ .‬‬
‫‪ ‬‬
‫)‪ (4‬‬
‫ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزی )‪(۴۰-۱۵۳) (C/C++‬‬
‫)‪Introduction to Programming (C/C++‬‬
‫ﺑﻪﻧﺎﻡ ﺧﺪﺍ ‪ ‬‬
‫‪ ‬‬
‫ﻣﺪرس‪ :‬ﺷﺮوﻳﻦ داﻧﺶﭘﮋوه‬
‫داﻧﺸﮑﺪهی ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﻴﻮﺗﺮ‬
‫‪ ‬‬
‫ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ‪ :‬ﺳﺎﻋﺖ‪ ،۱۵:۳۰‬روز ﭘﻨﺠﺸﻨﺒﻪ ‪ ۱۳۹۰/۱۰/۲۲‬‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره ‪۴‬‬
‫اﺑﻌﺎد ﻣﺎﺗﺮﻳﺲ ﺑﻴﻦ ‪ 1‬ﺗﺎ ‪ 10‬ﻫﺴﺘﻨﺪ‪.‬‬
‫‪ .2‬ﻋﻤﻠﻴﺎت ﺑﺮ روي ﻣﺎﺗﺮﻳﺲ‪ :‬ﻧﻮع ﻋﻤﻠﻴﺎت ﺑﺮ روي ﻣﺎﺗﺮﻳﺲﻫﺎ ﺑﺎ ﻳﻚ ﺷﻤﺎره ﻣﺸﺨﺺ ﻣﻲﺷﻮد‪ .‬اﻳﻦ ﺷـﻤﺎره و ﻋﻤﻠﻴـﺎت ﻣﺘﻨـﺎﻇﺮ آن در‬
‫ﺟﺪول زﻳﺮ ﻟﻴﺴﺖ ﺷﺪهاﻧﺪ‪:‬‬
‫ﺷﺮح‬
‫ﺑﺮﻧﺎﻣﻪ دو ﻣﺎﺗﺮﻳﺲ را از ﻓﺎﻳﻞ ورودي درﻳﺎﻓﺖ ﻛﻨﺪ )ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ‬
‫‪ ،(readFromFile‬آﻧﻬﺎ را ﺑﺎ ﻫﻢ ﺟﻤﻊ ﻛﺮده و ﻧﺘﻴﺠﻪ را در ﻓﺎﻳﻞ ﺧﺮوﺟﻲ ﺑﻨﻮﻳﺴﺪ‬
‫)ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ ‪.(writeToFile‬‬
‫ﺑﺮﻧﺎﻣﻪ دو ﻣﺎﺗﺮﻳﺲ را از ﻓﺎﻳﻞ ورودي درﻳﺎﻓﺖ ﻛﺮده‪ ،‬آﻧﻬﺎ را در ﻫﻢ ﺿﺮب ﻛﺮده و‬
‫ﻧﺘﻴﺠﻪ را در ﻓﺎﻳﻞ ﺧﺮوﺟﻲ ﺑﻨﻮﻳﺴﺪ‪.‬‬
‫ﺑﺮﻧﺎﻣﻪ ﻳﻚ ﻣﺎﺗﺮﻳﺲ از ﻓﺎﻳﻞ ورودي درﻳﺎﻓﺖ ﻛﺮده و ﺗﺮاﻧﻬﺎدهي آن را در ﻓﺎﻳﻞ‬
‫ﺧﺮوﺟﻲ ﭼﺎپ ﻛﻨﺪ‪.‬‬
‫ﻋﻤﻠﻴﺎت‬
‫ﺷﻤﺎره‬
‫‪Sum ‬‬
‫‪1 ‬‬
‫‪Multiply ‬‬
‫‪2 ‬‬
‫‪Transpose‬‬
‫‪3 ‬‬
‫‪ .3‬ﻓﺎﻳﻞﻫﺎي ورودي و ﺧﺮوﺟﻲ‪ :‬ﻧﺎم ﻓﺎﻳﻞ ورودي ‪ input.txt‬اﺳﺖ‪ .‬در اﺑﺘﺪاي اﻳﻦ ﻓﺎﻳﻞ ﻣﺘﻨﻲ‪ ،‬ﺷﻤﺎرهي ﻋﻤﻠﻴﺎت ﻣﻮرد ﻧﻈﺮ ﻛﺎرﺑﺮ‬
‫ﻗﺮار دارد‪ .‬در اداﻣﻪي ﻣﺤﺘﻮاي اﻳﻦ ﻓﺎﻳﻞ‪ ،‬ﻣﺸﺨﺼﺎت ﻣﺎﺗﺮﻳﺲ ﺑﻪ ﺻﻮرت ﻣﺠﻤﻮﻋﻪاي از اﻋﺪاد ذﺧﻴﺮه ﺷﺪه اﺳﺖ )ﻛﻪ ﺑﺴﺘﻪ ﺑﻪ ﻧﻮع‬
‫ﻋﻤﻠﻴﺎت‪ ،‬اﻃﻼﻋﺎت ﻳﻚ ﻳﺎ دو ﻣﺎﺗﺮﻳﺲ وﺟﻮد دارد(‪ .‬ﺑﻪ اﻳﻦ ﺻﻮرت ﻛﻪ اﺑﺘﺪا اﺑﻌﺎد ﻣﺎﺗﺮﻳﺲ اول ﺑﻪ ﺻﻮرت دو ﻋﺪد ﺻﺤﻴﺢ و در اداﻣﻪ‬
‫ﻣﻘﺎدﻳﺮ ﻋﻨﺎﺻﺮ ﻣﺎﺗﺮﻳﺲ اول ﺑﻪ ﺗﺮﺗﻴﺐ ﺳﻄﺮ ﺑﻪ ﺳﻄﺮ ﻗﺮار دارد‪ .‬در ﺻﻮرﺗﻲ ﻛﻪ ﻋﻤﻠﻴﺎت ﻣﻮرد ﻧﻈﺮ ﺿﺮب ﻳﺎ ﺟﻤﻊ ﺑﺎﺷﺪ‪ ،‬در اداﻣﻪي اﻳﻦ‬
‫ﻓﺎﻳﻞ اﻃﻼﻋﺎت ﻣﺎﺗﺮﻳﺲ دوم ﺑﻪ ﻫﻤﺎن ﺻﻮرت ﻗﺒﻠﻲ آﻣﺪه اﺳﺖ‪ .‬ﺗﻤﺎﻣﻲ اﻋﺪاد ﺑﺎ ﻳﻚ ﻓﺎﺻﻠﻪ )‪ (Space‬از ﻫﻤﺪﻳﮕﺮ ﺟﺪا ﺷﺪهاﻧﺪ‪.‬‬
‫ﺑﻌﺪ از اﻳﻨﻜﻪ ﺑﺮﻧﺎﻣﻪ ﻋﻤﻠﻴﺎت ﻣﻮرد ﻧﻈﺮ را اﻧﺠﺎم داد‪ ،‬ﻣﺎﺗﺮﻳﺲ ﻧﺘﻴﺠﻪ را ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ ‪ writeToFile‬در ﻓﺎﻳـﻞ ﺧﺮوﺟـﻲ ﻣـﻲﻧﻮﻳﺴـﺪ‪.‬‬
‫ﻓﺎﻳﻞ ﺧﺮوﺟﻲ‪ ،‬ﻳﻚ ﻓﺎﻳﻞ ﻣﺘﻨﻲ ﺑﺎ ﻧﺎم ‪ output.txt‬اﺳﺖ و ﺗﻤﺎﻣﻲ اﻋﺪاد ﺑﺎ ﻳﻚ ﻓﺎﺻﻠﻪ ﻧﺴﺒﺖ ﺑﻪ ﻫﻢ و ﺑﻪ ﺗﺮﺗﻴﺐ ﺳﻄﺮ ﺑﻪ ﺳـﻄﺮ ﻧﻮﺷـﺘﻪ‬
‫ﻣﻲﺷﻮﻧﺪ )ﺑﺪون ﻧﻮﺷﺘﻦ ‪.(newline‬‬
‫ﻣﺜﺎلﻫﺎﻳﻲ از ﻧﺤﻮهي ورودي و ﺧﺮوﺟﻲ اﻳﻦ ﺑﺮﻧﺎﻣﻪ در ﺟﺪاول زﻳﺮ آﻣﺪه اﺳﺖ‪.‬‬
‫ﻣﺤﺘﻮاي ﻓﺎﻳﻞ ‪ output.txt‬‬
‫ﻣﺤﺘﻮاي ﻓﺎﻳﻞ ‪ input.txt‬‬
‫‪2 2 20 14 56 41‬‬
‫‪2 2 3 1 2 3 4 5 6 3 2 6 5 4 3 2 1‬‬
‫‪ ‬‬
‫)‪ (5‬‬
‫ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزی )‪(۴۰-۱۵۳) (C/C++‬‬
‫)‪Introduction to Programming (C/C++‬‬
‫ﺑﻪﻧﺎﻡ ﺧﺪﺍ ‪ ‬‬
‫‪ ‬‬
‫ﻣﺪرس‪ :‬ﺷﺮوﻳﻦ داﻧﺶﭘﮋوه‬
‫داﻧﺸﮑﺪهی ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﻴﻮﺗﺮ‬
‫‪ ‬‬
‫ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ‪ :‬ﺳﺎﻋﺖ‪ ،۱۵:۳۰‬روز ﭘﻨﺠﺸﻨﺒﻪ ‪ ۱۳۹۰/۱۰/۲۲‬‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره ‪۴‬‬
‫ﻣﺤﺘﻮاي ﻓﺎﻳﻞ ‪ output.txt‬‬
‫ﻣﺤﺘﻮاي ﻓﺎﻳﻞ ‪ input.txt‬‬
‫‪2 2 2 6 8 6‬‬
‫‪1 2 2 1 2 3 4 2 2 1 4 5 2‬‬
‫ﻣﺤﺘﻮاي ﻓﺎﻳﻞ ‪ output.txt‬‬
‫ﻣﺤﺘﻮاي ﻓﺎﻳﻞ ‪ input.txt‬‬
‫‪1 2 2 1 2 3 4 3 2 6 5 4 3 2 1‬‬
‫)ﭼﻴﺰي در ﻓﺎﻳﻞ ﻧﻮﺷﺘﻪ ﻧﻤﻲﺷﻮد و ﭘﻴﻐﺎم ‪Dimensions‬‬
‫‪ mismatch‬در ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد ﭼﺎپ ﻣﻲﺷﻮد‪(.‬‬
‫ﺗﻤﺮﯾﻦ ﺳﻮم ‪ -‬ﻣﺮﺗﺐﺳﺎزی اﻋﺪاد )‪ ۱۵‬ﻧﻤﺮه(‪:‬‬
‫ﻳﻜﻲ از روشﻫﺎي ﻣﺮﺗﺐﺳﺎزي ﻋﻨﺎﺻﺮ ﻳﻚ آراﻳﻪ ﺑﻪ اﻳﻦ ﺻﻮرت اﺳﺖ ﻛﻪ در ﻫﺮ ﻧﻮﺑﺖ ﻋﻨﺼـﺮ ﻣـﺎﻛﺰﻳﻤﻢ را ﭘﻴـﺪا ﻛـﺮده و ﺑـﻪ آﺧـﺮ آراﻳـﻪ‬
‫ﻣﻲﺑﺮﻳﻢ‪ .‬ﺗﺎﺑﻌﻲ ﺑﻪ ﺻﻮرت ﺑﺎزﮔﺸﺘﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ اﻳﻦ اﻟﮕﻮرﻳﺘﻢ را ﺑﺮ روي آراﻳﻪاي از اﻋﺪاد ﺻﺤﻴﺢ ﭘﻴﺎده ﻛﻨﺪ‪ .‬ﻳﻌﻨﻲ در ﻫﺮ ﺑﺎر اﺟﺮا‪ ،‬ﻋـﺪد‬
‫ﻣﺎﻛﺰﻳﻤﻢ را ﭘﻴﺪا ﻛﺮده و ﺑﻪ آﺧﺮ آراﻳﻪ ﻣﻨﺘﻘﻞ ﻛﻨﺪ‪ .‬ﺳﭙﺲ ﺧﻮد را ﺑﺮ روي ﺑﺎﻗﻴﻤﺎﻧﺪهي آراﻳﻪ ﻓﺮاﺧﻮاﻧﻲ ﻛﻨـﺪ‪ .‬ﺑﺮﻧﺎﻣـﻪاي ﺑﻨﻮﻳﺴـﻴﺪ ﻛـﻪ ﺑـﺎ‬
‫اﺳﺘﻔﺎده از اﻳﻦ ﺗﺎﺑﻊ‪ ،‬ﻃﻮل و اﻋﻀﺎي ﻳﻚ آراﻳﻪ را از ﻛﺎرﺑﺮ ﺑﮕﻴﺮد و آن را ﺑﻪ روش ﻓﻮق ﻣﺮﺗﺐ ﻛﻨﺪ و ﺑﻌﺪ ﻋﻨﺎﺻﺮ آراﻳﻪي ﻣﺮﺗﺐﺷـﺪه را ﺑـﺎ‬
‫ﻳﻚ ﻓﺎﺻﻠﻪ از ﻫﻢ در ﺧﺮوﺟﻲ ﭼﺎپ ﻛﻨﺪ‪) .‬ﻃﻮل آراﻳﻪ ﺑﻴﻦ ‪ 1‬ﺗﺎ ‪(100‬‬
‫ﻣﺜﺎل ﺧﺮوﺟﻲ‬
‫ﻣﺜﺎل ورودي‬
‫‪1 2 3 4 5‬‬
‫‪5 5 2 4 3 1‬‬
‫ﺗﻤﺮﯾﻦ ﭼﻬﺎرم‪ -‬ﻣﺮﺗﺐﺳﺎزی رﺷﺘﻪﻫﺎ ﺑﺎ اﺳﺘﻔﺎده از اﺷﺎرهﮔﺮ )‪ ۱۵‬ﻧﻤﺮه(‪:‬‬
‫ﺑﺮﻧﺎﻣﻪي ﺗﻤﺮﻳﻦ ﺳﻮم را ﻃﻮري ﺗﻐﻴﻴﺮ دﻫﻴﺪ ﻛﻪ آراﻳﻪاي از رﺷﺘﻪﻫﺎ را ﻣﺮﺗﺐ ﻛﻨﺪ‪ .‬اﻳﻨﻜﺎر را ﺑﺎ اﺳﺘﻔﺎده از ﺟﺎﺑﺠﺎﻛﺮدن‪ 1‬اﺷﺎرهﮔﺮ رﺷـﺘﻪﻫـﺎ‬
‫اﻧﺠﺎم دﻫﻴﺪ‪ .‬ﺑﺮﻧﺎﻣﻪ ﺑﺎﻳﺪ اﺑﺘﺪا ﺗﻌﺪاد رﺷﺘﻪﻫﺎ را ﮔﺮﻓﺘﻪ و ﺳﭙﺲ ﻫﺮ رﺷﺘﻪ را در ﻳﻚ ﺳﻄﺮ درﻳﺎﻓﺖ ﻧﻤﺎﻳﺪ‪ .‬در ﭘﺎﻳﺎن‪ ،‬رﺷﺘﻪﻫﺎ را ﺑـﻪ ﺻـﻮرت‬
‫ﻣﺮﺗﺐﺷﺪهي اﻟﻔﺒﺎﻳﻲ در ﺧﺮوﺟﻲ‪ ،‬ﻫﺮ ﻛﺪام در ﻳﻚ ﺳﻄﺮ ﭼﺎپ ﻧﻤﺎﻳﺪ‪ .‬ﺗﺎﺑﻊ ﻣﺮﺗﺐﺳﺎزي ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت ﺑﺎزﮔﺸﺘﻲ ﺑﺎﺷﺪ‪.‬‬
‫‪ ‬‬
‫ﻣﺜﺎل ﺧﺮوﺟﻲ‬
‫ﻣﺜﺎل ورودي‬
‫‪C++ Programming‬‬
‫‪String sort sample‬‬
‫‪Test‬‬
‫‪This is my fourth homework.‬‬
‫‪4‬‬
‫‪C++ Programming‬‬
‫‪Test‬‬
‫‪This is my fourth homework.‬‬
‫‪String sort sample‬‬
‫‪ ‬‬
‫‪ Swap 1‬‬
‫‪ ‬‬
‫)‪ (6‬‬
‫ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزی )‪(۴۰-۱۵۳) (C/C++‬‬
‫)‪Introduction to Programming (C/C++‬‬
‫ﺑﻪﻧﺎﻡ ﺧﺪﺍ ‪ ‬‬
‫‪ ‬‬
‫ﻣﺪرس‪ :‬ﺷﺮوﻳﻦ داﻧﺶﭘﮋوه‬
‫داﻧﺸﮑﺪهی ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﻴﻮﺗﺮ‬
‫‪ ‬‬
‫ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ‪ :‬ﺳﺎﻋﺖ‪ ،۱۵:۳۰‬روز ﭘﻨﺠﺸﻨﺒﻪ ‪ ۱۳۹۰/۱۰/۲۲‬‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره ‪۴‬‬
‫ﺗﻤﺮﯾﻦ ﭘﻨﺠﻢ ‪ -‬ﻣﻌﮑﻮس رﺷﺘﻪ )‪ ۱۵‬ﻧﻤﺮه(‪:‬‬
‫ﻳﻚ ﺗﺎﺑﻊ ﺑﺎزﮔﺸﺘﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ رﺷﺘﻪ را ﺑﻪ ﻋﻨﻮان آرﮔﻮﻣﺎن ورودي ﺑﮕﻴﺮد و ﻣﻌﻜﻮس آن را ﺑـﻪ ﻋﻨـﻮان ﺧﺮوﺟـﻲ ﺑﺮﮔﺮداﻧـﺪ‪ .‬ﺳـﭙﺲ‬
‫ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ در ﻳﻚ ﺣﻠﻘﻪ ﺷﺮوع ﺑﻪ ﺧﻮاﻧﺪن ﺗﻌﺪادي رﺷﺘﻪ ﻛﻨﺪ و ﻫﺮ ﺑﺎر ﭘﺲ از ﮔﺮﻓﺘﻦ رﺷﺘﻪ‪ ،‬ﺑﺎ اﺳﺘﻔﺎده از اﻳﻦ ﺗﺎﺑﻊ ﻣﻌﻜﻮس‬
‫آن را ﺑﻪ دﺳﺖ آورده و ﭼﺎپ ﻛﻨﺪ‪) .‬در ﭘﺎﻳﺎن ﻫﺮ رﺷﺘﻪ ﻳﻚ ‪ newline‬ﭼﺎپ ﺷﻮد‪ (.‬ﺑﺎ ورود رﺷﺘﻪ ‪ exit‬ﺑﺮﻧﺎﻣﻪ ﭘﺎﻳﺎن ﻣﻲﻳﺎﺑﺪ‪.‬‬
‫ﻣﺜﺎل ﺧﺮوﺟﻲ‬
‫ﻣﺜﺎل ورودي‬
‫‪Test‬‬
‫‪tseT‬‬
‫‪Sample code‬‬
‫‪edoc elpmaS‬‬
‫‪exit‬‬
‫ﺗﻤﺮﯾﻦ ﺷﺸﻢ ‪ -‬ﻣﺮﺗﺐﺳﺎزی ﺳﺮﯾﻊ )‪ ۲۰‬ﻧﻤﺮه(‪:‬‬
‫ﻳﻜﻲ از اﻟﮕﻮرﻳﺘﻢﻫﺎي ﭘﺮﻛﺎرﺑﺮد ﺑﺮاي ﻣﺮﺗﺐﺳﺎزي ‪ Quick Sort‬ﻳﺎ ﻣﺮﺗﺐﺳﺎزي ﺳﺮﻳﻊ‪ 2‬اﺳﺖ‪ .‬در اﻳﻦ روش‪ ،‬ﺑﺮاي ﻣﺮﺗﺐﺳﺎزي ﻋﻨﺎﺻﺮ ﻳﻚ‬
‫دﻧﺒﺎﻟﻪ‪ ،‬ﻳﻜﻲ از آﻧﻬﺎ ﺑﻪ ﺻﻮرت ﺗﺼﺎدﻓﻲ ﺑﻪ ﻋﻨﻮان ﻣﺤﻮر‪ 3‬اﻧﺘﺨﺎب ﻣﻲﺷﻮد؛ ﺳﭙﺲ ﻋﻨﺎﺻﺮ آن دﻧﺒﺎﻟﻪ ﺑﻪ ﮔﻮﻧﻪاي ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ ﻛﻪ ﻫﻤﻪي‬
‫ﻋﻨﺎﺻﺮ ﻛﻮﭼﻚﺗﺮ از ﻣﺤﻮر در آﻏﺎز دﻧﺒﺎﻟﻪ‪ ،‬و ﻫﻤﻪي ﻋﻨﺎﺻﺮ ﺑﺰرگﺗﺮ ﻳﺎ ﻣﺴﺎوي ﻣﺤﻮر در اداﻣﻪ ﻗﺮار ﮔﻴﺮﻧﺪ‪ .‬ﺑﻪ اﻳﻦ ﻋﻤﻞ ﺑﺨﺶﺑﻨﺪي‬
‫‪4‬‬
‫ﮔﻔﺘﻪ ﻣﻲﺷﻮد‪ .‬ﻣﺜﻼً در دﻧﺒﺎﻟﻪي زﻳﺮ‪:‬‬
‫‪< 1, 100, 5, 3, 2, 10, 4 > ‬‬
‫اﮔﺮ ﻋﺪد ‪ 5‬ﺑﻪ ﻋﻨﻮان ﻣﺤﻮر اﻧﺘﺨﺎب ﺷﻮد‪ ،‬ﭘﺲ از ﻋﻤﻞ ﺑﺨﺶﺑﻨﺪي دﻧﺒﺎﻟﻪي زﻳﺮ ﺣﺎﺻﻞ ﻣﻲﺷﻮد‪:‬‬
‫‪< 1, 3, 2, 4, 5, 100, 10 > ‬‬
‫اﻛﻨﻮن اﮔﺮ ﺗﺎﺑﻊ ﻣﺮﺗﺐﺳﺎزي ﺑﻪ ﺻﻮرت ﺑﺎزﮔﺸﺘﻲ روي دو ﺑﺨﺶ زﻳﺮ )ﻛﻪ ﺣﺎﺻﻞ از ﺑﺨﺶﺑﻨﺪي اﺳﺖ( اﺟﺮا ﺷﻮد‪:‬‬
‫‪< 1, 3, 2, 4 >, < 100, 10 > ‬‬
‫در اﻳﻦ ﺻﻮرت ﻛﻞ دﻧﺒﺎﻟﻪ ﺑﻪ ﺻﻮرت ﻣﺮﺗﺐ در ﺧﻮاﻫﺪ آﻣﺪ‪.‬‬
‫در اﻳﻦ ﺗﻤﺮﻳﻦ ﺷﻤﺎ ﺑﺎﻳﺪ ﺗﺎﺑﻌﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺑﺎ اﺳﺘﻔﺎده از اﻟﮕﻮرﻳﺘﻢ ﺑﺎزﮔﺸﺘﻲ ﻣﺮﺗﺐﺳﺎزي ﺳﺮﻳﻊ‪ ،‬آراﻳﻪاي از اﻋﺪاد ﺻﺤﻴﺢ را ﻣﺮﺗﺐ ﻛﻨﺪ‪.‬‬
‫اﻳﻦ ﺗﺎﺑﻊ را دﻗﻴﻘﺎً ﺑﻪ ﺻﻮرت زﻳﺮ ﭘﻴﺎدهﺳﺎزي ﻛﻨﻴﺪ‪:‬‬
‫‪void quick_sort(int *start, int *end); ‬‬
‫‪ ‬‬
‫‪http://en.wikipedia.org/wiki/Quicksort#Algorithm 2‬‬
‫‪ Pivot 3‬‬
‫‪Partitioning 4‬‬
‫‪ ‬‬
‫)‪ (7‬‬
‫ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزی )‪(۴۰-۱۵۳) (C/C++‬‬
‫)‪Introduction to Programming (C/C++‬‬
‫ﺑﻪﻧﺎﻡ ﺧﺪﺍ ‪ ‬‬
‫‪ ‬‬
‫ﻣﺪرس‪ :‬ﺷﺮوﻳﻦ داﻧﺶﭘﮋوه‬
‫داﻧﺸﮑﺪهی ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﻴﻮﺗﺮ‬
‫‪ ‬‬
‫ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ‪ :‬ﺳﺎﻋﺖ‪ ،۱۵:۳۰‬روز ﭘﻨﺠﺸﻨﺒﻪ ‪ ۱۳۹۰/۱۰/۲۲‬‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره ‪۴‬‬
‫ﻋﻨﺎﺻﺮي ﻛﻪ ﻗﺮار اﺳﺖ ﻣﺮﺗﺐ ﺷﻮﻧﺪ‪ ،‬ﺑﺎ اﺷﺎرهﮔﺮﻫﺎي ‪ start‬و ‪ end‬ﻣﺸﺨﺺ ﻣﻲﺷﻮﻧﺪ‪ .‬ﻣﺜﻼً ﺑﺮاي ﻣﺮﺗﺐﺳﺎزي آراﻳﻪي ‪ a‬ﻛﻪ ﺑﻪ ﺻﻮرت‬
‫;]‪ int a[1000‬ﺗﻌﺮﻳﻒ ﺷﺪه‪ ،‬ﺗﺎﺑﻊ ‪ quick_sort‬ﺑﻪ ﺻﻮرت زﻳﺮ ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮد‪:‬‬
‫‪quick_sort(a, a + 1000); ‬‬
‫ﺑﻪ ﻃﻮر ﻛﻠﻲ ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ;)‪ quick_sort(a + i, a + j‬ﻋﻨﺎﺻﺮي از آراﻳﻪي ‪ a‬ﻛﻪ اﻧﺪﻳﺴﺸﺎن در ﺑﺎزهي )‪ [i, j‬ﻗﺮار دارد‪ ،‬ﺑﻪ ﻋﻨﻮان ﻳﻚ‬
‫ﺗﻜﻪآراﻳﻪ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪه و ﻣﺮﺗﺐ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫ﺗﺬﻛﺮ‪ :‬در ﭘﻴﺎدهﺳﺎزي اﻳﻦ ﺗﺎﺑﻊ ﻧﺒﺎﻳﺪ آراﻳﻪي اﺿﺎﻓﻲ ﺗﻌﺮﻳﻒ ﻛﻨﻴﺪ‪.5‬‬
‫‪ ‬‬
‫»ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ«‬
‫‪ ‬‬
‫‪ http://en.wikipedia.org/wiki/Quicksort#In‐place_version 5‬‬
‫‪ ‬‬
‫)‪ (8‬‬