ﺳﯿﺴﺘﻢﻫﺎی ﻋﺎﻣﻞ ﻧﯿﻢﺳﺎل دوم ٩٣-٩٢ ﻣﺪرس :ﺣﻤﯿﺪ ﺑﯿ داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ ﺗﻤﺮﯾﻦ اول ﻣﻬﻠﺖ ارﺳﺎل ٣١ :ﻓﺮوردﯾﻦﻣﺎه ﺳﺆال .١ﺿﺮب ﻣﺎﺗﺮﯾﺲﻫﺎ در اﯾﻦ ﺗﻤﺮﯾﻦ ﻣ ﺧﻮاﻫﯿﻢ ﺑﺎ ﮐﻤ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴ ﻣﻮازی ،ﺳﺮﻋﺖ ﺿﺮب ﻣﺎﺗﺮﯾﺲﻫﺎ را اﻓﺰاﯾﺶ دﻫﯿﻢ .ﺑﺮﻧﺎﻣﻪ ﺑﺎ ﮔﺮﻓﺘﻦ ﯾ ﻓﺎﯾﻞ ﺣﺎوی ﻣﺎﺗﺮﯾﺲﻫﺎ ﺑﺎﯾﺪ ﻧﺘﯿﺠﻪ ﺿﺮب آنﻫﺎ در ﺧﺮوﺟ اﺳﺘﺎﻧﺪارد ﻧﻤﺎﯾﺶ دﻫﺪ .ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﺷ ﻞ زﯾﺮ اﺟﺮا ﻣ ﺷﻮد: ./ matrixmult matrices .txt ﻓﺎﯾﻞ ﺣﺎوی ﻣﺎﺗﺮﯾﺲﻫﺎ در ﻗﺎﻟﺐ زﯾﺮ ﺑﺎﯾﺪ ﺑﺎﺷﺪ: ] [matrices - count ] [matrix1 -rows]x[matrix1 - columns ] [ matrix1 ] [matrix2 -rows]x[matrix2 - columns ] [ matrix2 ... ﺑﺮای ﻧﻤﻮﻧﻪ ﯾ ﻓﺎﯾﻞ ورودی ﻣ ﺗﻮاﻧﺪ ﺑﻪ ﺷ ﻞ زﯾﺮ ﺑﺎﺷﺪ: 2 2x4 8 2 3 4 9 3 5 7 4x2 2 3 4 5 6 7 9 3 ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﭘﺲ از ﺧﻮاﻧﺪن ﻓﺎﯾﻞ ورودی ،در ﺻﻮرﺗ ﮐﻪ اﺑﻌﺎد ﻣﺎﺗﺮﯾﺲﻫﺎ ﺑﺮای ﺿﺮب درﺳﺖ ﻧﺒﺎﺷﻨﺪ ،ﺑﺎﯾﺪ ﺑﺎ ﻧﻤﺎﯾﺶ ﺧﻄﺎﯾﯽ ﻣﺘﻮﻗﻒ ﺷﻮد. ﻣﻮازیﺳﺎزی ﺑﺮای ﻣﻮازی ﮐﺮدن ﺿﺮب ﻣﺎﺗﺮﯾﺲﻫﺎ ﺑﺎﯾﺪ ﺑﺎ ﻧﯿﻢ ﮐﺮدن ﻣﺎﺗﺮﯾﺲﻫﺎ ﺿﺮب ﻫﺮ ﺑﺨﺶ را در ﯾ رﯾﺴﻪی ﺟﺪا اﻧﺠﺎم دﻫﯿﺪ. ﻧﯿﻢ ﮐﺮدن ﻣﺎﺗﺮﯾﺲﻫﺎ ﺑﺎﯾﺪ ﺗﺎ ﺟﺎﯾﯽ اداﻣﻪ ﭘﯿﺪا ﮐﻨﺪ ﮐﻪ ﻫﺮ ﺑﺨﺶ ﺣﺪاﮐﺜﺮ ٢ﻣﺎﺗﺮﯾﺲ داﺷﺘﻪ ﺑﺎﺷﺪ .ﺑﺮای ﻣﺜﺎل ﺑﺮای ﺿﺮب ﻣﺎﺗﺮﯾﺲﻫﺎی زﯾﺮ: A x B x C x D x E ١ در ﻣﺮﺣﻠﻪ اول ﺑﻪ ﺷ ﻞ زﯾﺮ ﺑﺨﺶﺑﻨﺪی ﻣ ﮐﻨﯿﻢ: )(A x B) x (C x D x E ﺳﭙﺲ: ))(A x B) x ((C) x (D x E در اداﻣﻪ ﺿﺮب ﻫﺮ ﺑﺨﺶ در رﯾﺴﻪی ﺧﻮد اﻧﺠﺎم ﻣ ﺷﻮد .ﺑﺮای اﻧﺠﺎم ﻋﻤﻠﯿﺎت ﺿﺮب ﻣﺎﺗﺮﯾﺲ ﻫﻢ ﻣ ﺧﻮاﻫﯿﻢ از رﯾﺴﻪﻫﺎی ﺟﺪاﯾﯽ اﺳﺘﻔﺎده ﮐﻨﯿﻢ .ﺑﺮای اﯾﻨﮑﺎر ﺿﺮب ﻫﺮ ﺳﻄﺮ ﻣﺎﺗﺮﯾﺲ اول در ﻣﺎﺗﺮﯾﺲ دوم ﺑﺎﯾﺪ در ﯾ رﯾﺴﻪی ﺟﺪا اﻧﺠﺎم ﺷﻮد .ﺑﺮای ﻣﺜﺎل ﺿﺮب دو ﻣﺎﺗﺮﯾﺲ ﺑﺎ اﺑﻌﺎد ۴ × ۵و ۵ × ٧ﺑﺎﯾﺪ در ۴رﯾﺴﻪی ﺟﺪا اﻧﺠﺎم ﮔﯿﺮد .در ﺷ ﻞ زﯾﺮ ﻧﻤﻮﻧﻪای از رﯾﺴﻪﻫﺎﯾﯽ ﮐﻪ ﺑﺎﯾﺪ ﺑﺮای ﻋﻤﻠﯿﺎت ﺿﺮب دو ﻣﺎﺗﺮﯾﺲ ﺳﺎﺧﺘﻪ ﺷﻮﻧﺪ را ﻣ ﺗﻮاﻧﯿﺪ ﺑﺒﯿﻨﯿﺪ: m n o p q r s t u v w x ریسه ۱ ریسه ۲ ریسه ۳ × a b c e f g i j k ﺷ ﻞ :١رﯾﺴﻪﻫﺎی ﺳﺎﺧﺘﻪ ﺷﺪه ﻫﻨﮕﺎم ﺿﺮب دو ﻣﺎﺗﺮﯾﺲ در ﻧﻬﺎﯾﺖ ﺑﻌﺪ از اﻧﺠﺎم ﺿﺮب ،ﻣﻘﺪار ﺣﺎﺻﻞ ﺑﺎﯾﺪ در رﯾﺴﻪی ﭘﺪر در ﺑﻘﯿﻪی ﻣﺎﺗﺮﯾﺲﻫﺎ ﺿﺮب ﺷﻮد: = ))(A x B) x ((C) x (D x E = )AB x (C x DE = AB x CDE ABCDE در اﯾﻦ ﻣﺜﺎل اﺑﺘﺪا دو رﯾﺴﻪ ﺟﺪا ﺳﺎﺧﺘﻪ ﻣ ﺷﻮد ،رﯾﺴﻪی اول ﺑﻪ ﻃﻮر ﻣﻮازی ABرا ﻣﺤﺎﺳﺒﻪ ﻣ ﮐﻨﺪ وﻟ رﯾﺴﻪی دوم ﭼﻮن ﺑﯿﺸﺘﺮ از دو ﻣﺎﺗﺮﯾﺲ دارد ،اﺑﺘﺪا ﻣﺎﺗﺮﯾﺲﻫﺎ را ﺑﻪ دو ﻧﯿﻤﻪ ﺗﻘﺴﯿﻢ ﻣ ﮐﻨﺪ ،ﻧﯿﻤﻪی اول ﭼﻮن ﻓﻘﻂ ﯾ ﻣﺎﺗﺮﯾﺲ دارد ،ﻧﯿﺎزی ﺑﻪ ﻣﺤﺎﺳﺒﻪ ﻧﺪارد ،وﻟ ﺑﺮای ﻧﯿﻤﻪی دوم ﯾ رﯾﺴﻪی ﺟﺪﯾﺪ ﺳﺎﺧﺘﻪ ﻣ ﺷﻮد ﮐﻪ ﺑﺎﯾﺪ DEرا ﻣﺤﺎﺳﺒﻪ ﮐﻨﺪ. در اداﻣﻪ C ،در ﻧﺘﯿﺠﻪی ﺣﺎﺻﻞ ،ﺿﺮب ﻣ ﺷﻮد .در ﻧﻬﺎﯾﺖ دو رﯾﺴﻪی اوﻟﯿﻪ ﭘﺲ از ﻣﺤﺎﺳﺒﻪی ﺿﺮب ﻣﺎﺗﺮﯾﺲﻫﺎی ﺑﺨﺶ ﺧﻮد ،ﻧﺘﯿﺠﻪ را ﺑﻪ ﺑﺮﻧﺎﻣﻪی اﺻﻠ ﺑﺮ ﻣ ﮔﺮداﻧﻨﺪ ﺗﺎ ﻧﺘﯿﺠﻪی ﻧﻬﺎﯾﯽ ﺑﺎ ﺿﺮب ABدر CDEﻣﺤﺎﺳﺒﻪ ﺷﻮد: Thread Main AxBxCxDxE Thread 2 )(A x B Thread 3 )(C x D x E Thread 4 )(D x E ﺷ ﻞ :٢رﯾﺴﻪﻫﺎی ﺳﺎﺧﺘﻪ ﺷﺪه ﻫﻨﮕﺎم ﺑﺨﺶﺑﻨﺪی ﻣﺎﺗﺮﯾﺲﻫﺎ ٢ ﺳﺆال .٢ﺳﺎﻣﺎﻧﻪی ATM در اﯾﻦ ﺗﻤﺮﯾﻦ ﻗﺼﺪ دارﯾﻢ رﻓﺘﺎر ﭼﻨﺪ ATMرا در ﯾ ﺳﺎﻣﺎﻧﻪی ﺑﺎﻧﮑ ﺷﺒﯿﻪﺳﺎزی ﮐﻨﯿﻢ .ﺑﺮای اﯾﻦ ﻣﻨﻈﻮر ﺑﺎ اﺟﺮای ﺑﺮﻧﺎﻣﻪ ،ﻫﺮ ATMﺑﺎﯾﺪ در ﯾ رﯾﺴﻪی ﺟﺪا آﻣﺎدهی ﺳﺮوﯾﺲدﻫ ﺑﻪ ﻣﺸﺘﺮﯾﺎن ﺑﺎﺷﺪ .ﻫﺮ ATMﺳﺮوﯾﺲﻫﺎی زﯾﺮ را ﺑﻪ ﻣﺸﺘﺮﯾﺎن اراﺋﻪ ﻣ دﻫﺪ: .١وارﯾﺰ وﺟﻪ ﺑﻪ ﺣﺴﺎب .٢ﺑﺮداﺷﺖ وﺟﻪ از ﺣﺴﺎب .٣اﻧﺘﻘﺎل وﺟﻪ .۴ﻣﺸﺎﻫﺪهی ﻣﻮﺟﻮدی ﻫﺮ ATMﺑﺎ ﮔﺮﻓﺘﻦ ﯾ ﺑﺮﻧﺎﻣﻪ اﺟﺮا ﺷﻮد: ﻓﺎﯾﻞ ﺑﻪ ﻋﻨﻮان ورودی ﻟﯿﺴﺘ از ﮐﺎرﻫﺎی ﻓﻮق را ﺑﺎﯾﺪ اﻧﺠﺎم دﻫﺪ .ﺑﺎ اﺟﺮای دﺳﺘﻮر زﯾﺮ ﺑﺎﯾﺪ ./ bank accounts -file atm -count atm1 -file atm2 -file ... ﻫﺮ ﺳﻄﺮ ﻓﺎﯾﻞ ﻫﺮ ATMﺣﺎوی ﯾ ﺑﻮد: از ﻋﻤﻠﯿﺎت ﻣﻤ ﻦ ATMاﺳﺖ .ﻋﻤﻠﯿﺎت ﺑﻪ ﯾ از ﭼﻬﺎر ﺷ ﻞ زﯾﺮ ﺧﻮاﻫﻨﺪ ] transfer [account -number - source ] [account -number - destination ] [ amount ] withdraw [account - number ] [ amount ] deposit [account - number ] [ amount ] balance [account - number ﺑﺮای ﻧﻤﻮﻧﻪ ﺑﺮای وارﯾﺰ ١٠٠٠٠رﯾﺎل ﺑﻪ ﺣﺴﺎب ١٣٩٢٧٨٠٩٢٣ﭼﻨﯿﻦ ﺳﻄﺮی در ﻓﺎﯾﻞ ﺧﻮاﻫﯿﻢ داﺷﺖ: deposit 1392780923 10000 ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ واﺣﺪ ﺗﻤﺎﻣ ﭘﻮلﻫﺎ در اﯾﻦ ﺳﺎﻣﺎﻧﻪ ﺑﻪ رﯾﺎل اﺳﺖ. ﻓﺎﯾﻞ accounts-fileﺣﺎوی ﺷﻤﺎره ﺣﺴﺎبﻫﺎ ﺑﻪ ﻫﻤﺮاه ﻣﻮﺟﻮدی اوﻟﯿﻪ ﻫﺮ ﺣﺴﺎب اﺳﺖ .ﻫﺮ ﺳﻄﺮ اﯾﻦ ﻓﺎﯾﻞ ﺑﻪ ﺷ ﻞ زﯾﺮ اﺳﺖ: ] [account - number ] [ balance ﺑﺮای ﻣﺜﺎل: 1392780923 10000000 1391873210 39975000 وارﯾﺰ وﺟﻪ ﺑﻪ ﺣﺴﺎب اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﺑﺎ ﮔﺮﻓﺘﻦ ﯾ ﺷﻤﺎره ﺣﺴﺎب و ﻣﻘﺪار ﭘﻮل ﺻﻮرت ﻣ ﮔﯿﺮد .ﺑﺎ اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﺑﻪ ﻣﻘﺪار ﻣﺸﺨﺺ ﺷﺪه ﺑﺎﯾﺪ ﺑﻪ ﻣﻮﺟﻮدی ﺣﺴﺎب اﺿﺎﻓﻪ ﺷﻮد .ﺣﯿﻦ اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﻫﯿﭻ ﻋﻤﻠﯿﺎت دﯾ ﺮی روی اﯾﻦ ﺣﺴﺎب ﻧﻤ ﺗﻮان ٣ اﻧﺠﺎم داد .ﺑﻌﺪ از اﻧﺠﺎم ﻋﻤﻞ وارﯾﺰ وﺟﻪ ،ﺣﺴﺎب ﻣﻮردﻧﻈﺮ ﺑﺎﯾﺪ ﺑﻪ ﻣﺪت ﯾ ﺛﺎﻧﯿﻪ ﻗﻔﻞ ﺑﻤﺎﻧﺪ .ﺑﻌﺪ از اﯾﻦ زﻣﺎن ،ﺑﺎﯾﺪ ﭘﯿﻐﺎم زﯾﺮ در ﻻگ ﻣﺮﺑﻮط ﺑﻪ اﯾﻦ ATMﺛﺒﺖ ﺷﻮد )ﺑﺨﺶ ﻻگ ﻋﻤﻠﯿﺎت را ﺑﺒﯿﻨﯿﺪ(: ] [time ]: deposited [ amount ] rials for [account - number ﺑﺮداﺷﺖ وﺟﻪ از ﺣﺴﺎب اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﺑﺎ ﮔﺮﻓﺘﻦ ﯾ ﺷﻤﺎره ﺣﺴﺎب و ﻣﻘﺪار ﭘﻮل ﺻﻮرت ﻣ ﮔﯿﺮد .ﺣﯿﻦ اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﻫﯿﭻ ﻋﻤﻠﯿﺎت دﯾ ﺮی روی ﺣﺴﺎب ﻧﻤ ﺗﻮان اﻧﺠﺎم داد .اﯾﻦ ﻋﻤﻞ ﺑﺎ ﮐﺎﺳﺘﻦ ﻣﻘﺪار ﻣﺸﺨﺺ ﺷﺪه از ﺣﺴﺎب ﻣﻮرد ﻧﻈﺮ اﻧﺠﺎم ﻣ ﺷﻮد .ﺑﻌﺪ از اﻧﺠﺎم ﻋﻤﻞ ﺑﺮداﺷﺖ وﺟﻪ ،ﺣﺴﺎب ﻣﺸﺨﺺ ﺷﺪه ﺑﺎﯾﺪ ﺑﻪ ﻣﺪت ﯾ ﺛﺎﻧﯿﻪ ﻗﻔﻞ ﺑﻤﺎﻧﺪ .در ﺻﻮرﺗ ﮐﻪ ﻣﻮﺟﻮدی ﺣﺴﺎب ﮐﻤﺘﺮ از ﻣﯿﺰان ﻣﻮردﻧﻈﺮ ﺑﺎﺷﺪ ،ﻋﻤﻠﯿﺎت ﺑﺮداﺷﺖ وﺟﻪ اﻧﺠﺎم ﻧﻤ ﺷﻮد وﻟ ﮐﻤﺎﮐﺎن ﺣﺴﺎب ﺑﻪ ﻣﺪت ﯾ ﺛﺎﻧﯿﻪ ﻗﻔﻞ ﻣ ﻣﺎﻧﺪ .ﻫﻤﭽﻨﯿﻦ ﭘﯿﻐﺎم زﯾﺮ ﺑﺎﯾﺪ در ﻻگ ﻣﺮﺑﻮط ﺑﻪ اﯾﻦ ATMﺛﺒﺖ ﺷﻮد: ] [time ]: not enough balance for [account - number در ﺻﻮرﺗ ﮐﻪ ﻋﻤﻠﯿﺎت ﻣﻮﻓﻘﯿﺖ آﻣﯿﺰ ﺑﻮد ،ﺑﻌﺪ از ﭘﺎﯾﺎن ﯾﺎﻓﺘﻦ زﻣﺎن ﻗﻔﻞ ،ﭘﯿﻐﺎم زﯾﺮ ﺑﺎﯾﺪ ﺛﺒﺖ ﺷﻮد: ] [time ]: withdrew [ amount ] rials from [account - number اﻧﺘﻘﺎل وﺟﻪ اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﺑﺎ ﮔﺮﻓﺘﻦ ﯾ ﺷﻤﺎره ﺣﺴﺎب ﻣﺒﺪأ و ﻣﻘﺼﺪ و ﻣﻘﺪار ﭘﻮل ﺻﻮرت ﻣ ﮔﯿﺮد .ﺣﯿﻦ اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﻫﯿﭻ ﻋﻤﻠﯿﺎت دﯾ ﺮی روی ﺣﺴﺎب ﻣﺒﺪأ و ﻣﻘﺼﺪ ﻧﻤ ﺗﻮان اﻧﺠﺎم داد .اﯾﻦ ﻋﻤﻞ ﺑﺎ ﮐﺎﺳﺘﻦ ﻣﻘﺪار ﻣﺸﺨﺺ ﺷﺪه از ﺣﺴﺎب ﻣﺒﺪأ و اﻓﺰودن آن ﺑﻪ ﺣﺴﺎب ﻣﻘﺼﺪ اﻧﺠﺎم ﻣ ﺷﻮد .ﺑﻌﺪ از اﻧﺠﺎم ﻋﻤﻞ اﻧﺘﻘﺎل وﺟﻪ ،ﺣﺴﺎب ﻣﺒﺪأ و ﻣﻘﺼﺪ ﺑﺎﯾﺪ ﺑﻪ ﻣﺪت دو ﺛﺎﻧﯿﻪ ﻗﻔﻞ ﺑﻤﺎﻧﻨﺪ .ﻃ اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﺑﺎﯾﺪ ۵٠٠٠رﯾﺎل از ﺣﺴﺎب ﻣﺒﺪأ ﺑﺮای ﻫﺰﯾﻨﻪ اﻧﺘﻘﺎل ﮐﺴﺮ ﺷﻮد .در ﺻﻮرﺗ ﮐﻪ ﻣﻮﺟﻮدی ﺣﺴﺎب ﻣﺒﺪأ ﮐﻤﺘﺮ از ﻣﯿﺰان ﻣﻮردﻧﻈﺮ ﺑﻪ اﺿﺎﻓﻪی ۵٠٠٠رﯾﺎل ﻫﺰﯾﻨﻪ اﻧﺘﻘﺎل وﺟﻪ ﺑﺎﺷﺪ ،ﻋﻤﻠﯿﺎت اﻧﺘﻘﺎل وﺟﻪ اﻧﺠﺎم ﻧﻤ ﺷﻮد وﻟ ﮐﻤﺎﮐﺎن دو ﺣﺴﺎب ﺑﻪ ﻣﺪت دو ﺛﺎﻧﯿﻪ ﻗﻔﻞ ﻣ ﻣﺎﻧﻨﺪ .ﻫﻤﭽﻨﯿﻦ ﭘﯿﻐﺎم زﯾﺮ ﺑﺎﯾﺪ در ﻻگ ﻣﺮﺑﻮط ﺑﻪ اﯾﻦ ATMﺛﺒﺖ ﺷﻮد: ] [time ]: not enough balance to transfer from [ source ] to [ destination در ﺻﻮرﺗ ﮐﻪ ﻋﻤﻠﯿﺎت ﻣﻮﻓﻘﯿﺖ آﻣﯿﺰ ﺑﻮد ،ﺑﻌﺪ از ﭘﺎﯾﺎن ﯾﺎﻓﺘﻦ زﻣﺎن ﻗﻔﻞ ،ﭘﯿﻐﺎم زﯾﺮ ﺑﺎﯾﺪ ﺛﺒﺖ ﺷﻮد: ] [time ]: transferred [ amount ] rials from [ source ] to [ destination ﻣﺸﺎﻫﺪهی ﻣﻮﺟﻮدی اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﺑﺎ ﮔﺮﻓﺘﻦ ﯾ ﺷﻤﺎره ﺣﺴﺎب ﺻﻮرت ﻣ ﮔﯿﺮد .ﺑﺎ اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﺑﺎﯾﺪ ﻣﻘﺪار ﻣﻮﺟﻮدی ﺑﻪ ﺷ ﻞ زﯾﺮ در ﻻگ ﻣﺮﺑﻮط ﺑﻪ اﯾﻦ ATMﺛﺒﺖ ﺷﻮد: ۴ [time ]: balance for [account - number ]: [ amount ] rials ﺣﯿﻦ اﻧﺠﺎم اﯾﻦ ﻋﻤﻞ ﻫﯿﭻ ﻋﻤﻠﯿﺎت دﯾ ﺮی روی اﯾﻦ ﺣﺴﺎب ﻧﻤ ﺗﻮان اﻧﺠﺎم داد .ﺑﻌﺪ از اﻧﺠﺎم ﻋﻤﻞ ﻣﺸﺎﻫﺪهی ﻣﻮﺟﻮدی ،ﺣﺴﺎب ﻣﻮردﻧﻈﺮ ﺑﺎﯾﺪ ﺑﻪ ﻣﺪت ﯾ ﺛﺎﻧﯿﻪ ﻗﻔﻞ ﺑﻤﺎﻧﺪ. وﻗﻔﻪﻫﺎ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺑﺎﯾﺪ در ﺻﻮرت درﯾﺎﻓﺖ دو وﻗﻔﻪی زﯾﺮ ﮐﺎرﻫﺎی ﻣﺸﺨﺺ ﺷﺪه را اﻧﺠﺎم دﻫﺪ: وﻗﻔﻪ SIGINT SIGTSTP ﻋﻤﻠﯿﺎت ﺗﻤﺎم ﻋﻤﻠﯿﺎﺗ ﮐﻪ اﻧﺠﺎم ﺷﺪهاﻧﺪ و در وﺿﻌﯿﺖ ﻗﻔﻞ ﺑﻪ ﺳﺮ ﻣ ﺑﺮﻧﺪ ،ﺑﺎز ﮔﺮداﻧ ﻣ ﺷﻮﻧﺪ ﻣﻮﺟﻮدی ﻧﻬﺎﯾﯽ ﻫﺮ ﺣﺴﺎب در ﯾ ﻓﺎﯾﻞ ﺑﻪ ﻧﺎم balance.logﻧﻮﺷﺘﻪ ﻣ ﺷﻮد، ﺳﭙﺲ اﺟﺮای ﺑﺮﻧﺎﻣﻪ ﻣﺘﻮﻗﻒ ﻣ ﺷﻮد ﺑﺮای ﺛﺒﺖ ﻣﻮﺟﻮدی ﻧﻬﺎﯾﯽ ﻫﺮ ﺣﺴﺎب از ﻗﺎﻟﺐ زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ: ] [account - number ] [ balance ﻫﻨﮕﺎم درﯾﺎﻓﺖ وﻗﻔﻪی ،SIGTSTPﻫﻤﻪی رﯾﺴﻪﻫﺎ ﭘﺲ از ﭘﺎﯾﺎن ﯾﺎﻓﺘﻦ ﻋﻤﻠﯿﺎت ﮐﻨﻮﻧ ،از اﺟﺮای اداﻣﻪی ﻋﻤﻠﯿﺎت دﺳﺖ ﻣ ﮐﺸﻨﺪ و ﺑﺮﻧﺎﻣﻪ ﺑﺎ ﭘﺎﯾﺎن ﯾﺎﻓﺘﻦ ﻫﻤﻪی رﯾﺴﻪﻫﺎ ،ﻓﺎﯾﻞ balance.logرا ﻣ ﺳﺎزد و ﺳﭙﺲ ﺧﺎﺗﻤﻪ ﻣ ﯾﺎﺑﺪ .در ﺣﺎﻟﺘ ﻫﻢ ﮐﻪ ﺑﺪون رخ دادن وﻗﻔﻪی SIGTSTPاﺟﺮای ﻫﻤﻪی رﯾﺴﻪﻫﺎ ﺑﻪ ﭘﺎﯾﺎن ﺑﺮﺳﺪ ،ﮐﻤﺎﮐﺎن ﻓﺎﯾﻞ balance.log ﺑﺎﯾﺪ ﺑﺎ ﭘﺎﯾﺎن ﺑﺮﻧﺎﻣﻪ ﺳﺎﺧﺘﻪ ﺷﻮد. ﺑﺎزﮔﺮداﻧ ﻋﻤﻠﯿﺎت در ﺻﻮرﺗ ﮐﻪ وﻗﻔﻪی SIGINTاﯾﺠﺎد ﺷﻮد ،ﺗﻤﺎﻣ ﻋﻤﻠﯿﺎﺗ ﮐﻪ اﻧﺠﺎم ﺷﺪهاﻧﺪ و در وﺿﻌﯿﺖ ﻗﻔﻞ ﺑﻌﺪ از ﻋﻤﻠﯿﺎت ﺑﻪ ﺳﺮ ﻣ ﺑﺮﻧﺪ ،ﭘﺲ از ﭘﺎﯾﺎن ﯾﺎﻓﺘﻦ زﻣﺎن ﻗﻔﻞ ،ﺑﻪ ﺣﺎﻟﺖ ﻗﺒﻞ از ﻋﻤﻠﯿﺎت ﺑﺎزﮔﺮداﻧ ﻣ ﺷﻮﻧﺪ .ﺑﺎزﮔﺮداﻧ ﻓﻘﻂ ﺑﺮای وارﯾﺰ وﺟﻪ ،اﻧﺘﻘﺎل وﺟﻪ و ﺑﺮداﺷﺖ وﺟﻪ ﻣ ﺗﻮاﻧﺪ رخ دﻫﺪ و ﺑﺮای اﻧﺘﻘﺎل وﺟﻪ ۵٠٠٠رﯾﺎل ﻫﺰﯾﻨﻪ ﺗﺮاﮐﻨﺶ ﻫﻢ ﺑﻪ ﺣﺴﺎب ﻣﺒﺪأ ﺑﺎﯾﺪ ﺑﺎزﮔﺮداﻧﺪه ﺷﻮد .ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ در ﺣﯿﻦ اﻧﺠﺎم ﻋﻤﻠﯿﺎت ﺑﺎزﮔﺮداﻧ ﻫﻢ ﺑﺎﯾﺪ ﺣﺴﺎبﻫﺎی درﮔﯿﺮ ﻗﻔﻞ ﺷﻮﻧﺪ .در ﺿﻤﻦ دﻗﺖ ﮐﻨﯿﺪ ﮐﻪ در ﺻﻮرت ﺑﺎزﮔﺮداﻧ ﯾ ﻋﻤﻞ ،ﭘﯿﻐﺎم ﻣﺮﺑﻮط ﺑﻪ ﻣﻮﻓﻘﯿﺖ آﻣﯿﺰ ﺑﻮدن ﻋﻤﻞ دﯾ ﺮ ﻧﺒﺎﯾﺪ ﺛﺒﺖ ﺷﻮد .ﺑﻌﺪ از ﭘﺎﯾﺎن اﯾﻦ ﻋﻤﻞ ﭘﯿﻐﺎم زﯾﺮ ﺑﺎﯾﺪ در ﻻگ ATMﺛﺒﺖ ﺷﻮد: ]} [time ]: reversal of [type ={ transfer ,deposit , withdraw ﻻگ ﻋﻤﻠﯿﺎت ﺑﺮای ﻫﺮ ATMﺑﺎﯾﺪ ﯾ ﻓﺎﯾﻞ ﻻگ ﺑﺎ ﻧﺎم زﯾﺮ ﺳﺎﺧﺘﻪ ﺷﻮد: atm[id ]. log ﺑﺮای ﻣﺜﺎل ATMﺳﻮم ﺑﺎﯾﺪ ﯾ ﻻگ ﺑﺎ اﺳﻢ زﯾﺮ ﺗﻮﻟﯿﺪ ﮐﻨﺪ: atm3.log ۵ ﻫﻤﭽﻨﯿﻦ ﺑﺮای ﺷﺮوع ﻫﻤﻪی ﻋﻤﻠﯿﺎت ﺑﺎﯾﺪ ﭘﯿﻐﺎمﻫﺎی زﯾﺮ.ﺗﻤﺎﻣ ﭘﯿﻐﺎمﻫﺎی ﮔﻔﺘﻪ ﺷﺪه ﺑﺎﯾﺪ در اﯾﻦ ﻓﺎﯾﻞ ﺛﺒﺖ ﺷﻮﻧﺪ :ﺛﺒﺖ ﺷﻮﻧﺪ [time ]: [time ]: [time ]: [time ]: begin begin begin begin transfer [ source ] [ destination ] [ amount ] withdraw [account - number ] [ amount ] deposit [account - number ] [ amount ] balance [account - number ] : ﻣ ﺗﻮاﻧﺪ ﺑﻪ ﺷ ﻞ زﯾﺮ ﺑﺎﺷﺪATM [22:10:30.00]: [22:10:32.03]: [22:10:32.21]: [22:10:32.55]: [22:10:33.89]: [22:10:34.94]: [22:10:35.28]: [22:10:35.78]: ﻓﺎﯾﻞ ﻧﻤﻮﻧﻪی ﻻگ ﺑﺮای ﯾ ﯾ begin transfer 1392780923 1391873210 1000000 transferred 1000000 rials from 1392780923 to 1391873210 begin withdraw 1392780923 9910000 not enough balance for 1392780923 begin deposit 1392780923 10000000000 reversal of deposit begin balance 1392780923 balance for 1392780923: 455 rials . ﻣ ﺗﻮاﻧﯿﺪ اﺳﺘﻔﺎده ﮐﻨﯿﺪ،ﺑﺮای ﻧﻤﺎﯾﺶ زﻣﺎن از ﻫﺮ ﻗﺎﻟﺐ دﯾ ﺮی ﮐﻪ ﺣﺪاﻗﻞ ﺛﺎﻧﯿﻪی ﻋﻤﻠﯿﺎت را ﻧﺸﺎن دﻫﺪ ۶ ﻧﮑﺎت ﻧﻬﺎﯾﯽ • اﯾﻦ ﺗﻤﺮﯾﻦ را ﺑﺎﯾﺪ ﺑﺎ زﺑﺎن Cﯾﺎ C++اﻧﺠﺎم دﻫﯿﺪ و ﻓﻘﻂ از ﮐﺘﺎﺑﺨﺎﻧﻪ pthreadﻣ ﺗﻮاﻧﯿﺪ اﺳﺘﻔﺎده ﮐﻨﯿﺪ. • ﺗﻮاﺑﻊ ﻧﻮﺷﺘﻦ در ﻓﺎﯾﻞ و ﺧﺮوﺟ اﺳﺘﺎﻧﺪارد در زﺑﺎن Cو C++ﻫﯿﭽ ﺪام thread-safeﻧﺒﻮده و در ﺻﻮرت ﻧﯿﺎز ﺑﻪ ﻧﻮﺷﺘﻦ ﻫﻤﺰﻣﺎن در ﯾ ﻓﺎﯾﻞ ﯾﺎ ﺧﺮوﺟ اﺳﺘﺎﻧﺪارد از ﭼﻨﺪ رﯾﺴﻪ ،ﺑﺎﯾﺪ ﯾ ﻗﻔﻞ ﺑﺮای ﻋﻤﻠﯿﺎت در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ. • ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ ﺳﺎﺧﺘﻦ ﺗﻌﺪاد زﯾﺎدی رﯾﺴﻪ در اﮐﺜﺮ ﻣﻮارد ﺑﺎﻋﺚ ﮐﺎﻫﺶ ﮐﺎرآﯾﯽ ﺧﻮاﻫﺪ ﺷﺪ و ﺳﺎﺧﺘﻦ ﺗﻌﺪاد زﯾﺎد آنﻫﺎ در اﯾﻦ ﺗﻤﺮﯾﻦ ﺻﺮﻓﺎً ﺟﻨﺒﻪی آﻣﻮزﺷ دارد .در ﻣﺤﯿﻂ واﻗﻌ ،ﺑﺎﯾﺪ ﮐﺎر ﺑﯿﻦ ﺗﻌﺪاد ﻣﺤﺪودی رﯾﺴﻪ ﭘﺨﺶ ﺷﻮد. • از ﺑﻪ اﺷﺘﺮاک ﮔﺬاﺷﺘﻦ ﮐﺪ ﺧﻮد ﺑﺎ دﯾ ﺮان ﺑﭙﺮﻫﯿﺰﯾﺪ .در ﺻﻮرت ﻣﺸﺎﻫﺪهی ﮐﺪﻫﺎی ﻣﺸﺎﺑﻪ ،ﻧﻤﺮه ﻫﺮ دو ﻃﺮف ﺑﺮاﺑﺮ ﺑﺎ ﻣﻨﻔ ﻧﻤﺮه ﮐﻞ ﺗﻤﺮﯾﻦ ﺧﻮاﻫﺪ ﺷﺪ. • ﺳﻮاﻻت ﺧﻮد را ﭘﯿﺮاﻣﻮن اﯾﻦ ﺗﻤﺮﯾﻦ از آﻗﺎی اﻟﻠﻬﻮردی و رﺷﯿﺪﯾﺎن ﺑﭙﺮﺳﯿﺪ. ٧
© Copyright 2025 Paperzz