ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي )(40153 f ﻣﺪرس :ﺣﻤﯿﺪ ﺿﺮاﺑﯽزاده داﻧﺸﮑﺪهي ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﯿﻮﺗﺮ ﭘﺮوژه :ﻣﺮﺣﻠﻪي اول ﻣﻬﻠﺖ ﺗﺤﻮﯾﻞ :ﺳﻪﺷﻨﺒﻪ 8آذر ،1390ﺳﺎﻋﺖ 9ﺻﺒﺢ ﭘﺮوژهي ﻧﻬﺎﯾﯽ درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ ،ﭘﯿﺎدهﺳﺎزي ﯾﮏ ﺻﻔﺤﻪي ﮔﺴﺘﺮده ) (spreadsheetﺧﻮاﻫﺪ ﺑﻮد .در اﯾﻦ ﻣﺮﺣﻠﻪ ،ﺷﻤﺎ ﺑﺮﺧﯽ ﻗﺴﻤﺖﻫﺎي ﻣﻮردﻧﯿﺎز اﯾﻦ ﭘﺮوژه را ﭘﯿﺎدهﺳﺎزي ﻣﯽﮐﻨﯿﺪ. ﻧﮑﺎت ﮐﻠﯽ ﮐﺪ ﻫﺮ ﺑﺨﺶ را در ﯾﮏ ﻓﺎﯾﻞ ﺟﺪاﮔﺎﻧﻪ و ﺑﺎ ﻧﺎم ﺧﻮاﺳﺘﻪ ﺷﺪه ﻗﺮار دﻫﯿﺪ .ﺑﺎﻻي ﻫﺮ ﻓﺎﯾﻞ ﻧﺎم ،ﻧﺎم ﺧﺎﻧﻮادﮔﯽ و ﺷﻤﺎرهي داﻧﺶﺟﻮﯾﯽ ﺧﻮد را ذﮐﺮ ﮐﻨﯿﺪ. ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﺮﺑﻮط ﺑﻪ اﯾﻦ ﻣﺮﺣﻠﻪ ﺑﺎﯾﺪ ﺻﺮﻓﺎً ﺑﻪ زﺑﺎن Cﻧﻮﺷﺘﻪ ﺷﺪه و ﺑﺎ ﮐﺎﻣﭙﺎﯾﻠﺮﻫﺎي اﺳﺘﺎﻧﺪارد ﺳﯽ ) (C99ﻗﺎﺑﻞ ﮐﺎﻣﭙﺎﯾﻞ ﺑﺎﺷﻨﺪ. ﮐﺎﻣﻨﺖﮔﺬاري ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎ ﺟﺰﺋﯽ از ﻧﻤﺮهي ﺷﻤﺎ اﺳﺖ. ﻣﻮﻋﺪ ارﺳﺎل ،ﺳﺎﻋﺖ 9:00ﺻﺒﺢ روز ﺳﻪﺷﻨﺒﻪ 8آذر ﻣﺎه 1390ﺑﻮده و ﺑﻪ ﻫﯿﭻ ﻋﻨﻮان ﺗﻤﺪﯾﺪ ﻧﺨﻮاﻫﺪ ﺷﺪ. در ﺻﻮرت ﺗﺎﺧﯿﺮ ،ﺑﻪ ازاي روز اول ٪30از ﻧﻤﺮهي ﺷﻤﺎ ﮐﺎﺳﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ .ﺗﺄﺧﯿﺮ ﺑﯿﺸﺘﺮ از ﺑﯿﺴﺖ و ﭼﻬﺎر ﺳﺎﻋﺖ ﻗﺎﺑﻞ ﻗﺒﻮل ﻧﯿﺴﺖ. ﻫﻢﻓﮑﺮي ﺑﺎ دﯾﮕﺮ داﻧﺶﺟﻮﯾﺎن ﻣﻮرد ﻗﺒﻮل اﺳﺖ ،اﻣﺎ ﻓﺎﯾﻞﻫﺎﯾﯽ ﮐﻪ ﻣﯽﻓﺮﺳﺘﯿﺪ ﺑﺎﯾﺪ ﺑﻪﻃﻮر ﮐﺎﻣﻞ ﺗﻮﺳﻂ ﺧﻮدﺗﺎن ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﺎﺷﻨﺪ .ﮐﻢﺗﺮﯾﻦ ﺗﺨﻄﯽ از اﯾﻦ ﻣﻮﺿﻮع ﺑﺎﻋﺚ درﯾﺎﻓﺖ ﻧﻤﺮهي -100ﺑﺮاي ﮐﻤﮏدﻫﻨﺪه و ﮐﻤﮏﮔﯿﺮﻧﺪه ﺧﻮاﻫﺪ ﺑﻮد و در ﺻﻮرت ﺗﮑﺮار ،ﻣﻨﺠﺮ ﺑﻪ ﺣﺬف درس و ﮔﺰارش ﺑﻪ ﮐﻤﯿﺘﻪي اﻧﻀﺒﺎﻃﯽ ﺧﻮاﻫﺪ ﺷﺪ. در ﺻﻮرت وﺟﻮد ﻫﺮﮔﻮﻧﻪ ﻣﺸﮑﻞ ،ﺳﻮاﻻت ﺧﻮد را از ﻃﺮﯾﻖ ﺳﯿﺴﺘﻢ ﭘﯿﺎﺗﺰا ﺑﺎ ﮐﻤﮏﻣﺪرﺳﯿﻦ در ﻣﯿﺎن ﺑﮕﺬارﯾﺪ. ﺑﺨﺶ اول :ﺗﻮاﺑﻊ اﺑﺘﺪاﯾﯽ ﻧﺎم ﻓﺎﯾﻞfunctions.c : در اﯾﻦ ﺑﺨﺶ ،ﺷﻤﺎ ﺑﺮﺧﯽ ﺗﻮاﺑﻊ اﺑﺘﺪاﯾﯽ ﻣﻮردﻧﯿﺎز ﺻﻔﺤﻪي ﮔﺴﺘﺮده را ﭘﯿﺎدهﺳﺎزي ﻣﯽﮐﻨﯿﺪ .ﺑﺮاي راﺣﺘﯽ ﮐﺎر ،ﻗﺎﻟﺐ ﮐﻠﯽ ﻓﺎﯾﻞ functions.cﺷﺎﻣﻞ ﺳﺮﺑﺨﺶ ﺗﻮاﺑﻊ در اﺧﺘﯿﺎر ﺷﻤﺎ ﻗﺮار ﮔﺮﻓﺘﻪ اﺳﺖ .دﻗﺖ ﮐﻨﯿﺪ ﮐﻪ ﻫﺮ ﯾﮏ از ﺗﻮاﺑﻊ را دﻗﯿﻘﺎْ ﺑﺎ ﻫﻤﺎن ﻧﺎم ﺧﻮاﺳﺘﻪﺷﺪه و ﺑﻪ ﻫﻤﺎن ﺻﻮرﺗﯽ ﮐﻪ در ﺳﺮﺑﺨﺶ ﺗﻮاﺑﻊ ذﮐﺮ ﺷﺪه ﭘﯿﺎدهﺳﺎزي ﮐﻨﯿﺪ. ﺗﻮاﺑﻊ: در ﺗﻤﺎﻣﯽ ﺗﻮاﺑﻊ زﯾﺮ ،ﯾﮏ آراﯾﻪ از اﻋﺪاد doubleﺑﻪ ﻫﻤﺮاه اﻧﺪازهي آن ﺑﻪ ﻋﻨﻮان ورودي ﺑﻪ ﺗﺎﺑﻊ داده ﻣﯽﺷﻮد. :array_sum .1ﻣﺠﻤﻮع ﻋﻨﺎﺻﺮ آراﯾﻪ را ﺑﺮﻣﯽﮔﺮداﻧﺪ. ;)double array_sum (const double array[], int array_size :array_average .2ﻣﯿﺎﻧﮕﯿﻦ اﻋﻀﺎي آراﯾﻪ را ﺑﺮﻣﯽﮔﺮداﻧﺪ. ;)double array_average (const double array[], int array_size :array_variance .3وارﯾﺎﻧﺲ دادهﻫﺎي درون آراﯾﻪ را ﺑﺎزﻣﯽﮔﺮداﻧﺪ. ﺗﻮﺿﯿﺢ :وارﯾﺎﻧﺲ nدادهي a1, …, anﺑﺎ ﻣﯿﺎﻧﮕﯿﻦ µﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ: −µ a 1 n = )(a − µ 1 n :array_min .4ﮐﻮﭼﮏﺗﺮﯾﻦ ﻋﻨﺼﺮ آراﯾﻪ را ﺑﺮﻣﯽﮔﺮداﻧﺪ. ;)double array_min (const double array[], int array_size :array_max .5ﺑﺰرگﺗﺮﯾﻦ ﻋﻨﺼﺮ آراﯾﻪ را ﺑﺮﻣﯽﮔﺮداﻧﺪ. ;)double array_max (const double array[], int array_size :array_sort .6آراﯾﻪي ورودي را ﺑﻪ ﺻﻮرت ﺻﻌﻮدي ﻣﺮﺗﺐ ﻣﯽﮐﻨﺪ. ;)void array_sort (double array[], int array_size ﭘﺮوژه :ﻣﺮﺣﻠﻪي اول -درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي ;)double array_variance (const double array[], int array_size 1 ﺑﺨﺶ دوم :ﮐﺎر ﺑﺎ اﻋﺪاد ﺑﺰرگ ﻧﺎم ﻓﺎﯾﻞbignum.c : ﻫﻤﺎنﻃﻮر ﮐﻪ ﻣﯽداﻧﯿﺪ ،ﻫﺮ ﻣﺘﻐﯿﺮ ﺻﺤﯿﺢ ﭼﻬﺎر ﺑﺎﯾﺘﯽ از ﻧﻮع intﺗﻨﻬﺎ ﻣﯽﺗﻮاﻧﺪ اﻋﺪاد ﺻﺤﯿﺤﯽ در ﺑﺎزهي ] [-2147483648, 2147483647را در ﺧﻮد ﺟﺎي دﻫﺪ .ﻣﺘﻐﯿﺮﻫﺎي ﺻﺤﯿﺢ ﻫﺸﺖ ﺑﺎﯾﺘﯽ ﻫﻢ ﺗﻨﻬﺎ ﺑﺮاي اﻋﺪاد ﺻﺤﯿﺢ در ﺑﺎزهي ] [-9223372036854775808, 9223372036854775807ﮐﺎﻓﯽ ﻫﺴﺘﻨﺪ. ﺑﺮاي ﮐﺎر ﺑﺎ اﻋﺪاد ﺻﺤﯿﺢ ﺑﺰرگﺗﺮ ،ﻻزم اﺳﺖ ﮐﻪ ﻫﺮ ﻋﺪد ﺻﺤﯿﺢ ﺑﺰرگ ﺑﻪ ﮐﻤﮏ ﯾﮏ آراﯾﻪ ذﺧﯿﺮه ﺷﻮد .ﻫﺪف از اﯾﻦ ﺑﺨﺶ ،ﭘﯿﺎدهﺳﺎزي ﭼﻨﺪ ﺗﺎﺑﻊ ﺑﺮاي ﮐﺎر ﺑﺎ اﻋﺪاد ﺑﺰرگ ،از ﺟﻤﻠﻪ اﻧﺠﺎم ﻋﻤﻠﯿﺎت اﺻﻠﯽ رﯾﺎﺿﯽ اﺳﺖ .در اﯾﻦ ﺑﺨﺶ از ﭘﺮوژه، ﺗﻨﻬﺎ اﻋﺪاد ﺑﺰرگ ﺑﺪون ﻋﻼﻣﺖ )اﻋﺪاد ﺣﺴﺎﺑﯽ( ﻣﻮرد ﻧﻈﺮ ﻫﺴﺘﻨﺪ .ﻋﻼوه ﺑﺮ اﯾﻦ ،ﺑﺮاي ﺳﺎدهﺗﺮ ﺷﺪن ﭘﯿﺎدهﺳﺎزي ،ﻓﺮض ﻣﯽﮐﻨﯿﻢ ﮐﻪ ﻫﺮ ﻋﺪد ﺑﺰرگ ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ﺛﺎﺑﺘﯽ )ﻣﺜﻼً (100رﻗﻢ دارد .ﺗﻌﺪاد اﯾﻦ ارﻗﺎم ﺗﻮﺳﻂ ﺛﺎﺑﺖ MAX_DIGITSدر اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ ﺗﻌﺮﯾﻒ ﻣﯽﺷﻮد )ﻓﺎﯾﻞ ﻗﺎﻟﺐ ﺿﻤﯿﻤﻪ را ﺑﺒﻨﯿﺪ(. ﻫﺮ ﻋﺪد ﺑﺰرگ در ﯾﮏ آراﯾﻪي intﺑﻪ اﻧﺪازهي MAX_DIGITSﻧﮕﻬﺪاري ﻣﯽﺷﻮد .ﻫﺮ ﻋﻨﺼﺮ از اﯾﻦ آراﯾﻪ ،ﯾﮏ رﻗﻢ از ﻋﺪد ﺑﺰرگ را در ﺧﻮد ﺟﺎي ﻣﯽدﻫﺪ :ﮐﻢارزشﺗﺮﯾﻦ رﻗﻢ )رﻗﻢ ﯾﮑﺎن( در اوﻟﯿﻦ ﺧﺎﻧﻪي آراﯾﻪ )ﺑﺎ اﻧﺪﯾﺲ ﺻﻔﺮ( ﻗﺮار ﻣﯽﮔﯿﺮد، رﻗﻢ دﻫﮕﺎن در دوﻣﯿﻦ ﺧﺎﻧﻪ )ﺑﺎ اﻧﺪﯾﺲ ﯾﮏ( ،و ﺑﻪ ﻫﻤﯿﻦ ﺗﺮﺗﯿﺐ اﻟﯽ آﺧﺮ .اﮔﺮ ﻋﺪد ﺑﺰرگ ﮐﻢﺗﺮ از MAX_DIGITSرﻗﻢ داﺷﺖ ،رﻗﻢﻫﺎي ﺑﺎﻗﯽﻣﺎﻧﺪه در آراﯾﻪ ﺑﺎ ﺻﻔﺮ ﭘﺮ ﻣﯽﺷﻮﻧﺪ .اﮔﺮ ﻋﺪد ﺑﺰرگ ﺑﯿﺶ از MAX_DIGITSرﻗﻢ داﺷﺖ ،رﻗﻢﻫﺎي اﺿﺎﻓﯽ ﻣﻮﻗﻊ ذﺧﯿﺮه در آراﯾﻪ ﺣﺬف ﻣﯽﺷﻮﻧﺪ .در اﯾﻦ ﺑﺨﺶ ،ﺷﻤﺎ ﺗﻮاﺑﻊ زﯾﺮ را ﭘﯿﺎدهﺳﺎزي ﻣﯽﮐﻨﯿﺪ. ﺗﻮاﺑﻊ ﺗﺒﺪﯾﻠﯽ: ﭘﺮوژه :ﻣﺮﺣﻠﻪي اول -درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي 2 :string_to_big .1ﯾﮏ رﺷﺘﻪ از ارﻗﺎم 0ﺗﺎ 9را ﺑﻪ ﯾﮏ ﻋﺪد ﺑﺰرگ ﺗﺒﺪﯾﻞ ﻣﯽﮐﻨﺪ .اﮔﺮ ﻃﻮل رﺷﺘﻪ ﺑﯿﺶﺗﺮ از MAX_DIGITSﺑﻮد ،رﻗﻢﻫﺎي اﺿﺎﻓﯽ ﻣﻮﻗﻊ ﺗﺒﺪﯾﻞ ﺣﺬف ﻣﯽﺷﻮﻧﺪ. :big_to_string .2ﯾﮏ ﻋﺪد ﺑﺰرگ را ﺑﻪ ﯾﮏ رﺷﺘﻪ از ارﻗﺎم 0ﺗﺎ 9ﮐﻪ ﺑﻪ ﮐﺎراﮐﺘﺮ ’ ‘\0ﺧﺘﻢ ﻣﯽﺷﻮد ،ﺗﺒﺪﯾﻞ ﻣﯽﮐﻨﺪ. :big_to_double .3ﯾﮏ ﻋﺪد ﺑﺰرگ را ﺑﻪ ﯾﮏ ﻋﺪد doubleﺗﺒﺪﯾﻞ ﻣﯽﮐﻨﺪ. ;)][void string_to_big (const char str[], int big ;)][void big_to_string (const int big[], char str ;)][double big_to_double (const int big ﺗﻮاﺑﻊ رﯾﺎﺿﯽ: :big_add .1دو ﻋﺪد ﺑﺰرگ aو bرا ﺑﺎ ﻫﻢ ﺟﻤﻊ ﻣﯽﮐﻨﺪ و ﻧﺘﯿﺠﻪ را در آراﯾﻪي cذﺧﯿﺮه ﻣﯽﮐﻨﺪ. ;)][void big_add (const int a[], const int b[], int c :big_subtract .2ﻋﺪد ﺑﺰرگ bرا از ﻋﺪد ﺑﺰرگ aﮐﻢ ﮐﺮده ،ﻧﺘﯿﺠﻪ را در cذﺧﯿﺮه ﻣﯽﮐﻨﺪ. ;)][void big_subtract (const int a[], const int b[], int c :big_multiply .3دو ﻋﺪد ﺑﺰرگ aو bرا در ﻫﻢ ﺿﺮب ﮐﺮده ،ﻧﺘﯿﺠﻪ را در آراﯾﻪي cذﺧﯿﺮه ﻣﯽﮐﻨﺪ. ;)][void big_multiply (const int a[], const int b[], int c :big_divide .4ﻋﺪد ﺑﺰرگ aرا ﺑﺮ ﻋﺪد ﺑﺰرگ bﺗﻘﺴﯿﻢ ﻣﯽﮐﻨﺪ .ﺣﺎﺻﻞ ﺗﻘﺴﯿﻢ را ﺑﻪ ﺻﻮرت ﯾﮏ ﻋﺪد ﺑﺰرگ در آراﯾﻪي cو ﺑﺎﻗﯽﻣﺎﻧﺪهي ﺗﻘﺴﯿﻢ را در آراﯾﻪي dذﺧﯿﺮه ﻣﯽﮐﻨﺪ. ;)][void big_divide (const int a[], const int b[], int c[], int d ﻧﮑﺎت: در ﺗﻮاﺑﻊ ﺿﺮب و ﺟﻤﻊ ،ﻧﺘﯿﺠﻪ ﻋﺪدي ﺑﺎ MAX_DIGITSرﻗﻢ اﺳﺖ و رﻗﻢﻫﺎي اﺿﺎﻓﯽ در ﺻﻮرت وﺟﻮد ﺣﺬف ﻣﯽﺷﻮﻧﺪ. در ﺗﺎﺑﻊ ﺗﻔﺮﯾﻖ ،اﮔﺮ ﺣﺎﺻﻞ ﺗﻔﺮﯾﻖ ،c ،ﮐﻮﭼﮏﺗﺮ از ﺻﻔﺮ ﺑﺎﺷﺪ ،ﻧﺘﯿﺠﻪ ﺑﻪ ﺻﻮرت 10MAX_DIGITS − c − 1 ﻧﮕﻪداري ﻣﯽﺷﻮد. ﭘﯿﺎدهﺳﺎزي ﺗﺎﺑﻊ ﺗﻘﺴﯿﻢ اﺧﺘﯿﺎري ﺑﻮده و داراي ﻧﻤﺮهي اﺿﺎﻓﯽ اﺳﺖ. ﭘﺮوژه :ﻣﺮﺣﻠﻪي اول -درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي 3
© Copyright 2026 Paperzz