Professional Documents
Culture Documents
Ebook6030 (WWW Takbook Com)
Ebook6030 (WWW Takbook Com)
comﺻﻔﺤـﻪ 1
ﭘﺎﺳـﮑﺎل
ﻣﻬﻨـﺪس ﻣﻬﺪي ﻣﺤﻤـﺪي ﺗﺎﻟﯿـﻒ :
ﻪ آزﻣﺎ ﯽ
داد ﻣﺎه ۱۳۸۸
ار ﺒﺎط ﺑﺎ ﻣﺎ :
WWW.PASCAL4U.BLOGFA.COM
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 2
ﺍﻟﮕﻮﺭﻳﺘﻢ ﻭ ﻓﻠﻮﭼﺎﺭﺕ:
ﺑﺮﺍﻱ ﺍﺭﺍﺋﺔ ﻳﻚ ﺭﺍﻩ ﺣﻞ ﺑﺮﺍﻱ ﻳﻚ ﻣﺴﺎﻟﻪ ﺳﻪ ﻋﺎﻣﻞ ﻣﻬﻢ ﻭﺟﻮﺩ ﺩﺍﺭﺩ:
-١ﺷﻨﺎﺧﺖ ﺩﻗﻴﻖ ﻣﺴﺎﻟﻪ
• ﺩﺍﺩﻩ ﻫﺎ
• ﻣﺠﻬﻮﻻﺕ
• ﺍﺭﺗﺒﺎﻁ ﺑﻴﻦ ﺩﺍﺩﻩ ﻫﺎ ﻭ ﻣﺠﻬﻮﻻﺕ
ﻣﺜﺎﻝ( ﻣﻴﺎﻧﮕﻴﻦ ٥ﻋﺪﺩ ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻛﻨﻴﺪ؟ ﺩﺍﺩﻩ ﻫﺎ ٥ﻋﺪﺩ ﻭﺭﻭﺩﻱ ﺍﺳﺖ ﻭ ﻣﺠﻬﻮﻝ ﻣﻴﺎﻧﮕﻴﻦ ﺍﻋﺪﺍﺩ ﺍﺳﺖ ﻭ ﺭﺍﺑﻄﺔ ﺁﻥ ﺣﺎﺻﻞ ﺟﻤـﻊ ٥ﻋـﺪﺩ ﺭﺍ
ﺗﻘﺴﻴﻢ ﺑﺮ ٥ﻣﻲ ﻛﻨﻴﻢ ﺗﺎ ﻣﺠﻬﻮﻝ ﺑﺪﺳﺖ ﺁﻳﺪ.
ﻣﻌﻤﻮﻻ ﺑﺪﺳﺖ ﺁﻭﺭﺩﻥ ﺭﺍﺑﻄﺔ ﺑﻴﻦ ﻣﺠﻬﻮﻝ ﻭﺩﺍﺩﻩ ﻫﺎ ﺑﻪ ﺍﻳﻦ ﺁﺳﺎﻧﻲ ﻧﻴﺴﺖ ﺑﺎﻳﺪ ﺩﺭ ﻣﻮﺭﺩ ﺁﻥ ﻓﻜﺮ ﻭ ﺗﺎﻣﻞ ﻛﺮﺩ!
-٢ﻃﺮﺡ ﻧﻘﺸﻪ ﺣﻞ ﻣﺴﺎﻟﻪ) ﺍﺭﺍﺋﻪ ﺭﺍﻩ ﺣﻞ( :ﺑﻌﺪ ﺍﺯﺍﻳﻦ ﻛﻪ ﻣﺴﺎﻟﻪ ﺭﺍ ﺑﻪ ﺩﻗﺖ ﺷﻨﺎﺧﺘﻴﻢ ﺑﺎﻳﺪ ﺑﺮﺍﻱ ﺁﻥ ﺭﺍﻩ ﺣﻞ ﺍﺭﺍﺋﻪ ﻛﻨﻴﻢ.
ﺭﺍﻩ ﺣﻞ ﻫﺎﻳﻲ ﻛﻪ ﺑﺮﺍﻱ ﻳﻚ ﻣﺴﺎﻟﻪ ﺍﺭﺍﺋﻪ ﻣﻲ ﺷﻮﺩ ﺑﻪ ﺩﻭ ﺩﺳﺘﻪ ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﻧﺪ -١ :ﺭﺍﻩ ﺣﻞ ﻏﻴﺮ ﻣﻨﻄﻘﻲ -٢ﺭﺍﻩ ﺣﻞ ﻣﻨﻄﻘـﻲ).ﺍﻟﮕـﻮﺭﻳﺘﻤﻲ ﻭ
ﻏﻴﺮ ﺍﻟﮕﻮﺭﻳﺘﻤﻲ(
ﺭﺍﻩ ﺣﻠﻬﺎﻱ ﻏﻴﺮﻣﻨﻄﻘﻲ ﺭﺍ ﻧﻤﻲ ﺗﻮﺍﻥ ﻓﺮﻣﻮﻟﻪ ﻛﺮﺩ ﻭ ﻫﻴﭻ ﻣﻨﻄﻘﻲ ﻧﺪﺍﺭﻧﺪ .ﺍﻧﺴﺎﻧﻬﺎ ﺑﺮﺍﻱ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻫﻮﺵ ﻭ ﺣﻮﺍﺱ ﺧﻮﺩ ﺍﺯ ﺍﻳـﻦ ﺭﺍﻩ ﺣﻠﻬـﺎ ﺑـﺮﺍﻱ
ﺣﻞ ﻣﺴﺎﻟﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻨﺪ ﺍﻣﺎ ﻳﻚ ﺭﺍﻳﺎﻧﻪ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ﺍﻳﻦ ﺻﻮﺭﺕ ﻣﺴﺎﻟﻪ ﺭﺍ ﺣﻞ ﻛﻨﺪ .ﻣﺜﻼ ﻋﺪﺩ ٤٥٢٩ﭼﻨﺪ ﺭﻗﻤﻲ ﺍﺳﺖ؟ ﺍﻧﺴﺎﻥ ﺑـﺎ ﻳـﻚ
ﻧﮕﺎﻩ ﺑﻪ ﺁﻥ ﻣﺘﻮﺟﻪ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﭼﻬﺎﺭ ﺭﻗﻤﻲ ﺍﺳﺖ ﺍﻣﺎ ﺭﺍﻳﺎﻧﻪ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺍﺭﻗﺎﻡ ﺭﺍ ﺑﺒﻴﻨﺪ! ﻳﺎ ﺍﻳﻨﻜﻪ ﻋﺪﺩ ٢٤٦ﺯﻭﺝ ﺍﺳﺖ ﻳﺎ ﻓﺮﺩ؟
ﺭﺍﻩ ﺣﻞ ﻫﺎﻱ ﻣﻨﻄﻘﻲ ﺭﺍﻩ ﺣﻠﻲ ﻫﺴﺘﻨﺪ ﻛﻪ ﻣﺴﺎﻟﻪ ﮔﺎﻡ ﺑﻪ ﮔﺎﻡ ﺣﻞ ﻣﻲ ﺷﻮﺩ ﻭ ﺭﺍﺑﻄﻪ ﺍﻳﻲ ﺑـﻴﻦ ﺩﺍﺩﻩ ﻫـﺎ ﻭ ﻣﺠﻬـﻮﻻﺕ ﻭﺟـﻮﺩ ﺩﺍﺭﺩ؟ ﻣـﺜﻼ ﺍﮔـﺮ
ﻋﺪﺩﻱ ﺭﺍ ﺗﻘﺴﻴﻢ ﺑﺮ ﺩﻭ ﻛﻨﻴﻢ ﻭ ﺑﺎﻗﻴﻤﺎﻧﺪﻩ ﺻﻔﺮ ﺷﻮﺩ ﭘﺲ ﺯﻭﺝ ﺍﺳﺖ .ﺑﺮﺍﻱ ﺗﺸﺨﻴﺺ ﺗﻌﺪﺍﺩ ﺍﺭﻗﺎﻡ ﻳﻚ ﻋـﺪﺩ ﭼـﻪ ﺭﺍﻩ ﺣـﻞ ﻣﻨﻄﻘـﻲ ﺍﺭﺍﺋـﻪ ﻣـﻲ
ﻛﻨﻴﺪ؟
ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺮﺍﻱ ﻃﺮﺡ ﻳﻚ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺑﺎﻳﺪ ﺭﺍﻩ ﺣﻞ ﻣﻨﻄﻘﻲ ﻣﺴﺎﻟﻪ ﺭﺍ ﺑﺪﺳﺖ ﺁﻭﺭﻳﺪ.
-٣ﺗﺤﻠﻴﻞ ﺭﺍ ﺣﻞ ﻣﺴﺎﻟﻪ :ﺑﻌﺪ ﺍﺯﺍﻳﻨﻜﻪ ﺑﺮﺍﻱ ﻣﺴﺎﻟﻪ ﺭﺍﻩ ﺣﻞ ﻣﻨﻄﻘﻲ ﻳﺎﻓﺘﻴﻢ ﺑﺎﻳﺪ ﺁﻥ ﺭﺍ ﺗﺠﺰﻳﻪ ﻭ ﺗﺤﻠﻴﻞ ﻛﻨﻴﻢ ﻛﻪ ﺁﻳﺎ ﺟﻮﺍﺏ ﻣﻲ ﺩﻫﺪ ﻳﺎ ﻧـﻪ؟ ﻳـﺎ
ﺍﻳﻨﻜﻪ ﺁﻧﺮﺍ ﺗﻌﻤﻴﻢ ﺩﻫﻴﻢ ﺗﺎ ﻣﺴﺎﺋﻞ ﺑﺰﺭﮔﺘﺮﻱ ﺣﻞ ﺷﻮﻧﺪ .ﻳﺎ ﺍﻳﻨﻜﻪ ﻣﺴﺎﻟﻪ ﺭﺍ ﺑﻪ ﻣﺴﺎﺋﻞ ﻛﻮﭼﻜﺘﺮﻱ ﺗﻘﺴﻴﻢ ﻛﻨﻴﻢ.
ﺍﻟﮕﻮﺭﻳﻨﻢ :ﻛﻠﻤﺔ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺍﺯ ﻧﺎﻡ ﺭﻳﺎﺿﻲ ﺩﺍﻥ ﺑﺰﺭﮒ ﺍﻳﺮﺍﻧﻲ ﻣﺤﻤﺪ ﺑﻦ ﻣﻮﺳﻲ ﺍﻟﺨﻮﺍﺭﺯﻣﻲ ﮔﺮﻓﺘﻪ ﺷﺪﻩ ﺍﺳﺖ.
ﺑﻪ ﻣﺠﻤﻮﻋﻪ ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻠﻬﺎ ﻛﻪ ﻣﺮﺍﺣﻞ ﻣﺨﺘﻠﻒ ﺍﻧﺠﺎﻡ ﻛﺎﺭﻱ)ﺣﻞ ﻳﻚ ﻣﺴﺎﻟﻪ( ﺭﺍ ﺑﻪ ﺯﺑﺎﻥ ﺩﻗﻴﻖ ﻭﺑﺎ ﺟﺰﻳﻴﺎﺕ ﻛﺎﻓﻲ ﺑﻴﺎﻥ ﻛﺮﺩﻩ ﻭ ﺩﺭ ﺁﻥ ﺗﺮﺗﻴﺐ
ﻣﺮﺍﺣﻞ ﻭ ﺷﺮﻭﻉ ﻭ ﺧﺎﺗﻤﻪ ﭘﺬﻳﺮ ﺑﻮﺩﻥ ﻋﻤﻠﻴﺎﺕ ﻣﺸﺨﺺ ﺑﺎﺷﺪ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻣﻲ ﮔﻮﻳﻨﺪ.
ﺧﺼﻮﺻﻴﺎﺕ ﻳﻚ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺭﺍ ﺩﺭ ﺗﻌﺮﻳﻒ ﺁﻥ ﻣﺸﺎﻫﺪﻩ ﻣﻲ ﻛﻨﻴﺪ .ﻣﻨﻈﻮﺭ ﺍﺯ ﺯﺑﺎﻥ ﺩﻗﻴﻖ ﻭ ﺟﺰﻳﻴﺎﺕ ﻛﺎﻓﻲ ﭼﻴﺴﺖ؟
ﻣﻨﻈﻮﺭ ﺍﺯ ﺍﺟﺮﺍﻱ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺩﻧﺒﺎﻝ ﻛﺮﺩﻥ ﻣﺮﺍﺣﻞ ﻣﺨﺘﻠﻒ ﺁﻥ ﺍﺳﺖ .ﺷﺨﺼﻲ ﻳﺎ ﻣﺎﺷﻴﻨﻲ ﻛﻪ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺭﺍ ﺍﺟﺮﺍ ﻣﻲ ﻛﻨﺪ ﻣﺠﺮﻱ ﺍﻟﮕـﻮﺭﻳﺘﻢ ﻧﺎﻣﻴـﺪﻩ
ﻣﻲ ﺷﻮﺩ.
ﻳﻚ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻓﻘﻂ ﻭ ﻓﻘﻂ ﻳﻚ ﻧﻘﻄﺔ ﺷﺮﻭﻉ ﺑﺎﻳﺪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﺍﻣﺎ ﻣﻲ ﺗﻮﺍﻧﺪ ﭼﻨﺪﻳﻦ ﻧﻘﻄﺔ ﭘﺎﻳﺎﻥ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ).ﺣﺪﺍﻗﻞ ﻳـﻚ ﻧﻘﻄـﻪ ﭘﺎﻳـﺎﻥ ﺑﺎﻳـﺪ
ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ(.
ﺩﺭ ﺍﻟﮕﻮﺭﻳﺘﻤﻬﺎﻱ ﺫﻛﺮ ﺷﺪﻩ ﺩﺭ ﺑﻌﻀﻲ ﺍﺯ ﻛﺘﺎﺑﻬﺎ ﻋﺒﺎﺭﺕ R= N-[N \ M] * Mﺭﺍ ﺩﺭ ﻣﺸﺎﻫﺪﻩ ﻣﻲ ﻛﻨﻴﺪ ﻛﻪ ﻣﻨﻈﻮﺭ ﺍﺯ ﺁﻥ
R= N Mod Mﺍﺳﺖ .ﻣﻨﻈﻮﺭ ﺍﺯ ﻋﻼﻣﺖ \ ﺗﻘﺴﻴﻢ ﺻﺤﻴﺢ ﺍﺳـﺖ ﻭ ﻣﻨﻈـﻮﺭ ﺍﺯ ] [ ﺟﺰﺻـﺤﻴﺢ ﻳـﻚ ﻋـﺪﺩ ﺍﺳـﺖ Mod ).ﻭ DIVﺑـﻪ
ﺗﺮﺗﻴﺐ ﺑﺎﻗﻴﻤﺎﻧﺪﺓ ﻳﻚ ﺗﻘﺴﻴﻢ ﻭ ﺧﺎﺭﺝ ﻗﺴﻤﺖ ﺻﺤﻴﺢ ﻳﻚ ﺗﻘﺴﻴﻢ ﺭﺍ ﻧﻤﺎﻳﺶ ﻣﻲ ﺩﻫﻨﺪ(.
ﺑﺮﺍﻱ ﻳﺎﺩ ﮔﺮﻓﺘﻦ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎ ﻓﻘﻂ ﺗﻤﺮﻳﻦ ﻭ ﺗﻼﺵ ﺑﻪ ﺷﻤﺎ ﻛﻤﻚ ﻣﻲ ﻛﻨﺪ .ﺩﺭ ﺍﺩﺍﻣﻪ ﭼﻨﺪ ﻣﺜﺎﻝ ﺑﺮﺍﻱ ﺗﻌﺪﺍﺩﻱ ﻣﺴﺎﻟﻪ ﺑﻴﺎﻥ ﻣﻲ ﺷﻮﺩ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 3
-١ﺧﺮﻭﺟﻲ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺯﻳﺮ ﻛﺪﺍﻡ ﺍﺳﺖ؟
R=N – [ N \ M ] * M -٣ M=2 -٢ -١ﻋﺪﺩ Nﺭﺍ ﺑﮕﻴﺮ -٠ﺷﺮﻭﻉ
-٦ﺍﮔﺮ M<Nﺑﺮﻭ ﻣﺮﺣﻠﻪ ٣ M= M+1 -٥ -٤ﺍﮔﺮ R=0ﺁﻧﮕﺎﻩ ﺑﺮﻭ ﺑﻪ ﻣﺮﺣﻠﺔ ٨
-٨ﭘﺎﻳﺎﻥ N -٧ﺭﺍ ﭼﺎﭖ ﻛﻦ
ﺏ( ﻣﻘﺴﻮﻡ ﻋﻠﻴﻪ ﻫﺎﻱ ﻋﺪﺩ Nﺭﺍ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ ﺍﻟﻒ( ﺩﺭﺻﻮﺭﺗﻴﻜﻪ Nﻓﺮﺩ ﺑﺎﺷﺪ ﺁﻥ ﺭﺍ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ
ﺩ( ﺩﺭ ﺻﻮﺭﺗﻴﻜﻪ Nﺩﺍﺭﺍﻱ ﺑﻴﺶ ﺍﺯ ﺩﻭ ﻣﻘﺴﻮﻡ ﻋﻠﻴﻪ ﺑﺎﺷﺪ ﺁﻧﺮﺍ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ. ﺝ( ﺩﺭ ﺻﻮﺭﺗﻴﻜﻪ Nﻋﺪﺩ ﺍﻭﻝ ﺑﺎﺷﺪ ﺁﻥ ﺭﺍ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ.
ﺩ( ﻋﺪﺩ ﻭﺭﻭﺩﻱ ﺝ( ﺣﺎﺻﻞ ﺟﻤﻊ ﺍﺭﻗﺎﻡ ﻳﻚ ﻋﺪﺩ ﺏ( ﺣﺎﺻﻠﻀﺮﺏ ﺍﺭﻗﺎﻡ ﻳﻚ ﻋﺪﺩ ﺍﻟﻒ( ﻣﻌﻜﻮﺱ ﻳﻚ ﻋﺪﺩ
-٤ﺩﺭ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺭﻭﺑﺮﻭ ،ﻣﺮﺣﻠﻪ ٥ﭼﻨﺪ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ؟ )( X=5
Y -٥ﺭﺍ ﺑﻨﻮﻳﺲ Y=C+X-٤ -٣ﻋﺪﺩ Xﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻛﻦ C=1 -٢ -١ﺷﺮﻭﻉ
– ٨ﭘﺎﻳﺎﻥ -٧ﺍﮔﺮ C<50ﺑﺮﻭ ﺑﻪ ﻣﺮﺣﻠﻪ ٤ C=3*C -٦
-٥ﺟﺎﻱ ﺧﺎﻟﻲ ﺩﺭ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺭﺍ ﻃﻮﺭﻱ ﺗﻜﻤﻴﻞ ﻛﻨﻴﺪ ﺗﺎ ﺣﺎﺻﻞ ﭼﺎﭖ ﺍﻋﺪﺍﺩ ﻣﻀﺮﺏ ٣ﺩﻭﺭﻗﻤﻲ ﺑﺎﺷﺪ؟
ﺍﻟﻒ( ﺑﻪ ﻣﺮﺣﻠﻪ ٢ﺑﺮﻭ
ﺷﺮﻭﻉ (٠
K=12 (١ ﺏ( ﺑﻪ ﻣﺮﺣﻠﻪ ٣ﺑﺮﻭ
Kﺭﺍ ﭼﺎﭖ ﻛﻦ (٢ ﺝ( ﺑﻪ ﻣﺮﺣﻠﻪ ٦ﺑﺮﻭ
K=K+3 (٣ ﺩ( Kﺭﺍ ﭼﺎﭖ ﻛﻦ ﻭ ﻣﺮﺣﻠﻪ ٦ﺑﺮﻭ
ﺍﮔﺮ K>99ﺁﻧﮕﺎﻩ ………… (٤
ﺑﻪ ﻣﺮﺣﻠﻪ ٢ﺑﺮﻭ (٥
ﭘﺎﻳﺎﻥ (٦
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 4
-٦ﻛﺎﺭ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺭﻭﺑﺮﻭ ﭼﻴﺴﺖ؟
-٥ﺍﮔﺮ X>Aﺁﻧﮕﺎﻩ X=A A -٤ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻛﻦ X=A -٣ K=2 -٢ A -١ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻛﻦ
X -٨ﺭﺍ ﺍﻋﻼﻡ ﻛﻦ -٩ﭘﺎﻳﺎﻥ K=K+1 -٧ﻭ ﺑﺮﻭ ﺑﻪ ﻣﺮﺣﻠﻪ ٤ -٦ﺍﮔﺮ K=10ﺑﺮﻭ ﺑﻪ ﻣﺮﺣﻠﻪ ٨
ﺏ(ﻳﺎﻓﺘﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﺪﺩ ﺑﻴﻦ ١٠ﻋﺪﺩ ﺩﺭﻳﺎﻓﺘﻲ ﺍﻟﻒ( ﭼﺎﭖ ﺟﻤﻊ ﺍﻋﺪﺍﺩ ﻛﻮﭼﻜﺘﺮ ﺍﺯ 10
ﺩ( ﻳﺎﻓﺘﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﺪﺩ ﺑﻴﻦ ٩ﻋﺪﺩ ﺩﺭﻳﺎﻓﺘﻲ ﺝ( ﻳﺎﻓﺘﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﺪﺩ ﺑﻴﻦ ﺩﻭﻋﺪﺩ ﺩﺭﻳﺎﻓﺘﻲ ﺑﺎ ﺗﻜﺮﺍﺭ ١٠ﺑﺎﺭ
ﻋﻼﺋﻢ ﻧﻤﻮﺩﺍﺭ ﮔﺮﺩﺷﻲ :ﺩﺭ ﺍﺩﺍﻣﻪ ﻋﻼﻣﺘﻬﺎﻱ ﺍﺳﺘﺎﻧﺪﺍﺭﺩﻱ ﻛﻪ ﺩﺭ ﺭﺳﻢ ﻓﻠﻮﭼﺎﺭﺕ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﺭﺍ ﺑﻴﺎﻥ ﻣﻲ ﻛﻨﻴﻢ.
ﺧﻂ ﺟﺮﻳﺎﻥ :ﺧﻄﻮﻃﻲ ﻛﻪ ﺑﻪ ﺻﻮﺭﺕ ﭘﻠﻴﻜﺎﻥ ﻣﺸﺨﺺ ﻣﻲ ﺷﻮﻧﺪ ﻭ ﻣﺴﻴﺮ ﻋﻤﻠﻴﺎﺗﻲ ﻛﻪ ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﺑﻪ ﺗﺮﺗﻴﺐ ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪè .
ﻋﻼﻣﺖ ﺷﺮﻭﻉ ﻭ ﭘﺎﻳﺎﻥ :ﺑﺼﻮﺭﺕ ﺑﻴﻀﻲ ﻣﺸﺨﺺ ﻣﻲ ﺷﻮﻧﺪ .ﻫﺮ ﻓﻠﻮﭼﺎﺭﺕ ﺣﺪﺍﻛﺜﺮ ﻳﻚ ﺷﺮﻭﻉ ﻭ ﺣﺪﺍﻗﻞ ﻳﻚ ﭘﺎﻳـﺎﻥ ﺩﺍﺭﺩ).ﺷـﺮﻭﻉ ﻫـﺮ ﻧﻤـﻮﺩﺍﺭ
ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ ﺍﺳﺖ(
STOP Start ﺩﺭ ﻣﻮﺭﺩ ﺑﻴﻀﻲ ﺷﺮﻭﻉ) (Startﺧﻂ ﺟﺮﻳﺎﻥ ﺑﻪ ﺁﻥ ﻭﺍﺭﺩ ﻧﻤﻲ ﺷﻮﺩ ﻭ ﺩﺭ ﻣﻮﺭﺩ ﺑﻴﻀﻲ ﭘﺎﻳﺎﻥ
ﺍﺯ ﺁﻥ ﺧﻂ ﺟﺮﻳﺎﻥ ﺧﺎﺭﺝ ﻧﻤﻲ ﺷﻮﺩ .ﺍﻣﺎ ﺑﻪ ﺑﻴﻀﻲ ﭘﺎﻳﺎﻥ ﻣﻲ ﺗﻮﺍﻧﺪ ﭼﻨﺪﻳﻦ ﺧﻂ ﺟﺮﻳﺎﻥ ﻭﺍﺭﺩ ﺷﻮﺩ.
ﻋﻼﻣﺖ ﭘﺮﺩﺍﺯﺵ :ﺍﺯ ﺷﻜﻞ ﻣﺴﺘﻄﻴﻞ ﺑﺮﺍﻱ ﺍﻧﺠﺎﻡ ﻭ ﻣﺤﺎﺳﺒﺎﺕ ﻭ ﺍﻧﺘﺴﺎﺏ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﺩﺭﻭﻥ ﻣﺴﺘﻄﻴﻞ ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ﻳﺎ ﻋﻤﻞ ﻣﺤﺎﺳﺒﺎﺗﻲ
ﻳﺎ ﺍﻧﺘﺴﺎﺏ ﻧﻮﺷﺖ ) ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﺗﺮﺗﻴﺐ ﺍﺟﺮﺍ ﺍﺯ ﺑﺎﻻ ﺑﻪ ﭘﺎﻳﻴﻦ ﺍﺳﺖ( .ﺍﺯ ﻣﺴﺘﻄﻴﻞ ﻓﻘﻂ ﻳﻚ ﭘﻠﻴﻜﺎﻥ ﺧﺎﺭﺝ ﻣﻲ ﺷﻮﺩ ﻭﻟﻲ ﻣﻲ ﺗﻮﺍﻧـﺪ ﭼﻨـﺪﻳﻦ
ﺍﻧﺘﺴﺎﺏ ﻳﺎ ﻣﺤﺎﺳﺒﻪ ﭘﻠﻴﻜﺎﻥ ﺑﻪ ﺁﻥ ﻭﺍﺭﺩ ﺷﻮﺩ.
ﻋﻼﻣﺖ ﺗﺼﻤﻴﻢ ﮔﻴﺮﻱ :ﺍﺯ ﺷﻜﻞ ﻫﻨﺪﺳﻲ ﻟﻮﺯﻱ ﺑﺮﺍﻱ ﺗﺼﻤﻴﻢ ﮔﻴﺮﻱ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﺩﺭ ﺩﺍﺧﻞ ﻟﻮﺯﻱ ﻳﻚ ﺷﺮﻁ ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺟﻮﺍﺏ
ﺁﻥ ﻳﺎ ﺩﺭﺳﺖ)(TRUEﻳﺎ ﻧﺎﺩﺭﺳﺖ) (FALSEﺍﺳﺖ .ﺍﺯ ﻟﻮﺯﻱ ﺣﺘﻤﺎ ﻓﻘﻂ ﺩﻭ ﭘﻠﻴﻜـﺎﻥ ) (YES , NOﺧـﺎﺭﺝ ﻣـﻲ ﺷـﻮﺩ ﻭﻟـﻲ ﻣـﻲ ﺗﻮﺍﻧـﺪ
ﭼﻨﺪﻳﻦ ﭘﻠﻴﻜﺎﻥ ﺑﻪ ﺁﻥ ﻭﺍﺭﺩ ﺷﻮﺩ.
ﻋﻼﻣﺖ ﻭﺭﻭﺩﻱ ﻭ ﺧﺮﻭﺟﻲ:
ﺷﺮﻁ ﺍﺯ ﻋﻼﻣﺖ ﻣﺘﻮﺍﺯﻱ ﺍﻻﺿﻼﻉ ﺑﺮﺍﻱ ﻭﺭﻭﺩﻱ ﻭ ﻫﻢ ﺧﺮﻭﺟﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﺍﮔﺮ ﺑﻪ ﻋﻨﻮﺍﻥ ﻭﺭﻭﺩﻱ
ﻣﻮﺭﺩ ﻧﻈﺮﺑﺎﺷﺪ ﻋﺒﺎﺭﺕ ﻭﺭﻭﺩﻱ ﻳﺎ Inputﺩﺭ ﺁﻥ ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﺩ ﻭ ﺍﮔﺮ ﺑﻪ ﻣﻨﻈﻮﺭ ﺧﺮﻭﺟﻲ ﺍﺳﺘﻔﺎﺩﻩ
ﺷﻮﺩ ﻋﺒﺎﺭﺕ ﺧﺮﻭﺟﻲ ﻳﺎ OutPutﺩﺭ ﺁﻥ ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﺩ.
ﺩﺭ ﻣﺘﻮﺍﺯﻱ ﺍﻻﺿﻼﻉ ﻭﺭﻭﺩﻱ) ( Inputﻧﻤﻲ ﺗﻮﺍﻥ ﺛﺎﺑﺖ ﻳﺎ ﻋﺒﺎﺭﺕ ﻧﻮﺷﺖ ﻓﻘﻂ ﺑﺎﻳﺪ ﻣﺘﻐﻴﺮ ﻧﻮﺷﺖ.
R,K ﺑﻪ ﻣﺘﻮﺍﺭﻱ ﺍﻻﺿﻼﻉ ﻣﻲ ﺗﻮﺍﻧﺪ ﭼﻨﺪﻳﻦ ﭘﻠﻴﻜﺎﻥ ﻭﺍﺭﺩ ﺷﻮﺩ ﺍﻣﺎ ﻓﻘﻂ ﻳﻚ ﭘﻠﻴﻜﺎﻥ ﺧﺎﺭﺝ ﻣﻲ ﺷﻮﺩ.
ﺩﺭ ﺑﻌﻀﻲ ﺍﺯ ﻛﺘﺎﺑﻬﺎ ﻋﻼﻣﺖ ﺧﺮﻭﺟﻲ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺭﻭﺑﺮﻭ ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﻨﺪ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 5
ﻋﻼﻣﺖ ﺭﺍﺑﻂ) ﺍﺩﺍﻣﻪ( :ﺑﺮﺍﻱ ﻗﻄﻊ ﺍﺟﺮﺍﻱ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻭ ﺍﺩﺍﻣﻪ ﺩﺍﺩﻥ ﺁﻥ ﺍﺯ ﻣﺤﻠﻲ ﺩﻳﮕﺮ ﺍﺯ ﻋﻼﻣﺖ ﺭﺍﺑﻂ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﻋﻼﻣﺖ ﺭﺍﺑﻂ ﺑﻪ ﺻﻮﺭﺕ
ﻳﻚ ﺩﺍﻳﺮﻩ ﺍﺳﺖ .ﺩﺍﺧﻞ ﺩﺍﻳﺮﻩ ﻳﻜﻲ ﺍﺯ ﺣﺮﻭﻑ ﺍﻧﮕﻠﻴﺴﻲ ﺭﺍ ﻧﻮﺷﺘﻪ ﻭ ﻳﻚ ﺩﺍﻳﺮﻩ ﺩﻳﮕﺮ ﻛﻪ ﻣﺤﻞ ﺑﻌـﺪﻱ ﺍﺟـﺮﺍﻱ ﺍﻟﮕـﻮﺭﻳﺘﻢ ﺭﺍ ﻣـﺸﺨﺺ ﻣـﻲ ﻛﻨـﺪ
ﻫﻤﺎﻥ ﺣﺮﻑ ﺍﻧﮕﻠﻴﺴﻲ ﺭﺍ ﻣﻲ ﻧﻮﻳﺴﻴﻢ.
A
ﺯﻳﺮﺍﻟﮕﻮﺭﻳﺘﻢ:
ﮔﺎﻫﻲ ﺑﺮﺍﻱ ﺣﻞ ﻳﻚ ﻣﺴﺎﻟﻪ ﺑﺰﺭﮒ ﺑﺎﻳﺪ ﻣﺴﺎﻟﻪ ﺭﺍ ﺑﻪ ﻣﺴﺎﻳﻞ ﻛﻮﭼﻜﺘﺮﻱ ﺗﻘﺴﻴﻢ ﻛﻨﻴﻢ ﻭ ﺳﭙﺲ ﺑﺎ ﺣﻞ ﻣﺴﺌﻠﻪ ﻫﺎﻱ ﻛﻮﭼﻚ ﻣـﺴﺎﻟﺔ ﺑـﺰﺭﮒ
ﺣﻞ ﻣﻲ ﺷﻮﺩ .ﻳﺎ ﮔﺎﻫﻲ ﺑﺨﺸﻲ ﺍﺯ ﻳﻚ ﺍﻟﮕﻮﺭﻳﺘﻢ ﭼﻨﺪﻳﻦ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺩﺭﺍﻳﻦ ﺻﻮﺭﺕ ﺷﻤﺎ ﻣﻲ ﺗﻮﺍﻧﻴﺪ ﻗﺴﻤﺖ ﺗﻜﺮﺍﺭ ﺷـﻮﻧﺪﻩ ﺭﺍ ﺑـﻪ
ﺻﻮﺭﺕ ﻳﻚ ﻗﺴﻤﺖ ﻣﺴﺘﻘﻞ ﻧﻮﺷﺘﻪ ﻭ ﺁﻥ ﺭﺍ ﺑﻪ ﺩﻓﻌﺎﺕ ﺻﺪﺍ ﺑﺰﻧﻴﺪ .ﺯﻳﺮ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺑﺨﺸﻲ ﺍﺯ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺍﺻﻠﻲ ﺍﺳﺖ ﻛﻪ ﺑﺮﺍﻱ ﺣـﻞ ﻗـﺴﻤﺘﻲ ﺍﺯ
ﻣﺴﺎﻟﻪ ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﺩ.
ﻣﺰﺍﻳﺎﻱ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺯﻳﺮﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎ -١ :ﺳﺒﺐ ﻛﺎﻫﺶ ﺣﺠﻢ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺍﺻﻠﻲ ﻣﻲ ﺷﻮﻧﺪ -٢ﺑﺎ ﺍﻋﻤـﺎﻝ ﺗﻐﻴﺮﺍﺗـﻲ ﺩﺭ ﺯﻳـﺮ ﺍﻟﮕـﻮﺭﻳﺘﻢ ﻣـﻲ ﺗـﻮﺍﻥ
ﺍﻟﮕﻮﺭﻳﺘﻢ ﺍﺻﻠﻲ ﺭﺍ ﺗﻐﻴﻴﺮ ﻳﺎ ﺗﻌﻤﻴﻢ ﺩﺍﺩ -٣ .ﺳﺒﺐ ﺳﺎﺩﻩ ﺗﺮ ﺷﺪﻥ ﺭﻭﺵ ﺣﻞ ﻳﻚ ﻣﺴﺎﻟﻪ ﻣﻲ ﺷﻮﺩ ﺯﻳﺮﺍ ﻣﺴﺎﻟﻪ ﺑﻪ ﻣـﺴﺎﻳﻞ ﻛـﻮﭼﻜﺘﺮﻱ ﺗﻘـﺴﻴﻢ
ﺷﺪﻩ ﺍﺳﺖ -٤ .ﻭﺍﮔﺬﺍﺭﻱ ﻧﻮﺷﺘﻦ ﻫﺮ ﺯﻳﺮﺍﻟﮕﻮﺭﻳﺘﻢ ﺑﻪ ﻳﻚ ﺷﺨﺺ ﺳﺒﺐ ﺻﺮﻓﻪ ﺟﻮﻳﻲ ﺩﺭ ﻭﻗﺖ ﻣﻲ ﺷﻮﺩ).ﻛﺎﺭﮔﺮﻭﻫﻲ(
ﺯﻳﺮﺍﻟﮕﻮﺭﻳﺘﻤﻬﺎ ﻫﻤﺎﻥ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎ ﻫﺴﺘﻨﺪ ﻛﻪ ﺩﺭ ﻣﺒﺎﺣﺚ ﭘﺎﺳﻜﺎﻝ ﺑﺤﺚ ﺧﻮﺍﻫﺪ ﺷﺪ.
ﺗﻌﺪﺍﺩﻱ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻳﺎ ﻓﻠﻮﭼﺎﺭﺕ ﺩﺭ ﺍﺩﺍﻣﻪ ﺁﻣﺎﺩﻩ ﺍﺳﺖ ﻛﻪ ﺍﻧﺘﻈﺎﺭ ﻣﻲ ﺭﻭﺩ ﺩﺭ ﻣﻮﺭﺩ ﺣﻞ ﺁﻧﻬﺎ ﻓﻜﺮ ﻛﻨﻴﺪ.
-١ﻓﻠﻮﭼﺎﺭﺗﻲ ﺭﺳﻢ ﻛﻨﻴﺪ ﻛﻪ ﺍﻋﺪﺍﺩ ﺯﻭﺝ ﺩﻭﺭﻗﻤﻲ ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻭ ﭼﺎﭖ ﻛﻨﺪ.
-٢ﻓﻠﻮﭼﺎﺭﺗﻲ ﺭﺳﻢ ﻛﻨﻴﺪ ﻛﻪ ﻣﻘﺴﻮﻡ ﻋﻠﻴﻪ ﻫﺎﻱ ﻳﻚ ﻋﺪﺩ ﻭﺭﻭﺩﻱ ﺭﺍ ﺟﻤﻊ ﻭ ﺣﺎﺻﻞ ﺟﻤﻊ ﺭﺍ ﭼﺎﭖ ﻛﻨﺪ.
-٣ﺍﻟﮕﻮﺭﻳﺘﻤﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪﺩ ﺍﺯ ﻭﺭﺩﻭﻱ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ﻭ ﺯﻭﺝ ﻭ ﻓﺮﺩ ﺑﻮﺩﻥ ﺁﻥ ﺭﺍ ﻣﺸﺨﺺ ﻛﻨﺪ.
-٤ﻓﻠﻮﭼﺎﺭﺗﻲ ﺭﺳﻢ ﻛﻨﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪﺩ ﺍﺯ ﻭﺭﻭﺩﻱ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ﻭ ﻓﺎﻛﺘﻮﺭﻳﻞ ﺁﻥ ﺭﺍ ﭼﺎﭖ ﻛﻨﺪ5!=1*2*3*4*5 .
-٥ﻓﻠﻮﭼﺎﺭﺗﻲ ﺭﺳﻢ ﻛﻨﻴﺪﻛﻪ ﻋﺪﺩ ﻭﺭﻭﺩﻱ ﻣﺎﻧﻨﺪ Nﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ﻭ ﺣﺎﺻﻞ ﺯﻳﺮ ﺭﺍ ﭼﺎﭖ ﻛﻨﺪ.
)S=1/2 + 3 / 4 + 5 / 6 + …+N/(N+1
-٦ﻓﻠﻮﭼﺎﺭﺗﻲ ﺭﺳﻢ ﻛﻨﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪﺩ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ﻭ ﻣﻌﻜﻮﺱ ﺁﻥ ﺭﺍ ﭼﺎﭖ ﻛﻨﺪ4395 è 5934 .
-٧ﻓﻠﻮﭼﺎﺭﺗﻲ ﺭﺳﻢ ﻛﻨﻴﺪ ﻛﻪ ﺍﻋﺪﺍﺩ ﭼﻬﺎﺭ ﺭﻗﻤﻲ ﻛﻪ ﺍﺯ ﭼﭗ ﻭ ﺍﺯ ﺭﺍﺳﺖ ﺑﻜﺠﻮﺭ ﺧﻮﺍﻧﺪﻩ ﻣﻲ ﺷﻮﻧﺪ ﺭﺍ ﭼﺎﭖ ﻛﻨﺪ ﻣﺎﻧﻨﺪ ﺍﻋﺪﺍﺩ 3223ﻳﺎ 4994
-٨ﻓﻠﻮﭼﺎﺭﺗﻲ ﺭﺳﻢ ﻛﻨﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪﺩ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ﻭ ﺭﻗﻢ ﺑﺰﺭﮔﺘﺮ ﺁﻥ ﺭﺍ ﭼﺎﭖ ﻛﻨﺪ.
-٩ﻓﻮﭼﺎﺭﺗﻲ ﺭﺳﻢ ﻛﻨﻴﺪ ﻛﻪ ﺳﺮﻱ ﺍﻋﺪﺍﺩ ﻓﻴﺒﻮﻧﺎﭼﻲ ﻛﻤﺘﺮ ﺍﺯ ١٠٠٠ﺭﺍ ﭼﺎﭖ ﻛﻨﺪ.
-١٠ﻓﻠﻮﭼﺎﺭﺗﻲ ﺭﺳﻢ ﻛﻨﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪﺩ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ﻭ ﻣﺒﻨﺎﻱ ٨ﺁﻥ ﺭﺍ ﭼﺎﭖ ﻛﻨﺪ.
ﺗﺴﺖ :
-٧ﻧﻤﻮﺩﺍﺭ ﮔﺮﺩﺷﻲ ﺭﻭﺑﺮﻭ ﭼﻪ ﻫﺪﻓﻲ ﺭﺍ ﺩﻧﺒﺎﻝ ﻣﻲ ﻛﻨﺪ؟ ) Mﻭ Nﺩﻭ ﻋﺪﺩ ﻃﺒﻴﻌﻲ ﻫﺴﺘﻨﺪ(.
ﺍﻟﻒ( ﺣﺎﺻﻞ ﺿﺮﺏ Mﻭ Nﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻭ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ.
ﺏ( Mﺭﺍ ﺑﻪ ﺗﻮﺍﻥ Nﺭﺳﺎﻧﺪﻩ ﻭ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ.
ﺝ( Nﺭﺍ ﺑﻪ ﺗﻮﺍﻥ Mﺭﺳﺎﻧﺪﻩ ﻭ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ.
ﺩ(ﺣﺎﺻﻞ ﺗﻘﺴﻴﻢ Mﺑﺮ Nﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻭ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 6
-٨ﻫﺪﻑ ﺍﺯ ﻓﻠﻮﭼﺎﺭﺕ ﺭﻭﺑﺮﻭ ﭼﻴﺴﺖ؟
ﺍﻟﻒ( ﭼﺎﭖ ﺍﻋﺪﺍﺩ ﺯﻭﺝ ﻛﻮﭼﻜﺘﺮ ﻳﺎ ﻣﺴﺎﻭﻱ ﻋﺪﺩ ﻭﺭﻭﺩﻱ
ﺏ(ﭼﺎﭖ ﻣﻘﺴﻮﻡ ﻋﻠﻴﻪ ﻫﺎﻱ ﺯﻭﺝ ﻋﺪﺩ ﻭﺭﻭﺩﻱ
ﺝ( ﭼﺎﭖ ﻭﺍﺭﻭﻥ ﻋﺪﺩ ﻭﺭﻭﺩﻱ
ﺩ( ﺩﺭ ﺣﻠﻘﺔ ﺩﺍﺋﻤﻲ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ
ﺷﺮﻭﻉ -١
X= 0 -٢ ﺍﻟﻒ( ﺍﮔﺮ X<=50ﺁﻧﮕﺎﻩ ﺑﺮﻭ ﺑﻪ ٣
X=X+1 -٣ ﺏ( ﺍﮔﺮ X<50ﺁﻧﮕﺎﻩ ﺑﺮﻭ ﺑﻪ ٣
Xﺭﺍ ﻧﻤﺎﻳﺶ ﺑﺪﻩ -٤
ﺝ( ﺍﮔﺮ X>=50ﺁﻧﮕﺎﻩ ﺑﺮﻭ ﺑﻪ ٣
؟ -٥
ﺩ( ﺍﮔﺮ X=50ﺁﻧﮕﺎﻩ ﺑﺮﻭ ﺑﻪ ٣
ﭘﺎﻳﺎﻥ -٦
اﺟـﺰاي ﯾﮏ ﺑﺮﻧﺎﻣﻪ:
ﻫﻤﺎﻧﻄﻮﺭ ﻛﻪ ﻳﻚ ﻛﺘﺎﺏ ﺑﻪ ﺯﺑﺎﻥ ﻓﺎﺭﺳﻲ ﺍﺯ ﻓﺼﻞ ﻫﺎ ﻭ ﺻﻔﺤﺎﺕ ﻭ ﭘﺎﺭﺍﮔﺮﺍﻑ ﻫﺎ ﻭﺟﻤﻼﺕ
ﻭ ﻛﻠﻤﺎﺕ ﻭ ﺣﺮﻭﻑ ﺗﺸﻜﻴﻞ ﺷﺪﻩ ﺍﺳﺖ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﭘﺎﺳﻜﺎﻝ ﻧﻴﺰ ﺍﺯ ﺑﻠﻮﻙ ﻫﺎ ﻭ ﺩﺳﺘﻮﺭﺍﺕ ﻭ ﻛﻠﻤﺎﺕ ﺗﺸﻜﻴﻞ ﺷﺪﻩ ﺍﺳﺖ .ﺑﻪ ﻛـﻮﭼﻜﺘﺮﻳﻦ ﻭﺍﺣـﺪ
ﻣﻌﻨﻲ ﺩﺍﺭ ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺗﻮﻛﻦ) (Tokenﻣﻲ ﮔﻮﻳﻨﺪ.
ﺑﻪ ﻃﻮﺭ ﻛﻠﻲ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﺍﺯ ﭼﻬﺎﺭ ﺩﺳﺘﻪ ﻛﻠﻤﻪ ﺗﺸﻜﻴﻞ ﻣﻲ ﺷﻮﺩ:
-1ﮐﻠﻤﺎت رزرو ﺷـﺪه :ﻛﻠﻤﺎﺗﻲ ﻫﺴﺘﻨﺪ ﻛﻪ ﺩﺭ ﺯﺑﺎﻥ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﻧﺪﻭ ﺑﻪ ﻣﻨﻈﻮﺭ ﺧﺎﺻﻲ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪﻩ ﺍﻧﺪ.
ﻣﺎﻧﻨﺪ Begin , End , For , Programﻭ …
-2ﺷﻨﺎﺳـﻪ ﻫﺎ :ﻛﻪ ﺑﻪ ﺩﻭ ﺩﺳﺘﻪ ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﻧﺪ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﻭ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﻏﻴﺮ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ -ﺷﻨﺎﺳﻪ ﻫﺎي اﺳـﺘﺎﻧﺪارد
ﻛﻠﻤﺎﺗﻲ ﻫﺴﺘﻨﺪ ﻛﻪ ﺍﺯ ﻃﺮﻑ ﻣﺘﺮﺟﻢ ﭘﺎﺳﻜﺎﻝ ﺑﺮﺍﻱ ﻣﻨﻈﻮﺭ ﺧﺎﺻﻲ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﻧﺪ .ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﺍﻳﻦ ﻛﻠﻤـﺎﺕ ،ﺭﺯﺭﻭ ﺷـﺪﻩ
ﻧﻴﺴﺘﻨﺪ .ﻣﺎﻧﻨﺪ Readln, Write,ABSﻭ …
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 10
ﺷﻨﺎﺳﻪ ﻫﺎي ﻏﯿﺮ اﺳﺘﺎﻧﺪارد ﺷﻨﺎﺳﻪ ﻫﺎﻳﻲ ﻫﺴﺘﻨﺪ ﻛﻪ ﺧﻮﺩ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺁﻧﻬﺎ ﺭﺍ ﺗﻌﺮﻳﻒ ﻣﻲ ﻛﻨﺪ .ﻣﺎﻧﻨﺪ ﻣﺘﻐﻴﺮﻫﺎ ،ﺛﺎﺑﺘﻬـﺎ ،ﺯﻳﺮﺑﺮﻧﺎﻣـﻪ ﻫـﺎ
;Program Ali ﻧﻮﻋﻬﺎ ﻭ …ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻣﻲ ﺗﻮﺍﻧﺪ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺭﺍ ﻣﺠﺪﺩﺍ ﺗﻌﺮﻳﻒ ﻧﻤﺎﻳﺪ.
Const -3ﺛﺎﺑﺘـﻬﺎ :ﻣﻘﺎﺩﻳﺮﻱ ﻫﺴﺘﻨﺪ ﻛﻪ ﺩﺭ ﻃﻮﻝ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﺗﻐﻴﻴﺮ ﻧﻤﻲ ﻛﻨﻨﺪ ﻣﺎﻧﻨﺪ ﻋﺪﺩ ٥ﻳﺎ
;F=13
Var ﺭﺷﺘﻪ ’ . ’ALIﺛﺎﺑﺘﻬﺎ ﺍﻋﺪﺍﺩ ﻳﺎ ﺭﺷﺘﻪ ﻫﺎﻳﻲ ﻫﺴﺘﻨﺪ ﻛﻪ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﻧﺪ.
;A:integer -4ﻋـﻼﯾﻢ :ﻛﺎﺭﺍﻛﺘﺮ)ﻫﺎﯾﯽ( ﻫﺴﺘﻨﺪ ﻛﻪ ﻣﻌﻨﻲ ﺧﺎﺻﻲ ﻣﻲ ﺩﻫﻨﺪ.
;B:Real
ﻣﺜﻼ ﻋﻼﻣﺖ * ﺑﻪ ﻣﻌﻨﺎﻱ ﺿﺮﺏ ﺍﺳﺖ ﻭﻋﻼﻣﺖ $ﺑﺮﺍﻱ ﺍﻋﺪﺍﺩ ﺩﺭ ﻣﺒﻨﺎﻱ ١٦ﺑﻪ ﻛﺎﺭ ﻣﻲ ﺭﻭﺩ$A2=162 .
Begin
;)Read(A
;A:=A+1 ﺷﻨﺎﺳﻪ ﻫﺎي ﻏﯿـﺮ اﺳﺘﺎﻧﺪارد :
;B:=A/10 ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺧﻮﺩ ﻧﻴﺎﺯ ﺑﻪ ﻣﺘﻐﻴﺮﻫﺎ ﻳﺎ ﺛﺎﺑﺘﻬﺎ ﻭ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻳﺎ ﺑﺮﭼﺴﺐ ﻳﺎ … ﺩﺍﺭﺩ ﻛﻪ ﺑﺎﻳﺪ ﺧﻮﺩ
;)Writeln(A,B
ﺗﻌﺮﻳﻒ ﻛﻨﺪ .ﻫﻨﮕﺎﻣﯽ ﮐﻪ ﻣﯽ ﺧﻮاﻫﯿﺪ ﺑﺮاي ﯾﮏ ﺷﻨﺎﺳﻪ ﻧﺎم اﻧﺘﺨﺎب ﮐﻨﯿﺪ ﺑﺎﻳﺪ ﻣﻮﺍﺭﺩ ﺯﻳﺮ ﺭﺍ ﺭﻋﺎﻳﺖ ﻛﻨﻴﺪ:
End.
ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﭘﺎﺳﻜﺎﻝ
-1ﻧﺎﻡ ﻣﺘﻐﻴﺮ ﺑﺎﻳﺪ ﺑﺎ ﻳﻜﻲ ﺍﺯ ﺣﺮﻭﻑ ﺍﻧﮕﻠﻴﺴﻲ ﻳﺎ ﻋﻼﻣﺖ ﺯﻳﺮﺧﻂ) _ ( ﺷﺮﻭﻉ ﺷﻮﺩ.
-٢ﺣﺮﻑ ﺩﻭﻡ ﺑﻪ ﺑﻌﺪ ﻣﺘﻐﻴﺮ ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﺮﻛﻴﺒﻲ ﺍﺯ ﺣﺮﻭﻑ ﺍﻧﮕﻠﻴﺴﻲ ﻳﺎﺍﻋﺪﺍﺩ ﻳﺎ ﻋﻼﻣﺖ ﺯﻳﺮﺧﻂ) _ ( ﺑﺎﺷﺪ.
-٣ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﺎﺭﺍﻛﺘﺮﻫﺎﻱ ﻭﻳﮋﻩ ﺻﺤﻴﺢ ﻧﻴﺴﺖ .ﻣﺜﻞ ! $ & * + - ~ ( > %ﻭ ﻏﻴﺮﻩ ) ﺟﺎ ﺧﺎﻟﻲ ﻧﻴﺰ ﻣﺠﺎﺯ ﻧﻴﺴﺖ(
ﺗﻨﻬﺎ ﻛﺎﺭﺍﻛﺘﺮ ﻭﻳﮋﻩ ﻛﻪ ﻣﻲ ﺗﻮﺍﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ ﻫﻤﺎﻥ ﺯﻳﺮ ﺧﻂ ﺍﺳﺖ.
-٤ﺣﺮﻭﻑ ﻛﻮﭼﻚ ﻭ ﺑﺰﺭﮒ ﻓﺮﻗﻲ ﺑﺎ ﻫﻢ ﻧﺪﺍﺭﻧﺪ ﻳﻌﻨﻲ ﺷﻨﺎﺳﻪ Aﻭ ﺷﻨﺎﺳﻪ aﻓﺮﻗﻲ ﺑﺎﻫﻢ ﻧﺪﺍﺭﻧﺪ.
-٥ﺩﺭ ﺗﻮﺭﺑﻮ ﭘﺎﺳﻜﺎﻝ ﺣﺪﺍﻛﺜﺮ ﻃﻮﻝ ﻳﻚ ﺷﻨﺎﺳﻪ ٦٣ﻛﺎﺭﺍﻛﺘﺮ ﺍﺳﺖ.
-٦ﺍﺯ ﻛﻠﻤﺎﺕ ﺭﺯﺭﻭ ﺷﺪﻩ ﻧﻤﻲ ﺗﻮﺍﻧﻴﺪ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ .ﻣﺎﻧﻨﺪ Forﻳﺎ Whileﻳﺎ Beginﻭ …
ﺗﻮﺍﺑﻊ ﻛﺘﺎﺑﺨﺎﻧﻪ ﺍﻳﻲ ،ﺭﺯﺭﻭ ﺷﺪﻩ ﻧﻴﺴﺘﻨﺪ .ﺩﺭ ﺗﻮﺭﺑﻮﭘﺎﺳﻜﺎﻝ ﻫﻨﮕﺎﻡ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﻛﻠﻤﺎﺕ ﺭﺯﺭﻭ ﺷﺪﻩ ﺑﺎ ﺭﻧﮓ ﺳﻔﻴﺪ ﻣﺸﺨﺺ ﻣﻲ ﺷﻮﻧﺪ.
ﻧﺎﻡ ﺷﻨﺎﺳﻪ ﻫﺎ ﺭﺍ ﺳﻌﻲ ﻛﻨﻴﺪ ﻛﻠﻤﺎﺕ ﺑﺎﻣﻌﻨﻲ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ ﺗﺎ ﺧﻮﺍﻧﺎﻳﻲ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺍﻓﺰﺍﻳﺶ ﺩﻫﺪ.
ﺳﺎﺧﺘـﺎر ﺑﺮﻧﺎﻣﻪ:
ﻋﻨﻮﺍﻥ
ﻫﺮ ﺑﺮﻧﺎﻣﻪ ﭘﺎﺳﻜﺎﻝ ﺍﺯ ﺳﻪ ﻗﺴﻤﺖ ﺍﺻﻠﻲ ﺗﺸﻜﻴﻞ ﺷﺪﻩ ﺍﺳﺖ:
ﺗﻌﺎﺭﻳﻒ ﻭ ﺍﻋﻼﻧﺎﺕ
-3ﻗﺴﻤﺖ ﺑﻼك ﯾﺎ دﺳﺘﻮراﻟﻌﻤﻞ ﻫﺎ -2ﻗﺴﻤﺖ ﺗﻌﺎرﯾﻒ و اﻋﻼﻧﺎت -1ﻗﺴﻤﺖ ﻋﻨﻮان
ﺩﺳﺘﻮﺭﺍﺕ ﻳﺎ ﺑﻠﻮﻙ ﺍﺻﻠﻲ
-1ﻗﺴﻤﺖ ﻋﻨﻮان :ﺩﺭ ﺍﻳﻦ ﻗﺴﻤﺖ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻧﺎﻡ ﺑﺮﻧﺎﻣﻪ ﺧﻮﺩ ﺭﺍﻳﺎﺩﺩﺍﺷﺖ ﻣﻲ ﻛﻨﺪ .ﻧﺎﻡ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻳﺪ ﺍﺯ
ﻗﻮﺍﻧﻴﻦ ﻧﺎﻡ ﮔﺬﺍﺭﻱ ﺷﻨﺎﺳﻪ ﻫﺎ ﭘﻴﺮﻭﻱ ﻛﻨﺪ.ﺑﺎ ﻛﻠﻤﻪ ﺭﺯﺭﻭ ﺷﺪﺓ PROGRAMﻣﻲ ﺗﻮﺍﻥ ﻧﺎﻡ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﻣﺸﺨﺺ ﻛﺮﺩ.
;PROGRAM FM ﻣﺎﻧﻨﺪ:
ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺍﻳﻦ ﺧﻂ ﺍﺟﺒﺎﺭﻱ ﺍﺳﺖ ﺍﻣﺎ ﺩﺭ ﺗﻮﺭﺑﻮﭘﺎﺳﻜﺎﻝ ﻧﻮﺷﺘﻦ ﺍﻳﻦ ﺧﻂ ﺍﺧﺘﻴﺎﺭﻱ ﺍﺳﺖ.
-2ﻗﺴﻤﺖ ﺗﻌﺎرﯾﻒ و اﻋﻼﻧﺎت :ﺩﺭ ﺍﻳﻦ ﻗﺴﻤﺖ ﺑﺎﻳﺪ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﺑﻪ ﻛﺎﺭ ﺭﻓﺘﻪ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺗﻮﺳﻂ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻣﻌﺮﻓﻲ ﺷﻮﻧﺪ ﻣﺜﻞ ﻣﺘﻐﻴﺮﻫﺎ،
ﺛﺎﺑﺘﻬﺎ ،ﺑﺮﭼﺴﺐ ﻫﺎ ،ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎ ﻭ ….ﺩﺭ ﭘﺎﺳﻜﺎﻝ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺍﺑﺘﺪﺍ ﺛﺎﺑﺘﻬﺎ ﺳﭙﺲ ﻧﻮﻉ ﺩﺍﺩﻩ ﻫﺎ ﻭ ﺩﺭ ﺁﺧﺮ
Program
USES ﻣﺘﻐﻴﺮﻫﺎ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﻧﺪ .ﻧﻤﺎﺩ ﻛﻠﻲ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﭘﺎﺳﻜﺎﻝ ﺑﻪ ﺻﻮﺭﺕ ﺭﻭﺑﺮﻭ ﺧﻮﺍﻫﺪ ﺑﻮﺩ:
Label -3ﻗﺴﻤﺖ دﺳﺘﻮرات :ﺍﻳﻦ ﻗﺴﻤﺖ ﺑﺎ ﻳﻚ BEGINﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩﻭ ﺑﺎ ﻳﻚ END.ﭘﺎﻳﺎﻥ ﻣﻲ ﻳﺎﺑﺪ ﻛﻪ
CONST
TYPE ﺑﻪ ﺁﻥ ﺑﻠﻮﻙ ﺍﺻﻠﻲ ﺑﺮﻧﺎﻣﻪ ﻣﻲ ﮔﻮﻳﻨﺪ ﻫﺮ ﺑﺮﻧﺎﻣﻪ ﻓﻘﻂ ﻳﻚ ﺑﻠﻮﻙ ﺍﺻﻠﻲ ﺩﺍﺭﺩ.
VAR
BEGIN
ﻣﺠﻤﻮﻋﻪ ﺩﺳﺘﻮﺭﺍﺕ
END.
ﻧﻤﺎﺩ ﻛﻠﻲ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﭘﺎﺳﻜﺎﻝ
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 11
اﻧﻮاع داده ﻫﺎ در زﺑﺎن ﭘﺎﺳـﮑﺎل:
-1داده ﻫﺎي ﻋﺪدي :ﺍﻳﻦ ﺩﺍﺩﻩ ﻫﺎ ﺑﻪ ﺩﻭ ﺩﺳﺘﻪ ﺻﺤﻴﺢ ﻭ ﺍﻋﺸﺎﺭﻱ ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﻧﺪ .ﺩﺍﺩﻩ ﻫﺎﻱ ﻋﺪﺩﻱ ﺻﺤﻴﺢ ﺧﻮﺩ ﺩﺍﺭﺍﻱ ﺍﻧﻮﺍﻉ ﺯﻳـﺮ
ﻣﻲ ﺑﺎﺷﻨﺪ .ﻫﺮﻛﺪﺍﻡ ﺍﺯﺁﻧﻬﺎ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻣﺤﺪﻭﺩﻩ ﺁﻧﻬﺎ ﻭ ﻣﻘﺪﺍﺭ ﻓﻀﺎﻳﻲ ﻛﻪ ﺩﺭ ﺣﺎﻓﻈﻪ ﺍﺷﻐﺎﻝ ﺧﻮﺍﻫﺪ ﻛﺮﺩ ﺗﻮﺳﻂ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﻧﺪ.
ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺧﻮﺏ ﻫﻤﻴﺸﻪ ﺳﻌﻲ ﻣﻲ ﻛﻨﺪ ﺑﻬﺘﺮﻳﻦ ﻧﻮﻉ ﺭﺍ ﺑﺮﺍﻱ ﻣﺘﻐﻴﺮﻫﺎﻱ ﺧﻮﺩ ﺍﻧﺘﺨﺎﺏ ﻛﻨﺪ.
اﻧﻮاع ﺻﺤﯿـﺢ
ﻋﻼﻣﺘﺪﺍﺭ ﻣﺤﺪﻭﺩﻩ ﻇﺮﻓﻴﺖ ﻣﺨﻔﻒ ﻧﻮﻉ
ﻋﻼﻣﺖ ﻧﺪﺍﺭﺩ 0 - 255 ١ﺑﺎﻳﺖ Byt Byte
ﻋﻼﻣﺘﺪﺍﺭ -128 - +127 ١ﺑﺎﻳﺖ Sht ShortINT
ﻋﻼﻣﺘﺪﺍﺭ -32768 - +32767 ٢ﺑﺎﻳﺖ Int Integer
ﻋﻼﻣﺖ ﻧﺪﺍﺭﺩ 0 - 65535 ٢ﺑﺎﻳﺖ Wrd Word
ﻋﻼﻣﺘﺪﺍﺭ -231-1ﺗﺎ +231 ٤ﺑﺎﻳﺖ Lng LongInt
ﻋﻼﻣﺘﺪﺍﺭ ٨ﺑﺎﻳﺖ Cmp COMP
-3ﻧﻮع رﺷﺘﻪ اﯾﯽ :ﻧﻮﻉ ﺭﺷﺘﻪ ﺍﻳﻲ ﺑﺎ ﻧﺎﻡ Stringﺷﻨﺎﺧﺘﻪ ﻣﻲ ﺷﻮﺩ ﻭ ﺩﺭ ﺁﻥ ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ﺭﺷﺘﻪ ﺍﺯ ﻛﺎﺭﺍﻛﺘﺮﻫﺎ ﺭﺍ ﻗﺮﺍﺭ ﺩﺍﺩ .ﻣﺨﻔـﻒ
ﺁﻥ STRﺍﺳﺖ .ﻣﻘﺪﺍﺭ ﻓﻀﺎﻳﻲ ﻛﻪ ﺁﻥ ﺍﺷﻐﺎﻝ ﻣﻲ ﻛﻨﺪ ﺑﻪ ﻧﺤﻮﻩ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﻧﻮﻉ ﺑﺴﺘﮕﻲ ﺩﺍﺭﺩ .ﺩﺭ ﺍﺩﺍﻣﻪ ﺍﻳﻦ ﻣﻮﺿﻮﻉ ﺑﺤﺚ ﻣﻲ ﺷﻮﺩ.
’’235 ﺭﺷﺘﻪ ﺗﻬﻲ ’’ ﺭﺷﺘﻪ ﻫﺎﻱ ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺩﺭ ﺁﭘﺴﺘﺮﻭﻑ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﻧﺪ’ALIREZA’ .
ﺭﺷﺘﻪ ﺷﺎﻣﻞ ﻳﻚ ﻛﺎﺭﺍﻛﺘﺮ ﺑﻴﭗ ﻭ ﺭﺷﺘﻪALI ’#7’ALI ﺭﺷﺘﻪ ﺷﺎﻣﻞ AB #65#66
• ﺣﺪﺍﻛﺜﺮ ﻃﻮﻝ ﻳﻚ ﺭﺷﺘﻪ ﻣﻲ ﺗﻮﺍﻧﺪ ٢٥٥ﻛﺎﺭﺍﻛﺘﺮ ﺑﺎﺷﺪ.
-4ﻧﻮع ﺑﻮﻟﯿﻦ ( BOOLEAN) :ﺍﻳﻦ ﻧﻮﻉ ﺩﺍﺩﻩ ﺍﺯ ﻭﻳﮋﮔﻲ ﻫﺎﻱ ﻣﻬﻢ ﭘﺎﺳﻜﺎﻝ ﺍﺳـﺖ .ﺩﺭ ﺍﻳـﻦ ﻧـﻮﻉ ﺩﺍﺩﻩ ﻓﻘـﻂ ﺩﻭ ﻣﻘـﺪﺍﺭ TRUEﻭ
FALSEﻣﻲ ﺗﻮﺍﻧﺪ ﻗﺮﺍﺭ ﮔﻴﺮﺩ .ﻳﻚ ﺑﺎﻳﺖ ﺩﺭ ﺣﺎﻓﻈﻪ ﺍﺷﻐﺎﻝ ﻣﻲ ﻛﻨﺪ ﻭ ﻣﺨﻔﻒ ﺁﻥ Blnﺍﺳﺖ.
ﻣﺘﻐﯿـﺮﻫﺎ و ﺗﻌﺮﯾﻒ آﻧﻬﺎ :ﻣﺘﻐﻴﺮ ﻣﻜﺎﻧﻲ ﺍﺯ ﺣﺎﻓﻈﻪ ﺍﺻﻠﻲ ﺍﺳﺖ ﻛﻪ ﻣﻘﺪﺍﺭﺵ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺩﺭ ﻃﻮﻝ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﺗﻐﻴﻴﺮ ﺩﺍﺩ.
ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺑﺎﻳﺪ ﻫﻤﻪ ﻣﺘﻐﻴﺮﻫﺎﻳﻲ ﻛﻪ ﺩﺭ ﻃﻮﻝ ﺑﺮﻧﺎﻣﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﺪ ﺭﺍ ﺩﺭ ﻗﺴﻤﺖ ﺗﻌﺎﺭﻳﻒ ﺗﻌﺮﻳﻒ ﻛﻨﺪ.ﺑﺮﺍﻱ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮﻫﺎ ﺍﺑﺘـﺪﺍ ﻛﻠﻤـﺔ
ﺭﺯﺭﻭ ﺷﺪﺓ VARﺭﺍ ﺑﻨﻮﻳﺴﻴﺪ ﻭ ﺩﺭ ﺍﺩﺍﻣﻪ ﻣﺘﻐﻴﺮﻫﺎ ﻭ ﻧﻮﻉ ﺁﻧﻬﺎ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺑﻨﻮﻳﺴﻴﺪ.
VAR
; ﻧﻮﻉ ﻣﺘﻐﻴﺮ :ﻧﺎﻡ ﻣﺘﻐﻴﺮ
ﻣﺜﺎﻝ:
VAR
;A:INTEGER
;F,H:CHAR
;S:STRING ;N:BOOLEAN
;D:Single ;]K:STRING[15
ﻧﻜﺘﻪ :ﺩﺭ ﻣﺜﺎﻝ ﺑﺎﻻ ﭼﻨﺪ ﺑﺎﻳﺖ ﻓﻀﺎ ﺍﺷﻐﺎﻝ ﺷﺪﻩ ﺍﺳﺖ؟
ﺩﺭ ﻣﺜﺎﻝ ﺑﺎﻻ ﻣﺘﻐﻴﺮ Sﺍﺯ ﻧﻮﻉ ﺭﺷﺘﻪ ﺍﻱ ﺍﺳﺖ ﺍﻣﺎ ﻃﻮﻝ ﺭﺷﺘﻪ ﻣﺸﺨﺺ ﻧﺸﺪﻩ ﺍﺳﺖ .ﺍﮔﺮ ﻃﻮﻝ ﺭﺷﺘﻪ ﻣﺸﺨﺺ ﻧﺸﻮﺩ ،ﺑﻄﻮﺭ ﭘـﻴﺶ ﻓـﺮﺽ ﻃـﻮﻝ
ﺭﺷﺘﻪ ٢٥٥ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ ﻭ ﺍﻳﻦ ﻣﺘﻐﻴﺮ ٢٥٦ﺑﺎﻳﺖ ﻓﻀﺎ ﺍﺷﻐﺎﻝ ﻣﻲ ﻛﻨﺪ .ﻣﺘﻐﻴﺮ Kﻃﻮﻝ ﺁﻥ ١٥ﺗﻌﻴﻴﻦ ﺷﺪﻩ ﺍﺳﺖ .ﺑﻨﺎﺑﺮﺍﻳﻦ ﺩﺭ ﺍﻳـﻦ
ﻣﺘﻐﻴﺮ ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ﺭﺷﺘﻪ ﺑﺎ ﻃﻮﻝ ١٥ﺭﺍ ﻗﺮﺍﺭ ﺩﺍﺩ .ﺍﻳﻦ ﻣﺘﻐﻴﺮ ١٦ﺑﺎﻳﺖ ﻓﻀﺎ ﺍﺷﻐﺎﻝ ﻣﻲ ﻛﻨﺪ .ﻫﻤﻴﺸﻪ ﺭﺷﺘﻪ ﻫﺎ ﺩﺭ ﭘﺎﺳﻜﺎﻝ ﻳﻚ ﺑﺎﻳﺖ ﺑﻴﺸﺘﺮ
ﺍﺯ ﻃﻮﻝ ﺭﺷﺘﻪ ،ﻓﻀﺎ ﺍﺷﻐﺎﻝ ﻣﻲ ﻛﻨﻨﺪ.
ﺗﻌﺪاد ﺑﺎﯾﺖ ﻓﻀﺎي اﺷﻐﺎﻟﯽ ﯾﮏ رﺷﺘﻪ= ﻃﻮل رﺷﺘﻪ 1+
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 13
;’K:=’ALIREZA
#7 A L I R E Z A
ﻧﻜﺘﻪ :ﺍﮔﺮ ﺩﺭ ﻣﺘﻐﻴﺮ Kﻳﻚ ﺭﺷﺘﻪ ﺑﺎ ﻃﻮﻝ ﺑﻴﺸﺘﺮ ﺍﺯ ١٥ﻛﺎﺭﺍﻛﺘﺮ ﻗﺮﺍﺭ ﺩﻫﻴﻢ ﻫﻴﭻ ﺧﻄﺎﻳﻲ ﺭﺥ ﻧﻤﻲ ﺩﻫﺪ ﺑﻠﻜﻪ ﺍﺿﺎﻓﻪ ﺁﻥ ﺩﺭ ﻧﻈـﺮ ﮔﺮﻓﺘـﻪ ﻧﻤـﻲ
ﺷﻮﺩ.
;’K:=’ABCDEFGHIJKLMNPQRSXY
ﻧﻜﺘﻪ :ﻧﺎﻡ ﮔﺬﺍﺭﻱ ﻣﺘﻐﻴﺮﻫﺎ ﺑﺎﻳﺪ ﺍﺯ ﻗﻮﺍﻧﻴﻦ ﻧﺎﻡ ﮔﺬﺍﺭﻱ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﻏﻴﺮ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﭘﻴﺮﻭﻱ ﻛﻨﺪ.
Z21ﻭ FOR_IFﻭ INTﻭ … ABﻭ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﺭﻭﺑﺮﻭ ﻣﺠﺎﺯ ﻫﺴﺘﻨﺪ:
ﻭ FORﻭ #Aﻭ * Gﻭ … END ﻭ 4B ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﺭﻭﺑﺮﻭ ﻏﻴﺮ ﻣﺠﺎﺯﻧﺪ:
ﻧﻜﺘﻪ :ﻧﻤﻲ ﺗﻮﺍﻥ ﺩﻭ ﻣﺘﻐﻴﺮ ﻫﻢ ﻧﺎﻡ ﺩﺍﺷﺖ ،ﭘﻴﻐﺎﻡ ﺧﻄﺎ ﺻﺎﺩﺭ ﻣﻲ ﺷﻮﺩ .ﺑﻄﻮﺭ ﻛﻠﻲ ﻧﻤﻲ ﺗﻮﺍﻥ ﺩﻭ ﺷﻨﺎﺳﻪ ﻏﻴﺮﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﻫﻢ ﻧﺎﻡ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺩﺍﺷﺘﻪ
;Program H ﺑﺎﺷﻴﻢ.
VAR ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﺩﺍﺭﺍﻱ ﺩﻭ ﺧﻄﺎ ﺍﺳﺖ.
;A,B,H:Real ﻧﻜﺘﻪ :ﺩﺭ ﺗﻮﺭﺑﻮﭘﺎﺳﻜﺎﻝ ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻳﻚ ﻣﺘﻐﻴﺮ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﺩ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﺩﺍﺧﻞ ﺁﻥ ﺍﮔﺮ ﻋﺪﺩﻱ
;B,M:Boolean
ﺑﺎﺷﺪ ﺻﻔﺮ ﺍﺳﺖ ﻭ ﺍﮔﺮ ﺭﺷﺘﻪ ﺍﻳﻲ ﺑﺎﺷﺪ ﺗﻬﻲ ﺍﺳﺖ.
ﺛﺎﺑﺘـﻬﺎ و ﺗﻌﺮﯾﻒ آﻧﻬﺎ:
ﺍﺯ ﺛﺎﺑﺘﻬﺎ ﻣﻌﻤﻮﻻ ﺑﺮﺍﻱ ﺑﺎﻻ ﺑﺮﺩﻥ ﺧﻮﺍﻧﺎﻳﻲ ﺑﺮﻧﺎﻣﻪ ﻭ ﺳﺎﺩﮔﻲ ﺩﺭ ﻭﻳﺮﺍﻳﺶ ﻣﻘﺎﺩﻳﺮ ﺛﺎﺑﺖ ﺑﺮﻧﺎﻣﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ.
ﺛﺎﺑﺘﻬﺎ ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺑﻪ ﺩﻭ ﺩﺳﺘﻪ ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﻧﺪ:
-2ﺛﺎﺑﺖ ﻧـﻮع دار )ﺑﺎ ﻧﻮع( -1ﺛﺎﺑﺖ ﺑـﺪون ﻧﻮع
-1ﺛﺎﺑﺖ ﺑﺪون ﻧﻮع :ﺍﻳﻦ ﻧﻮﻉ ﺛﺎﺑﺖ ﻣﻘﺪﺍﺭﺵ ﺩﺭ ﻃﻮﻝ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺗﻐﻴﻴﺮ ﻛﻨﺪ .ﺑﺮﺍﻱ ﺗﻌﺮﻳـﻒ ﺛﺎﺑﺘﻬـﺎ ﺍﺯ ﻛﻠﻤـﻪ ﺭﺯﺭﻭ ﺷـﺪﻩ
Constﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﻣﺜﺎﻝ:
Const ;F=14
;’P=’AMIN
-2ﺛﺎﺑﺖ ﻧـﻮع دار :ﺍﻳﻦ ﻧﻮﻉ ﺛﺎﺑﺖ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﻧﻮﻋﻲ ﻣﺘﻐﻴﺮ ﻓﺮﺽ ﻛﺮﺩ .ﻳﻌﻨﻲ ﻣﻲ ﺗﻮﺍﻥ ﻣﻘﺪﺍﺭ ﺁﻥ ﺭﺍ ﺩﺭ ﻃﻮﻝ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﺗﻐﻴﻴﺮ ﺩﺍﺩ .ﺑﻪ
ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﺛﺎﺑﺖ ﻧﻮﻉ ﺩﺍﺭ ﻣﺘﻐﻴﺮﻱ ﺍﺳﺖ ﻛﻪ ﻣﻘﺪﺍﺭﺩﻫﻲ ﺍﻭﻟﻴﻪ ﻣﻲ ﺷﻮﺩ .ﻣﺜﺎﻝ:
Const
;R:integer =12
;T=25.7
ﺩﺭ ﻣﺜﺎﻝ ﺑﺎﻻ Rﻳﻚ ﺛﺎﺑﺖ ﻧﻮﻉ ﺩﺍﺭ )ﺍﺯ ﻧﻮﻉ ﺻﺤﻴﺢ( ﺍﺳﺖ ﺍﻣﺎ Tﻳﻚ ﺛﺎﺑﺖ ﺑﺪﻭﻥ ﻧﻮﻉ ﺍﺳﺖ .ﻣﻘﺪﺍﺭ Rﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺩﺭ ﻃﻮﻝ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﺗﻐﻴﻴـﺮ
ﺩﺍﺩ ﺍﻣﺎ ﻣﻘﺪﺍﺭ Tﺭﺍ ﻧﻤﻲ ﺗﻮﺍﻥ ﺗﻐﻴﻴﺮ ﺩﺍﺩ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 14
ﻣﺜﺎﻝ :
Const
;A=2+3
;W:Boolean=False
;H=A*2
;P:Integer=3
Var
;T:Shortint
Begin
;)Write(A , H, W,P
;P:=15 ;T:=4
;P:=P+T ;W:=12>8
;)Write(P
End.
ﻧﻜﺘﻪ :ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ; )ﺳﻴﻤﻴﻜﻠﻮﻥ( ﺟﺪﺍ ﻛﻨﻨﺪﺓ ﺩﺳﺘﻮﺭﺍﺕ ﺍﺯ ﻳﻜﺪﻳﮕﺮ ﺍﺳﺖ.
- ١ﻋﺒﺎﺭﺍﺕ ﺭﻳﺎﺿﻲ :ﺣﺎﺻﻞ ﺍﻳﻦ ﻋﺒﺎﺭﺍﺕ ﻳﻚ ﻋﺪﺩ ﺻﺤﻴﺢ ﻳﺎ ﺍﻋﺸﺎﺭﻱ ﺧﻮﺍﻫﺪ ﺷﺪ .ﻣﺜﻞ B*8+2 And 12
- ٢ﻋﺒﺎﺭﺍﺕ ﺭﺷﺘﻪ ﺍﻱ :ﺭﺷﺘﻪ ﻫﺎ ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺩﺍﺧﻞ ﺩﻭ ﻋﻼﻣﺖ ﺁﭘﺴﺘﺮﻭﻑ )’( ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﻧﺪ .ﻣﺜﻞ ’’ALI
ﺣﺎﺻﻞ ﺍﻳﻦ ﻋﺒﺎﺭﺍﺕ ﻧﻴﺰ ﻳﻚ ﺭﺷﺘﻪ ﺧﻮﺍﻫﺪ ﺷﺪ ﻣﺜﻞ ’’Ali’+’Reza’=’AliReza
ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﻃﻮﻝ ﻳﻚ ﺭﺷﺘﻪ ﺣﺪﺍﻛﺜﺮ ٢٥٥ﻛﺎﺭﺍﻛﺘﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ.
- ٣ﻋﺒﺎﺭﺍﺕ ﺑﻮﻟﻲ :ﺣﺎﺻﻞ ﺍﻳﻦ ﻋﺒﺎﺭﺍﺕ ﻣﻲ ﺗﻮﺍﻧﺪ Trueﻳﺎ Falseﺑﺎﺷﺪ .ﻣﺎﻧﻨﺪ )(5 > 8) OR (9>4
ﻋﺒﺎﺭﺍﺕ ﺳﺎﺩﻩ :ﺑﻪ ﻋﺒﺎﺭﺍﺗﻲ ﻛﻪ ﺩﺭ ﺁﻥ ﺗﻌﺪﺍﺩﻱ ﻋﻤﻠﮕﺮ ﺍﺯ ﻳﻚ ﻧﻮﻉ ﺑﻪ ﻛﺎﺭ ﺭﻭﺩ ﻋﺒﺎﺭﺕ ﺳﺎﺩﻩ ﻣﻲ ﮔﻮﻳﻨﺪA*2+4-8/2 .
ﻋﺒﺎﺭﺍﺕ ﻣﺮﻛﺐ :ﻋﺒﺎﺭﺗﻲ ﺍﺳﺖ ﻛﻪ ﻋﻤﻠﮕﺮﻫﺎﻱ ﺑﻪ ﻛﺎﺭ ﺭﻓﺘﻪ ﺩﺭﺁﻥ ﺑﻴﺶ ﺍﺯ ﻳﻚ ﻧﻮﻉ ﺑﺎﺷﺪA+5 > 8 AND 4 .
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 15
ﺟﺪول ﺗﻘـﺪم ﻋﻤﻠﮕﺮﻫﺎ :
) (
NOT ±
* / DIV MOD AND SHL SHR
+ - OR XOR
< > = >< => =<
ﻧﻜﺘﻪ :ﺗﻘﺪﻡ ﻫﺎ ﺍﺯ ﺑﺎﻻ ﺑﺎ ﭘﺎﻳﻴﻦ ﺍﺳﺖ.
ﻧﻜﺘﻪ :ﻋﻤﻠﮕﺮﻫﺎﻳﻲ ﻛﻪ ﺩﺍﺭﺍﻱ ﺗﻘﺪﻡ ﻳﻜﺴﺎﻧﻲ ﻫﺴﻨﺘﺪ ،ﻋﻤﻠﮕﺮﻱ ﻛﻪ ﺳﻤﺖ ﭼﭗ ﺗﺮ)ﺩﺭ ﻋﺒﺎﺭﺕ( ﺍﺳﺖ ﻣﻘﺪﻡ ﺗﺮ ﺍﺳﺖ.
ﻧﻜﺘﻪ :ﭘﺮﺍﻧﺘﺰﻫﺎ ﺗﻘﺪﻡ ﻋﻤﻠﮕﺮﻫﺎ ﺭﺍ ﺗﻐﻴﻴﺮ ﻣﻲ ﺩﻫﻨﺪ.
ﻧﻜﺘﻪ :ﻋﻤﻠﻮﻧﺪﻫﺎﻱ ﻣﺮﺑﻮﻁ ﺑﻪ DIVﻭ MODﺑﺎﻳﺪ ﺍﺯ ﻧﻮﻉ ﻋﺪﺩ ﺻﺤﻴﺢ ﺑﺎﺷﻨﺪ ﻭ ﺣﺎﺻﻞ ﺁﻥ ﻧﻴﺰ ﻳﻚ ﻋﺪﺩ ﺻﺤﻴﺢ ﺍﺳﺖ.
ﺧﻄﺎ ﺩﺍﺭﺩ. 15 Mod 3.5
24 mod 3 = 0 25 div -3 = -8
24 Div 3 = 8 -25 div -3 = 8
25 mod -3 = 1 7 mod 14 =7
-25 mod -3 = -1 7 div 14 = 0
ﻧﻜﺘﻪ :ﻋﻼﻣﺖ ﺣﺎﺻﻞ ﻋﻤﻠﮕﺮ Modﺑﻪ ﻋﻼﻣﺖ ﻋﻤﻠﻮﻧﺪ ﺍﻭﻝ ﺑﺴﺘﮕﻲ ﺩﺍﺭﺩ.
ﻧﻜﺘﻪ Mod :ﻭ Divﻛﻠﻤﺎﺕ ﺭﺯﺭﻭ ﺷﺪﻩ ﻫﺴﺘﻨﺪ.
4+35 mod 2 *12 –(6-2) /4 ﺣﺎﺻﻞ ﻋﺒﺎﺭﺕ ﺭﻭﺑﺮﻭ ﭼﻨﺪ ﺍﺳﺖ؟
X Y X OR Y X Y X AND Y X Y X Xor Y X Not X
0 0 0 0 0 0 0 0 0 1 0
0 1 1 0 1 0 0 1 1 0 1
1 0 1 1 0 0 1 0 1
1 1 1 1 1 1 1 1 0
ORﺷﺒﻴﻪ ﺟﻤﻊ ﺍﺳﺖ. Andﻣﺎﻧﻨﺪ ﺿﺮﺏ ﺍﺳﺖ. ﺩﻭﻋﻤﻠﻮﻧﺪﻫﻢ ﺍﺭﺯﺵ ،ﺣﺎﺻﻞ ﺻﻔﺮ ﺍﺳﺖ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 16
ﻧﻜﺘﻪ :ﺍﻳﻦ ﺟﺪﺍﻭﻝ ﺑﺮﺍﻱ ﻋﻤﻠﮕﺮﻫﺎﻱ ﺑﻮﻟﻲ ﻧﻴﺰ ﺑﻪ ﻫﻤﻴﻦ ﺻﻮﺭﺕ ﺍﺳﺖ ﺑﺎ ﺍﻳﻦ ﺗﻔﺎﻭﺕ ﻛﻪ ﺑﺠﺎﻱ 0ﻋﺒﺎﺭﺕ Falseﻭ ﺑﺠﺎﻱ 1ﻋﺒﺎﺭﺕ Trueﺭﺍ
ﺑﻪ ﻛﺎﺭ ﻣﻲ ﺑﺮﻳﻢ.
ﻧﻜﺘﻪ :ﺣﺎﺻﻞ ﻋﻤﻠﮕﺮ ) Xorﻳﺎﻱ ﺍﻧﺤﺼﺎﺭﻱ( ﻫﻨﮕﺎﻣﻲ Falseﺍﺳﺖ )ﺻﻔﺮ ﺍﺳﺖ( ﻛﻪ ﻫﺮ ﺩﻭ ﻋﻤﻠﻮﻧﺪ ﺁﻥ ﻳﻜﺴﺎﻥ ﺑﺎﺷﻨﺪ .ﻳﺎ ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ
ﻫﻨﮕﺎﻣﻲ Trueﺍﺳﺖ )ﻳﻚ ﺍﺳﺖ( ﻛﻪ ﺩﻭ ﻋﻤﻠﻮﻧﺪ ﺁﻥ ﻳﻜﺴﺎﻥ ﻧﺒﺎﺷﻨﺪ.
16 AND 27 = 16 ﻣﺜﺎﻝ:
00010000
27=(00011011)2 16= (00010000)2
00011011
00010000 = 16
19 XOR 35=48 ﻣﺜﺎﻝ:
00010011 35=(00100011)2 19=(00010011)2
00100011
00110000 =48
14 Xor 25 And Not 21 =6 ﻣﺜﺎﻝ:
14=(00001110)2 25=(00011001)2 Not 21 =(11101010)2 21=(00010101)2
14 XOR (00001000)2=(00000110)2 =6 25 And (11101010) =(00001000)2
ﻧﻜﺘﻪ :ﻫﻤﻴﺸﻪ ﺍﻋﺪﺍﺩ ﺭﺍ ﻭﻗﺘﻲ ﺑﻪ ﻣﺒﻨﺎﻱ ﺩﻭ ﻣﻲ ﺑﺮﻳﺪ ﺁﻧﻬﺎ ﺭﺍ ﻫﺸﺖ ﺭﻗﻤﻲ ﻳﺎ ١٦ﺭﻗﻤﻲ ﻛﻨﻴﺪ.
ﻧﻜﺘﻪ :ﺍﮔﺮ ﻳﻚ ﻋﺪﺩ ﻓﺮﺩ ﺭﺍ ﺑﻪ ﻣﺒﻨﺎﻱ ﺩﻭ ﺑﺒﺮﻳﻢ ﺍﻭﻟﻴﻦ ﺭﻗﻢ ﺁﻥ ﺍﺯ ﺳﻤﺖ ﺭﺍﺳﺖ ﻳﻚ ﺧﻮﺍﻫﺪ ﺑﻮﺩ ﻭ ﺍﮔﺮ ﻳﻚ ﻋﺪﺩ ﺯﻭﺝ ﺭﺍ ﺑﻪ ﻣﺒﻨﺎﻱ ﺩﻭ ﺑﺒﺮﻳﻢ
ﺍﻭﻟﻴﻦ ﺭﻗﻢ ﺍﻥ ﺍﺯ ﺳﻤﺖ ﺭﺍﺳﺖ ﺻﻔﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ.
27=(11011)2 14=(1110)2
ﺳﺌﻮﺍﻝ :ﺍﮔﺮ ﺩﻭ ﻋﺪﺩ ﻓﺮﺩ ﺭﺍ ﺑﺎﻫﻢ ORﻛﻨﻴﻢ ﺣﺎﺻﻞ ﻓﺮﺩ ﺍﺳﺖ ﻳﺎ ﺯﻭﺝ؟
ﺟﻮﺍﺏ :ﭼﻮﻥ ﻫﺮ ﺩﻭ ﻋﺪﺩ ﻓﺮﺩ ﺑﻮﺩﻩ ﺍﻧﺪﺑﻨﺎﺑﺮﺍﻳﻦ ﺭﻗﻢ ﻛﻢ ﺍﺭﺯﺵ ﺁﻧﻬﺎ ﻳﻚ ﺑﻮﺩﻩ ﺍﺳﺖ ﻛﻪ ﻭﻗﺘﻲ ﺑﺎﻫﻢ ORﻣﻲ ﺷﻮﻧﺪ ﺣﺎﺻـﻞ ﻳـﻚ ﺧﻮﺍﻫـﺪ ﺷـﺪ
ﭘﺲ ﺣﺎﺻﻞ ﻓﺮﺩ ﺍﺳﺖ.
ﺳﺌﻮﺍﻝ :ﺍﮔﺮ ﺩﻭﻋﺪﺩ ﻓﺮﺩ ﺭﺍ ﺑﺎﻫﻢ Xorﻛﻨﻴﻢ ﺣﺎﺻﻞ ﺯﻭﺝ ﺍﺳﺖ ﻳﺎ ﻓﺮﺩ؟
ﺳﺌﻮﺍﻝ :ﺍﮔﺮ ﻳﻚ ﻋﺪﺩ ﻓﺮﺩ ﺭﺍ NOTﻛﻨﻴﻢ ﺣﺎﺻﻞ ﻓﺮﺩ ﺍﺳﺖ ﻳﺎ ﺯﻭﺝ؟
ﺳﺌﻮﺍﻝ :ﺍﮔﺮ ﻳﻚ ﻋﺪﺩ ﻓﺮﺩ ﻭ ﻳﻚ ﻋﺪﺩ ﺯﻭﺝ ﺭﺍ ﺑﺎﻫﻢ ANDﻛﻨﻴﻢ ﺣﺎﺻﻞ ﺯﻭﺝ ﺍﺳﺖ ﻳﺎ ﻓﺮﺩ؟
ﺳﺌﻮﺍﻝ :ﺍﮔﺮ ﻳﻚ ﻋﺪﺩ ﻓﺮﺩ ﺭﺍ ﺑﺎ ﻳﻚ ﻋﺪﺩ ﺯﻭﺝ ﺑﺎﻫﻢ Xorﻛﻨﻴﻢ ﺣﺎﺻﻞ ﺯﻭﺝ ﺍﺳﺖ ﻳﺎ ﻓﺮﺩ؟
ﻣﺜﺎﻝ2*6 OR 12 = :
ﺍﺑﺘﺪﺍ * ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﺳﭙﺲ ﺣﺎﺻﻞ ﺑﺎ OR ، 12ﻣﻲ ﺷﻮﺩ12 OR 12 =12 .
X Or X =X ﻧﻜﺘﻪ :ﻫﺮ ﻋﺪﺩﻱ ﺑﺎ ﺧﻮﺩﺵ ORﻳﺎ ANDﺷﻮﺩ ﺣﺎﺻﻞ ﺧﻮﺩﺵ ﻣﻲ ﺷﻮﺩ.
X And X=X
X XOR 0 =X ﺑﻪ ﺭﻭﺍﺑﻂ ﺯﻳﺮ ﺩﻗﺖ ﻛﻨﻴﺪ ﻭ ﺑﺮﺍﻱ ﺁﻧﻬﺎ ﺩﻟﻴﻞ ﺑﻴﺎﻭﺭﻳﺪ.
Not ( Not (X))=X
X OR NOT X= 255
X AND NOT X = 0
X XOR X =0
0≤X ≤ 255 ==è Not( X) = 255 –X NOT(0)=255-0=255
NOT(1)=255-1=254 Not(120)=255-120=135
42 OR 13 AND 20*2 ﻣﺜﺎﻝ :ﺣﺎﺻﻞ ﻋﺒﺎﺭﺕ ﺭﻭﺑﺮﻭ ﭼﻨﺪ ﺍﺳﺖ؟
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 17
ﻋﻤﻠﮕﺮﻫﺎﻱ SHLﻭ SHRﺑﻪ ﻣﻌﻨﺎﻱ ﺷﻴﻔﺖ ﺑﻪ ﭼﭗ ﻳﺎ ﺷﻴﻔﺖ ﺑﻪ ﺭﺍﺳﺖ ﻫﺴﺘﻨﺪ.
ﻣﺜﺎﻝ14 SHL 1 = ? :
14=(00001110)2
14 SHL 1 = (00011100)2=28
ﺍﻳﻦ ﻋﻤﻠﮕﺮﻫﺎ ﺩﺍﺭﺍﻱ ﺗﻘﺪﻡ ﻳﻜﺴﺎﻧﻲ ﻫﺴﺘﻨﺪ .ﺣﺎﺻﻞ ﺍﻳﻦ ﻋﻤﻠﮕﺮﻫﺎ Trueﻳﺎ ) Falseﺑﻮﻟﻴﻦ( ﺧﻮﺍﻫﺪ ﺑﻮﺩ .ﺍﺯ ﺍﻳﻦ ﻋﻤﻠﮕﺮﻫـﺎ ﺑﻴـﺸﺘﺮ ﺩﺭ ﺷـﺮﻃﻬﺎ
ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ.
12 > 14 è False 25 <> 25 è False FALSE > TRUE è False
18 >= 18 è True TRUE > FALSE è TRUE
ﺍﻳﻦ ﻋﻤﻠﮕﺮﻫﺎ ﺷﺒﻴﻪ ﻋﻤﻠﮕﺮﻫﺎﻱ ﻣﻨﻄﻘﻲ ﻫﺴﺘﻨﺪ ﺍﻣﺎ ﺣﺎﺻﻞ ﺍﻳﻦ ﻋﻤﻠﮕﺮﻫﺎ )ﺑﻮﻟﻲ( ﺑﻮﻟﻴﻦ ﺧﻮﺍﻫﺪ ﺑﻮﺩ.
ﺍﻭﻟﻮﻳﺖ ﻋﻤﻠﮕﺮﻫﺎﻱ ﺑﻮﻟﻲ ﺑﻴﺸﺘﺮ ﺍﺯ ﻋﻤﻠﮕﺮﻫﺎﻱ ﺭﻳﺎﺿﻲ ﻭ ﻋﻤﻠﮕﺮﻫﺎﻱ ﺭﺍﺑﻄﻪ ﺍﻳﻲ ﺍﺳﺖ.
ﺟﺪﻭﻝ ﻣﺮﺑﻮﻁ ﺑﻪ ﺍﻳﻦ ﻋﻤﻠﮕﺮﻫﺎ ﻣﺎﻧﻨﺪ ﺟﺪﻭﻝ ﻋﻤﻠﮕﺮﻫﺎﻱ ﻣﻨﻄﻘﻲ ﺍﺳﺖ ﺑﺎ ﺍﻳﻦ ﺗﻔﺎﻭﺕ ﻛﻪ ﺑﺠﺎﻱ ﺻﻔﺮ False،ﻭ ﺑﺠﺎﻱ ﻳﻚ True ،ﻗﺮﺍﺭ ﺩﻫﻴﺪ.
(12 > 8) XOR (9> 15) =è True (13 > 14) OR NOT( 10 > 15) ==è True
)(14 <> 19 AND ( 12 =13) ==èFalse
ﻣﻌﻤﻮﻻ ﺍﻳﻦ ﻋﻤﻠﮕﺮﻫﺎ ﺑﺮﺍﻱ ﺍﻳﺠﺎﺩ ﺷﺮﻃﻬﺎﻱ ﻣﺮﻛﺐ ﺑﺎ ﻋﻤﻠﮕﺮﻫﺎﻱ ﺭﺍﺑﻄﻪ ﺍﻳﻲ ﺑﻪ ﻛﺎﺭ ﻣﻲ ﺭﻭﻧﺪ.
) +ﻋﻤﻠﮕﺮ ﺗﺮﮐﯿﺐ)اﻟﺤﺎق(( ﻋﻤﻠﮕﺮﻫﺎي رﺷﺘﻪ اﯾﯽ:
-٣٨ﺍﮔﺮ aﻭ bﺍﺯ ﻧﻮﻉ ﺑﻮﻟﻲ ﺑﺎﺷﻨﺪ ،ﻣﻌﺎﺩﻝ ﻋﺒﺎﺭﺕ (a≤b)>bﻛﺪﺍﻡ ﺍﺳﺖ؟
ﺩ( )Not(a or b ﺝ(not(a) and b ﺏ(a or b ﺍﻟﻒ()a and not (b
X mod Y -٣٩ﺩﺭ ﭼﻪ ﺻﻮﺭﺕ ﺩﺭ ﻋﺒﺎﺭﺕ ﺭﻭﺑﺮﻭ ﻧﺘﻴﺠﻪ ﻋﻤﻞ ﻧﺎﻣﻌﻠﻮﻡ ﺧﻮﺍﻫﺪ ﺑﻮﺩ؟
ﺩ(X<Y ﺝ(X>Y ﺏ(X=0 ﺍﻟﻒ( Y=0
(A SHR 1) SHL 1 = A ﺗﺤﻘﻴﻖ :ﺁﻳﺎ ﺭﺍﺑﻄﻪ ﺭﻭﺑﺮﻭ ﻫﻤﻴﺸﻪ ﺻﺤﻴﺢ ﺍﺳﺖ؟
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 23
دﺳﺘﻮرات ورودي /ﺧﺮوﺟـﯽ :
ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺩﺳﺘﻮﺭﺍﺕ Readﻭ Readlnﺑﺮﺍﻱ ﺩﺭﻳﺎﻓﺖ ﺩﺍﺩﻩ ﻫﺎ ﺍﺯ ﻭﺭﻭﺩﻱ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﻛﺎﺭ ﻣﻲ ﺭﻭﻧﺪ.ﺍﻳـﻦ ﺩﻭ ﺩﺳـﺘﻮﺭ ﺑـﺎ ﻫـﻢ ﺩﺭ ﻳـﻚ
ﻣﻮﺭﺩ ﺍﺧﺘﻼﻑ ﺩﺍﺭﻧﺪ ﻛﻪ ﺑﺤﺚ ﺧﻮﺍﻫﺪ ﺷﺪ ﻭ ﺑﻘﻴﻪ ﻣﻮﺍﺭﺩ ﻭ ﻧﻜﺎﺕ ﺁﻧﻬﺎ ﺷﺒﻴﻪ ﻫﻢ ﺍﺳﺖ.
;)ﻣﺘﻐﻴﺮ(READ ;)ﻣﺘﻐﻴﺮ( READLNﻳﺎ
ﻧﻜﺘﻪ( ﺩﺍﺩﻩ ﻫﺎﻳﻲ ﻛﻪ ﺍﺯ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﻭﺍﺭﺩ ﻣﻲ ﺷﻮﺩ ﺑﺎﻳﺪ ﺑﺎ ﻧﻮﻉ ﻣﺘﻐﻴﺮﺫﻛﺮ ﺷﺪﻩ ﺩﺭ ﺩﺳﺘﻮﺭ ﻭﺭﻭﺩﻱ ﻣﻄﺎﺑﻘﺖ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ .ﺑﻪ ﻋﻨـﻮﺍﻥ ﻣﺜـﺎﻝ ﺍﮔـﺮ
ﻋﺪﺩ 12.9ﺍﺯ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﻭﺍﺭﺩ ﻣﻲ ﺷﻮﺩ ﻣﺘﻐﻴﺮ ﻣﻮﺟﻮﺩ ﺩﺭ ﺩﺳﺘﻮﺭ ﻭﺭﻭﺩﻱ ﻫﻢ ﺑﺎﻳﺪ ﺍﻋﺸﺎﺭﻱ ﺑﺎﺷﺪ .ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ﭘﻴﻐﺎﻡ ﺧﻄﺎ ﺻﺎﺩﺭ ﻣـﻲ
ﺷﻮﺩ ﻭ ﺑﺮﻧﺎﻣﻪ ﻗﻄﻊ ﻣﻲ ﺷﻮﺩ.
ﻧﻜﺘﻪ( ﺑﻪ ﺧﻄﺎﻫﺎﻳﻲ ﻛﻪ ﺩﺭ ﺣﻴﻦ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﺭﺥ ﻣﻲ ﺩﻫﺪ ﺧﻄﺎﻱ ﺯﻣﺎﻥ ﺍﺟﺮﺍ ﻣﻲ ﮔﻮﻳﻨﺪRun Time Error .
ﻣﺜﺎﻝ :ﺍﮔﺮ ﺩﺭ ﺍﺯﺍﻱ ﺩﺳﺘﻮﺭ ;) ) Read(A,B,Cﻣﺘﻐﻴﺮ Aﺍﺯ ﻧﻮﻉ ﺻﺤﻴﺢ ﻭ ﻣﺘﻐﻴﺮ Bﺍﺯ ﻧﻮﻉ ﻛﺎﺭﺍﻛﺘﺮﻱ ﻭ ﻣﺘﻐﻴﺮ Cﺍﺯ ﻧﻮﻉ ﺭﺷـﺘﻪ ﺍﻳـﻲ ﺍﺳـﺖ(
ﺩﺍﺩﻩ ﻫﺎﻱ 12 5 231ﻭﺍﺭﺩ ﺷﻮﺩ ﺁﻧﮕﺎﻩ ﻋﺪﺩ ١٢ﻭﺍﺭﺩ ﻣﺘﻐﻴﺮ Aﻭ ﻛﺎﺭﺍﻛﺘﺮ 5ﻭﺍﺭﺩ ﻣﺘﻐﻴﺮ Bﻭ ﺭﺷﺘﻪ ’ ’231ﺩﺭ ﻣﺘﻐﻴﺮ Cﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ.
ﻧﻜﺘﻪ( ﻫﻨﮕﺎﻡ ﻭﺍﺭﺩ ﻛﺮﺩﻥ ﺩﺍﺩﻩ ﻫﺎ ﻧﻤﻲ ﺗﻮﺍﻧﻴﺪ ﻳﻚ ﻋﺒﺎﺭﺕ ﺑﻨﻮﻳﺴﻴﺪ .ﻣﺜﺎﻝ ﺩﺭ ﺍﺯﺍﻱ ﺩﺳﺘﻮﺭ ) Readln(Aﺍﮔﺮ Aﺍﺯ ﻧﻮﻉ ﺍﻋـﺸﺎﺭﻱ ﺑﺎﺷـﺪ ﻧﻤـﻲ
ﺗﻮﺍﻧﻴﺪ 12+3ﺑﻨﻮﻳﺴﻴﺪ ﺍﻣﺎ ﻣﻲ ﺗﻮﺍﻥ 12.3E-1ﺭﺍ ﻭﺍﺭﺩ ﻛﺮﺩ) .ﻧﻤﺎﻳﺶ ﺍﻋﺪﺍﺩ ﺑﻪ ﺻﻮﺭﺕ ﻋﻠﻤﻲ(
;Const H=12
ﻧﻜﺘﻪ( ﺩﺭ ﺩﺳﺘﻮﺭﺍﺕ ﻭﺭﻭﺩﻱ ﻧﻤﻲ ﺗﻮﺍﻧﻴﺪ ﻋﺒﺎﺭﺕ ﺑﻨﻮﻳﺴﻴﺪ Read(A+1) .ﺧﻄﺎ ﺩﺍﺭﺩ.
;Z:Real=18.2
. ﻧﻜﺘﻪ(ﺍﺯ ﺛﺎﺑﺖ ﺑﺪﻭﻥ ﻧﻮﻉ ﻧﻴﺰ ﻧﻤﻲ ﺗﻮﺍﻧﻴﺪ ﺩﺭ ﺩﺳﺘﻮﺭﺍﺕ ﻭﺭﻭﺩﻱ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ .ﺍﻣﺎ ﺛﺎﺑﺖ ﺑﺎﻧﻮﻉ ﺧﻄﺎﻳﻲ ﻧﺪﺍﺭﺩ.
. ﻧﻜﺘﻪ(ﺍﮔﺮ ﺩﺳﺘﻮﺭ Readlnﺭﺍ ﺑﺪﻭﻥ ﺫﻛﺮ ﻣﺘﻐﻴﺮ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺑﻨﻮﻳﺴﻴﻢ ﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﺑﺮﻧﺎﻣﻪ
.
ﻣﻮﻗﺘﺎ ﻣﺘﻮﻗﻒ ﻣﻲ ﺷﻮﺩ ﺗﺎ ﻛﺎﺭﺑﺮ ﻛﻠﻴﺪ Enterﺭﺍ ﺑﺰﻧﺪ ﺗﺎ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﺍﺩﺍﻣﻪ ﭘﻴﺪﺍ ﻛﻨﺪ.
ﺧﻄﺎ ;)Read(H
;Readln
;)Read(Z ﺗﺤﻘﻴﻖ :ﺍﮔﺮ ﻣﺘﻐﻴﺮ Sﺍﺯ ﻧﻮﻉ ﺭﺷﺘﻪ ﺍﻳﻲ ﺑﺎﺷﺪ ﻭ ﺩﺭ ﺍﺯﺍﻱ ﺩﺳﺘﻮﺭ ;) Read(Sﻋﺒﺎﺭﺕ 25*2ﺭﺍ ﻭﺍﺭﺩ ﻛﻨﻴﻢ
ﭼﻪ ﺍﺗﻔﺎﻗﻲ ﻣﻲ ﺍﻓﺘﺪ؟
ﻧﻜﺘﻪ( ﺍﮔﺮ ﺩﺍﺩﻩ ﻫﺎﻱ ﻭﺭﻭﺩﻱ ﻛﻤﺘﺮ ﺍﺯ ﻣﺘﻐﻴﺮﻫﺎﻱ ﺫﻛﺮ ﺷﺪﻩ ﺩﺭ ﺩﺳﺘﻮﺭ readﻳﺎ readlnﺑﺎﺷﺪ ﺭﺍﻳﺎﻧﻪ ﺑﺮﺍﻱ ﺩﺭﻳﺎﻓﺖ ﺑﻘﻴﻪ ﺩﺍﺩﻩ ﻫـﺎ ﻣﻨﺘﻈـﺮ ﻣـﻲ
Read(a,b,c,d); ==è 12 13.5 ﻣﺎﻧﺪ.
ﻧﻜﺘﻪ( ﺍﮔﺮ ﺩﺍﺩﻩ ﻫﺎﻱ ﻭﺍﺭﺩ ﺷﺪﻩ ﺑﻴﺸﺘﺮ ﺍﺯ ﺗﻌﺪﺍﺩ ﻣﺘﻐﻴﺮﻫﺎﻱ ﺫﻛﺮﺷﺪﻩ ﺩﺭ ﺩﺳﺘﻮﺭ ﻭﺭﻭﺩﻱ Readlnﺑﻴﺸﺘﺮ ﺑﺎﺷﺪ ﺩﺍﺩﻩ ﻫﺎﻱ ﺍﺿـﺎﻓﻲ ﺣـﺬﻑ ﻣـﻲ
ﺷﻮﻧﺪ.
Readln(a,b); ===è 17 13 25 19ﺩﺍﺩﻩ ﻫﺎﻱ ١٧ﻭ ١٣ﺩﺭ aﻭ bﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩﻭ ﺑﻘﻴﻪ ﺣﺬﻑ ﻣﻲ ﺷﻮﻧﺪ.
ﻧﻜﺘﻪ(ﺍﮔﺮ ﺩﺍﺩﻩ ﻫﺎﻱ ﻭﺍﺭﺩ ﺷﺪﻩ ﺍﺯ ﺗﻌﺪﺍﺩ ﻣﺘﻐﻴﺮﻫﺎﻱ ﺫﻛﺮﺷﺪﻩ ﺩﺭ ﺩﺳﺘﻮﺭ ﻭﺭﻭﺩﻱ Readﺑﻴﺸﺘﺮ ﺑﺎﺷﺪ ﺩﺍﺩﻩ ﻫﺎﻱ ﺍﺿﺎﻓﻲ ﺣﺬﻑ ﻧﻤﻲ ﺷﻮﻧﺪ ﺑﻠﻜـﻪ
ﺩﺭ ﺣﺎﻓﻈﻪ ﻣﻲ ﻣﺎﻧﻨﺪ ﺗﺎ ﺩﺭ ﺩﺳﺘﻮﺭﺍﺕ Readﻳﺎ Readlnﺑﻌﺪﻱ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﻧﺪ.
Read(a,b); =è12 15 17 18 Read(a); ==è 45 32 21 70 30 ﻣﺜﺎﻝ:
…… …..
;)Read(C ;)Readln(K,M
…… …..
;)Readln(H,F ;)Read(Z
ﻧﻜﺘﻪ( ﺍﺯ ﻣﺘﻐﻴﺮ ﻧﻮﻉ Booleanﻧﻤﻲ ﺗﻮﺍﻥ ﺩﺭ ﺩﺳﺘﻮﺭﺍﺕ ﻭﺭﻭﺩﻱ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ .ﻣﺜﻼ ﺍﮔﺮ ﻣﺘﻐﻴﺮ Bﺍﺯ ﻧﻮﻉ Booleanﺑﺎﺷﺪ ﺩﺳﺘﻮﺭ
;) Read(Bﺧﻄﺎ ﺍﺳﺖ.
ﺑﺮﺍﻱ ﭼﺎﭖ ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮﻫﺎ ﻳﺎ ﻋﺒﺎﺭﺕ ﻳﺎ ﺛﺎﺑﺘﻬﺎ ﻣﻲ ﺗﻮﺍﻥ ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ Writeﻳﺎ Writelnﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ.
ﺗﻔﺎﻭﺕ ﺩﺳﺘﻮﺭ Writeﻭ Writelnﺩﺭ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺩﺳﺘﻮﺭ Writelnﭘﺲ ﺍﺯ ﭼﺎﭖ ﻣﻘﺎﺩﻳﺮ ﺩﺭ ﻣﺎﻧﻴﺘﻮﺭ ﻣﻜﺎﻥ ﻧﻤﺎ ﺑﻪ ﺍﺑﺘﺪﺍﻱ ﺳﻄﺮ ﺑﻌـﺪﻱ
ﻣﻨﺘﻘﻞ ﻣﻲ ﺷﻮﺩ .ﺍﻣﺎ ﺩﺭ ﺩﺳﺘﻮﺭ Writeﻣﻜﺎﻥ ﻧﻤﺎ ﺩﺭ ﻫﻤﺎﻥ ﺳﻄﺮ ﺑﺎﻗﻲ ﻣﻲ ﻣﺎﻧﺪ.ﺩﺭﻭﺍﻗﻊ ﻣﻲ ﺗـﻮﺍﻥ ﮔﻔـﺖ ﻛـﻪ ﺩﺭ ﺩﺳـﺘﻮﺭ Writelnﭘـﺲ ﺍﺯ
ﭼﺎﭖ ﻣﻘﺎﺩﻳﺮ ﺑﺮ ﺭﻭﻱ ﻣﺎﻧﻴﺘﻮﺭ ﺩﻭ ﻛﺎﺭﺍﻛﺘﺮ CRﻭ LFﺭﺍ ﺑﻪ ﻣﺎﻧﻴﺘﻮﺭ ﻣﻲ ﻓﺮﺳﺘﺪWriteln; == Write(#10#13);.
CRﺑﺎ ﻛﺪ ﺍﺳﻜﻲ ١٣ﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﻣﻜﺎﻥ ﻧﻤﺎ ) ﭼﺮﺍﻍ ﭼﺸﻤﻚ ﺯﻥ( ﺑﻪ ﺍﺑﺘﺪﺍﻱ ﺳﻄﺮ ﻓﻌﻠﻲ ﺑﻴﺎﻳﺪ ﻭ LFﺑﺎ ﻛﺪ ﺍﺳـﻜﻲ ١٠ﺑﺎﻋـﺚ ﻣـﻲ ﺷـﻮﺩ
ﻣﻜﺎﻥ ﻧﻤﺎ ﻳﻚ ﺳﻄﺮ ﭘﺎﺋﻴﻦ ﺑﻴﺎﻳﺪ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 24
ﻣﺜﺎﻝ( ﺩﺳﺘﻮﺭ;) Writeln(A,’ABC’,5*2+3ﻣﻘﺪﺍﺭ ﻣﻮﺟﻮﺩ ﺩﺭ ﻣﺘﻐﻴﺮ Aﺭﺍ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ ﻭ ﺑﻪ ﺩﻧﺒﺎﻝ ﺁﻥ ﺭﺷـﺘﻪ ABCﻭ ﻋـﺪﺩ ١٣ﺭﺍ
ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ ﻭ ﻳﻚ ﺳﻄﺮ ﭘﺎﺋﻴﻦ ﻣﻲ ﺭﻭﺩ.
ﻧﻜﺘﻪ( ﺩﺳﺘﻮﺭ ; Writelnﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﻣﻜﺎﻥ ﻧﻤﺎ ﻳﻚ ﺳﻄﺮ ﭘﺎﻳﻴﻦ ﺑﺮﻭﺩ.
ﻧﻜﺘﻪ( ﺩﺳﺘﻮﺭ ;) Write(False<Trueﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﻋﺒﺎﺭﺕ TRUEﺑﺮ ﺭﻭﻱ ﻣﺎﻧﻴﺘﻮﺭ ﻇﺎﻫﺮ ﺷﻮﺩ .ﺑﻨﺎﺑﺮﺍﻳﻦ ﻣﺘﻐﻴﺮﻫﺎﻱ ﺍﺯ ﻧـﻮﻉ ﺑـﻮﻟﻴﻦ
ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺩﺭ ﺩﺳﺘﻮﺭﺧﺮﻭﺟﻲ ﻗﺮﺍﺭ ﺩﺍﺩ.
ﻧﻜﺘﻪ(ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﺍﻋﺪﺍﺩ ﺍﻋﺸﺎﺭﻱ ﺭﺍ ﺑﻮﺳﻴﻠﻪ ﺩﺳﺘﻮﺭ Writeﻳﺎ Writelnﺩﺭ ﺧﺮﻭﺟﻲ ﭼﺎﭖ ﻣﻲ ﻛﻨﻴﻢ ﺍﻋـﺪﺍﺩ ﺑـﻪ ﺻـﻮﺭﺕ ﻋﻠﻤـﻲ ﭼـﺎﭖ ﻣـﻲ
ﺷﻮﻧﺪ .ﺩﺭ ﺍﺩﺍﻣﻪ ﺟﻬﺖ ﭼﺎﭖ ﺁﻧﻬﺎ ﺑﻪ ﺻﻮﺭﺕ ﻣﻤﻴﺰ ﺛﺎﺑﺖ ﺑﺤﺚ ﻣﻲ ﺷﻮﺩ.
ﺗﺤﻘﻴﻖ( ﺩﺳﺘﻮﺭ ;) Writeln(#7ﻭ ;) Write(#13#10ﭼﻪ ﭼﻴﺰ ﺭﺍ ﺩﺭ ﺧﺮﻭﺟﻲ ﭼﺎﭖ ﻣﻲ ﻛﻨﻨﺪ؟
ﻧﻜﺘﻪ( ﺩﺳﺘﻮﺭ ;)’’’’( Writeﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﻋﺒﺎﺭﺕ ’ ﺑﺮﺭﻭﻱ ﻣﺎﻧﻴﺘﻮﺭ ﭼﺎﭖ ﺷﻮﺩ .ﺩﺳﺘﻮﺭ ;)’’’ Writeln(’’’,,ﭼـﻪ ﭼﻴـﺰﻱ ﺭﺍ ﭼـﺎﭖ
ﻣﻲ ﻛﻨﺪ؟ ﺩﺳﺘﻮﺭ;)’’’( Writeﭼﻪ ﭼﻴﺰﻱ ﺭﺍ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ؟
ﻓﺮﻣﺖ ﺑﻨﺪي ﺧﺮوﺟﯽ:
ﺷﻤﺎ ﻣﻲ ﺗﻮﺍﻧﻴﺪ ﺩﺍﺩﻩ ﻫﺎﻱ ﺭﺍ ﻛﻪ ﻗﺮﺍﺭ ﺍﺳﺖ ﺩﺭ ﻣﺎﻧﻴﺘﻮﺭ ﭼﺎﭖ ﻛﻨﻴﺪ ﺑﺎ ﻳﻚ ﻓﺮﻣﺖ ﺧﺎﺻﻲ ﭼﺎﭖ ﻛﻨﻴﺪ.
ﻣﺜﺎﻝ :ﺩﺳﺘﻮﺭ ;)’ Writeln(’MAHDIﻋﺒﺎﺭﺕ MAHDIﺭﺍ ﺩﺭ ﺍﺑﺘﺪﺍﻱ ﺳﻄﺮ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ .ﺍﻣﺎ ﺩﺳﺘﻮﺭ ;)Writeln(’MAHDI’:8
ﻋﺒﺎﺭﺕ MAHDIٱٱٱ ﺭﺍ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ) .ٱ ﻧﺸﺎﻧﻪ ﺟﺎ ﺧﺎﻟﻲ ﺍﺳﺖ(.ﻋﺪﺩ ٨ﻧﺸﺎﻧﻪ ﻳﻚ ﺑﺎﻧﺪ)ﻣﻴﺪﺍﻥ( ﻫﺸﺘﺎﻳﻲ ﺍﺳـﺖ ﻛـﻪ ﻋﺒـﺎﺭﺕ MAHDIﺍﺯ
ﺳﻤﺖ ﺭﺍﺳﺖ ﺁﻥ ﭘﺮ ﻣﻲ ﺷﻮﺩ ﻭ ﺟﺎ ﻫﺎﻱ ﺧﺎﻟﻲ ﺁﻥ ﺑﺎﻗﻲ ﻣﻲ ﻣﺎﻧﺪ.
M A H D I
ﻣﺜﺎﻝ( ;) Write(124:7ﻋﺪﺩ ١٢٤ﺭﺍ ﺩﺭﻳﻚ ﺑﺎﻧﺪ ٧ﺗﺎﻳﻲ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺩﺭ ﻧﻬﺎﻳﺖ ٤ﺟﺎ ﺧﺎﻟﻲ ﺩﺭ ﺳﻤﺖ ﭼﭗ ﻋﺪﺩ ﻣﻲ ﻣﺎﻧﺪ.
ﺍﻋﺪﺍﺩ ﺻﺤﻴﺢ ﻭ ﺭﺷﺘﻪ ﻫﺎ ﺩﺍﺭﺍﻱ ﻳﻚ ﺑﺎﻧﺪ ﺑﺮﺍﻱ ﻓﺮﻣﺖ ﺑﻨﺪﻱ ﻫﺴﺘﻨﺪ.
ﻧﻜﺘﻪ( ﺍﮔﺮ ﺑﺎﻧﺪ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﺯ ﺗﻌﺪﺍﺩ ﻛﺎﺭﺍﻛﺘﺮﻱ ﻛﻪ ﭼﺎﭖ ﻣﻲ ﺷﻮﺩ ﻛﻤﺘﺮ ﺑﺎﺷﺪ ﺑﺎﻧﺪ ﺻﺮﻑ ﻧﻈﺮ ﻣﻲ ﺷﻮﺩ.
ﻣﺜﺎﻝ(ﺩﺳﺘﻮﺭ ;) Write(1258:3ﻋﺪﺩ ١٢٥٨ﺭﺍ ﺑﺪﻭﻥ ﺑﺎﻧﺪ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ ).ﺧﻄﺎﻳﻲ ﺭﺥ ﻧﻤﻲ ﺩﻫﺪ(.
ﺑﺮﺍﻱ ﺍﻋﺪﺍﺩ ﺍﻋﺸﺎﺭﻱ ﻧﻴﺰ ﻣﻲ ﺗﻮﺍﻥ ﭘﻬﻨﺎﻱ ﺑﺎﻧﺪ ﺗﻌﺮﻳﻒ ﻛﺮﺩ .ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﺍﻋﺪﺍﺩ ﺍﻋﺸﺎﺭﻱ ﺩﺭ ﺧﺮﻭﺟﻲ ﺑﻪ ﺻﻮﺭﺕ ﻣﻤﻴﺰ ﺛﺎﺑـﺖ ﻧﻤـﺎﻳﺶ ﺩﺍﺩﻩ
ﻣﻲ ﺷﻮﻧﺪ .ﺍﻋﺪﺍﺩ ﺍﻋﺸﺎﺭﻱ ﺩﺍﺭﺍﻱ ﺩﻭ ﭘﻬﻨﺎﻱ ﺑﺎﻧﺪ ﻫﺴﺘﻨﺪ .
ﻣﺜﺎﻝ( ;) Writeln(126.2314:10:2ﻛﻪ ﺑﺎﻧﺪ ﺍﻭﻟﻲ ) ﻋﺪﺩ (١٠ﻣﺮﺑﻮﻁ ﺑﻪ ﻛﻞ ﻋﺪﺩ ﺍﺳﺖ ﻭ ﺑﺎﻧﺪ ﺩﻭﻣﻲ ﻣﺮﺑﻮﻁ ﺑﻪ ﺗﻌﺪﺍﺩ ﺍﻋـﺸﺎﺭ ﺁﻥ ﺍﺳـﺖ.
ﺩﺳﺘﻮﺭ ﺫﻛﺮ ﺷﺪﻩ ﻋﺪﺩ 126.23ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ.
1 2 6 . 2 3
ﻧﻜﺘﻪ( ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﺍﻋﺸﺎﺭ ﺍﺿﺎﻓﻪ ﺩﻭﺭ ﺭﻳﺨﺘﻪ ﻣﻲ ﺷﻮﺩ ﻋﺪﺩ ﺩﺭ ﺍﻋﺸﺎﺭ ﺑﺎﻗﻲ ﻣﺎﻧﺪﻩ ﮔﺮﺩ ﻣﻲ ﺷﻮﺩ.
ﻣﺜﺎﻝ( ;) Writeln(125.4751:7:2ﺩﺭ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻋﺒﺎﺭﺕ 125.48ﭼﺎﭖ ﻣﻲ ﺷﻮﺩ.
ﻧﻜﺘﻪ( ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺩﺭ ﺑﺎﻧﺪ ﺍﻭﻟﻲ ﺗﻌﺪﺍﺩ ﺭﻗﻢ ﻫﺎ ﺍﺯ ﺗﻌﺪﺍﺩ ﺑﺎﻧﺪ ﺑﻴﺸﺘﺮ ﺑﺎﺷﺪ ﺑﺎﻧﺪ ﻣﺮﺑﻮﻁ ﺑﻪ ﻛﻞ ﻋﺪﺩ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻧﻤﻲ ﺷﻮﺩ.
Writeln(54.456:3:5); ==è 54.45600 Write(19.96:2:1); ==è 20.0
Writeln(19.152:0:1); ==è 19.2 Write(17.184:5:0); ==è 17
Write(19.512:1:0); ==è 20 Writeln(3.451:6:1); ==è 3.5
دﺳﺘﻮرات ﺷـﺮﻃﯽ:
ﺩﺳﺘﻮﺭﺍﺕ ﺷﺮﻃﻲ ﺩﺳﺘﻮﺭﺍﺗﻲ ﻫﺴﺘﻨﺪ ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺑﺮﺍﻱ ﺍﺟﺮﺍﻱ ﻳﻚ ﻳﺎ ﭼﻨﺪ ﺩﺳﺘﻮﺭ ﺩﻳﮕﺮ ﺷﺮﻁ ﻗﺮﺍﺭ ﻣﻲ ﺩﻫﺪ .ﺩﺳـﺘﻮﺭﺍﺕ ﺷـﺮﻃﻲ ﺑـﻪ ﺩﻭ
ﺩﺳﺘﻪ ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﻧﺪ - ١ﺩﺳﺘﻮﺭ - ٢ If-Thenﺩﺳﺘﻮﺭ Case
-1دﺳﺘﻮر : If-Then
If thenﺷﺮط)ﻫﺎ( ﺩﺳﺘﻮﺭ Ifﺧﻮﺩ ﺑﻪ ﺩﻭ ﺷﻜﻞ ﺍﺳﺖ If –then -١ﻭ If then Else -٢
ﺷﻜﻞ ﻛﻠﻲ ﺩﺳﺘﻮﺭ :If then
; ﯾﮏ دﺳﺘﻮر ﺳﺎده ﯾﺎ ﯾﮏ دﺳﺘﻮر ﺳﺎﺧﺘﺎري
ﺩﺭ ﺷﻜﻞ ﻛﻠﻲ ﺩﺳﺘﻮﺭ ﺭﻭﺑﺮﻭ ﺩﺳﺘﻮﺭ ﺳﺎﺩﻩ ﻳﺎ ﺩﺳﺘﻮﺭ ﺳﺎﺧﺘﺎﺭﻱ ﺩﺭﺻﻮﺭﺗﻲ ﺍﻧﺠﺎﻡ
ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺷﺮﻁ)ﻫﺎ( Trueﺑﺎﺷﺪ.
If A>10 then
;)’Write(’Ali ﻣﺜﺎﻝ :ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺩﺭﺻﻮﺭﺗﻲ ﺭﺷﺘﺔ Aliﭼﺎﭖ ﻣﻲ ﺷﻮﺩ ﻛﻪ A>10ﺑﺎﺷﺪ.
IF (Z<>0) Xor (H<=5) then ﻧﻜﺘﻪ( ﻓﻘﻂ ﻳﻚ ﺩﺳﺘﻮﺭ ﺑﻌﺪ ﺍﺯ thenﻣﺮﺑﻮﻁ ﺑﻪ IFﺍﺳﺖ ﻭ ﺍﻳﻦ ﺩﺳﺘﻮﺭﻣﻴﺘﻮﺍﻧﺪ
Begin ﺩﺳﺘﻮﺭ ﻣﺮﻛﺐ
ﺳﺎﺩﻩ ﻳﺎ ﻣﺮﻛﺐ ﻳﺎ ﺳﺎﺧﺘﺎﺭﻱ ﺑﺎﺷﺪ.
;)’*’(Writeln IF S<>’ALI’ then
;A:=A+4 ﻧﻜﺘﻪ( ﺩﺳﺘﻮﺭ Ifﺑﺎ ﺑﻼﻙ ﻣﺮﺑﻮﻁ ﺑﻪ ﺁﻥ
;)’*’(Write
;)Read(F ;)’Write(’M ﻛﻼ ﻳﻚ ﺩﺳﺘﻮﺭ ﻣﺤﺴﻮﺏ ﻣﻲ ﺷﻮﺩ.
;End
ﻧﻜﺘﻪ( ﺩﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﺑﻌﺪ ﺍﺯ Thenﻋﻼﻣﺖ ; ﻧﺒﺎﻳﺪ ﺑﺎﺷﺪ .ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﻋﻼﻣﺖ ; ﻗﺮﺍﺭ ﮔﻴﺮﺩ ﻫﻴﭻ ﺧﻄﺎﻳﻲ ﺭﺥ ﻧﻤﻲ ﺩﻫﺪ ﺑﻠﻜﻪ ﻋﻼﻣﺖ ; ﺑﻪ
ﻋﻨﻮﺍﻥ ﺗﻚ ﺩﺳﺘﻮﺭ Ifﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺧﻮﺍﻫﺪ ﺷﺪ).ﺧﻄﺎﻱ ﻣﻨﻄﻘﻲ(
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 26
; IF B>3 then ﻣﺜﺎﻝ( ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺩﺳﺘﻮﺭ ;)’*’( Writeﻣﺮﺑﻮﻁ ﺑﻪ IFﻧﻴﺴﺖ.
;)’*’(Write ﺯﻳﺮﺍ ﻋﻼﻣﺖ ; ﺑﻼﻙ IFﻣﺤﺴﻮﺏ ﻣﻲ ﺷﻮﺩ .ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺩﺳﺘﻮﺭ
;)’Write(’Z ;)’*’( Writeﺣﺘﻤﺎ ﻳﻚ ﺑﺎﺭ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ .ﺩﺳﺘﻮﺭ ;)’ Write(’Zﻧﻴﺰ ﻳﻚ ﺑﺎﺭ ﺍﺟﺮﺍ
;)’IF NOT D<4 then Writeln(’S ﻣﻲ ﺷﻮﺩ ﻭ ﻣﺮﺑﻮﻁ ﺑﻪ IFﻧﻴﺴﺖ .ﺍﻣﺎ ﺩﺳﺘﻮﺭ ;)’ Writeln(’Sﻣﺮﺑﻮﻁ ﺑﻪ IFﺩﻭﻡ ﺍﺳﺖ
ﻭ ﺩﺭﺻﻮﺭﺗﻲ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﻛﻪ NOT D<4ﺩﺭﺳﺖ ﺑﺎﺷﺪ D<4).ﻧﺒﺎﺷﺪ(
;Label AB
Var ﺗﺤﻘﻴﻖ( ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﭼﻪ ﺧﺮﻭﺟﻲ ﺩﺍﺭﺩ؟
;H:Shortint
ﺏ( ﺍﻋﺪﺍﺩ ﺯﻭﺝ ﺩﻭ ﺭﻗﻤﻲ ﺍﻟﻒ( ﺍﻋﺪﺍﺩ ﺯﻭﺝ ﺍﺯ 0ﺗﺎ 101
Begin
;H:=0 ﺝ( ﺍﻋﺪﺍﺩ ﺯﻭﺝ ﻛﻮﭼﻜﺘﺮ ﺍﺯ 100ﻭ ﺑﺰﺭﮔﺘﺮ ﻣﺴﺎﻭﻱ 0
;)AB: Writeln(H ﺩ( ﺍﻋﺪﺍﺩ ﻓﺮﺩ ﻛﻮﭼﻜﺘﺮ ﺍﺯ 100
;H:=H+2
IF H<100 then
;Goto AB ﻧﻜﺘﻪ( ﺩﺭ ﺷﺮﻁ ﺩﺳﺘﻮﺭ IFﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ﻋﺒﺎﺭﺕ ﺑﻮﻟﻲ ﻗﺮﺍﺭ ﺩﺍﺩ ﺗﺎ ﺷﺮﻃﻬﺎ ﺑﺎﻫﻢ ﺗﺮﻛﻴﺐ ﺷﻮﻧﺪ.
End. ﻧﻜﺘﻪ( ﻛﻠﻤﺎﺕ IFﻭ THENﻭ ELSEﻛﻠﻤﺎﺕ ﺭﺯﺭﻭ ﺷﺪﻩ )ﺫﺧﻴﺮﻩ ﺷﺪﻩ(ﻫﺴﺘﻨﺪ.
ﺩﺭ ﻣﺜــﺎﻝ ﺑــﺎﻻ ﺩﺭ ﺻــﻮﺭﺗﻲ ﻛــﻪ A>8ﺩﺭﺳــﺖ ﺑﺎﺷــﺪ ﺩﺳــﺘﻮﺭ )’ Writeln(’ALIﺍﻧﺠــﺎﻡ ﻣــﻲ ﺷــﻮﺩ ﻭ ﺩﺭ ﻏﻴــﺮ ﺍﻳﻨــﺼﻮﺭﺕ ﺩﺳــﺘﻮﺭ
;)’ Writeln(’REZAﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ .ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﺍﺯ ﺍﻳـﻦ ﺩﻭ ﺩﺳـﺘﻮﺭ ﻓﻘـﻂ ﺍﺯ ﺁﻧﻬـﺎ ﺍﻧﺠـﺎﻡ ﺧﻮﺍﻫـﺪ ﺷـﺪ .ﺩﺳـﺘﻮﺭ ;F:=F+1
ﻣﺮﺑﺮﻭﻁ ﺑﻪ ﺩﺳﺘﻮﺭ IFﻧﻴﺴﺖ ﻭ ﺑﻌﺪ ﺍﺯ ﺍﺟﺮﺍﻱ ﺩﺳﺘﻮﺭ IF then Elseﺍﻧﺠﺎﻡ ﺧﻮﺍﻫﺪ ﺷﺪ.
IF (M=10) OR (H<=20) then ﻣﺜﺎﻝ :ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺩﺳﺘﻮﺭ ﻣﺮﻛﺐ ﺑﻼﻙ IFﺍﺳﺖ ﻭ ﺩﺳﺘﻮﺭ;)’Writeln(’AMIN
Begin
;)’*’(Writeln ﻣﺮﺑﻮﻁ ﺑﻪ ﺑﻼﻙ Elseﺍﺳﺖ.
;Z:=12 ﻧﻜﺘﻪ( ﺩﺳﺘﻮﺭ ﻗﺒﻞ ﺍﺯ Elseﻋﻼﻣﺖ ; ﻧﻤﻲ ﺧﻮﺍﻫﺪ ﺩﺭ ﺻﻮﺭﺕ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻋﻼﻣﺖ ; ﻗﺒﻞ ﺍﺯ
End Elseﭘﻴﻐﺎﻡ ﺧﻄﺎ ﺩﺭ ﺯﻣﺎﻥ ﺗﺮﺟﻤﻪ ﺭﺥ ﻣﻲ ﺩﻫﺪ .ﭼﺮﺍ؟
Else
;)’Writeln(’AMIN
ﺗﺤﻘﻴﻖ( ﻓﻠﻮﭼﺎﺭﺕ ﻣﺮﺑﻮﻁ ﺑﻪ ﺩﺳﺘﻮﺭﻫﺎﻱ IF –Thenﻭ IF then Elseﺭﺍ ﺭﺳﻢ ﻛﻨﻴﺪ.
;Program ODD_EVEN ﻣﺜﺎﻝ(ﺑﺮﻧﺎﻣﻪ ﺍﻱ ﺑﻨﻮﻳﺴﻴﺪ ﻛـﻪ ﻳـﻚ ﻋـﺪﺩ ﺍﺯ ﻭﺭﻭﺩﻱ ﺩﺭﻳﺎﻓـﺖ ﻛﻨـﺪ ﻭ ﺯﻭﺝ ﻭ ﻓﺮﺩﺑـﻮﺩﻥ ﺁﻥ ﺭﺍ
Var
;K:integer ﻣﺸﺨﺺ ﻛﻨﺪ؟
Begin
;)READLN(K ﻧﻜﺘﻪ( ﻛﻠﻤﺔ Elseﺑﺨﺸﻲ ﺍﺯ ﺩﺳﺘﻮﺭ IFﺍﺳﺖ ﻭ ﺑﻪ ﺗﻨﻬﺎﻳﻲ ﺑﻪ ﻛﺎﺭ ﻧﻤﻲ ﺭﻭﺩ.
If (K MOD 2) =0 then
)’Wrietln(’EVEN
Else
;)’Writeln(’ODD
End.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 27
IFﻫﺎي ﺗﻮ در ﺗﻮ)ﻣﺘﺪاﺧﻞ( :
ﻫﻤﺎﻧﻄﻮﺭ ﺩﺭ ﺷﻜﻞ ﻛﻠﻲ ﺩﺳﺘﻮﺭ IFﻣﺸﺨﺺ ﺍﺳﺖ ﺗﻚ ﺩﺳﺘﻮﺭ ﻣﺮﺑﻮﻁ ﺑﻪ IFﻣﻲ ﺗﻮﺍﻧﺪ ﻳﻚ ﺩﺳﺘﻮﺭ ﺳﺎﺧﺘﺎﺭﻱ ﺩﻳﮕﺮ ﺍﺯ ﺟﻤﻠـﻪ ﻳـﻚ IFﺩﻳﮕـﺮ
ﺑﺎﺷﺪ.
IF B then }{ B:Boolean
IF C>15 then ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ IFﺩﻭﻣﻲ ﺑﻼﻙ IFﺍﻭﻟﻲ ﺍﺳﺖ .ﺩﺭﺻﻮﺭﺗﻲ ﻛﻪ ﻣﺘﻐﻴﺮ ﺑﻮﻟﻴﻦB
;)’Writeln(’ALI TRUEﺑﺎﺷﺪ IFﺩﻭﻡ ﺑﺮﺭﺳﻲ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺩﺭ ﺻﻮﺭﺕ ﺩﺭﺳﺖ ﺑﻮﺩﻥ C>15
ﺭﺷﺘﺔ ALIﭼﺎﭖ ﻣﻲ ﺷﻮﺩ.
IF (B) AND ( C > 15) then ﺩﺭ ﻣﺜﺎﻝ ﺑﺎﻻ ﻣﻲ ﺗﻮﺍﻥ ﻫﺮ ﺩﻭ IFﺭﺍ ﺩﺭﻳﻚ IFﺍﺩﻏﺎﻡ ﻛﺮﺩ.
;)’WRITELN(’ALI ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﺩﺳﺘﻮﺭ ﺭﻭﺑﺮﻭ ﻭ ﻣﺜﺎﻝ ﺑﺎﻻ ﻳﻚ ﻛﺎﺭ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﻨﺪ ﻭ ﻣﻌﺎﺩﻟﻨﺪ.
ﻣﺜﺎﻝ :
IF K>10 then
IF H=5 then ﺑﺎﻳﺪ ﻣﺸﺨﺺ ﻛﻨﻴﺪ ﻛﻪ ﻫﺮ Elseﻣﺮﺑﻮﻁ ﺑﻪ ﻛﺪﺍﻡ IFﺍﺳﺖ.
)’Writeln(’$ ’*’(K>10) = False è
Else ’ (H=5)=True è ’$ﻭ (K>10) = True
)’Writeln(’% ’ (H=5)=False è ’%ﻭ (K>10)=True
Else
;)’*’(Writeln
ﻧﻮﻉ ﺩﺍﺩﻩ ﺍﻳﻲ ﻛﻪ ﻗﺎﺑﻞ ﺷﻤﺎﺭﺵ ﺑﺎﺷﺪ ﺭﺍ ﺍﺳﻜﺎﻟﺮ ﻣﻲ ﮔﻮﻳﻨﺪ .ﺩﺍﺩﻩ ﻫﺎﻱ ﺍﺳﻜﺎﻟﺮ ﻣﺎﻧﻨـﺪ :ﺍﻋـﺪﺍﺩ ﺻـﺤﻴﺢ ) ﺑـﻪ ﻏﻴـﺮ ﺍﺯ – (Compﻛـﺎﺭﺍﻛﺘﺮﻱ–
ﺑﻮﻟﻴﻦ
ﻛﺎﺭﺍﻛﺘﺮﻫﺎ ﻗﺎﺑﻞ ﺷﻤﺎﺭﺵ ﻫﺴﺘﻨﺪ ﻳﻌﻨﻲ ﺑﻌﺪ ﺍﺯ ﺣﺮﻑ ’ ’Aﺣﺮﻑ ’ ’Bﺍﺳﺖ ﻭ ﻗﺒﻞ ﺍﺯ ﺣﺮﻑ’ ’Aﻧﻴﺰﻛﺎﺭﺍﻛﺘﺮ ’@’ ﺍﺳﺖ ) .ﺟﺪﻭﻝ ﻛﺪ ﺍﺳﻜﻲ(
ﺍﻋﺪﺍﺩ ﺍﻋﺸﺎﺭﻱ ﻭ ﺭﺷﺘﻪ ﻫﺎ ﺍﺳﻜﺎﻟﺮ ﻧﻴﺴﺘﻨﺪ.
ﻧﻜﺘﻪ( ﺍﮔﺮ ﺩﺭ ﺩﺳﺘﻮﺭ Caseﻋﺒﺎﺭﺕ Elseﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ ﻣﻤﻜﻦ ﺍﺳﺖ ﻫﻴﭽﻜﺪﺍﻡ ﺍﺯ ﺣﺎﻟﺖ ﻫﺎ ﺍﻧﺘﺨﺎﺏ ﻧﺸﻮﺩ.
ﻧﻜﺘﻪ( ﻣﻘﺎﺩﻳﺮ ﺩﺭ ﺩﺳﺘﻮﺭ Caseﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺗﻜﺮﺍﺭﻱ ﺑﺎﺷﻨﺪ ﺍﻣﺎ ﺩﺭ ﻫﻨﮕﺎﻡ ﺑﺮﺭﺳﻲ ﻣﻘﺎﺩﻳﺮ ﺍﻭﻟﻴﻦ ﺣﺎﻟﺖ ﻛﻪ ﺍﻧﺘﺨﺎﺏ ﺷﻮﺩ ﺍﺟﺮﺍ ﻣـﻲ ﺷـﻮﺩ ﻭ ﺑﻘﻴـﻪ
ﺣﺎﻟﺖ ﻫﺎ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻧﻤﻲ ﺷﻮﻧﺪ.
ﺗﺤﻘﻴﻖ( ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﭼﻨﺪ ﺧﻄﺎ ﺩﺍﺩ؟)ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﭘﺎﺳﻜﺎﻝ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺍﺳﺖ(
;Program H
Var
;H:Integer
Const
;X:20
Begin
;Readln(H); X:=X+1
Case H/10 OF
1,3:
;)Writeln(X
;)’2,1:Writeln(’F
;H:=12
;)’9..5:Writeln(’X
;End
;End
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 29
ﺗﺴﺖ :
-٥٣ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺩﺭ ﻣﻮﺭﺩ ﻣﺘﻐﻴﺮ Aﻛﻪ ﺍﺯ ﻧﻮﻉ Booleanﻣﻲ ﺑﺎﺷﺪ ﻧﺎﺩﺭﺳﺖ ﺍﺳﺖ؟
ﺩ( )READ(A ﺝ( ;A:=False ﺏ( ;A:=TRUE ﺍﻟﻒ( )WRITE(A
-٥٤ﺍﮔﺮ A=68.951ﺑﺎﺷﺪ ﺣﺎﺻﻞ ﺍﺟﺮﺍﻱ ﺩﺳﺘﻮﺭ ) WRITE(A:5:1ﻛﺪﺍﻡ ﺍﺳﺖ؟
ﺩ(69. 1 ﺝ( 69. 0 ﺏ( 68. 96 ﺍﻟﻒ( 68. 9
-٥٥ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
;Var D:real ﺝ(OK ﺏ(Not BAD ﺍﻟﻒ(BAD
Begin ﺩ( ﺩﺭ ﺯﻣﺎﻥ ﺗﺮﺟﻤﻪ ﭘﻴﻐﺎﻡ ﺧﻄﺎ ﻣﻲ ﺩﻫﺪ.
;D:=6 XOR 0
Case D of
;)’1. . 7: writeln(‘BAD
;)’8. . 12 : Writeln(‘NOT BAD
;)’13. . 20 : writeln(‘OK
;end
end.
Var
;R, N:Integer
Begin
;)Readln(N
While N> 0 DO
Begin
;R:=N Mod 10
;)Writeln(R
;N:=N DIV 10
;End
End.
ﺩ(5 ﺝ(4 ﺏ( 1 ﻣﺜﺎﻝ( ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﺩﺳﺘﻮﺭ ;) Writeln(Xﭼﻨﺪ ﺑﺎﺭ ﺍﺟﺮﺍ ﺧﻮﺍﻫﺪ ﺷﺪ؟ ﺍﻟﻒ( 0
;X:=1
While X<5 Do
Begin
;)Writeln(X
;X:=X+1
;End
ﺍﮔﺮ ﺷﺮﻁ)ﻋﺒﺎﺭﺕ ﺑﻮﻟﻲ( ﻣﺮﺑﻮﻁ ﺑﻪ Whileﻫﻤﻴﺸﻪ Trueﺑﺎﺷﺪ ﻭ ﺍﺻﻼ Falseﻧﺸﻮﺩ ﺁﻧﮕـﺎﻩ ﺣﻠﻘـﻪ Whileﻫﺮﮔـﺰ ﭘﺎﻳـﺎﻥ ﻧﻤـﻲ ﻳﺎﺑـﺪ ﻭ ﺩﺭ
ﻧﺘﻴﺠﻪ ﻳﻚ ﺣﻠﻘﻪ ﺑﻲ ﻧﻬﺎﻳﺖ ﺑﺎﺭ ﺍﺳﺖ ).ﺑﻲ ﻧﻬﺎﻳﺖ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ( ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﻛﺎﻣﭙﻴﻮﺗﺮ ﺩﺭ ﻳﻚ ﻭﺿﻌﻴﺖ ﺛﺎﺑﺖ ﻣﻲ ﻣﺎﻧﺪ.
ﻋﺒﺎﺭﺕ ﺑﻮﻟﻲ)ﺷﺮﻁ( ﻣﺮﺑﻮﻁ ﺑﻪ ﺣﻠﻘﺔ Whileﺑﺎﻳﺪ ﻃﻮﺭﻱ ﺗﻨﻈﻴﻢ ﺷﻮﺩ ﻛﻪ ﺯﻣﺎﻧﻲ Falseﺷﻮﺩ.
ﻧﻜﺘﻪ( ﺍﮔﺮ ﺑﻌﺪ ﺍﺯ ﻛﻠﻤﺔ ﺭﺯﺭﻭ ﺷﺪﺓ Doﻋﻼﻣﺖ ; ﻗﺮﺍﺭ ﮔﻴﺮﺩ ﺁﻧﮕﺎﻩ ﻋﻼﻣﺖ ; ﺑﻪ ﻋﻨﻮﺍﻥ ﺩﺳﺘﻮﺭ)ﺑﻼﻙ( whileﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣـﻲ ﺷـﻮﺩ .ﺩﺭ
ﺍﻳﻦ ﺻﻮﺭﺕ ﺩﻭ ﺣﺎﻟﺖ ﺭﺥ ﻣﻲ ﺩﻫﺪ:
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 32
- ١ﺷﺮﻁ Whileﺩﺭﺳﺖ ﺑﺎﺷﺪ ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻳﻚ ﺣﻠﻘﻪ ﺑﻲ ﻧﻬﺎﻳﺖ ﺍﻳﺠﺎﺩ ﺷـﺪﻩ ﺍﺳـﺖ - ٢ .ﺷـﺮﻁ Whileﻧﺎﺩﺭﺳـﺖ ﺑﺎﺷـﺪ ﻛـﻪ ﺣﻠﻘـﻪ
whileﺍﺻﻼ ﺗﻜﺮﺍﺭ ﻧﻤﻲ ﺷﻮﺩ).ﺧﻄﺎﻱ ﻣﻨﻄﻘﻲ(
ﻣﺜﺎﻝ( ﻣﺜﺎﻝ ﻗﺒﻞ ﺭﺍ ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺑﻌﺪ ﺍﺯ Doﻋﻼﻣﺖ ; ﻗﺮﺍﺭ ﮔﺮﻓﺘﻪ ﺷﺪﻩ ﺍﺳﺖ ﺣﻞ ﻛﻨﻴﺪ.
;K:=10; S:=7 ﻣﺜﺎﻝ(ﺩﺳﺘﻮﺭﺍﺕ ; K:=K-1ﻭ ; S:=S-1ﻫﺮ ﻛﺪﺍﻡ ﭼﻨﺪ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﻧﺪ؟
While K<>10 Do
;K:=K-1
;While S>0 Do
;S:=S-1 ﻧﻜﺘﻪ( ﺯﻣﺎﻧﻲ ﺍﺯ ﺣﻠﻘﻪ whileﺑﺮﺍﻱ ﺳﺎﺧﺖ ﺣﻠﻘﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ﺣﻠﻘﻪ
ﻣﺸﺨﺺ ﻧﺒﺎﺷﺪ.
ﻣﺜﺎﻝ ( ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﯾﮏ ﺟﻤﻠﻪ را از ورودي درﯾﺎﻓﺖ ﮐﺮده ﺗﻌﺪاد ﮐﺎراﮐﺘﺮ tو Tرا ﺑﺸﻤﺎرد ).ﺟﻤﻠﻪ ﺑﻪ ﺻﻔﺮ ﺧﺘﻢ ﻣﯽ ﺷﻮد(
var
;count:integer
;ch:char
begin
;)'writeln('Please Enter Statement
;)read(ch
while ch<>'0' do
begin
if (ch='t') or (ch='T') then
;count:=count+1
;)readln(ch
;end
;)writeln('Number of characters= ',count
;readln
end.
ﻣﺜﺎل( ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ Nﻋﺪد از ﮐﺎرﺑﺮ درﯾﺎﻓﺖ ﮐﻨﺪ و ﻣﺎﮐﺰﯾﻤﻢ و ﻣﯿﻨﯿﻤﻢ اﯾﻦ اﻋﺪاد را ﭼﺎپ ﮐﻨـﺪ).آﺧـﺮﯾﻦ ﻋـﺪد ورودي
ﺻﻔﺮ اﺳﺖ(.
var
;n,max,min:integer
begin
;)readln(n
;max:=n
;min:=n
while n<>0 do
begin
;)readln(n
if (n<>0) and (n>max) then
;max:=n
if (n<>0) and (n<min) then
;min:=n
;end
;)writeln('max=',max, ' min=',min
end.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 33
- 2دﺳﺘﻮر : Repeat- Until
ﺷﻜﻞ ﻛﻠﻲ ﺩﺳﺘﻮﺭ:
Repeat
; دﺳﺘﻮر ﯾﺎ دﺳﺘﻮرﻫﺎ
Until ; ﻋﺒﺎرت ﺑﻮﻟﯽ
ﺩﺭ ﺍﻳﻦ ﺣﻠﻘﻪ ﺍﺑﺘﺪﺍ ﺩﺳﺘﻮﺭ ﻳﺎ ﺩﺳﺘﻮﺭﻫﺎ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﻧﺪ ﺳﭙﺲ ﻋﺒﺎﺭﺕ ﺑﻮﻟﻲ )ﺷﺮﻁ( ﺑﺮﺭﺳﻲ ﻣﻲ ﺷـﻮﺩ ﺍﮔـﺮ ﻣﻘـﺪﺍﺭ ﺁﻥ FALSEﺑﺎﺷـﺪ ﺁﻧﮕـﺎﻩ
ﺩﻭﺑﺎﺭﻩ ﺩﺳﺘﻮﺭ ﻳﺎ ﺩﺳﺘﻮﺭﻫﺎ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﻧﺪ .ﺍﻳﻦ ﻋﻤﻞ ﺗﺎ ﺯﻣﺎﻧﻲ ﻛﻪ ﺷﺮﻁ ﺑﺮﺍﺑﺮ Falseﺑﺎﺷﺪ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ .ﺷﺮﻁ ﺧﺮﻭﺟﻲ ﺍﺯ ﺍﻳﻦ ﺣﻠﻘـﻪ ﺍﻳـﻦ
ﺍﺳﺖ ﻛﻪ ﺷﺮﻁ Trueﺷﻮﺩ.
ﻣﺜﺎﻝ :
;A:=2
ﻓﻠﻮﭼﺎﺭﺕ ﻣﺮﺑﻮﻁ ﺑﻪ ﺣﻠﻘﺔ :Repeat
Repeat
;)Writeln(A ﻧﻜﺘﻪ( ﺑﺮﺭﺳﻲ ﺷﺮﻁ ﺣﻠﻘﻪ Repeatﺩﺭ ﺍﻧﺘﻬﺎﻱ ﺣﻠﻘﻪ
;A:=A+2 ﺻﻮﺭﺕ ﻣﻲ ﮔﻴﺮﺩ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺣﺘﻤﺎ ﻳﻚ ﺑﺎﺭ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ
;Until A>10
;)’*’(Writeln ﺍﻣﺎ ﺷﺮﻁ ﺣﻠﻘﺔ Whileﺩﺭ ﺍﺑﺘﺪﺍﻱ ﺣﻠﻘﻪ ﺑﺮﺭﺳﻲ ﻣﻲ ﺷﻮﺩ
ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﻣﻤﻜﻦ ﺍﺳﺖ ﻳﻚ ﺑﺎﺭ ﻫﻢ ﺍﻧﺠﺎﻡ ﻧﺸﻮﺩ.
ﻧﻜﺘﻪ( ﺣﻠﻘﻪ Whileﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺷﺮﻁ Falseﺷﻮﺩ
ﺣﻠﻘﻪ ﺑﻪ ﺍﺗﻤﺎﻡ ﻣﻲ ﺭﺳﺪ ﺍﻣﺎ ﺩﺭ ﺣﻠﻘﺔ Repeatﺍﮔﺮ ﺷﺮﻁ
Trueﺷﻮﺩ ﺣﻠﻘﻪ ﺑﻪ ﺍﺗﻤﺎﻡ ﻣﻲ ﺭﺳﺪ.
ﻧﻜﺘﻪ( ﻛﻠﻤﺔ ﺭﺯﺭﻭ ﺷﺪﺓ Untilﭘﺎﻳﺎﻥ ﺣﻠﻘﻪ ﺭﺍ ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻧﻴـﺎﺯﻱ ﺑـﻪ Beginﻭ Endﻧـﺪﺍﺭﺩ .ﻳﻌﻨـﻲ ﺍﮔـﺮ
ﺗﻌﺪﺍﺩ ﺩﺳﺘﻮﺭﺍﺕ ﺩﺭ ﺑﺪﻧﺔ ﺣﻠﻘﻪ ﻫﻢ ﺑﻴﺶ ﺍﺯ ﻳﻜﻲ ﺑﺎﺷﺪ ﻧﻴﺎﺯﻱ ﺑﻪ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﺳﺘﻮﺭ ﻣﺮﻛـﺐ ﻧﻴـﺴﺖ .ﺑﺪﻧـﻪ ﺣﻠﻘـﻪ ﺍﺯ ﺧـﻂ Repeatﺗـﺎ ﺧـﻂ
Untilﺍﺳﺖ.
ﻧﻜﺘﻪ( ﻛﻠﻤﺎﺕ DOﻭ Whileﻭ repeatﻭ Untilﺫﺧﻴﺮﻩ )ﺭﺯﺭﻭ(ﺷﺪﻩ ﻫﺴﺘﻨﺪ.
ﻧﻜﺘﻪ( ﺍﮔﺮ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺷﺮﻁ ﺣﻠﻘﺔ Repeatﺭﺍ ﻃﻮﺭﻱ ﺗﻨﻈﻴﻢ ﻛﻨﺪ ﻛﻪ ﻫﺮﮔﺰ Trueﻧﺸﻮﺩ ﻳﻚ ﺣﻠﻘﻪ ﺑﻲ ﻧﻬﺎﻳﺖ ﺍﻳﺠﺎﺩ ﻣﻲ ﺷﻮﺩ.
ﻣﺜﺎﻝ( ﺩﺭ ﻣﺜﺎﻝ ﺯﻳﺮ ﺷﺮﻁ ﺣﻠﻘﻪ ﻫﻤﻴﺸﻪ Flaseﺍﺳﺖ ﻭ ﻫﺮﮔﺰ ﺍﺯ ﺣﻠﻘﻪ ﺧﺎﺭﺝ ﻧﻤﻲ ﺷﻮﻳﻢ.ﺣﻠﻘﻪ ﺑﻲ ﻧﻬﺎﻳﺖ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ.
Repeat
;)’*’(Writeln
;)’Writeln(’ALI
;Until False
ﻧﻜﺘﻪ( ﺣﻠﻘﻪ Reapetﺯﻣﺎﻧﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺑﺨﻮﺍﻫﻴﻢ ﺑﺪﻧﻪ ﺣﻠﻘﻪ ﺣﺪﺍﻗﻞ ﻳﻚ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﺷﻮﺩ ﻭ ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ﻣﺸﺨﺺ ﻧﺒﺎﺷﺪ .
ﺗﺴﺖ(ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
;Var X:Integer ; Y:Boolean
ﺏ( ﺍﻋﺪﺍﺩﻓﺮﺩ ١ﺗﺎ ٩ ﺍﻟﻒ( ﺍﻋﺪﺍﺩ ﺯﻭﺝ ﻛﻮﭼﻜﺘﺮ ﺍﺯ 10
Begin
;X:=1 ﺩ( Run Time Error ﺝ( ﻋﺪﺩ ١
Repeat
;)Write(X:3
;X:=X+2
;Y:=X=11
;Until Y
End.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 34
;Readln(X); S:=0 ﻣﺜﺎﻝ( ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﭼﻴﺴﺖ؟
Repeat ﺏ(ﻋﺪﺩﻱ ﻭﺭﻭﺩﻱ ﺍﻟﻒ( ﻣﻌﻜﻮﺱ ﻋﺪﺩ ﻭﺭﻭﺩﻱ
;R:=X MOD 10 ﺩ( ﺭﻗﻢ ﻳﻜﺎﻥ ﻋﺪﺩ ﻭﺭﻭﺩﻱ ﺝ( ﻣﺠﻤﻮﻉ ﺍﺭﻗﺎﻡ ﻋﺪﺩ ﻭﺭﻭﺩﻱ
;X:=X Div 10
;S:=S+R
Until X<>0
;)Writeln(S
ﻣﺜﺎل ( ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﯾﮏ ﻋﺪد درﯾﺎﻓﺖ ﮐﻨﺪ و ﭼﺎپ ﮐﻨﺪ ﮐﻪ اﯾﻦ ﻋﺪد اول اﺳﺖ ﯾﺎ ﻣﺮﮐﺐ.
Var
;c,n,t,r:integer
begin
;)readln(n
;t:=0; c:=1
repeat
;r:=n mod c
if r=0 then
;t:=t+1
;c:=c+1
;until c>n
if t=2 then
)'writeln('avval
else
;)'writeln('morakab
end.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 35
- 3دﺳﺘﻮر : FOR
ﺷﻜﻞ ﻛﻠﻲ ﺩﺳﺘﻮﺭ : For
ﻣﻘﺪار اوﻟﯿﻪ =:ﻣﺘﻐﯿﺮاﺳﮑﺎﻟﺮ FOR DownToﯾﺎ TO DOﻣﻘﺪار ﻧﻬﺎﯾﯽ
; ﯾﮏ دﺳﺘﻮر ﺳﺎده ﯾﺎ ﺳﺎﺧﺘﺎري
ﻣﺜﺎﻝ( ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺩﺳﺘﻮﺭ ;)’*’( Writeﻫﺸﺖ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ.
For A:=2 TO 9 Do ﺍﺑﺘﺪﺍ A=2ﻣﻲ ﺷﻮﺩ ﻭ ﺩﺳﺘﻮﺭ )’*’( Writeﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﺳﭙﺲ A=3
;)’*’(Write
;)’Write(’AMIN ﻣﻴﺸﻮﺩ ﻭ ﺍﻳﻦ ﻛﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ ﺗﺎ ﺯﻣﺎﻧﻲ ﻛﻪ A=9ﺷﻮﺩ .ﺍﻟﺒﺘﻪ ﺑﺮﺍﻱ A=9ﻧﻴﺰ
ﺩﺳﺘﻮﺭ )’*’( Writeﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ.
ﺩﺳﺘﻮﺭ ;)’ Write(’AMINﻣﺮﺑﻮﻁ ﺑﻪ forﻧﻤﻲ ﺷﻮﺩ ﻭ ﺑﻌﺪ ﺍﺯ ﺍﻳﻨﻜﻪ ﻫﺸﺖ ﺗﺎ * ﭼﺎﭖ ﺷﺪ ﺭﺷﺘﺔ AMINﻳﻚ ﺑﺎﺭ ﭼﺎﭖ ﻣﻲ ﺷﻮﺩ.
ﻧﻜﺘﻪ( ﻣﺘﻐﻴﺮ ﻣﺮﺑﻮﻁ ﺑﻪ ﺷﻤﺎﺭﺵ ﺣﻠﻘﺔ forﺭﺍ ﺷﻤﺎﺭﻧﺪﺓ ﺣﻠﻘﻪ ﻣﻲ ﻧﺎﻣﻨﺪ).ﻣﺘﻐﻴﺮ ﺍﺳﻜﺎﻟﺮ(
ﻧﻜﺘﻪ( ﺷﻤﺎﺭﻧﺪﻩ ﺣﻠﻘﻪ ﺩﺭ ﻫﺮ ﺑﺎﺭ ﺍﺟﺮﺍﻱ ﺣﻠﻘﻪ ﺑﻪ ﻃﻮﺭ ﺧﻮﺩﻛﺎﺭ ﻳﻚ ﻭﺍﺣﺪ ﺍﺿﺎﻓﻪ ﻳﺎ ﻛﺎﻫﺶ ﭘﻴﺪﺍ ﻣﻲ ﻛﻨﺪ .ﺍﮔﺮ ﺍﺯ ﻛﻠﻤـﺔ TOﺍﺳـﺘﻔﺎﺩﻩ ﻛـﺮﺩﻩ
ﺑﺎﺷﻴﺪ ﺷﻤﺎﺭﻧﺪﺓ ﺣﻠﻘﻪ ﻳﻚ ﻭﺍﺣﺪ ﺍﻓﺰﺍﻳﺶ ﻣﻲ ﻳﺎﺑﺪ ﻛﻪ ﺍﺻﻄﻼﺣﺎ ﻣﻲ ﮔﻮﻳﻨﺪ Forﺍﻓﺰﺍﻳﺸﻲ ﺍﻳﺠﺎﺩ ﺷﺪﻩ ﺍﺳـﺖ .ﺍﻣـﺎ ﺍﮔـﺮ ﺍﺯ ﻛﻠﻤـﺔ DownTo
ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ ﺷﻤﺎﺭﻧﺪﺓ ﺣﻠﻘﻪ ﻳﻚ ﻭﺍﺣﺪ ﻛﺎﻫﺶ ﻣﻲ ﻳﺎﺑﺪ ﻛﻪ ﺍﺻﻄﻼﺣﺎ ﻣﻲ ﮔﻮﻳﻨﺪ Forﻛﺎﻫﺸﻲ ﺍﻳﺠﺎﺩ ﺷﺪﻩ ﺍﺳﺖ.
ﻣﺜﺎﻝ( ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﻳﻚ forﻛﺎﻫﺸﻲ ﺍﺳﺖ ﻛﻪ ﺷﻤﺎﺭﻧﺪﺓ ﺁﻥ Kﺍﺳﺖ ﻛﻪ ﺍﺯ ١٠٠ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ ﻭ ﻳﻚ ﻭﺍﺣﺪ ،ﻳﻚ ﻭﺍﺣﺪ ﻛﺎﻫﺶ ﻣﻲ ﻳﺎﺑﺪ.
For K:=100 DownTo 1 Do ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺩﺳﺘﻮﺭ IFﻛﻪ ﻳﻚ ﺩﺳﺘﻮﺭ ﺳﺎﺧﺘﺎﺭﻱ ﺍﺳﺖ ﺑﻼﻙ ﻣﺮﺑﻮﻁ ﺑﻪ Forﺍﺳﺖ.
IF (K MOD 2)=0 then
;)Writeln(K ﻭ ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺍﻋﺪﺍﺩ ﺯﻭﺝ ﺑﻴﻦ 100ﺗﺎ 1ﭼﺎﭖ ﻣﻲ ﺷﻮﻧﺪ.
ﻭ ﺩﺳﺘﻮﺭ ;) Writeln(Kﺑﻼﻙ ﻣﺮﺑﻮﻁ ﺑﻪ IFﺍﺳﺖ ﻛﻪ ﻳﻚ ﺩﺳﺘﻮﺭ ﺳﺎﺩﻩ ﺍﺳﺖ.
ﻧﻜﺘﻪ( ﺩﺭ Forﺍﻓﺰﺍﻳﺸﻲ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﺍﺯ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﺑﺎﻳﺪ ﻛﻮﭼﻜﺘﺮ ﻳﺎ ﻣﺴﺎﻭﻱ ﺑﺎﺷﺪ .ﺩﺭ ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ ﺧﻄﺎﻳﻲ ﺭﺥ ﻧﻤﻲ ﺩﻫﺪ ﺑﻠﻜﻪ ﺣﻠﻘﻪ ﺗﻜﺮﺍﺭ
ﻧﻤﻲ ﺷﻮﺩ .ﺩﺭﺻﻮﺭﺗﻲ ﻛﻪ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﻭ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﻣﺴﺎﻭﻱ ﺑﺎﺷﺪﺣﻠﻘﻪ ﻳﻚ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ.
ﻣﺜﺎﻝ(ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺣﻠﻘﺔ Forﺍﻓﺰﺍﻳﺸﻲ ﺍﺳﺖ ﺍﻣﺎ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ) (3ﺍﺯ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ) (1ﺑﺰﺭﮔﺘﺮ ﺍﺳﺖ ﺑﻪ ﻫﻤﻴﻦ For T:=3 To 1 Do
;)Writeln(T ﺩﻟﻴﻞ ﺩﺳﺘﻮﺭ ;) Write(Tﺍﺻﻼ ﺗﻜﺮﺍﺭ ﻧﻤﻲ ﺷﻮﺩ ﻭ ﺩﺳﺘﻮﺭ ;)’*’( Writeﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ.
;)’*’(Write
ﻧﻜﺘﻪ( ﺩﺭ Forﻛﺎﻫﺸﻲ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﺍﺯ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﺑﺎﻳﺪ ﺑﺰﺭﮔﺘﺮ ﻳﺎ ﻣﺴﺎﻭﻱ ﺑﺎﺷﺪ .ﺩﺭﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ ﺧﻄﺎﻳﻲ ﺭﺥ ﻧﻤﻲ ﺩﻫﺪ ﺑﻠﻜﻪ ﺣﻠﻘـﻪ ﺗﻜـﺮﺍﺭ
ﻧﻤﻲ ﺷﻮﺩ .ﺩﺭﺻﻮﺭﺗﻲ ﻛﻪ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﻭ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﻣﺴﺎﻭﻱ ﺑﺎﺷﺪ ﺣﻠﻘﻪ ﻳﻚ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ.
ﻣﺜﺎﻝ(ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺣﻠﻘﻪ Forﻛﺎﻫﺸﻲ ﺍﺳﺖ ﺍﻣﺎ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ) (1ﺍﺯ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ) (5ﻛﻮﭼﻜﺘﺮ ﺍﺳﺖFor C:=1 DownTo 5 Do .
;)Writeln(C ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺩﺳﺘﻮﺭ ;) Writeln(Cﺍﺻﻼ ﺗﻜﺮﺍﺭ ﻧﻤﻲ ﺷﻮﺩ ﻭ ﺩﺳﺘﻮﺭ ;)’ Write(’#ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ.
;)’Write(’#
ﻧﻜﺘﻪ(ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﻭ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﻭ ﺷﻤﺎﺭﻧﺪﺓ ﺣﻠﻘﺔ forﺑﺎﻳﺪ ﺍﺯ ﻧﻮﻉ ﺍﺳﻜﺎﻟﺮ ﺑﺎﺷﻨﺪ ﺩﺭ ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ ﭘﻴﻐﺎﻡ ﺧﻄﺎ ﺻﺎﺩﺭ ﻣﻲ ﺷﻮﺩ.
ﻧﻜﺘﻪ( ﻛﻠﻤﺎﺕ DOﻭ Forﻭ Downtoﻭ TOﺭﺯﺭﻭ ﺷﺪﻩ ﻫﺴﺘﻨﺪ.
ﻧﻜﺘﻪ( ﻫﻨﮕﺎﻣﻲ ﺍﺯ ﺣﻠﻘﺔ Forﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ﺣﻠﻘﻪ ﻣﺸﺨﺺ ﺑﺎﺷﺪ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 36
ﻓﻠﻮﭼﺎﺭﺕ ﺭﻭﺑﺮﻭ ﻣﺮﺑﻮﻁ ﺑﻪ ﻋﻤﻠﻜﺮﺩ ﺩﺳﺘﻮﺭ Forﺍﻓﺰﺍﻳﺸﻲ ﺍﺳﺖ .ﺩﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﺷﺮﻁ ﻭﺭﻭﺩ ﺑﻪ
ﺣﻠﻘﻪ ﺩﺭ ﺍﺑﺘﺪﺍﻱ ﺣﻠﻘﻪ ﭼﻚ ﻣﻲ ﺷﻮﺩ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺍﺣﺘﻤﺎﻝ ﺩﺍﺭﺩ ﻛﻪ ﺣﻠﻘﻪ ﺍﺻﻼ ﺗﻜﺮﺍﺭ ﻧﺸﻮﺩ.
ﻧﻜﺘﻪ( ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ﺩﺳﺘﻮﺭﺍﺕ ﺩﺍﺧﻞ ﺑﻼﻙ forﺑﺴﺘﮕﻲ ﺑﻪ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﻭ ﻧﻬﺎﻳﻲ ﺣﻠﻘﻪ ﺩﺍﺭﺩ.
ﺑﺎﻓﺮﺽ ﺍﻳﻨﻜﻪ ﺩﺳﺘﻮﺭﺍﺕ ﺩﺍﺧﻞ ﺣﻠﻘﻪ ﺭﻭﻱ ﻣﺘﻐﻴﺮ ﺷﻤﺎﺭﻧﺪﻩ ﺗﺎﺛﻴﺮﻱ ﻧﮕﺬﺍﺷﺘﻪ ﺑﺎﺷﺪ ﻣﻲ ﺗﻮﺍﻧﻴﻢ
ﺑﻮﺳﻴﻠﻪ ﺭﻭﺍﺑﻂ ﺯﻳﺮ ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ﺣﻠﻘﻪ ﺭﺍ ﺑﺪﺳﺖ ﺁﻭﺭﺩ
+ 1ﻣﻘﺪار اﺑﺘﺪاﯾﯽ – ﻣﻘﺪار ﻧﻬﺎﯾﯽ= ﺗﻌﺪاد ﺗﮑﺮار Forﺍﻓﺰﺍﻳﺸﻲ ç
ﺷﺮﻁ ﺗﻜﺮﺍﺭ ﺣﻠﻘﻪ ﺩﺭﺳﺖ ﺑﻮﺩﻥ ﺷﺮﻁ ﺍﺑﺘﺪﺍﻱ ﺣﻠﻘﻪ ﺍﺳﺖ .ﺩﻗﺖ ﻛﻨﻴﺪ ﻛﻪ
ﺷﺮﻁ ﺩﺭ ﺩﺳﺘﻮﺭ ﻧﻬﻔﺘﻪ ﺍﺳﺖ.
ﻧﻜﺘﻪ( ﺍﮔﺮﺑﻌﺪ ﺍﺯ ﻛﻠﻤﺔ Doﻋﻼﻣﺖ ; ﻗﺮﺍﺭ ﺩﻫﻴﺪ ﺧﻄﺎﻳﻲ ﺭﺥ ﻧﻤﻲ ﺩﻫﺪ ﺑﻠﻜﻪ ﻋﻼﻣﺖ ; ﺑﻪ ﻋﻨﻮﺍﻥ ﺑﻼﻙ forﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ).ﺧﻄـﺎﻱ
ﻣﻨﻄﻘﻲ( ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻳﻚ ﺣﻠﻘﻪ ﺗﺎﺧﻴﺮ ﺍﻳﺠﺎﺩ ﺷﺪﻩ ﺍﺳﺖ.
ﻣﺜﺎﻝ( ﺧﺮﻭﺟﻲ ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
;For H:=1 To 12 Do
ﺩ( ﺑﺮﻧﺎﻣﻪ ﺧﻄﺎ ﺩﺍﺭﺩ ﺝ( ﻋﺪﺩ ١٢ ﺏ( ﻋﺪﺩ ١ ﺍﻟﻒ( ﺍﻋﺪﺍﺩ ١ﺗﺎ ١٢
;)Write(H
ﭼﻮﻥ ﺑﻌﺪ ﺍﺯ Doﻋﻼﻣﺖ ; ﻗﺮﺍﺭ ﮔﺮﻓﺘﻪ ﺷﺪﻩ ﺍﺳﺖ ﭘﺲ ﺩﺳﺘﻮﺭ ;) Write(Hﻣﺮﺑﻮﻁ ﺑﻪ forﻧﻴﺴﺖ .ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﻳﻚ ﺣﻠﻘﻪ ﺗـﺎﺧﻴﺮ ﺍﻳﺠـﺎﺩ
ﺷﺪﻩ ﺍﺳﺖ .ﻭ ﻣﺘﻐﻴﺮ Hﺍﺑﺘﺪﺍ ١ﻭ ﺳﭙﺲ ٢ﻭ … ﻭ ﺩﺭ ﻧﻬﺎﻳﺖ ١٢ﻣﻲ ﺷﻮﺩ ﻭ ﺍﺯ ﺣﻠﻘﻪ ﺗﺎﺧﻴﺮ ﺧﺎﺭﺝ ﻣـﻲ ﺷـﻮﺩ ﻭ ﺩﺳـﺘﻮﺭ Writeﺍﻧﺠـﺎﻡ ﻣـﻲ
ﺷﻮﺩ ﻛﻪ ﻣﻘﺪﺍﺭ ١٢ ، Hﺍﺳﺖ) .ﮔﺰﻳﻨﻪ ﺝ(
ﻧﻜﺘﻪ( ﭘﺲ ﺍﺯ ﺧﺎﺗﻤﺔ ﺣﻠﻘﺔ Forﻣﻌﻤﻮﻻ ﻣﻘﺪﺍﺭﻱ ﻛﻪ ﺩﺭ ﻣﺘﻐﻴﺮ ﺷﻤﺎﺭﻧﺪﻩ ﻗﺮﺍﺭ ﺩﺍﺭﺩ ﻗﺎﺑﻞ ﺍﻋﺘﺒﺎﺭ ﻧﻴﺴﺖ .ﺍﻣﺎ ﺩﺭ ﺗﻮﺭﺑﻮﭘﺎﺳـﻜﺎﻝ ﻣﻘـﺪﺍﺭ ﺁﻥ ﺑﺮﺍﺑـﺮ
ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﺍﺳﺖ.
ﻧﻜﺘﻪ( ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﻭ ﻧﻬﺎﻳﻲ ﺣﻠﻘﻪ ﻣﻲ ﺗﻮﺍﻧﺪ ﻋﺒﺎﺭﺕ ﺑﺎﺷﺪ) ﻋﺒﺎﺭﺗﻲ ﻛﻪ ﺣﺎﺻﻞ ﺁﻥ ﺍﺳﻜﺎﻟﺮ ﺷﻮﺩ( ﺍﻣﺎ ﻣﻘﺪﺍﺭ ﻋﺒﺎﺭﺗﻬﺎ ﻳﻚ ﺑﺎﺭ ﺍﺭﺯﻳﺎﺑﻲ ﻣﻲ ﺷﻮﺩ ﻭ
ﺩﻳﮕﺮ ﺗﻐﻴﻴﺮ ﻧﻤﻲ ﻛﻨﺪ.
;M:=5 ﻣﺜﺎﻝ( ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﺣﻠﻘﻪ ﺩﺭ ﺍﺑﺘﺪﺍﻱ ﺣﻠﻘﻪ ﺑﺮﺍﺑﺮ 6ﻣﻲ ﺷﻮﺩ ﻭ
For A:=1 To M+1 Do ﺣﻠﻘﺔ forﺍﺯ ﻳﻚ ﺗﺎ ﺷﺶ ﺗﻜﺮﺍﺭﻣﻲ ﺷﻮﺩ ﺑﺎ ﺍﻳﻨﻜﻪ ﻣﻘﺪﺍﺭ Mﺩﺭ ﻫﺮ ﺑﺎﺭ ﺍﺟﺮﺍﻱ ﺣﻠﻘﻪ
Begin
;)Writeln(A ﺗﻐﻴﻴﺮ ﻣﻲ ﻛﻨﺪ ﺍﻣﺎ ﺩﻳﮕﺮ ﺗﺎﺛﻴﺮﻱ ﺩﺭ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﺣﻠﻘﻪ ﻧﺪﺍﺭﺩ.
;M:=M+2 ﺍﻋﺪﺍﺩ ١ﺗﺎ ٦ﭼﺎﭖ ﻣﻲ ﺷﻮﺩ M).ﺍﺯ ﻧﻮﻉ ﺻﺤﻴﺢ ﺍﺳﺖ(
;End
ﻣﻌﻤﻮﻻ ﻣﻘﺪﺍﺭ ﺷﻤﺎﺭﻧﺪﺓ ﺣﻠﻘﻪ ﺭﺍ ﺩﺭ ﺑﺪﻧﺔ ﺣﻠﻘﻪ ﺗﻐﻴﻴﺮ ﻧﻤﻲ ﺩﻫﻨﺪ ﺍﻣﺎ ﺍﮔﺮ ﺍﻳﻦ ﻛﺎﺭ ﺭﺍ ﺍﻧﺠﺎﻡ ﺩﻫﻴﻢ ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ﺣﻠﻘﻪ ﺗﻐﻴﻴﺮ ﺧﻮﺍﻫﺪ ﻛﺮﺩ.
;S:=2 ﻣﺜﺎﻝ( ﺩﺭ ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ 2ﺍﺳﺖ ﻭ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ 12ﺍﺳﺖ.ﺷﻤﺎﺭﻧﺪﺓ ﺣﻠﻘﻪ Hﺍﺳﺖ
For H:=S To 12 Do ﻛﻪ ﺩﺭ ﻫﺮ ﺑﺎﺭ ﺍﺟﺮﺍ ﺑﻄﻮﺭ ﺧﻮﺩﻛﺎﺭ ﻳﻚ ﻭﺍﺣﺪ ﺑﻪ ﺁﻥ ﺍﺿﺎﻓﻪ ﻣﻲ ﺷﻮﺩ ﻭ ﺩﺭﻫﺮ ﺑﺎﺭ ﺍﺟﺮﺍ ﺩﺭ ﺑﺪﻧﺔ Forﻧﻴﺰ
Begin ﺩﻭ ﻭﺍﺣﺪ ﺑﻪ ﺁﻥ ﺍﺿﺎﻓﻪ ﻣﻲ ﻛﻨﻴﻢ .ﭘﺲ ﺳﻪ ﻭﺍﺣﺪ ،ﺳﻪ ﻭﺍﺣﺪ ﺍﻓﺰﺍﻳﺶ ﻣﻲ ﻳﺎﺑﺪ.
;)Writeln(H
;H:=H+2 ﺍﻋﺪﺍﺩ 2 5 8 11ﭼﺎﭖ ﻣﻲ ﺷﻮﺩ ﻭ ﺣﻠﻘﻪ ﭼﻬﺎﺭ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ ﻭ
;S:=17 ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﺷﻤﺎﺭﻧﺪﺓ ﺣﻠﻘﻪ 13ﺍﺳﺖ.
;End
37 ( – ﺻﻔﺤـﻪmohammadi.mm@gmail.com) ـﺪي ﻣﻬﻨـﺪس ﻣﺤﻤ-1388 ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد- ﭘﺎﺳـﮑﺎل
ﺗﺴﺖ( ﺣﺎﺻﻞ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﺔ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
Const K:integer=100;
Begin ١٠٠ (ﺏ ١ ﺗﺎ١٠٠ ﺍﻟﻒ( ﭼﺎﭖ ﺍﻋﺪﺍﺩ
For K:=100 downto 1 do . ﺍﺯ ﻧﻮﻉ ﺛﺎﺑﺖ ﺍﺳﺖK ﺩ( ﺧﻄﺎ ﺩﺍﺭﺩ ﭼﻮﻥ ١ (ﺝ
Write(K);
End.
ﻋﺪد از ورودي درﯾﺎﻓﺖ ﮐﻨﺪ و ﺳﭙﺲ ﺗﻌـﺪاد اﻋـﺪاد زوج و ﻓـﺮد را ﺷـﻤﺮده و در ﺧﺮوﺟـﯽ ﭼـﺎپ5 ﻣﺜﺎل(ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ
.ﻧﻤﺎﯾﺪ
Var
i,even,odd,number:integer;
begin
writeln('Please Enter Five Numbers ');
even:=0;
odd:=0;
for i:=1 to 5 do
begin
read(number);
if (number mod 2)=0 then
even:=even+1
else
odd:=odd+1;
end;
writeln('Number of even= ',even);
writeln('Number of odd= ',odd);
end.
.ﻣﺜﺎل (ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﯾﮏ ﻋﺪد از ورودي درﯾﺎﻓﺖ ﮐﻨﺪ و ﭼﺎپ ﮐﻨﺪ ﮐﻪ اﯾﻦ ﻋﺪد اول اﺳﺖ ﯾﺎ ﻣﺮﮐﺐ
var
c,n,t:integer;
begin
readln(n);
t:=0;
for c:=1 to n do
if n mod c = 0 then
t:=t+1;
If t=2 then
writeln('avval')
else
writeln('morakab');
end.
ﺗﻤﺮﯾﻦ ( ﺧﺮوﺟﯽ ﺑﺮﻧﺎﻣﻪ روﺑﺮو ﭼﯿﺴﺖ؟
var
a:boolean;
begin
for a:=false to true do
write(a);
end.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 38
var ﺗﻤﺮﯾﻦ (ﺧﺮوﺟﯽ ﺑﺮﻧﺎﻣﻪ روﺑﺮو ﭼﯿﺴﺖ؟
;c:char
begin
for c:='A' to 'F' do
;)write(c
end.
…… For ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺩﺳﺘﻮﺭ Breakﺑﻪ ﺩﻟﻴﻞ ﺍﻳﻨﻜﻪ ﺩﺭ ﺑﺪﻧﻪ Whileﺍﺳﺖ ﭘﺲ ﻓﻘﻂ ﺣﻠﻘﺔ
Begin whileﺭﺍ ﻣﻲ ﺷﻜﻨﺪ .ﺩﺳﺘﻮﺭ Continueﻣﺮﺑﻮﻁ ﺑﻪ ﺣﻠﻘﻪ forﺍﺳﺖ ﻭ ﭘﺲ ﺩﺭ ﺻﻮﺭﺕ
While …..
ﺍﺟﺮﺍ ﺷﺪﻥ Continueﺑﻪ ﺍﺑﺘﺪﺍﻱ ﺣﻠﻘﻪ forﻣﻲ ﺭﻭﻳﻢ.
Begin
;Break
;End
;Contine
;End
دﺳﺘﻮر : Exit
ﻫﺪﻑ :ﺍﻧﺘﻘﺎﻝ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﺧﺎﺭﺝ ﺍﺯ ﺑﻠﻮﮎ ﻓﻌﻠﯽ
ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺩﺭ ﻫﺮ ﺑﻠﻮﮎ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻋﺚ ﻣﯽ ﺷﻮﺩ ﮐﻪ ﮐﻨﺘﺮﻝ ﺑﺮﻧﺎﻣﻪ ﺑﻼﻓﺎﺻﻠﻪ ﺑﻪ ﺧـﺎﺭﺝ ﺍﺯ ﺁﻥ ﺑﻠـﻮﮎ ﺍﻧﺘﻘـﺎﻝ ﻳﺎﺑـﺪ.ﺩﺳـﺘﻮﺭ Exit
ﺍﮔﺮﺩﺭ ﺑﺪﻧﻪ ﺍﺻﻠﯽ ﺑﻠﻮﮎ ﻳﮏ ﭘﺮﻭﺳﻴﺠﺮ ﻳﺎ ﺗﺎﺑﻊ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻪ ﺑﺎﺷﺪ ،ﺑﺎﻋﺚ ﺧﺮﻭﺝ ﺍﺯ ﭘﺮﻭﺳﻴﺠﺮ ﻳﺎ ﺗﺎﺑﻊ ﺷﺪﻩ ﻭ ﮐﻨﺘﺮﻝ ﺑﺮﻧﺎﻣﻪ ﺑـﻪ ﺍﻭﻟـﻴﻦ ﺩﺳـﺘﻮﺭﯼ
ﮐﻪ ﺑﻼﻓﺎﺻﻠﻪ ﭘﺲ ﺍﺯ ﺩﺳﺘﻮﺭﻓﺮﺍﺧﻮﺍﻧﯽ ﺁﻥ ﭘﺮﻭﺳﻴﺠﺮ ﻳﺎ ﺗﺎﺑﻊ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻪ ﭘﺮﺵ ﻣﯽ ﮐﻨﺪ.
ﺍﮔﺮ ﺩﺳﺘﻮﺭ Exitﺩﺭ ﺑﻠﻮﮎ ﺍﺻﻠﯽ ﺑﺮﻧﺎﻣﻪ ﺑﺎﺷﺪ ،ﺑﺮﻧﺎﻣﻪ ﺑﻼﻓﺎﺻﻠﻪ ﺧﺎﺗﻤﻪ ﻣﯽ ﻳﺎﺑﺪ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 41
ﺗﺴﺖ :
ﺗﺴﺖ (١ﻣﻨﻈﻮﺭ ﺍﺯ ﺩﺭﺟﻪ ﻱ ﻋﻤﻠﮕﺮ ﻛﺪﺍﻡ ﺍﺳﺖ؟
ﺏ( ﺗﻌﺪﺍﺩ ﻋﻤﻠﻮﻧﺪﻫﺎﻱ ﻣﻮﺟﻮﺩ ﺩﺭ ﻳﻚ ﻋﺒﺎﺭﺕ ﺍﻟﻒ( ﺗﻌﺪﺍﺩ ﻋﻤﻠﮕﺮﻫﺎﻱ ﻣﻮﺟﻮﺩ ﺩﺭ ﻳﻚ ﻋﺒﺎﺭﺕ
ﺩ( ﺍﻭﻟﻮﻳﺖ ﺍﺟﺮﺍﻱ ﻋﻤﻠﮕﺮ ﺝ( ﺗﻌﺪﺍﺩ ﻋﻤﻠﻮﻧﺪﻫﺎﻱ ﻋﻤﻠﮕﺮ
ﺗﺴﺖ (٢ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﻳﻚ ﺷﻨﺎﺳﻪ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺍﺳﺖ؟
ﺩ(String ﺝ(Program ﺏ(Readln ﺍﻟﻒ( For
ﺗﺴﺖ (٣ﺳﺮﻋﺖ ﺍﻧﺠﺎﻡ ﻣﺤﺎﺳﺒﺎﺕ ﺑﺎ ﻛﺪﺍﻡ ﻧﻮﻉ ﺩﺍﺩﻩ ﻧﺴﺒﺖ ﺑﻪ ﺑﻘﻴﻪ ﭘﺎﻳﻴﻦ ﺗﺮ ﺍﺳﺖ؟
ﺩ(Integer ﺝ(Word ﺏ(Real ﺍﻟﻒ(Longint
ﺗﺴﺖ ( ٤ﺩﺭ ﭘﺎﺳﺦ ﺑﻪ ﺍﺟﺮﺍﻱ ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﻱ ﻣﻘﺎﺑﻞ ﺩﺍﺩﻩ ﻫﺎﻱ ﺯﻳﺮ ﺭﺍ ﻭﺍﺭﺩ ﻛﺮﺩﻩ ﺍﻳﻢ ﺧﺮﻭﺟﻲ ﻛﺪﺍﻡ ﺍﺳﺖ؟
Readln(X,Y,Z); 3 7 12 14
Read(A,B); 16 24 36 ﺝ( 16 24ﺩ(ﭘﻴﻐﺎﻡ ﺧﻄﺎ ﺏ(24 36 ﺍﻟﻒ(14 16
;)Write(A,B
ﺗﺴﺖ (٥ﺍﮔﺮ Iﻳﻚ ﻣﺘﻐﻴﺮ ﺍﺯ ﻧﻮﻉ ﺻﺤﻴﺢ ﻭ rﻳﻚ ﻣﺘﻐﻴﺮ ﺍﺯ ﻧﻮﻉ ﺍﻋﺸﺎﺭﻱ ﺑﺎﺷﺪ ﻛﺪﺍﻡ ﺩﺳﺘﻮﺭ ﺻﺤﻴﺢ ﺍﺳﺖ؟
ﺩ(;I:=I /32 ﺝ(;I:= r Mod 10 ﺏ(I:=I+r ﺍﻟﻒ(;r:=I Div 6
ﺗﺴﺖ :
-٤ﺍﮔﺮ ﻣﺘﻐﻴﺮﻱ ﺑﻪ ﺻﻮﺭﺕ ; N:stringﺗﻌﺮﻳﻒ ﺷﻮﺩ ﭼﻨﺪ ﺑﺎﻳﺖ ﻓﻀﺎ ﺑﺮﺍﻱ ﺁﻥ ﺍﺷﻐﺎﻝ ﺧﻮﺍﻫﺪ ﺷﺪ؟
ﺩ(254 ﺝ(255 ﺏ(127 ﺍﻟﻒ(256
- ٥ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
Begin
;For L:=6 downto 1 do ﺏ( 123456 ﺍﻟﻒ( 1
;)Write(L ﺩ( 6 ﺝ( 654321
End.
;X:=1 ﺏ(ﻳﻚ ﺑﺎﺭ ﺍﻟﻒ( ﻫﻴﭻ ﺑﺎﺭ ﭼﻮﻥ ﺣﻠﻘﻪ ﺧﺎﺗﻤﻪ ﻧﻤﻲ ﻳﺎﺑﺪ.
; While X<5 Do ﺩ( ٥ﻳﺎﺭ ﺝ( ٤ﺑﺎﺭ
Begin
;)Writeln(X
;X:=X+1
;End
-١٢ﺩﺭ ﺣﻠﻘﻪ ﻫﺎﻱ ﻣﺘﺪﺍﺧﻞ ﺗﻌﺪﺍﺩ ﺩﻓﻌﺎﺕ ﺗﻜﺮﺍﺭ ﺩﺳﺘﻮﺭ ﺣﻠﻘﻪ ﺩﺍﺧﻠﻲ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ:
ﺏ( ﺣﺎﺻﻞ ﺟﻤﻊ ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ﺣﻠﻘﻪ ﺩﺍﺧﻠﻲ ﻭ ﺣﻠﻘﻪ ﺧﺎﺭﺟﻲ ﺍﻟﻒ( ﺣﺎﺻﻞ ﺟﻤﻊ ﺗﻌﺪﺍﺩ ﺗﻤﺎﻣﻲ ﺣﻠﻘﻪ ﻫﺎ
ﺩ( ﺣﺎﺻﻠﻀﺮﺏ ﺗﻜﺮﺍﺭ ﺣﻠﻘﻪ ﺩﺍﺧﻠﻲ ﺩﺭ ﺣﻠﻘﻪ ﺧﺎﺭﺟﻲ ﺝ(ﺣﺎﺻﻠﻀﺮﺏ ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ﺗﻤﺎﻣﻲ ﺣﻠﻘﻪ ﻫﺎ
-١٥ﺍﮔﺮ ﺩﺳﺘﻮﺭ ﺩﺍﺧﻞ ﺣﻠﻘﻪ for-toﺭﻭﻱ ﻣﺘﻐﻴﺮ ﺷﻤﺎﺭﻧﺪﻩ ﺗﺎﺛﻴﺮ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ ﻭ ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﻣﺘﻐﻴﺮ ﺷﻤﺎﺭﻧﺪﻩ ﺑﺮﺍﺑﺮ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﺁﻥ ﺑﺎﺷﺪ
ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ﺩﺳﺘﻮﺭ ﺩﺍﺧﻞ ﺣﻠﻘﻪ ﻭ ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ﺷﻤﺎﺭﻧﺪﻩ ﺑﻌﺪ ﺍﺯ ﺍﺟﺮﺍﻱ ﺣﻠﻘﻪ ﻛﺪﺍﻡ ﺍﺳﺖ؟
ﺏ( ﻳﻚ ﺑﺎﺭ – )+١ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ – ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ( ﺍﻟﻒ(ﺻﻔﺮﺑﺎﺭ -ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ
ﺩ( ﻳﻚ ﺑﺎﺭ – ٢ ﺝ( ﻳﻚ ﺑﺎﺭ -ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ
-١٦ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﭼﻴﺴﺖ؟
ﺏ(5678910 ﺍﻟﻒ( 12345678910
;X:=0 ﺩ(10 ﺝ(12345
FOR I:=1 To 10 Do
;IF I>=5 then X:=1
;)IF I<5 OR X<>0 THEN Write(I
;A:=1; F:=1; W:=True - ٢٠ﺩﺳﺘﻮﺭ Writeﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﭼﻨﺪ ﺑﺎﺭ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ؟
While Not W do ﺩ( ﺩﻩ ﺑﺎﺭ ﺝ( ﺍﺻﻼ ﺍﺟﺮﺍ ﻧﻤﻲ ﺷﻮﺩ. ﺏ( ﺳﻪ ﺑﺎﺭ ﺍﻟﻒ( ﻳﻚ ﺑﺎﺭ
Begin
;F:=F*A
;A:=A+1
If A>4 then
;W:=False
;End
;)Writeln(F
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 44
ﺑﯿﺸﺘﺮ ﺑﺪاﻧﯿﻢ :
ﭼﻨﺪ ﻧﮑﺘﻪ در ﻣﻮرد اﻧﻮاع داده ﻫﺎ در زﺑﺎن ﭘﺎ ﺳﮑﺎل:
ﺩﺍﺩﻩ ﻫﺎﻱ ﻋـﺪﺩﻱ Singleﻭ Doubleﻭ Extendedﻭ Compﺭﺍ ﺍﻧـﻮﺍﻉ ﺩﺍﺩﻩ 8087ﻣـﻲ ﮔﻮﻳﻨـﺪ .ﺍﻳـﻦ ﻧـﻮﻉ ﺩﺍﺩﻩ ﻫـﺎ ﺑـﺮﺍﻱ ﺍﻧﺠـﺎﻡ
ﻣﺤﺎﺳﺒﺎﺕ ﺑﺮ ﺭﻭﻱ ﺁﻧﻬﺎ ﺑﻪ ﻛﻤﻚ ﭘﺮﺩﺍﺯﺷﮕﺮ ﻧﻴﺎﺯ ﺩﺍﺭﻧﺪ .ﻛﻤﻚ ﭘﺮﺩﺍﺯﺷﮕﺮ ﻳﻚ ﺳﺨﺖ ﺍﻓﺰﺍﺭ ﺍﺳـﺖ ﻛـﻪ ﺑـﺮﺍﻱ ﺍﻧﺠـﺎﻡ ﻣﺤﺎﺳـﺒﺎﺕ ﺑـﺮ ﺭﻭﻱ ﺍﻋـﺪﺍﺩ
ﺍﻋﺸﺎﺭﻱ ﺑﺎ ﺩﻗﺖ ﺑﺎﻻ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﺩﺭ ﻛﺎﻣﭙﻴﻮﺗﺮ ﻫﺎﻱ ﻗﺪﻳﻤﻲ )ﻣﺪﻝ (XTﺍﻧﺠﺎﻡ ﻣﺤﺎﺳﺒﺎﺕ ﺍﻋﺸﺎﺭﻱ ﺑﺎ ﺩﻗﺖ ﺑﺎﻻ ﺑﻪ ﻛﻨـﺪﻱ ﺻـﻮﺭﺕ ﻣـﻲ
ﮔﺮﻓﺖ.
ﺑﺮﺍﻱ ﺍﻳﻨﻜﻪ ﺑﺘﻮﺍﻧﻴﻢ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎﻱ ﻧﻮﻉ 8087ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ ﺑﺎﻳﺪ ﻛﺎﻣﭙﺎﻳﻠﺮ ﭘﺎﺳﻜﺎﻝ ﺭﺍ ﺑﺮﺍﻱ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻤﻚ ﭘﺮﺩﺍﺯﺷـﮕﺮ ﻣﻄﻠـﻊ ﺳـﺎﺯﻳﻢ .ﺑـﺮﺍﻱ
ﺍﻳﻦ ﻛﺎﺭ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺍﺯ ﺩﻭ ﺭﻭﺵ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ.
-١ﺩﺭ ﻣﻨﻮﻱ Optionﮔﺰﻳﻨﺔ Compilerﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ ﻭ ﮔﺰﻳﻨﻪ 8087/80287ﺭﺍ √ )ﺗﯿﮏ(ﺑﺰﻧﻴﺪ .ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ √ ﻧﺨﻮﺭﺩﻩ ﺑﺎﺷـﺪ
ﻓﻘﻂ ﻣﻲ ﺗﻮﺍﻧﻴﺪ ﺍﺯ ﻧﻮﻉ Realﺑﺮﺍﻱ ﺍﻋﺪﺍﺩ ﺍﻋﺸﺎﺭﻱ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ.
-٢ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻫﻨﻤﻮﺩ } {$N+ﺩﺭ ﺍﺑﺘﺪﺍﻱ ﺑﺮﻧﺎﻣﻪ:
رﻫﻨﻤﻮدﻫﺎ:
ﻋﻼﻣﺖ $ﭼﻨﺎﻧﭽﻪ ﭘﺲ ﺍﺯ ﻋﻼﻣﺖ { ﺑﻪ ﻛﺎﺭ ﺭﻭﺩ ﺑﺮﺍﻱ ﻣﺘﺮﺟﻢ ﻣﻔﻬﻮﻡ ﺧﺎﺻﻲ ﺩﺍﺭﺩ .ﺍﻳﻦ ﻧﻮﻉ ﻋﻼﻳﻢ ﻛﻪ ﻧﺤﻮﺓ ﺗﺮﺟﻤﻪ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺗﻐﻴﻴﺮ ﻣﻲ ﺩﻫﻨـﺪ
ﻭ ﻣﻔﻬﻮﻡ ﺧﺎﺻﻲ ﺑﺮﺍﻱ ﻣﺘﺮﺟﻢ ﺩﺍﺭﻧﺪ ﻭ ﺩﺭ ﻭﺍﻗﻊ ﻫﺪﺍﻳﺖ ﻛﻨﻨﺪﺓ ﻣﺘﺮﺟﻢ ﺩﺭ ﺍﻣﺮ ﺗﺮﺟﻤﻪ ﺑﺮﻧﺎﻣﻪ ﻫﺴﺘﻨﺪ ﺭﻫﻨﻤﻮﺩ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﻧﺪ.
ﺍﮔﺮ ﻣﻲ ﺧﻮﺍﻫﻴﺪ ﺑﺮﻧﺎﻣﺔ ﺷﻤﺎ ﻛﻪ ﺩﺍﺭﺍﻱ ﻧﻮﻉ ﺩﺍﺩﺓ ٨٠٨٧ﺍﺳﺖ ﺩﺭ ﻛﺎﻣﭙﻴﻮﺗﺮ ﻫﺎﻳﻲ ﻛﻪ ﻛﻤﻚ ﭘﺮﺩﺍﺯﻧﺪﻩ ﻧﺪﺍﺭﻧﺪ ﻧﻴـﺰ ﺍﺟـﺮﺍ ﺷـﻮﺩ ﺑﺎﻳـﺪ ﻧـﻮﻉ ﺩﺍﺩﻩ
٨٠٨٧ﺭﺍ ﺷﺒﻴﻪ ﺳﺎﺯﻱ ﻛﻨﻴﺪ ﻛﻪ ﺑﻮﺳﻴﻠﺔ ﺩﻭ ﺭﻭﺵ ﺫﻛﺮ ﺷﺪﻩ ﺩﺭ ﻓﻮﻕ ﺍﻳﻦ ﻋﻤﻞ ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﻨﺪ.
ﻋﻼﻣﺖ N+ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻧﻮﻉ ﺩﺍﺩﻩ ٨٠٨٧ﻭ ﻋﻼﻣﺖ E+ﺷﺒﻴﻪ ﺳﺎﺯﻱ ﻧﺮﻡ ﺍﻓﺰﺍﺭﻱ ﺁﻥ ﺭﺍ ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪ{$N+,E+} .
ﺭﻫﻨﻤﻮﺩ } {$N+,E-ﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﺑﺮﻧﺎﻣﻪ ﻓﻘﻂ ﺑﺮ ﺭﻭﻱ ﺭﺍﻳﺎﻧﻪ ﻫﺎﻳﻲ ﻛﻪ ﺩﺍﺭﺍﻱ ﻛﻤﻚ ﭘﺮﺩﺍﺯﺷﮕﺮ ﻫﺴﺘﻨﺪ ﺍﺟﺮﺍ ﺷﻮﺩ.
ﻧﻜﺘﻪ( ﺍﮔﺮ ﻋﻼﻣﺖ $ﺑﻪ ﻫﻤﺮﺍﻩ ﻋﺪﺩ ﺩﺭ ﭘﺎﺳﻜﺎﻝ ﺑﻴﺎﻳﺪ ﺑﻪ ﻣﻌﻨﺎﻱ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﻋﺪﺩ ﺩﺭ ﻣﺒﻨﺎﻱ ﺷﺎﻧﺰﺩﻩ) (Hexﺍﺳﺖ .ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻣﻨﻈﻮﺭ ﺍﺯ
ﻋﺪﺩ $12ﻋﺪﺩ 18ﺩﺭ ﻣﺒﻨﺎﻱ ﺩﻩ ﺍﺳﺖ .ﺩﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﺟﻠﻮﻱ $ﻓﻘﻂ ﻋﺪﺩ ﺛﺎﺑﺖ ﻣـﻲ ﺁﻳـﺪ $3 .ﻫﻤـﺎﻥ ﻋـﺪﺩ 3ﺩﺭ ﻣﺒﻨـﺎﻱ ١٠ﺍﺳـﺖ ﻭ $D
ﻫﻤﺎﻥ ﻋﺪﺩ ١٣ﺩﺭ ﻣﺒﻨﺎﻱ ﺩﻩ ﺍﺳﺖ (A,B,C,D,E,F) .ﻣﻨﻈﻮﺭ ﺍﺯ ﻋﺪﺩ $23ﭼﻴﺴﺖ؟ ﻣﻨﻈﻮﺭ ﺍﺯ #$41ﻛﺎﺭﺍﻛﺘﺮ ’ ’Aﺍﺳﺖ.
ﺗﻮاﺑﻊ ﮐﺘﺎﺑﺨﺎﻧﻪ اي:
ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺗﻌﺪﺍﺩﻱ ﺗﺎﺑﻊ ﻛﺘﺎﺑﺨﺎﻧﻪ ﺍﻳﻲ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺑﺘﻮﺍﻧﺪ ﺑﻪ ﺭﺍﺣﺘﻲ ﺍﺯ ﺁﻧﻬﺎ ﺑﺮﺍﻱ ﺍﻧﺠﺎﻡ ﺑﻌﻀﻲ ﻛﺎﺭﻫﺎ ﺍﺳـﺘﻔﺎﺩﻩ ﻛﻨـﺪ .ﺑـﻪ
ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﺗﺎﺑﻊ ABSﻗﺪﺭ ﻣﻄﻠﻖ ﻳﻚ ﻋﺪﺩ ﺭﺍ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ .ﺍﻳﻦ ﺗﻮﺍﺑﻊ ﺍﺯ ﻗﺒﻞ ﺩﺭ ﭘﺎﺳﻜﺎﻝ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﻧﺪ .ﻫـﺮ ﺗـﺎﺑﻊ ﻣﻤﻜـﻦ ﺍﺳـﺖ ﺩﺍﺭﺍﻱ
ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺑﺎﺷﺪ ﻭ ﻳﻚ ﺧﺮﻭﺟﻲ ﻧﻴﺰ ﺩﺍﺭﺩ .ﺩﺭ ﺍﺩﺍﻣﻪ ﻫﺮ ﺗﺎﺑﻊ ﺭﺍ ﺑﺎ ﻋﻤﻠﻜﺮﺩ ﺁﻥ ﻭ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﺑﻴﺎﻥ ﻣﻲ ﻛﻨﻴﻢ.
ﻧﻜﺘﻪ( ﺗﻮﺍﺑﻊ ﻛﺘﺎﺑﺨﺎﻧﻪ ﺍﻳﻲ ﻫﻴﭽﻜﺪﺍﻡ ﻛﻠﻤﺔ ﺭﺯﺭﻭ ﺷﺪﻩ ﻧﻴﺴﺘﻨﺪ.
ﺗﺎﺑﻊ :ABSﻳﻚ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺩﺍﺭﺩ ﻛﻪ ﺑﺎﻳﺪ ﻋﺪﺩﻱ ﺑﺎﺷﺪ)ﺻﺤﻴﺢ ﻳﺎ ﺍﻋﺸﺎﺭﻱ( ﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﻳﻚ ﻋﺪﺩ ﻣﺜﺒﺖ ﻳﺎ ﺻﻔﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ ﻛﻪ ﻗـﺪﺭ
ABS(5)=5 ABS(-6)=6 ABS(0)=0 ﻣﻄﻠﻖ ﻋﺪﺩ ﻭﺭﻭﺩﻱ ﺍﺳﺖ.
ﺗﺎﺑﻊ :SQRﻳﻚ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺩﺍﺭﺩ ﻛﻪ ﺑﺎﻳﺪ ﻋﺪﺩﻱ ﺑﺎﺷﺪ ﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﻣﺠﺬﻭﺭ)ﻣﺮﺑﻊ( ﻋﺪﺩ ﻭﺭﻭﺩﻱ ﺍﺳﺖ .ﺑﻨـﺎﺑﺮﺍﻳﻦ ﺣﺎﺻـﻞ ﺁﻥ ﻫﻤﻴـﺸﻪ
SQR(5)=25 SQR(-4)=16 SQR(0)=0 ﻳﻚ ﻋﺪﺩ ﻣﺜﺒﺖ ﻳﺎ ﺻﻔﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ.
ﺗﺎﺑﻊ : SQRTﻳﻚ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺩﺍﺭﺩ ﻛﻪ ﺑﺎﻳﺪ ﺍﺯ ﻧﻮﻉ ﻋﺪﺩﻱ ﺑﺎﺷﺪ ﻭ ﺧﺮﻭﺟـﻲ ﺁﻥ ﺟـﺬﺭ)ﺭﺍﺩﻳﻜـﺎﻝ( ﻋـﺪﺩ ﻭﺭﻭﺩﻱ ﺍﺳـﺖ .ﺑﻨـﺎﺑﺮﺍﻳﻦ ﻋـﺪﺩ
ﻭﺭﻭﺩﻱ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﻋﺪﺩ ﻣﻨﻔﻲ ﺑﺎﺷﺪ ﺯﻳﺮﺍ ﺯﻳﺮ ﺭﺍﺩﻳﻜﺎﻝ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﻣﻨﻔﻲ ﺑﺎﺷﺪ .ﺧﺮﻭﺟﻲ ﺍﻳﻦ ﺗﺎﺑﻊ ﺍﺯ ﻧﻮﻉ Realﺧﻮﺍﻫﺪ ﺑﻮﺩ.
Sqrt(0)=0.0 ﺧﻄﺎ =)SQRT(-9 SQRT(81)=9.0
SQRT(ABS(-9))=3.0 SQR(SQRT(A))=A
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 45
ﺗﺎﺑﻊ : Piﺍﻳﻦ ﺗﺎﺑﻊ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﻧﺪﺍﺭﺩ ﺍﻣﺎ ﺧﺮﻭﺟﻲ ﺁﻥ ﺍﺯ ﻧﻮﻉ Realﺍﺳﺖ ﻭ ﻋﺪﺩ лﻛﻪ ﻫﻤﺎﻥ 3.14159ﺭﺍ ﺑﺮﻣﻲ ﮔﺮﺩﺍﻧﺪ.
ﺗﺎﺑﻊ : Fracﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﭘﺎﺭﺍﻣﺘﺮ ﺍﺯ ﻧﻮﻉ Realﺩﺍﺭﺩ ﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﻧﻴـﺰ ﺍﺯ ﻧـﻮﻉ Realﺍﺳـﺖ ﻭ ﻗـﺴﻤﺖ ﺍﻋـﺸﺎﺭ ﻋـﺪﺩ ﻭﺭﻭﺩﻱ ﺭﺍ ﺑﺮﻣـﻲ
;A:=12.345 ﮔﺮﺩﺍﻧﺪ .ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﻋﺪﺩ 0.545ﭼﺎﭖ ﻣﻲ ﺷﻮﺩ.
;))Writeln(Frac(A+1.2 Frac(6.89)=0.89 Frac(5)=0.0
FRAC(-3.0245) = -0.0245
ﺗﺴﺖ( ﺩﺳﺘﻮﺭ ;) Write(Frac(-45.0821):4:1ﭼﻪ ﭼﻴﺰﻱ ﺭﺍ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ؟
ﺩ(-0.0 -0.1 ﺝ( ﺏ( 0.1 ﺍﻟﻒ( –0.0821
ﺗﺎﺑﻊ :Truncﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﻋﺪﺩ Realﺑﻪ ﻋﻨﻮﺍﻥ ﻭﺭﻭﺩﻱ ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﻛﻨﺪ ﻭ ﻗﺴﻤﺖ ﺻﺤﻴﺢ ﺁﻥ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ Integerﺑﺮ ﻣـﻲ ﮔﺮﺩﺍﻧـﺪ.
Trunc(45.874)= 45 ﭘﺲ ﺧﺮﻭﺟﻲ ﺁﻥ ﻋﺪﺩ ﺻﺤﻴﺢ ﺍﺳﺖ .ﺩﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﻋﺪﺩ ﺭﺍ ﮔﺮﺩ ﻧﻤﻲ ﻛﻨﺪ.
Trunc(Frac(X)) = 0 Trunc(-24.99) = -24 Trunc(0.125)=0
ﺗﺎﺑﻊ : INTﺍﻳﻦ ﺗﺎﺑﻊ ﺷﺒﻴﻪ ﺗﺎﺑﻊ Truncﺍﺳﺖ ﺑﺎ ﺍﻳﻦ ﺗﻔﺎﻭﺕ ﻛﻪ ﺧﺮﻭﺟﻲ ﺁﻥ ﺍﺯ ﻧﻮﻉ Realﺍﺳﺖ .ﺧﺮﻭﺟﻲ ﺍﻋﺸﺎﺭﻱ ﺩﺍﺭﺩ.
INT(FRAC(X))=0.0 INT(-24.99)= -24.0 Int(45.874)=45.0 INT(0.125)=0.0
ﺗﺎﺑﻊ : Roundﻭﺭﻭﺩﻱ ﺍﻳﻦ ﺗﺎﺑﻊ ﺍﺯ ﻧﻮﻉ Realﺍﺳﺖ ﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﺍﺯ ﻧﻮﻉ Longintﺍﺳﺖ ﻭ ﻋﺪﺩ ﻭﺭﻭﺩﻱ ﺭﺍ ﮔﺮﺩ ﻣﻲ ﻛﻨﺪ.
Round(19.61)è20 Round(52.5)è53 Round(52.48)è52
Round(-4.39)è-4 Round(-24.53)è-25 Round(12) è12
ﺗﺎﺑﻊ : ODDﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﻋﺪﺩﺻﺤﻴﺢ) (Integerﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﻛﻨﺪ ﻭﺧﺮﻭﺟﻲ ﺁﻥ ﺍﺯ Booleanﺍﺳﺖ ﻳﻌﻨـﻲ Trueﻳـﺎ . Falseﺩﺭ
ﺻﻮﺭﺗﻲ ﻛﻪ ﻋﺪﺩ ﻭﺭﻭﺩﻱ ﻓﺮﺩ ﺑﺎﺷﺪ Trueﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ ﻭ ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺯﻭﺝ ﺑﺎﺷﺪ Falseﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ.
ODD(-21)èTrue ODD(17)èTrue ODD(14) èFalse
ﺗﺴﺖ( ﺩﺳﺘﻮﺭ ;)) Write(ODD(-1ﭼﻪ ﭼﻴﺰﻱ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ؟
ﺩ(True ﺝ(False ﺏ(1 ﺍﻟﻒ( 0
ﻧﻜﺘﻪ( ﺩﻗﺖ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪﻛﻪ ﺍﮔﺮ ﻧﻮﻉ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺑﺎ ﺁﻥ ﭼﻴﺰﻱ ﻛﻪ ﺗﺎﺑﻊ ﻧﻴﺎﺯ ﺩﺍﺭﺩ ﻫﻤﺨﻮﺍﻧﻲ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ ﭘﻴﻐـﺎﻡ ﺧﻄـﺎ ﺻـﺎﺩﺭ ﻣـﻲ ﺷـﻮﺩ.
) ODD(12.6ﺧﻄﺎﺳﺖ.
ﺗﺎﺑﻊ : Randomﺍﻳﻦ ﺗﺎﺑﻊ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﻧﺪﺍﺭﺩ ﺍﻣﺎ ﺧﺮﻭﺟﻲ ﺁﻥ ﻳﻚ ﻋﺪﺩ ) Realﺍﻋﺸﺎﺭﻱ( ﺍﺳﺖ ﻭ ﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﻋﺪﺩ ﺷﺎﻧـﺴﻲ ﺑـﻴﻦ 0
Random è 0.745 ﺗﺎ 1ﺭﺍ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ. 0≤Random <1 .
ﺗﺎﺑﻊ ) : Random(Xﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﻋﺪﺩ ﺍﺯ ﻧﻮﻉ ) Wordﺻﺤﻴﺢ( ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﻛﻨﺪ ﻋﺪﺩﻱ ﺍﺯ ﻧﻮﻉ Wordﺑﻴﻦ 0ﺗﺎ ﻋـﺪﺩ ﻭﺭﻭﺩﻱ ﺑـﻪ
0≤Random(6)<6 ﺻﻮﺭﺕ ﺷﺎﻧﺴﻲ ﺑﺮﻣﻲ ﮔﺮﺩﺍﻧﺪ.
ﻧﻜﺘﻪ( ﺑﺮﺍﻱ ﺍﻳﻨﻜﻪ ﺍﻋﺪﺍﺩ ﺷﺎﻧﺴﻲ ﺗﻮﻟﻴﺪ ﺷﺪﻩ ﺩﺭ ﻫﺮ ﺑﺎﺭ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﻣﺘﻔﺎﻭﺕ ﺑﺎﺷﻨﺪ ﺍﺯ ﭘﺮﻭﺳﻴﺠﺮ ; Randomizeﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ.
ﺗﺎﺑﻊ : EXPﺩﺭ ﺭﻳﺎﺿﻲ ﻋﺪﺩ ﻧﭙﺮﻥ ﺑﺮﺍﺑﺮ 2.718ﺍﺳﺖ ﻭ ﺑﺎ ﻧﻤﺎﺩ eﻧﻤﺎﻳﺶ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ .ﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﻋﺪﺩ Realﺩﺭﻳﺎﻓﺖ ﻣﻲ ﻛﻨـﺪ ﻭ
EXP(3)=e3 ﻳﻚ ﻋﺪﺩ Realﻧﻴﺰ ﺑﺮﻣﻲ ﮔﺮﺩﺍﻧﺪ.
) EXP(Xﻳﻌﻨﻲ ﻋﺪﺩ ﻧﭙﺮﻥ ﺑﻪ ﺗﻮﺍﻥ . X
EXP(0)=1 EXP(1)=e Exp(Exp(0))=e
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 46
ﺗﺎﺑﻊ : LNﺍﻳﻦ ﺗﺎﺑﻊ ﻫﻤﺎﻥ ﻟﮕﺎﺭﻳﺘﻢ ﻃﺒﻴﻌﻲ ﺍﺳﺖ .ﻭﺭﻭﺩﻱ ﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﻋﺪﺩ Realﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﻧﻴﺰ ﻳﻚ ﻋﺪﺩ Realﺍﺳﺖ.
LN(1)=0 LN(e)=1 ﭘﻴﻐﺎﻡ ﺧﻄﺎ LN(0)è LN(X) =LOGeX
ﻧﻜﺘﻪ( ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺗﺎﺑﻊ LNﻧﻤﻲ ﺗﻮﺍﻧﺪ ﻣﻨﻔﻲ ﻳﺎ ﺻﻔﺮ ﺑﺎﺷﺪ.ﭘﻴﻐﺎﻡ ﺧﻄﺎ ﺻﺎﺩﺭ ﻣﻲ ﺷﻮﺩ.
LN(EXP(0))è0 EXP(LN(X))èX LN(EXP(X))èX
LN(LN(e))è0 ))XY=EXP(Y*LN(X
)LN(A*B)=LN(A)+LN(B )LN(A/B) =LN(A)-LN(B
ﺗﻮﺍﺑﻊ ﻣﺜﻠﺜﺎﺗﻲ SINﻭ : COSﺍﻳﻦ ﺗﻮﺍﺑﻊ ﻳﻚ ﭘﺎﺭﺍﻣﺘﺮ ﺑﺮﺣﺴﺐ ﺭﺍﺩﻳﺎﻥ ﺩﺭﻳﺎﻓﺖ ﻣـﻲ ﻛﻨﻨـﺪ ) ﺍﺯ ﻧـﻮﻉ (Realﻭ ﻳـﻚ ﻋـﺪﺩ Realﺑﺮﻣـﻲ
ﮔﺮﺩﺍﻧﻨﺪ ﻭ ﻣﻘﺪﺍﺭ Sinﻳﺎ Cosﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻣﻲ ﻛﻨﻨﺪ .ﻣﺜﻼ ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ Sinﺯﺍﻭﻳﻪ 30ﺩﺭﺟﻪ ﻋﺒﺎﺭﺕ ) Sin(30*PI/180ﺭﺍ ﻣﻲ ﻧﻮﻳﺴﻴﻢ.
ﺗﺎﺑﻊ : ArcTanﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﭘﺎﺭﻣﺘﺮ Realﺩﺭﻳﺎﻓﺖ ﻣﻲ ﻛﻨﺪ ﻭ ﻳﻚ ﻋﺪﺩ Realﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ .ﻋـﺪﺩ ﺧﺮﻭﺟـﻲ ﺑﺮﺣـﺴﺐ ﺭﺍﺩﻳـﺎﻥ ﺍﺳـﺖ.
ﻣﺜﻼ ) ArcTan(Xﻣﻘﺪﺍﺭ ﺯﺍﻭﻳﻪ ﺍﻳﻲ ﺭﺍ ﻛﻪ ﺗﺎﻧﮋﺍﻧﺖ ﺁﻥ ﺑﺮﺍﺑﺮ Xﺍﺳﺖ ﺭﺍ ﺑﺮ ﺣﺴﺐ ﺭﺍﺩﻳﺎﻥ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ.
ﺗﺎﺑﻊ : Lengthﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﺭﺷﺘﻪ ﺑﻪ ﻋﻨﻮﺍﻥ ﻭﺭﻭﺩﻱ ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﻛﻨﺪ ﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﻳﻚ ﻋﺪﺩ Integerﺍﺳﺖ .ﻭ ﻃﻮﻝ ﺭﺷﺘﻪ ﺩﺭﻳﺎﻓﺘﻲ ﺭﺍ
Length(’’’’)è1 Length(’ALI’+’REZA’)è7 ﺑﺮﻣﻲ ﮔﺮﺩﺍﻧﺪ.
Length(’ALI’)è3 Length(’AMIN’) è 4 Length(’’)è0
ﺗﺎﺑﻊ : CHRﺍﺯ ﺍﻳﻦ ﺗﺎﺑﻊ ﺑﺮﺍﻱ ﺩﺭﻳﺎﻓﺖ ﻛﺎﺭﺍﻛﺘﺮ ﻣﻌﺎﺩﻝ ﻛﺪ ASCIIﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﻭﺭﻭﺩﻱ ﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﻋﺪﺩ ﺑﻴﻦ 0ﺗﺎ 255ﺍﺳـﺖ )
ﺍﺯ ﻧﻮﻉ (BYTEﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﺍﺯ ﻧﻮﻉ CHARﺍﺳﺖCHR(65) è’A’ .
ﺧﻄﺎ CHR(-66)è ’CHR(ABS(-66))è’B ﻛﺎﺭﺍﻛﺘﺮ ﺑﻮﻕ CHR(7)è
ﻧﻜﺘﻪ( ﻛﺪ ﺍﺳﻜﻲ ﻛﻠﻴﺪ ESCﺑﺮﺍﺑﺮ 27ﺍﺳﺖ.
ﺗﺎﺑﻊ :Upcaseﻳﻚ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺍﺯ ﻧﻮﻉ ﻛﺎﺭﺍﻛﺘﺮ ﺩﺍﺭﺩ ﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﻧﻴﺰ ﺍﺯ ﻧﻮﻉ ﻛﺎﺭﺍﻛﺘﺮ) (Charﺍﺳﺖ ﻭ ﺣـﺮﻑ ﻛﻮﭼـﻚ ﺭﺍ ﺑـﻪ ﺣـﺮﻑ
’UPCASE(’A’)è’A ’UPCASE(’d’) è’D ’UPCASE(’n’) è’N ﺑﺰﺭﮒ ﺗﺒﺪﻳﻞ ﻣﻲ ﻛﻨﺪ.
ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻳﻚ ﻛﻠﻴﺪ ﺭﺍ ﺩﺭ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﻓﺸﺎﺭ ﻣﻲ ﺩﻫﻴﺪ ﻳﻚ ﻳﺎ ﺩﻭ ﻛﺪ ﺗﻮﻟﻴﺪ ﻣﻲ ﺷﻮﺩ ﻭ ﺩﺭ ﺑﺎﻓﺮ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ.ﺑﻌﻀﻲ ﻛﻠﻴـﺪﻫﺎ
ﺭﺍ ﺗﻚ ﻛﺪﻱ ﻭ ﺑﻌﻀﻲ ﺭﺍ ﺩﻭﻛﺪﻱ ﻣﻲ ﮔﻮﻳﻨﺪ .ﻣﺜﻼ ﻭﻗﺘﻲ ﻛﻠﻴﺪ Aﺭﺍ ﻣﻲ ﺯﻧﻴﺪ ﻛﺪ 65ﺗﻮﻟﻴﺪ ﻣﻲ ﺷﻮﺩ .ﺍﻣﺎ ﻭﻗﺘﻲ ﻛﻠﻴﺪ F1ﺭﺍ ﻣﻲ ﺯﻧﻴﺪ ﺩﻭ ﻛـﺪ
ﺗﻮﻟﻴﺪ ﻣﻲ ﺷﻮﺩ ﺍﻭﻝ ﻛﺪ 0ﻛﻪ ﺑﻪ ﺁﻥ ﻛﺪ ﻧﻮﻝ ﻣﻲ ﮔﻮﻳﻨﺪ ﻭ ﺩﻭﻡ ﻛﺪ 50ﺗﻮﻟﻴﺪ ﻣﻲ ﺷﻮﺩ .ﻳﺎ ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻛﻠﻴﺪ ↑ ﺭﺍ ﻣﻲ ﺯﻧﻴﺪ ﻛﺪ ﻫﺎﻱ 0ﻭ 72
ﺗﻮﻟﻴﺪ ﻣﻲ ﺷﻮﺩ .ﻛﻠﻴﺪ ﻫﺎﻱ Enterﻭ ESCﺗﻚ ﻛﺪﻱ ﻫﺴﺘﻨﺪ ) .ﺩﺭ ﻭﺍﻗﻊ ﺑﻌﻀﻲ ﺍﺯ ﻛﻠﻴﺪ ﻫﺎﻱ ﻛﻨﺘﺮﻟﻲ ﻧﻴﺰ ﻛﻠﻴﺪﻫﺎﻱ ﺗﻚ ﻛﺪﻱ ﻣﻲ ﺑﺎﺷﻨﺪ(
ﺗﺎﺑﻊ : ReadKeyﺍﻳﻦ ﺗﺎﺑﻊ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﻧﺪﺍﺭﺩ ﺍﻣﺎ ﺧﺮﻭﺟﻲ ﺁﻥ ﺍﺯ ﻧﻮﻉ CHARﺍﺳﺖ ﻭ ﺑﺎﻓﺮ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﺭﺍ ﺧﻮﺍﻧﺪﻩ ﻭ ﻳﻚ ﻛﺎﺭﺍﻛﺘﺮ ﺍﺯ
ﺁﻥ ﺭﺍ ﺑﺮ ﻣﻲ ﺩﺍﺭﺩ ﻭ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ .ﺍﻳﻦ ﺗﺎﺑﻊ ﻣﺮﺑﻮﻁ ﺑﻪ ﻳﻮﻧﻴﺖ Crtﺍﺳﺖ ﻛﻪ ﺩﺭ ﺍﻳﻨﺠﺎ ﺑﺤـﺚ ﻣـﻲ ﺷـﻮﺩ.ﺑﺎﺩﺳـﺘﻮﺭ; C:=ReadKeyﺩﺍﺧـﻞ
ﻣﺘﻐﻴﺮ Cﻳﻚ ﻛﺎﺭﺍﻛﺘﺮ ﺍﺯ ﺑﺎﻓﺮ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ .ﺍﮔﺮ ﺑﺎﻓﺮ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﺧﺎﻟﻲ ﺑﺎﺷﺪ ﻣﻨﺘﻈﺮ ﻓـﺸﺎﺭ ﺩﺍﺩﻥ ﻳـﻚ ﻛﻠﻴـﺪ ﻣـﻲ ﻣﺎﻧـﺪ .ﺍﮔـﺮ
ﻛﻠﻴﺪﻫﺎﻱ ﺩﻭﻛﺪﻱ ﺯﺩﻩ ﺷﻮﺩ ﺩﻭ ﻛﺪ ﺗﻮﻟﻴﺪ ﻣﻲ ﺷﻮﺩ ﻭ ﺑﻮﺳﻴﻠﺔ ﺩﻭﺑﺎﺭ ﺧﻮﺍﻧﺪﻥ ﺑﺎﻓﺮ ﻣﻲ ﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺗﺸﺨﻴﺺ ﺩﺍﺩ.
ﺗﺎﺑﻊ : ORDﺍﺯ ﺍﻳﻦ ﺗﺎﺑﻊ ﺑﺮﺍﻱ ﺩﺭﻳﺎﻓﺖ ﻋﺪﺩﻱ ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﺗﺮﺗﻴﺐ ﺍﻋﻀﺎﻱ ﻧﻮﻉ ﺩﺍﺩﻩ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﻳﺎ ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﻣﺮﺗﺒﻪ ﻳـﻚ ﻧـﻮﻉ
ﺍﺳﻜﺎﻟﺮ ﺭﺍ ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪ .ﻫﻤﺎﻧﻄﻮﺭ ﻛﻪ ﻗﺒﻼ ﺩﺭ ﻣﻮﺭﺩ ﺍﻧﻮﺍﻉ ﺍﺳﻜﺎﻟﺮ ﮔﻔﺘﻪ ﺷﺪ ﺩﺍﺩﻩ ﻫﺎﻱ ﺍﺳﻜﺎﻟﺮ ﻗﺎﺑﻞ ﺷﻤﺎﺭﺷﻨﺪ ﻭ ﻗﺒﻞ ﻭ ﺑﻌﺪ ﺩﺍﺭﻧـﺪ .ﭘـﺎﺭﺍﻣﺘﺮ
ﻭﺭﻭﺩﻱ ﺗﺎﺑﻊ ORDﺑﺎﻳﺪ ﻳﻚ ﻧﻮﻉ ﺩﺍﺩﺓ ﺍﺳﻜﺎﻟﺮ)ﺻﺤﻴﺢ – ﻛﺎﺭﺍﻛﺘﺮﻱ – ﺑﻮﻟﻴﻦ( ﺑﺎﺷﺪ ﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﻳـﻚ ﻋـﺪﺩ ﺍﺯ ﻧـﻮﻉ ) Longintﺻـﺤﻴﺢ(
ORD(’A’)è65 ﺍﺳﺖ.
ORD(’B’)è66 ORD(0)è 0 ORD(1)è1 ORD(34)è34
ORD(-65)è-65 ORD(FALSE)è0 ORD(TRUE)è 1
ﺧﻄﺎ ORD(25/5)è ﺧﻄﺎ ORD (’TRUE’) è ORD(’1’)è49
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 47
ﺗﺎﺑﻊ : Predﺍﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﻭﺭﻭﺩﻱ ﺍﺯ ﻧﻮﻉ ﺍﺳﻜﺎﻟﺮ ﺩﺍﺭﺩ ﻭ ﻣﻘﺪﺍﺭ ﻗﺒﻞ ﺍﺯ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺭﺍ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ .ﺑﻨـﺎﺑﺮﺍﻳﻦ ﻭﺭﻭﺩﻱ ﻭ ﺧﺮﻭﺟـﻲ ﺁﻥ ﺍﺯ
’Pred(’B’)è’A Pred(3)è2 ﻧﻮﻉ ﺍﺳﻜﺎﻟﺮ ﺍﺳﺖ.
Pred(True) è False Pred(False) è True ’Pred(’F’)è’E
ﺧﻄﺎ Pred(’AC’)è Pred (-3) è -4 Pred(1) è0
ORD(CHR(PRED(67))) è66 ’CHR(ORD(PRED(67))) è’B
Pred(ORD(ODD(48)))è-1 ’\’ Pred(’0’) è ’@’Pred(’A’) è
ﺗﺎﺑﻊ : Succﺍﻳﻦ ﺗﺎﺑﻊ ﺩﺍﺭﺍﻱ ﻭﺭﻭﺩﻱ ﻭ ﺧﺮﻭﺟﻲ ﺍﺳﻜﺎﻟﺮ ﺍﺳﺖ ﻭ ﻛﺎﺭ ﺁﻥ ﻋﻜﺲ ﻛﺎﺭ Predﺍﺳﺖ ﻭ ﻋﻨـﺼﺮ ﺑﻌـﺪﻱ ﻭﺭﻭﺩﻱ ﺭﺍ ﺑﺮﻣـﻲ ﮔﺮﺩﺍﻧـﺪ.
SUCC(1) è 2 ’SUCC(’A’)è’B SUCC(-7) è-6
SUCC(Pred(X))èX SUCC(False) è True SUCC(True) èTrue
ORD(SUCC(’A’)) è66 SUCC(10) è 11 ’[’SUCC(’Z’) è
ﺧﻄﺎ SUCC ( 5.7) è Succ(’9’) è SUCC(A)=A+1
ﺩﺭ ﺍﺩﺍﻣﻪ ﺗﻌﺪﺍﺩﻱ ﭘﺮﻭﺳﻴﺠﺮﻫﺎﻱ )ﺯﻳﺮﺭﻭﺍﻝ ﻫﺎﻱ( ﻛﺘﺎﺑﺨﺎﻧﻪ ﺍﻳﻲ ﺭﺍ ﺗﻮﺿﻴﺢ ﻣﻲ ﺩﻫﻴﻢ .ﭘﺮﻭﺳـﻴﺠﺮﻫﺎ ﺷـﺒﻴﻪ ﺗﻮﺍﺑـﻊ ﻫـﺴﺘﻨﺪ ﺑـﺎ ﺍﻳـﻦ ﺗﻔـﺎﻭﺕ ﻛـﻪ
ﺧﺮﻭﺟﻲ ﻧﺪﺍﺭﻧﺪ ﻭ ﻣﻘﺪﺍﺭﻱ ﺭﺍ ﺑﺮﻧﻤﻲ ﮔﺮﺩﺍﻧﻨﺪ .ﺍﻟﺒﺘﻪ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ .ﭘﺮﻭﺳﻴﺠﺮﻫﺎ ﭼﻮﻥ ﺧﺮﻭﺟﻲ ﻧﺪﺍﺭﻧﺪ ﻧﻤﻲ ﺗﻮﺍﻥ ﺁﻧﻬـﺎ
ﺭﺍ ﺩﺭ ﻋﺒﺎﺭﺍﺕ ﺻﺪﺍ ﺯﺩ)ﻓﺮﺍﺧﻮﺍﻧﻲ ﻛﺮﺩ( .ﭘﺮﻭﺳﻴﺠﺮﻫﺎ ﺭﺍ ﺑﺎﻳﺪ ﺑﻪ ﺗﻨﻬﺎﻳﻲ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻛﺮﺩ .ﺑـﻪ ﻋﻨـﻮﺍﻥ ﻣﺜـﺎﻝ ﺩﺳـﺘﻮﺭ ;)Writeln(ABS(-5)*2
ﺻﺤﻴﺢ ﺍﺳﺖ ﺯﻳﺮﺍ ABSﻳﻚ ﺗﺎﺑﻊ ﺍﺳﺖ ﻭ ﻣﻲ ﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺩﺭ ﻋﺒﺎﺭﺍﺕ ﻭ ﺩﺳﺘﻮﺭﺍﺕ ﺩﻳﮕﺮ ﺑـﻪ ﻛـﺎﺭ ﺑـﺮﺩ .ﺩﺳـﺘﻮﺭ ; C:=DEC(A)*2ﺍﺷـﺘﺒﺎﻩ
ﺍﺳﺖ ﺯﻳﺮﺍ DECﻳﻚ ﭘﺮﻭﺳﻴﺠﺮ ﺍﺳﺖ ﻭ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺩﺭ ﻋﺒﺎﺭﺍﺕ ﻳﺎ ﺩﺳﺘﻮﺭ ﺧﺮﻭﺟﻲ ﻗﺮﺍﺭ ﮔﻴﺮﺩ ﻭ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮﺭﺕ ;) DEC(Aﻓﺮﺍﺧﻮﺍﻧﻲ ﺷﻮﺩ.ﺩﺭ
ﻓﺼﻞ ﺑﻌﺪﻱ ﺩﺭ ﻣﻮﺭﺩ ﺗﻮﺍﺑﻊ ﻭ ﭘﺮﻭﺳﻴﺠﺮﻫﺎ ﻭ ﺍﺧﺘﻼﻑ ﺁﻧﻬﺎ ﺑﻴﺸﺘﺮ ﺑﺤﺚ ﻣﻲ ﺷﻮﺩ.
ﭘﺮﻭﺳﻴﺠﺮ : INCﺍﻳﻦ ﭘﺮﻭﺳﻴﺠﺮ ﻳﻚ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺍﺯ ﻧﻮﻉ ﺍﺳﻜﺎﻟﺮ ﺩﺍﺭﺩ ﻭ ﺑﺎﻳﺪ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺁﻥ ﺣﺘﻤﺎ ﻣﺘﻐﻴﺮ ﻳﺎ ﺛﺎﺑـﺖ ﺑـﺎﻧﻮﻉ ﺑﺎﺷـﺪ .ﺑـﻪ
ﻣﺜﺎﻟﻬﺎﻱ ﺯﻳﺮ ﺩﻗﺖ ﻛﻨﻴﺪ:
;A:=12 ;A:=16 ;S:=8 ;H:=45
;)INC(A ;)INC(A,5 ;)INC(S,-3 ;)INC(H,0
;)Writeln(A ;)Writeln(A ;)Writeln(S ;)Writeln(H
ﻧﻜﺘﻪ( ﺩﺳﺘﻮﺭ ;) INC(4ﻏﻠﻂ ﺍﺳﺖ.ﺯﻳﺮﺍ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﻧﺒﺎﻳﺪ ﺛﺎﺑﺖ ﺑﺎﺷﺪ .ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﻧﺒﺎﻳﺪ ﻋﺒﺎﺭﺕ ﺑﺎﺷﺪ.
;’Z:=’B ;M:=5.3 ﻧﻜﺘﻪ( ﭘﺮﻭﺳﻴﺠﺮ ;) INC(A,4ﻣﻌﺎﺩﻝ ﺩﺳﺘﻮﺭ ; A:=A+4ﺍﺳﺖ ﻭ ﭘﺮﻭﺳﻴﺠﺮ ;)INC(A
;)INC(Z ;)INC(M+1 ﻣﻌﺎﺩﻝ ; A:=A+1ﺍﺳﺖ.
;)Write(Z ;)Write(M
ﭘﺮﻭﺳﻴﺠﺮ : DECﺍﻳﻦ ﭘﺮﻭﺳﻴﺠﺮ ﻋﻜﺲ ﭘﺮﻭﺳﻴﺠﺮ INCﺍﺳﺖ ﻭ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻭﺭﻭﺩﻱ ﺁﻥ ﻧﻴﺰ ﺷﺒﻴﻪ INCﺍﺳﺖ.
;S:=5 ;F:=12 ;’H:=’C ;D:=5
;)DEC(S ;)DEC(F,4 ;)DEC(H,2 ;)DEC(D,-3
;)Write(S ;)Writeln(F ;)Writeln(H ;)Writeln(D
For K:=1 To 3 Do - ٦ﺑﺎ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﻣﻘﺎﺑﻞ ﺩﺭ ﺧﺮﻭﺟﻲ ﭼﻪ ﭼﻴﺰﻱ ﭼﺎﭖ ﺧﻮﺍﻫﺪ ﺷﺪ؟
For M:=2 To 6 Do ﺝ(108 ﺏ(109 1 ﺍﻟﻒ(
Begin
ﺩ( 2
;))Z:=frac(Int(K*M
;W:=Z*M+1
;End - ٧ﻛﺪﺍﻣﻴﻚ ﺍﺯ ﺗﻮﺍﺑﻊ ﭘﺎﺳﻜﺎﻝ ﻣﻲ ﺗﻮﺍﻧﺪ ﻋﺪﺩ 6.6ﺭﺍ ﺑﻪ 6ﺗﺒﺪﻳﻞ ﻣﻲ ﻛﻨﺪ؟
;)Write(W:2:0
ﺏ(Round ﺍﻟﻒ(ODD
ﺩ(Frac ﺝ(Trunc
-٨ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺣﺮﻑ Fﺭﺍ ﭼﺎﭖ ﻣﻲ ﻛﻨﺪ؟
ﺏ( ;))’Write(ORD(’F ﺍﻟﻒ( ;)))’Write(CHR(ORD(’F
ﺩ( ;))’Write(Pred(’F ﺝ( ;)))’Write(ORD(CHR(’F
-٩ﺣﺎﺻﻞ ﺍﺟﺮﺍﻱ ﺣﻠﻘﻪ ﻣﻘﺎﺑﻞ ﭼﻴﺴﺖ؟
ﺏ( 5 7 9 ﺍﻟﻒ( 6 8 10
For A:=-5 Downto -10 Do
Begin ﺩ( -6 -8 -10 ﺝ(ﻫﻴﭻ ﭼﻴﺰ ﺩﺭ ﺧﺮﻭﺟﻲ ﭼﺎﭖ ﻧﻤﻲ ﺷﻮﺩ
;)Write(Ord(ABS(A):2
;)Dec(A
;End
-١٢ﻛﺪﺍﻣﻴﻚ ﺍﺯ ﺭﻫﻨﻤﻮﺩﻫﺎﻱ ﺯﻳﺮ ﺑﺎﻋﺚ ﻣﻴﺸﻮﺩ ﻛﻪ ﺩﺍﺩﻩ ﻫﺎﻱ ٨٠٨٧ﺭﺍ ﺯﻣﺎﻧﻲ ﺑﺘﻮﺍﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ ﻛﻪ ﻛﻤﻚ ﭘﺮﺩﺍﺯﺷﮕﺮ ٨٠٨٧ﻣﻮﺟﻮﺩ ﺑﺎﺷﺪ؟
ﺩ(ﻫﻴﭽﻜﺪﺍﻡ ﺝ( }{$N+,E+ ﺏ(}{$N+,E- ﺍﻟﻒ(}{$N+
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 49
-١٣ﻧﺘﻴﺠﺔ ﺍﺟﺮﺍﻱ ﺩﺳﺘﻮﺭ;)) Write(Succ(Trueﭼﻴﺴﺖ؟
ﺩ(ﺧﻄﺎﻱ Run Time Erro ﺝ(1 ﺏ(True ﺍﻟﻒ(False
;)))))’WRITE(CHR(ord(Pred(Upcase(’b -١٤ﺧﺮﻭﺟﻲ ﺩﺳﺘﻮﺭ ﺯﻳﺮ ﻛﺪﺍﻡ ﺍﺳﺖ؟
ﺩ(65 ﺝ(a ﺏ(C ﺍﻟﻒ(A
)INT(A+B)/FRAC(B)+SQR(A -١٥ﻋﺒﺎﺭﺕ ﻣﻘﺎﺑﻞ ﻣﻌﺎﺩﻝ ﻛﺪﺍﻡ ﻋﺒﺎﺭﺕ ﺟﺒﺮﻱ ﺍﺳﺖ؟
ﺩ([A+B] +A2 ﺝ ([A+B] +A2 ﺏ( ][A+B ﺍﻟﻒ( ][A+B
2
][B ]B-[B B-[B]+A [B]+A2
;)))X:=SQRT(ABS(INT(-9.1 -١٦ﭘﺲ ﺍﺯ ﺍﺟﺮﺍﻱ ﺩﺳﺘﻮﺭ ﺭﻭﺑﺮﻭ ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ Xﻛﺪﺍﻡ ﺧﻮﺍﻫﺪ ﺑﻮﺩ؟
ﺩ(3 ﺝ(-3 ﺏ( 2.8 ﺍﻟﻒ(-2.8
-١٧ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺍﺯ ﻛﻠﻤﺎﺕ ﺭﺯﺭﻭ ﺷﺪﻩ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﻣﻲ ﺑﺎﺷﺪ؟
ﺩ(TRUE ﺝ(VAR ﺏ(Readln ﺍﻟﻒ(Integer
;))Write(Ord(0 -١٨ﺧﺮﻭﺟﻲ ﺩﺳﺘﻮﺭ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
ﺩ(True ﺝ(False ﺏ(1 ﺍﻟﻒ(0
;)X:=Pred(3.5 -١٩ﭘﺲ ﺍﺯ ﺍﺟﺮﺍﻱ ﺩﺳﺘﻮﺭ ﺭﻭﺑﺮﻭ ﻣﻘﺪﺍﺭ Xﻛﺪﺍﻡ ﺧﻮﺍﻫﺪ ﺑﻮﺩ؟
ﺩ(ﺍﺯ ﺗﺎﺑﻊ Predﺍﺳﺘﻔﺎﺩﺓ ﻏﻴﺮ ﻣﺠﺎﺯ ﺷﺪﻩ ﺍﺳﺖ. ﺝ(4 ﺏ(3 ﺍﻟﻒ(2
;))Write(ODD(2 -٢٠ﺧﺮﻭﺟﻲ ﺩﺳﺘﻮﺭ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
ﺩ(True ﺝ(False ﺏ(3 ﺍﻟﻒ(1
-٢١ﺣﺎﺻﻞ ﻋﺒﺎﺭﺕ )) CHR(ORD(’a’) AND ($CFﺩﺭ ﺧﺮﻭﺟﻲ ﺑﺮﺍﺑﺮ ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺍﺳﺖ؟
ﺩ(a ﺝ(A ﺏ(65 ﺍﻟﻒ($97
)5+2/8*3-SQRT(8 DIV 2) +2 MOD Round(6 div 4 -٢٢ﺣﺎﺻﻞ ﻋﺒﺎﺭﺕ ﺭﻭﺑﺮﻭ ﭼﻴﺴﺖ؟
ﺩ(5.25 ﺝ(4.75 ﺏ(3.75 ﺍﻟﻒ(-0.375
For A:=1 to 150 Do - ٢٣ﺧﺮﻭﺟﻲ ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﭼﻴﺴﺖ؟
;X:=Succ(Abs((A+1))+125 Mod 5 – 19 Div 3 ﺏ(187 ﺍﻟﻒ(153
ﺩ(146 ﺝ(790
Round(Exp(Ln(5.6)-Ln(2))+ 10 Mod -3 -٢٤ﺣﺎﺻﻞ ﻋﺒﺎﺭﺕ ﻣﻘﺎﺑﻞ ﭼﻴﺴﺖ؟
ﺩ(3 ﺝ(4 ﺏ(2 ﺍﻟﻒ(5
-٢٥ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
;D:=20 ﺩ(20 ﺝ(13 ﺏ(0 ﺍﻟﻒ( 32
;)Writeln($D
-٢٦ﻛﺪﺍﻡ ﺭﺍﺑﻄﻪ ﺻﺤﻴﺢ ﺍﺳﺖ؟) Xﻳﻚ ﻋﺪﺩ ﺍﻋﺸﺎﺭﻱ ﺍﺳﺖ (
ﺏ()X=TRUNC(X)+FRAC(X ﺍﻟﻒ( )X=TRUNC(X
ﺩ( )X=Round(X) +INT(X ﺝ()X=Round(X)+Frac(X
)))Trunc(Exp(3*Ln(2 -٢٧ﺣﺎﺻﻞ ﻋﺒﺎﺭﺕ ﺭﻭﺑﺮﻭ ﭼﻴﺴﺖ؟
ﺩ(9 ﺝ(5 ﺏ(8 ﺍﻟﻒ(6
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 50
ﯾﻮﻧﯿﺖ : Unit
ﺗﻮﺍﺑﻊ ﻛﺘﺎﺑﺨﺎﻧﻪ ﺍﻳﻲ ﻛﻪ ﺩﺭ ﻗﺴﻤﺖ ﻗﺒﻠﻲ ﺑﻴﺎﻥ ﻛﺮﺩﻳﻢ ﻫﻤﮕﻲ ﺩﺍﺧﻞ ﻳﻚ ﻓﺎﻳﻞ ﻫﺴﺘﻨﺪ ﻛﻪ ﻗﺒﻼ ﺗﻌﺮﻳـﻒ ﺷـﺪﻩ ﺍﻧـﺪ .ﺍﻳـﻦ ﺗﻮﺍﺑـﻊ ﺗﻮﺳـﻂ ﺑﺮﻧﺎﻣـﻪ
ﻧﻮﻳﺴﺎﻥ ﺩﻳﮕﺮ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺍﺳﺖ ﻭ ﺷﻤﺎ ﻣﻲ ﺗﻮﺍﻧﻴﺪ ﺍﺯ ﺁﻧﻬﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ .ﻳﻮﻧﻴﺖ ،ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺗﻌﺎﺭﻳﻒ ﺷﺎﻣﻞ ﻧﻮﻉ ﺩﺍﺩﻩ ﻫﺎ ،ﺛﺎﺑﺘﻬﺎ ،ﻣﺘﻐﻴﺮﻫﺎ
ﻭ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎ ﺍﺳﺖ ﻛﻪ ﺑﻪ ﻃﻮﺭ ﻣﺴﺘﻘﻞ ﺗﺮﺟﻤﻪ ﻣﻲ ﺷﻮﺩ ﻭ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺩﻳﮕﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﻫﺮ ﻳﻮﻧﻴﺖ ﺩﺭ ﻳﻚ ﻓﺎﻳﻞ ﺑﺎ ﭘﺴﻮﻧﺪ TPU
ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺍﺳﺖ .ﺗﻮﺭﺑﻮﭘﺎﺳﻜﺎﻝ ٧ﺩﺍﺭﺍﻱ ﺗﻌﺪﺍﺩﻱ ﻳﻮﻧﻴﺖ ﺍﺳﺖ ﻛﻪ ﻫﺮ ﻛﺪﺍﻡ ﺍﺯ ﺁﻧﻬﺎ ﺷـﺎﻣﻞ ﺗﻌـﺪﺍﺩﻱ ﺯﻳﺮﺑﺮﻧﺎﻣـﻪ ﺍﺳـﺖ .ﻣﺎﻧﻨـﺪ ﻳﻮﻧﻴـﺖ ﻫـﺎﻱ
CRTﻭ ) Graphﺗﻮﺍﺑﻌﻲ ﺟﻬﺖ ﺭﺳﻢ ﺧﻂ ﻭ ﺩﺍﻳﺮﻩ ﻭ ﺍﺷﻜﺎﻝ ﮔﺮﺍﻓﻴﻜﻲ( ﻭ Systemﻭ Dosﻭ ….
ﻫﺮ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻣﻲ ﺗﻮﺍﻧﺪ ﻳﻮﻧﻴﺖ ﺍﻳﺠﺎﺩ ﻛﻨﺪ ﻭ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺧﻮﺩ ﺍﺯ ﺁﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﺪ.
ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻣﻲ ﺧﻮﺍﻫﻴﻢ ﺍﺯ ﺗﻮﺍﺑﻊ ﻳﺎ ﺑﻄﻮﺭﻛﻠﻲ ﺍﺯ ﺗﻌﺎﺭﻳﻒ ﻣﻮﺟﻮﺩ ﺩﺭ ﻳﻚ ﻳﻮﻧﻴﺖ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ ﺑﺎﻳﺪ ﺩﺭ ﻗـﺴﻤﺖ ﺗﻌـﺎﺭﻳﻒ ﻳﻮﻧﻴـﺖ ﺭﺍ ﻣـﺸﺨﺺ
;Uses Crt ﻛﻨﻴﻢ .ﺑﺮﺍﻱ ﺍﻳﻦ ﻛﺎﺭ ﺍﺯ ﻛﻠﻤﺔ ﺫﺧﻴﺮﻩ ﺷﺪﺓ Usesﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﻣﺎﻧﻨﺪ
ﻳﻮﻧﻴﺖ Systemﺷﺎﻣﻞ ﺗﻌﺎﺭﻳﻒ ﭘﺮﻛﺎﺭﺑﺮﺩ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺗﻮﺭﺑﻮﭘﺎﺳﻜﺎﻝ ﺍﺳﺖ ﻣﺎﻧﻨﺪ ﺩﺳﺘﻮﺭﺍﺕ Readlnﻭ Writelnﻭ integerﻭ realﻭ ﻏﻴﺮﻩ.
ﺗﻮﺍﺑﻊ ﻛﺘﺎﺑﺨﺎﻧﻪ ﺍﻱ ﻛﻪ ﻗﺒﻼ ﺑﻴﺎﻥ ﺷﺪ ﻧﻴﺰ ﺩﺭ ﻳﻮﻧﻴﺖ Systemﻗﺮﺍﺭ ﺩﺍﺭﻧﺪ.
ﻧﻜﺘﻪ( ﻳﻮﻧﻴﺖ systemﺍﺯ ﺳﻮﻱ ﻣﺘﺮﺟﻢ ﺑﻪ ﻃﻮﺭ ﺧﻮﺩﻛﺎﺭ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻭ ﻧﻴﺎﺯﻱ ﺑﻪ ﺗﻌﺮﻳﻒ ﺁﻥ ﺩﺭ ﻗﺴﻤﺖ Usesﻧﻴﺴﺖ.
ﺩﺭ ﻗﺴﻤﺖ ﻫﺎﻱ ﺑﻌﺪﻱ ﺗﻌﺪﺍﺩﻱ ﺍﺯ ﺗﻮﺍﺑﻊ ﻣﻮﺟﻮﺩ ﺩﺭﻳﻮﻧﻴﺖ Crtﺭﺍ ﺑﻴﺎﻥ ﻣﻲ ﻛﻨﻴﻢ.
زﯾﺮﺑﺮﻧﺎﻣﻪ ﻫﺎ )ﺗﻮاﺑﻊ و ﭘﺮوﺳﯿﺠﺮﻫﺎ(:
ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻣﻲ ﺧﻮﺍﻫﻴﻢ ﻳﻚ ﺑﺮﻧﺎﻣﺔ ﺑﺰﺭﮒ ﺑﻨﻮﻳﺴﻴﻢ ﺗﻌﺪﺍﺩ ﺩﺳﺘﻮﺭﺍﺕ ﺁﻥ )ﺗﻌﺪﺍﺩ ﺧﻄﻮﻁ ﺑﺮﻧﺎﻣﻪ( ﺑﺴﻴﺎﺭ ﺯﻳﺎﺩ ﻣـﻲ ﺷـﻮﺩ ﻛـﻪ ﺩﺭ ﺍﻳـﻦ ﺻـﻮﺭﺕ
ﻋﻴﺐ ﻳﺎﺑﻲ ﺑﺮﻧﺎﻣﻪ ﻣﺸﻜﻞ ﻭ ﻭﻗﺖ ﮔﻴﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ .ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺑﻪ ﻗﻄﻌﺎﺕ ﻛﻮﭼﻜﺘﺮﻱ ﺗﻘﺴﻴﻢ ﻣﻲ ﻛﻨـﻴﻢ ﻭ ﺑـﺮﺍﻱ ﻫـﺮ ﻗﻄﻌـﻪ ﻳـﻚ
ﺯﻳﺮﺑﺮﻧﺎﻣﻪ )ﺯﻳﺮﺍﻟﮕﻮﺭﻳﺘﻢ( ﻣﻲ ﻧﻮﻳﺴﻴﻢ .ﺣﺎﻝ ﺗﺮﻛﻴﺐ ﻫﻤﺔ ﺍﻳﻦ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎ ﺑﺮﻧﺎﻣﺔ ﺍﺻﻠﻲ ﺭﺍ ﺗﺸﻜﻴﻞ ﻣﻲ ﺩﻫﻨﺪ .ﺣﺎﻝ ﻫﺮ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑـﻪ
ﺗﻨﻬﺎﻳﻲ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﻭ ﺑﻪ ﻃﻮﺭ ﻣﺴﺘﻘﻞ ﺁﺯﻣﺎﻳﺶ ﺷﻮﺩ .ﻫﺮ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻣﺎﻧﻨﺪ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﺩﺍﺭﺍﻱ ﺑﺨﺸﻬﺎﻱ ﻋﻨﻮﺍﻥ ،ﺗﻌﺎﺭﻳﻒ ﻭ ﺑﻼﻙ ﺍﺳﺖ .ﺯﻳﺮﺑﺮﻧﺎﻣﻪ
ﻫﺎ ﺑﻪ ﺩﻭ ﺩﺳﺘﻪ ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﻧﺪ :ﺗﺎﺑﻊ )ﻓﺎﻧﻜﺸﻦ( ﻭ ﭘﺮﺩﺍﺯﻩ)ﺯﻳﺮﺭﻭﺍﻝ ﻳﺎ ﭘﺮﻭﺳﻴﺠﺮ( .ﺍﻳﻦ ﺩﻭ ﺩﺳﺘﻪ ﺷﺒﺎﻫﺖ ﻫﺎ ﻭ ﺍﺧﺘﻼﻓﺎﺗﻲ ﺑﺎ ﻫﻢ ﺩﺍﺭﻧﺪ ﻛﻪ
ﺑﻴﺎﻥ ﺧﻮﺍﻫﺪ ﺷﺪ.
ﻣﺰﺍﻳﺎﻱ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎ -١ :ﻗﺎﺑﻠﻴﺖ ﺧﻮﺍﻧﺎﻳﻲ ﺑﺮﻧﺎﻣﻪ ﺍﻓﺰﺍﻳﺶ ﻣـﻲ ﻳﺎﺑـﺪ-٢ .ﺩﺭﻙ ﻣـﺴﺎﺋﻞ ﻛـﻮﭼﻜﺘﺮ ﺁﺳـﺎﻧﺘﺮ ﺍﺳـﺖ -٣ .ﺍﺯ ﻳـﻚ
ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻣﻲ ﺗﻮﺍﻥ ﺩﺭ ﻳﻚ ﻳﺎ ﭼﻨﺪ ﺑﺮﻧﺎﻣﻪ ﻣﺨﺘﻠﻒ ﺑﻪ ﺩﻓﻌﺎﺕ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ-٤ .ﺍﺷﻜﺎﻝ ﺯﺩﺍﻳﻲ ﺁﺳﺎﻧﺘﺮ ﺍﺳﺖ -٥ .ﻛﺎﺭﮔﺮﻭﻫﻲ ﺭﺍ ﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ
ﻣﻲ ﻛﻨﺪ -٦ .ﺳﺮﻋﺖ ﻃﺮﺍﺣﻲ ﻭ ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺑﺎﻻ ﻣﻲ ﺑﺮﺩ.
Var ;H:integer ﻣﺜﺎﻝ(ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﭘﺮﻭﺳﻴﺠﺮ Powerﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﺳﺖ .ﻣﺘﻐﻴﺮ Zﻣﺮﺑﻮﻁ ﺑﻪ
;)Procedure Power(M:integer ﭘﺮﻭﺳﻴﺠﺮ Powerﺍﺳﺖ ﻛﻪ ﺍﺻﻄﻼﺣﺎ ﺑﻪ ﺍﻳﻦ ﻣﺘﻐﻴﺮ ،ﻣﺘﻐﻴﺮ ﻣﺤﻠﻲ ﻣﻲ ﮔﻮﻳﻨﺪ.
Var
ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﭘﺮﻭﺳﻴﺠﺮ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﻳﻚ ﻋﺪﺩ Integerﺍﺳﺖ.
;Z:integer
Begin ﻧﻜﺘﻪ(ﺗﻌﺪﺍﺩ ﻭ ﻧﻮﻉ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻭﺭﻭﺩﻱ ﺑﺎ ﺁﻧﭽﻪ ﺩﺭ ﻫﻨﮕﺎﻡ ﻓﺮﺍﺧﻮﺍﻧﻲ ﺑﻪ ﺁﻥ ﺗﺤﻮﻳﻞ ﻣﻲ ﺩﻫﻴﻢ
;Z:=M*M ﺑﺎﻳﺪ ﻫﻤﺨﻮﺍﻧﻲ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﺩﺭ ﻏﻴﺮ ﺻﻮﺭﺕ ﭘﻴﻐﺎﻡ ﺧﻄﺎ ﺩﺭ ﺯﻣﺎﻥ ﺗﺮﺟﻤﻪ ﺻﺎﺩﺭ ﻣﻲ ﺷﻮﺩ.
;)Writreln(Z,H
;)’*’(Writeln ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﺍﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ ﺍﺑﺘﺪﺍ ﺑﻠﻮﻙ ﺍﺻﻠﻲ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ ﻳﻌﻨﻲ ;H:=6
;End ﻭ ;)’@’( Writelnﺍﺟﺮﺍ ﻣﻲ ﺷﻮﻧﺪ ﺳﭙﺲ ﺑﺎ ﻓﺮﺍﺧﻮﺍﻧﻲ ﭘﺮﻭﺳﻴﺠﺮ ﺑﻪ ﺩﺍﺧﻞ ﺑﻼﻙ
Begin ﺩﺳﺘﻮﺭﺍﺕ ﭘﺮﻭﺳﻴﺠﺮ Powerﻣﻲ ﺭﻭﻳﻢ ﻭ ﺩﺳﺘﻮﺭ ; Z:=M*Mﻭ ;) Writeln(Z,Hﻭ
;H:=6
;)’*’( Writelnﺍﺟﺮﺍ ﻣﻲ ﺷﻮﻧﺪ ﺑﺎ ﺭﺳﻴﺪﻥ ﺑﻪ ﺍﻧﺘﻬﺎﻱ ﺑﻼﻙ ﭘﺮﻭﺳﻴﺠﺮ ﺑﻪ ﺑﻼﻙ ﺍﺻﻠﻲ
;)’@’(Writeln
;)Power(H ﺑﺎﺯﻣﻲ ﮔﺮﺩﺩ ﻭ ﺩﺳﺘﻮﺭ ;)’ Writeln(’$ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ ﻭ ﺑﺮﻧﺎﻣﻪ ﺧﺎﺗﻤﻪ ﻣﻲ ﻳﺎﺑﺪ.
;)’Writeln(’$ ﺩﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﺗﺎ ﺯﻣﺎﻧﻲ ﻛﻪ ﭘﺮﺩﺍﺯﻩ ﺭﺍ ﺻﺪﺍ ﻧﻜﻨﻴﻢ ﭘﺮﺩﺍﺯﻩ ﺍﺟﺮﺍ ﻧﻤﻲ ﺷﻮﺩ.
End.
ﺩﺭ ﻣﻮﺭﺩ ﻣﺘﻐﻴﺮ Zﺑﺎﻳﺪ ﮔﻔﺖ ﻛﻪ ﺍﻳﻦ ﻣﺘﻐﻴﺮ ﻳﻚ ﻣﺘﻐﻴﺮ ﻣﺤﻠﻲ ﺍﺳﺖ ﻳﻌﻨﻲ ﻓﻘﻂ ﺩﺭ ﺑﻼﻙ ﻣﺮﺑﻮﻁ ﺑﻪ ﭘﺮﻭﺳﻴﺠﺮ Powerﻗﺎﺑﻞ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺳﺖ.
ﺍﮔﺮ ﺍﻳﻦ ﻣﺘﻐﻴﺮ ﺭﺍ ﺩﺭ ﺑﻼﻙ ﺍﺻﻠﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ ﭘﻴﻐﺎﻡ ﺧﻄﺎ ﺻﺎﺩﺭ ﻣﻲ ﺷﻮﺩ ).ﺩﺭ ﺯﻣﺎﻥ ﺗﺮﺟﻤﻪ( ﻋﻤﺮ ﻣﺘﻐﻴﺮﻫﺎﻱ ﻣﺤﻠﻲ ﺍﺯ ﺯﻣﺎﻧﻲ ﺁﻏﺎﺯ ﻣﻲ ﺷﻮﺩ
ﻛﻪ ﺩﺳﺘﻮﺭ ﺻﺪﺍﺯﺩﻥ ﭘﺮﻭﺳﻴﺠﺮ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ ﻭ ﺯﻣﺎﻧﻲ ﻋﻤﺮ ﺁﻧﻬﺎ ﺑﻪ ﭘﺎﻳﺎﻥ ﻣﻲ ﺭﺳﺪ ﻛﻪ ﺍﺟﺮﺍﻱ ﭘﺮﻭﺳﻴﺠﺮ ﺑﻪ ﭘﺎﻳﺎﻥ ﺑﺮﺳﺪ ﻭ ﺑﻪ ﻣﺤﻞ ﺻﺪﺍ ﺯﺩﻥ
ﺁﻥ ﺑﺮﮔﺮﺩﻳﻢ.
ﺍﻣﺎ ﺩﺭ ﻣﻮﺭﺩ ﻣﺘﻐﻴﺮ Hﺑﺎﻳﺪ ﮔﻔﺖ ﻛﻪ ﺍﻳﻦ ﻣﺘﻐﻴﺮ ﻳﻚ ﻣﺘﻐﻴﺮ ﺳﺮﺍﺳﺮﻱ ﺍﺳﺖ ﻳﻌﻨﻲ ﺩﺭ ﻫﻤﻪ ﺟﺎﻱ ﺑﺮﻧﺎﻣﻪ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﺍﺳﺖ .ﻋﻤﺮ ﻣﺘﻐﻴﺮﻫﺎﻱ
ﺳﺮﺍﺳﺮﻱ ﺍﺯ ﺯﻣﺎﻥ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ ﻭ ﺗﺎ ﺯﻣﺎﻧﻲ ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﭘﺎﻳﺎﻥ ﻳﺎﺑﺪ ﺍﺩﺍﻣﻪ ﺩﺍﺭﺩ.ﺑﻨﺎﺑﺮﺍﻳﻦ ﻣﺪﺕ ﻋﻤﺮ ﺁﻧﻬـﺎ ،ﻣـﺪﺕ ﺯﻣـﺎﻥ ﺍﺟـﺮﺍﻱ
ﺑﺮﻧﺎﻣﻪ ﺍﺳﺖ ﻭ ﻃﻮﻻﻧﻲ ﺍﺳﺖ .ﻣﺜﻼ ﻣﺘﻐﻴﺮ Hﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺩﺭ ﺑﻼﻙ ﺍﺻﻠﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ ﻭ ﺩﺭ ﭘﺮﺩﺍﺯﺓ Powerﻧﻴﺰ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ.
ﻧﻜﺘﻪ( ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻭﺭﻭﺩﻱ ﻧﻴﺰ ﻣﺎﻧﻨﺪ ﻣﺘﻐﻴﺮﻫﺎﻱ ﻣﺤﻠﻲ ﻫﺴﺘﻨﺪ ﻭ ﻣﺪﺕ ﻋﻤﺮ ﺁﻧﻬﺎ ﺑﻪ ﻃﻮﻝ ﺍﺟﺮﺍﻱ ﭘﺮﻭﺳﻴﺠﺮ ﺑﺴﺘﮕﻲ ﺩﺍﺭﺩ ﻳﻌﻨـﻲ ﻭﻗﺘـﻲ
ﭘﺮﻭﺳﻴﺠﺮ ﺍﺟﺮﺍﻳﺶ ﺗﻤﺎﻡ ﻣﻲ ﺷﻮﺩ ﻋﻤﺮ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻭﺭﻭﺩﻱ ﻧﻴﺰ ﺗﻤﺎﻡ ﻣﻲ ﺷﻮﺩ .ﺩﺭ ﻣﺜﺎﻝ ﺑﺎﻻ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ Mﻓﻘﻂ ﺩﺭ ﺑﻼﻙ ﭘﺮﻭﺳﻴﺠﺮ ﻗﺎﺑـﻞ
ﺍﺳﺘﻔﺎﺩﻩ ﺍﺳﺖ.
ﺩﺭ ﭘﺎﺳﻜﺎﻝ ﭘﺎﺭﺍﻣﺘﺮﻫﺎ ﺑﻪ ﺩﻭ ﺩﺳﺘﻪ ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﻧﺪ:
- ١ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻣﺠﺎﺯﻱ ﯾﺎ ﺻﻮري)ﻇﺎﻫﺮﻱ( )(Formal parameters
)(Actual parameters - ٢ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻭﺍﻗﻌﻲ)ﺣﻘﻴﻘﻲ(
ﺑﻪ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻳﻲ ﻛﻪ ﻫﻨﮕﺎﻡ ﺗﻌﺮﻳﻒ ﭘﺮﻭﺳﻴﺠﺮ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﻧﺪ ﭘﺎﺭﺍﻣﺘﺮ ﻣﺠﺎﺯﻱ ﻣﻲ ﮔﻮﻳﻨﺪ .ﺑﻪ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻳﻲ ﻛﻪ ﻫﻨﮕﺎﻡ ﻓﺮﺍﺧﻮﺍﻧﻲ
ﭘﺮﻭﺳﻴﺠﺮ ﺗﺤﻮﻳﻞ ﭘﺮﻭﺳﻴﺠﺮ ﻣﻲ ﺷﻮﻧﺪ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻭﺍﻗﻌﻲ ﻣﻲ ﮔﻮﻳﻨﺪ .ﺩﺭ ﺍﺯﺍﻱ ﻫﺮ ﭘﺎﺭﺍﻣﺘﺮﻣﺠﺎﺯﻱ ﻳﻚ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺍﻗﻌﻲ ﻭﺟﻮﺩ ﺩﺍﺭﺩ.ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ
ﻣﺠﺎﺯﻱ ﺑﻪ ﺳﻪ ﺩﺳﺘﻪ ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﻧﺪ:
ﺗﻤﺮﯾﻦ ( ﻣﺸﺨﺺ ﮐﻨﯿﺪ ﮐﻪ ﺑﺎ اﺟﺮاي ﺑﺮﻧﺎﻣﻪ زﯾﺮ ﺑﺮاي دﺳﺘﻮرﻫﺎي Writelnﭼﻪ اﻋﺪادي در ﺧﺮوﺟﯽ ﭼﺎپ ﻣﯽ ﺷﻮﻧﺪ؟
;program ex1 راﻫﻨﻤﺎﯾﯽ :ﺑﺮاي ﺟﻮاب دادن ﺑﻪ اﯾﻨﮕﻮﻧﻪ ﺳﻮاﻟﻬﺎ اﺑﺘﺪا ﺟﺪوﻟﯽ ﻣﻄﺎﺑﻖ
ﺟﺪول زﯾﺮ رﺳﻢ ﻣﯽ ﻧﻤﺎﯾﯿﻢ و ﺳﭙﺲ ﺑﺎ ﻣﻘﺪار دﻫﯽ ﻣﺘﻐﯿﺮﻫﺎ ﺑﻪ راﺣﺘﯽ و
var
;x,k:integer
;)procedure test(m:integer;n:integer ﺑﺎ ﮐﻤﺘﺮﯾﻦ اﺷﺘﺒﺎه ﭘﺎﺳﺦ ﺻﺤﯿﺢ را ﺑﺪﺳﺖ ﻣﯽ آورﯾﻢ :
var
;z:integer
begin ﺳﺮاﺳﺮي ﺳﺮاﺳﺮي ﻣﺤﻠﯽ ﻣﺤﻠﯽ ﻣﺤﻠﯽ
;z:=m+n
;m:=m+2
x k m n z
;n:=n+7 12 50 12 50 62
;x:=x+1 13 14 57
;)writeln(x,m,n
;end
begin
ﻫﻤﺎن ﻃﻮر ﮐﻪ ﻣﺸﺎﻫﺪه ﻣﯽ ﮐﻨﯿﺪ ﺑﺎ اﺟﺮاي ﺑﺮﻧﺎﻣﻪ روﺑـﺮو در دﺳـﺘﻮر
;x:=12
;k:=50 Writelnداﺧﻞ ﭘﺮوﺳﯿﺠﺮ ﺑﺮاي ﻣﺘﻐﯿﺮﻫﺎي xوmو nﺑﻪ ﺗﺮﺗﯿﺐ اﻋـﺪاد
;)test(x,k
13و 14و 57وﺑﺮاي دﺳﺘﻮر Writelnداﺧﻞ ﺑﻼك اﺻـﻠﯽ ﺑﺮﻧﺎﻣـﻪ
;)writeln(x,k
end. ﺑﺮاي ﻣﺘﻐﯿﺮﻫﺎي xو kﺑﻪ ﺗﺮﺗﯿﺐ اﻋﺪاد 13و 50ﭼﺎپ ﻣﯽ ﺷﻮد.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 53
ﺗﻤﺮﯾﻦ ( ﻣﺸﺨﺺ ﮐﻨﯿﺪ ﮐﻪ ﺑﺎ اﺟﺮاي ﺑﺮﻧﺎﻣﻪ زﯾﺮ ﺑﺮاي دﺳﺘﻮرﻫﺎي Writelnﭼﻪ اﻋﺪادي در ﺧﺮوﺟﯽ ﭼﺎپ ﻣﯽ ﺷﻮﻧﺪ؟
ﺍﻳﻦ ﭘﺎﺭﺍﻣﺘﺮ ﺑﺮﺍﻱ ﺩﺭﻳﺎﻓﺖ ﻭ ﺍﺭﺳﺎﻝ ﻣﻘﺎﺩﻳﺮ ﺑﻪ ﭘﺮﻭﺳﻴﺠﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻳﻌﻨﻲ ﻫﻢ ﺑﺮﺍﻱ ﻭﺭﻭﺩﻱ ﺩﺍﺩﻩ ﻫﺎ ﺑﻪ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻭ
ﻫﻢ ﺑﺮﺍﻱ ﺩﺭﻳﺎﻓﺖ ﺩﺍﺩﻩ ﺍﺯ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ .ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺑﻪ ﺍﻳﻦ ﭘﺎﺭﺍﻣﺘﺮﻫﺎ ،ﭘﺎﺭﺍﻣﺘﺮ ﺧﺮﻭﺟﻲ ﻧﻴﺰ ﻣﻲ ﮔﻮﻳﻨﺪ .ﻧﺸﺎﻧﺔ ﭘﺎﺭﺍﻣﺘﺮﺧﺮﻭﺟﻲ ﻭﺟﻮﺩ ﻛﻠﻤﺔ
Varﻗﺒﻞ ﺍﺯ ﻧﺎﻡ ﭘﺎﺭﺍﻣﺘﺮ ﺩﺭ ﺧﻂ ﻋﻨﻮﺍﻥ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺍﺳﺖ .ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﭘﺎﺭﺍﻣﺘﺮ ﻣﺮﺟﻊ )ﺧﺮﻭﺟﻲ( ﺩﺭ ﺑﺪﻧﺔ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺗﻐﻴﻴﺮ ﻣﻲ ﻛﻨﺪ ﺗﻐﻴﻴﺮﺍﺕ ﺁﻥ
ﺩﺭ ﭘﺎﺭﺍﻣﺘﺮﻭﺍﻗﻌﻲ ﺁﻥ ﺍﻋﻤﺎﻝ ﻣﻲ ﺷﻮﺩ .ﻣﻲ ﺗﻮﺍﻥ ﮔﻔﺖ ﻛﻪ ﭘﺎﺭﺍﻣﺘﺮ ﻣﺮﺟﻊ ﻭ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺍﻗﻌﻲ ﺁﻥ ﻳﻚ ﻣﺤﻞ ﺩﺭ ﺣﺎﻓﻈﻪ ﻫﺴﺘﻨﺪ ﺑﺎ ﺩﻭ ﻧﺎﻡ.
ﺩﺭ ﻣﺜﺎﻝ ﺻﻔﺤﻪ ﻗﺒﻞ ﭘﺎﺭﺍﻣﺘﺮ ﻣﺠﺎﺯﻱ Nﺍﺯ ﻧﻮﻉ ﻣﺮﺟﻊ ﺍﺳﺖ ﻛﻪ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺍﻗﻌﻲ ﺁﻥ Zﺍﺳﺖ Z .ﻣﻘﺪﺍﺭ 25ﺭﺍ ﺗﺤﻮﻳـﻞ Nﻣـﻲ ﺩﻫـﺪ ﺳـﭙﺲ ﺩﺭ
ﺑﺪﻧﻪ ﭘﺮﻭﺳﻴﺠﺮ ; N:=N+5ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ Nﻣﺴﺎﻭﻱ 30ﻣـﻲ ﺷـﻮﺩ ﻭ ﭼـﻮﻥ ﻳـﻚ ﭘـﺎﺭﺍﻣﺘﺮ ﻣﺮﺟـﻊ ﺍﺳـﺖ Zﻧﻴـﺰ 30ﻣـﻲ
ﺷﻮﺩ.ﻭﻗﺘﻲ ﭘﺮﻭﺳﻴﺠﺮ ﺗﻤﺎﻡ ﻣﻲ ﺷﻮﺩ Zﻣﺴﺎﻭﻱ 30ﺷﺪﻩ ﺍﺳﺖ.
ﻧﻜﺘﻪ( ﭘﺎﺭﺍﻣﺘﺮ ﻭﺍﻗﻌﻲ ﻣﺮﺑﻮﻁ ﺑﻪ ﻳﻚ ﭘﺎﺭﺍﻣﺘﺮ ﻣﺠﺎﺯﻱ ﻣﺮﺟﻊ)ﻣﺘﻐﻴﺮ( ﺣﺘﻤﺎ ﺑﺎﻳﺪ ﻳﻚ ﻣﺘﻐﻴﺮ)ﯾﺎﺛﺎﺑﺖ ﺑﺎ ﻧﻮﻉ( ﺑﺎﺷﺪ ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ﺧﻄﺎ
ﺍﺳﺖ .ﻣﺜﻼ ﺩﺭ ﻣﺜﺎﻝ ﻗﺒﻠﻲ ﻧﻤﻲ ﺗﻮﺍﻥ ﺑﺠﺎﻱ ;) ADD(K,Zﺩﺳﺘﻮﺭ;) ADD(K,Z*4ﺭﺍ ﻧﻮﺷﺖ.
ﭘﺎراﻣﺘـﺮﺛﺎﺑﺖ):(Const
ﺍﻳﻦ ﭘﺎﺭﺍﻣﺘﺮﻫﺎ ﻣﺎﻧﻨﺪ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻣﺮﺟﻊ ﻫﺴﺘﻨﺪ ﺑﺎ ﺍﻳﻦ ﺗﻔﺎﻭﺕ ﻛﻪ ﻣﻘﺪﺍﺭ ﭘﺎﺭﺍﻣﺘﺮ ﺛﺎﺑﺖ ﺭﺍ ﺩﺭ ﻃﻮﻝ ﺍﺟﺮﺍﻱ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻧﻤﻲ ﺗﻮﺍﻥ ﺗﻐﻴﻴﺮ ﺩﺍﺩ .ﺑـﺮﺍﻱ
ﺷﻨﺎﺳﺎﻳﻲ ﺍﻳﻦ ﭘﺎﺭﻣﺘﺮﻫﺎ ﺍﺯ ﻛﻠﻤﺔ Constﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﺍﮔﺮ ﻣﻘﺪﺍﺭ ﺁﻥ ﺭﺍ ﺩﺭ ﺑﺪﻧﺔ ﺑﻼﻙ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺗﻐﻴﻴﺮ ﺩﻫﻴﻢ ﺩﺭ ﺯﻣﺎﻥ ﺗﺮﺟﻤـﻪ ﺧﻄـﺎ ﺭﺥ
ﻣﻲ ﺩﻫﺪ.
;program T
var ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﭘﺎﺭﺍﻣﺘﺮ wﺍﺯ ﻧﻮﻉ ﺛﺎﺑﺖ ﺍﺳﺖ ﻭ
;x:integer ﻧﻤﻲ ﺗﻮﺍﻥ ﻣﻘﺪﺍﺭ wﺭﺍ ﺩﺭ ﺑﺪﻧﺔ ﭘﺮﻭﺳﻴﺠﺮ testﺗﻐﻴﻴﺮ ﺩﺍﺩ.
;)procedure test(const w:integer
begin
;w:=w+1 ﻧﻜﺘﻪ( ﭘﺎﺭﺍﻣﺘﺮ ﻭﺍﻗﻌﻲ ﻣﺮﺑﻮﻁ ﺑﻪ ﭘﺎﺭﺍﻣﺘﺮﺛﺎﺑﺖ ﻣﻲ ﺗﻮﺍﻧﺪ
;)writeln(w ﻣﺘﻐﻴﺮﺛﺎﺑﺖ ﻳﺎ ﻋﺒﺎﺭﺕ ﺑﺎﺷﺪ.
;end
ﻣﺘﻐﻴﺮ wﻣﺤﻠﻲ ﺍﺳﺖ ﻭ ﻣﺘﻐﻴﺮ xﺳﺮﺍﺳﺮﻱ ﻫﺴﺖ.
begin
;x:=20
;)test(x
;)writeln(x
end.
: رادرﯾﺎﻓﺖ ﮐﻨﺪ و ﺳﭙﺲ ﻣﯿﺎﻧﮕﯿﻦ ﻫﻤﺎﻫﻨﮓ آﻧﺮا ﺣﺴﺎب ﮐﻨﺪyوx ﻣﺜﺎل ( ﺑﺮﻧﺎﻣﻪ ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ اﺑﺘﺪا دو ﻋﺪد ﻣﺜﺒﺖ
procedure magh(n:integer ; var m:integer); را ﺑـﺎx ﺑﺮاي ﻣﺤﺎﺳﺒﻪ ﻣﯿﺎﻧﮕﯿﻦ ﻫﻤﺎﻫﻨـﮓ ﻣﻘﻠـﻮب: ﺗﻮﺿﯿﺢ
begin
m:=0; ﺣﺎﺻـﻞ را، ﺟﻤﻊ ﻣﯽ ﮐﻨﯿﻢ و ﺗﻘﺴﯿﻢ ﺑﺮ دو ﻣﯽ ﮐﻨﯿﻢy ﻣﻘﻠﻮب
while n>0 do .ﻋﺪد ﺑﺪﺳﺖ آﻣﺪه ﻣﯿﺎﻧﮕﯿﻦ ﻫﻤﺎﻫﻨﮓ اﺳﺖ. ﻣﻘﻠﻮب ﻣﯽ ﮐﻨﯿﻢ
begin
m:=m*10 + n mod 10;
n:=n div 10;
end;
end;
procedure avgH(x,y:integer; var z:integer);
var
a,b,c:integer;
begin
magh(x,a);
magh(y,b);
c:=(a+b) div 2;
magh(c,z);
end;
var
h,x,y:integer;
begin
readln(x,y);
avgH(x,y,h);
writeln(h);
end.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 57
ﺗﺎﺑـﻊ ﯾﺎ ﻓﺎﻧﮑﺸﻦ):(Function
ﺗﻮﺍﺑﻊ ﻧﻮﻋﻲ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺴﺘﻨﺪ ﻭ ﻣﺎﻧﻨﺪ ﭘﺮﻭﺳﻴﺠﺮﻫﺎ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻭﺭﻭﺩﻱ ) ﺍﺯ ﻧﻮﻉ ﻣﺮﺟﻊ ﻳﺎ ﻣﻘﺪﺍﺭ ﻳﺎ ﺛﺎﺑﺖ( ﺩﺍﺭﻧﺪ .ﺍﻣﺎ ﺗﺎﺑﻊ ﺣﺪﺍﻗﻞ ﻳﻚ ﺧﺮﻭﺟـﻲ
ﺩﺍﺭﺩ .ﺩﺭ ﻣﻮﺍﺭﺩﻱ ﻛﻪ ﺣﺪﺍﻗﻞ ﺑﻪ ﻳﻚ ﺧﺮﻭﺟﻲ ﻧﻴﺎﺯ ﺩﺍﺭﻳﻢ ﺍﺯ ﺗﺎﺑﻊ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ.
ﺑﺮﺍﻱ ﺗﻌﺮﻳﻒ ﺗﺎﺑﻊ ﺍﺯ ﻛﻠﻤﺔ ﺭﺯﺭﻭ ﺷﺪﺓ Functionﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﻫﺮﺁﻧﭽﻪ ﺭﺍ ﻛﻪ ﺑـﺮﺍﻱ ﭘﺮﻭﺳـﻴﺠﺮﻫﺎ ﺑﺤـﺚ ﻛـﺮﺩﻳﻢ ﺑـﺮﺍﻱ ﺗـﺎﺑﻊ ﻫـﺎ ﻫـﻢ
ﻫﻤﺎﻧﻄﻮﺭ ﺍﺳﺖ .ﺗﻨﻬﺎ ﺗﻔﺎﻭﺕ ﺗﺎﺑﻊ ﺑﺎ ﭘﺮﺩﺍﺯﻩ ﺩﺭ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺗﺎﺑﻊ ﺩﺍﺭﺍﻱ ﻳﻚ ﺧﺮﻭﺟﻲ ﺍﺳﺖ .ﺷﻜﻞ ﻛﻠﻲ ﺗﻌﺮﻳﻒ ﺗﺎﺑﻊ:
; ﻧﻮﻉ ﺧﺮﻭﺟﻲ ﺗﺎﺑﻊ ) :ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻣﺠﺎﺯﻱ ﻭ ﻧﻮﻉ ﺁﻧﻬﺎ ( ﻧﺎﻡ ﺗﺎﺑﻊ Function
ﺗﻌﺎﺭﻳﻒ ﻣﺮﺑﻮﻁ ﺑﻪ ﺗﺎﺑﻊ
Begin
ﺩﺳﺘﻮﺭﺍﺕ ……..
; End
ﻧﻤﻮﻧﻪ ﻫﺎﯾﯽ از ﻋﻨـﻮان ﭼﻨﺪ ﺗﺎﺑﻊ :
; 1)FUNCTION Menu : Integer
; 2)FUNCTION Test (r : Real):Real
;3)FUNCTION Test1 (x,y : Integer):Integer
;4)FUNCTION Test2 (x:integer ; VAR i:Integer):Boolean
ﺩﺭ ﺗﺎﺑﻊ ﺍﻭﻝ ﻧﺎﻡ ﺗﺎﺑﻊ Menuﻣﯽ ﺑﺎﺷﺪ ﻭ ﺧﺮﻭﺟﯽ ﺁﻥ ﺍﺯﻧﻮﻉ Integerﺍﺳﺖ.ﻳﻌﻨﯽ ﻳﮏ ﻋﺪﺩ ﺻﺤﻴﺢ ﺭﺍ ﺑﺮ ﻣﯽ ﮔﺮﺩﺍﻧﺪ.ﺗﺎﺑﻊ ﺩﻭﻡ ﻳﮏ ﭘـﺎﺭﺍﻣﺘﺮ
ﻭﺭﻭﺩﯼ ﺍﻋﺸﺎﺭﯼ ﺑﻨﺎﻡ rﺩﺍﺭﺩ ﻭ ﺧﺮﻭﺟﯽ ﺁﻥ ﺍﺯ ﻧﻮﻉ Realﺍﺳﺖ.ﻳﻌﻨﯽ ﻳﮏ ﻋﺪﺩ ﺍﻋﺸﺎﺭﯼ ﻭﺍﺭﺩ ﺁﻥ ﻣﯽ ﺷﻮﺩ ﻭ ﻳـﮏ ﻋـﺪﺩ ﺍﻋـﺸﺎﺭﯼ ﺍﺯ ﺁﻥ ﺧـﺎﺭﺝ
ﻣﯽ ﮔﺮﺩﺩ.ﺗﺎﺑﻊ ﺳﻮﻡ ﺩﻭ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﯼ ﺻﺤﻴﺢ ﺑﻨﺎﻣﻬـﺎﯼ xﻭ yﺩﺍﺭﺩ،ﻳﻌﻨـﯽ ﺩﻭ ﻋـﺪﺩ ﺻـﺤﻴﺢ ﻭﺍﺭﺩ ﺁﻥ ﻣـﯽ ﺷـﻮﺩ ﻭ ﺧﺮﻭﺟـﯽ ﺁﻥ ﻧﻴـﺰ ﺍﺯ ﻧـﻮﻉ
Integerﺍﺳﺖ ﻭ ﻳﮏ ﻋﺪﺩ ﺻﺤﻴﺢ ﺭﺍ ﺑﺮ ﻣﯽ ﮔﺮﺩﺍﻧﺪ .ﺗﺎﺑﻊ ﭼﻬﺎﺭﻡ ﻳﮏ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﯼ ﺻـﺤﻴﺢ ) (xﻭ ﺩﻭ ﺧﺮﻭﺟـﯽ ﺩﺍﺭﺩ ﮐـﻪ ﻳﮑـﯽ ﺍﺯ ﻃﺮﻳـﻖ
ﭘﺎﺭﺍﻣﺘﺮ iﺍﺳﺖ ﻭﺍﺯﻃﺮﻳﻖ ﺁﻥ ﻳﮏ ﻋﺪﺩ ﺻﺤﻴﺢ ﺧﺎﺭﺝ ﻣﯽ ﮔﺮﺩﺩ ﻭ ﺩﻳﮕﺮﯼ ﺍﺯ ﻧﻮﻉ ﺑﻮﻟﯽ ﺍﺳﺖ ﮐﻪ ﻳﮑـﯽ ﺍﺯ ﺩﻭ ﻣﻘـﺪﺍﺭ Trueﻳـﺎ Falseﺑـﺮ ﻣـﯽ
ﮔﺮﺩﺩ.
ﻧﻜﺘﻪ( ﻧﺎﻡ ﺗﺎﺑﻊ ﺍﺯ ﻗﻮﺍﻧﻴﻦ ﻧﺎﻡ ﮔﺬﺍﺭﻱ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﻏﻴﺮﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﭘﻴﺮﻭﻱ ﻣﻲ ﻛﻨﺪ.
ﻧﻜﺘﻪ( ﻧﺎﻡ ﺗﺎﺑﻊ ﻣﺎﻧﻨﺪ ﻳﻚ ﻣﺘﻐﻴﺮ ﻣﺤﻠﻲ ﺩﺭ ﻃﻮﻝ ﺍﺟﺮﺍﻱ ﺗﺎﺑﻊ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ .ﻣﻌﻤﻮﻻ ﺩﺭ ﺩﺍﺧﻞ ﺑﻼﻙ ﺗﺎﺑﻊ ،ﺣﺪﺍﻗﻞ ﻳﻚ ﺩﺳـﺘﻮﺭ
ﺍﻧﺘﺴﺎﺏ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺑﺎﻳـﺪ ﺑﺎﺷﺪ .ﺯﻳﺮﺍ ﻣﻘﺪﺍﺭﻱ ﺭﺍ ﻛﻪ ﺗﺎﺑﻊ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ ﺩﺭ ﻧﺎﻡ ﺗﺎﺑﻊ ﺭﻳﺨﺘﻪ ﻣﻲ ﺷﻮﺩ.
; ﻣﻘﺪار ﺧﺮوﺟﯽ = :ﻧﺎم ﺗﺎﺑﻊ
ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ OEﻳﻚ ﺗﺎﺑﻊ ﺍﺳﺖ ﻛﻪ ﺩﺍﺭﺍﻱ ﻳـﻚ ﭘـﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺍﺯ ﻧـﻮﻉ ﻣﺠـﺎﺯﻱ
;Var A:Integer
;Function OE(F:integer):Boolean ﻣﻘﺪﺍﺭ) (Valueﺍﺳﺖ ﻭ ﺧﺮﻭﺟﻲ ﺁﻥ ﺍﺯ ﻧﻮﻉ Booleanﺍﺳﺖ .ﻣﺘﻐﻴـﺮ Zﻳـﻚ ﻣﺘﻐﻴـﺮ
Var ﻣﺤﻠﻲ ﺍﺳﺖ ﻭ ﻣﺘﻐﻴﺮ Aﻳﻚ ﻣﺘﻐﻴﺮ ﺳﺮﺍﺳﺮﻱ ﺍﺳﺖ ﻭ ﻫﻤﻪ ﺑﺤﺚ ﻫـﺎﻳﻲ ﻛـﻪ ﺩﺭ ﻣـﻮﺭﺩ
;Z:Real ﻣﺘﻐﻴﺮﻫﺎﻱ ﻣﺤﻠﻲ ﻭ ﺳﺮﺍﺳﺮﻱ ﺩﺍﺷﺘﻴﻢ ﺍﻳﻨﺠﺎ ﻧﻴﺰ ﻣﻄﺮﺡ ﺍﺳﺖ.
Begin
If (F Mod 2)=0 then ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﻧﺎﻡ ﺗـﺎﺑﻊ OEﺍﺳـﺖ ﻛـﻪ ﺩﺭ ﻃـﻮﻝ ﺍﺟـﺮﺍﻱ ﺗـﺎﺑﻊ ﻳـﻚ ﻣﺘﻐﻴـﺮ ﺍﺯﻧـﻮﻉ
OE:=False Booleanﺍﺳﺖ ﻭ ﺣﺪﺍﻗﻞ ﻳﻜﺒﺎﺭ ﺩﺭ ﻃﻮﻝ ﺍﺟﺮﺍﻱ ﺗـﺎﺑﻊ ﺑﺎﻳـﺪ ﻣﻘـﺪﺍﺭﺩﻫﻲ ﺷـﻮﺩ ﺯﻳـﺮﺍ
Else ﻣﻘﺪﺍﺭﻱ ﺭﺍ ﻛﻪ ﺗﺎﺑﻊ ﺑﺮﻣﻲ ﮔﺮﺩﺍﻧﺪ ﺩﺭ OEﺑﺎﻳﺪ ﺫﺧﻴﺮﻩ ﺷﻮﺩ.
;OE:=True
;Z:=14.6
;End ﻧﻜﺘﻪ( ﭼﻮﻥ ﺗﺎﺑﻊ ﻳﻚ ﻣﻘﺪﺍﺭﻱ ﺭﺍ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ ﻧﺤﻮﺓ ﺻﺪﺍ ﺯﺩﻥ )ﻓﺮﺍﺧﻮﺍﻧﻲ ﻛﺮﺩﻥ(
Begin
;A:=19 ﺗﺎﺑﻊ ﺑﺎ ﭘﺮﻭﺳﻴﺠﺮ ﻣﺘﻔﺎﻭﺕ ﺍﺳﺖ .ﺗﺎﺑﻊ ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺭ ﻳﻚ ﻋﺒﺎﺭﺕ ﻣﺎﻧﻨﺪ ﻳـﻚ ﻣﺘﻐﻴـﺮ
;))Writeln(OE(A ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﻳﺎ ﺩﺭ ﺩﺳﺘﻮﺭ ﺧﺮﻭﺟﻲ ﻗﺮﺍﺭ ﮔﻴﺮﺩ .ﺑﻪ ﻃﻮﺭ ﻛﻠﻲ ﺑﻪ ﺗﻨﻬﺎﻳﻲ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻧﻤﻲ
;)’*’(Write ﺷﻮﺩ.
End.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 58
ﻣﺜﺎل( ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﯾﮏ ﻋﺪد از ورودي درﯾﺎﻓﺖ ﮐﺮده ﺳﭙﺲ ﺗﻮﺳﻂ ﺗﺎﺑﻌﯽ ﺑﻨﺎم Factﻓﺎﮐﺘﻮرﯾﻞ ﻋـﺪد را ﻣﺤﺎﺳـﺒﻪ و در
ﺑﺮﻧﺎﻣﻪ اﺻﻠﯽ ﭼﺎپ ﻧﻤﺎﯾﺪ.
Var
;N:integer
Function ;Fact (M:integer) : longint
Var
;P,I:integer
Begin
;P:=1
For I:=1 to M do
;P:=P*I
;Fact:=P
;End
Begin
;)Readln(N
;) )Writeln('Factorial is = ' , Fact(N
Readln
End.
ﺗﻔـﺎوت ﻫﺎي ﭘﺮدازه و ﺗﺎﺑﻊ:
-١ﺧﻂ ﻋﻨﻮﺍﻥ ﭘﺮﺩﺍﺯﻩ ﺑﺎ Procedureﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ ﺍﻣﺎ ﺗﺎﺑﻊ ﺑﺎ Functionﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ.
-٢ﺩﺭ ﺍﻧﺘﻬﺎﻱ ﺧﻂ ﻋﻨﻮﺍﻥ ﺗﺎﺑﻊ ،ﻧﻮﻉ ﺩﺍﺩﺓ ﺧﺮﻭﺟﻲ )ﺑﺮﮔﺸﺘﻲ( ﺗﺎﺑﻊ ﻣﺸﺨﺺ ﻣﻲ ﺷﻮﺩ.
-٣ﻫﺮ ﺗﺎﺑﻊ ﺣﺪﺍﻗﻞ ﻳﻚ ﺧﺮﻭﺟﻲ ﺩﺍﺭﺩ ﺍﻣﺎ ﭘﺮﺩﺍﺯﻩ ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺍﺩﺓ ﺧﺮﻭﺟﻲ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ ) .ﺩﺍﺩﺓ ﺧﺮﻭﺟﻲ ﺩﺭ ﭘﺮﺩﺍﺯﻩ ﻳﻌﻨﻲ ﭘﺎﺭﺍﻣﺘﺮ ﻣﺠﺎﺯﻱ ﺍﺯ ﻧﻮﻉ
ﻣﺮﺟﻊ(
-٤ﺩﺭ ﺑﻼﻙ ﻫﺮ ﺗﺎﺑﻊ ﺣﺪﺍﻗﻞ ﻳﻚ ﺩﺳﺘﻮﺭ ﺑﺮﺍﻱ ﺭﻳﺨﺘﻦ ﻣﻘﺪﺍﺭ ﺧﺮﻭﺟﻲ ﺩﺭ ﻧﺎﻡ ﺗﺎﺑﻊ ﻭﺟﻮﺩ ﺩﺍﺭﺩ.
-٥ﻧﺤﻮﺓ ﻓﺮﺍﺧﻮﺍﻧﻲ ﺗﺎﺑﻊ ﺑﺎ ﭘﺮﺩﺍﺯﻩ ﻣﺘﻔﺎﻭﺕ ﺍﺳﺖ.
;Const K:Integer=5 ﻣﺜﺎﻝ( ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
;Function S(Var A:Integer):Longint
Var ;C:Char
Begin
;S:=A*A
;A:=A+3
;K:=K+2
;)Write(K,A
;End
Begin
;)Writeln(S(K)); Write(K
End.
ﻣﺜﺎﻝ( ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
;Const X:Byte=3; I=2
;Function F(Var X:byte ; I:Byte):Byte ﺝ(9 ﺏ(19 ﺍﻟﻒ( 24
Begin ﺩ(20
;X:=X*2+I ﻧﻜﺘﻪ( ﺩﺭ ﻋﺒﺎﺭﺕ ; X:=X+F(X,I)+Xﻫﺮ ﻋﻤﻠﮕﺮﻱ ﻛﻪ ﺍﻭﻟﻮﻳﺖ ﺍﻭﻝ
;F:=X
;End ﺩﺍﺭﺩ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﻭ ﻫﺮ ﻋﻤﻠﮕﺮﻱ ﻛﻪ ﺍﻟﻮﻳﺖ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﺍﺑﺘﺪﺍ ﻋﻤﻠﻮﻧﺪ
Begin ﺳﻤﺖ ﭼﭗ ﺁﻥ ﻣﺤﺎﺳﺒﻪ ﻣﻲ ﺷﻮﺩ ﺳﭙﺲ ﻋﻤﻠﻮﻧﺪ ﺳﻤﺖ ﺭﺍﺳﺖ ﺁﻥ.
;X:=X+F(X,I)+X ﺩﺭ ﻣﺜﺎﻝ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺑﺘﺪﺍ ) X+F(X,Iﻣﺤﺎﺳﺒﻪ ﻣﻲ ﺷﻮﺩ ﻛﻪ Xﺳﻤﺖ
;)Write(X
End. ﭼﭗ ﺑﺮﺍﺑﺮ 3ﺍﺳﺖ ﻭ ﺣﺎﻝ ﺑﺎﻳﺪ ) F(X,Iﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻛﺮﺩ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 59
زﯾﺮﺑﺮﻧﺎﻣﻪ ﻫﺎي ﻣﺘﺪاﺧﻞ:
ﮔﺎﻫﻲ ﻫﻨﮕﺎﻡ ﺗﻌﺮﻳﻒ ﻳﻚ ﭘﺮﻭﺳﻴﺠﺮ ﻳﺎ ﻳﻚ ﺗﺎﺑﻊ ﺩﺭ ﻗﺴﻤﺖ ﺗﻌﺎﺭﻳﻒ ﺁﻥ ﻣﻤﻜﻦ ﺍﺳﺖ ﺗﺎﺑﻊ ﻳﺎ ﭘﺮﻭﺳﻴﺠﺮ ﺩﻳﮕﺮﻱ ﺗﻌﺮﻳﻒ ﺷﻮﺩ ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻـﻮﺭﺕ
ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻣﺘﺪﺍﺧﻞ ﺗﺸﻜﻴﻞ ﻣﻲ ﺷﻮﻧﺪ .ﻣﺜﺎﻝ:
;Var M:Integer
;)Procedure AZ(F:Integer ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺗﺎﺑﻊ HHﺧﻮﺩ ﻗﺴﻤﺘﻲ ﺍﺯ ﭘﺮﻭﺳﻴﺠﺮ AZﺍﺳﺖ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﻓﻘـﻂ
;Var K:Char ﺩﺭ ﭘﺮﻭﺳﻴﺠﺮ AZﻣﻲ ﺗﻮﺍﻥ ﺍﺯﺁﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ )ﺁﻥ ﺭﺍ ﺻﺪﺍ ﺯﺩ(.
;Function HH():Char
;Var I:Integer ﻣﺘﻐﻴﺮ Iﻳﻚ ﻣﺘﻐﻴﺮ ﻣﺤﻠﻲ ﺑﺮﺍﻱ ﺗﺎﺑﻊ HHﺍﺳﺖ ﻭ ﻣﺘﻐﻴﺮ Kﻳﻚ ﻣﺘﻐﻴﺮ ﻣﺤﻠـﻲ ﺍﺳـﺖ
Begin ﺑـﺮﺍﻱ AZﻭ . HHﻳﻌﻨـﻲ ﺩﺭ ﻫـﺮ ﺩﻭ ﺯﻳﺮﺑﺮﻧﺎﻣـﻪ HHﻭ AZﻣـﻲ ﺗﻮﺍﻧـﺪ ﺩﺳﺘﺮﺳــﻲ
;)I:=Random(26 ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ.
;)HH:=CHR(I+65
ﻣﺘﻐﻴﺮ Mﻳﻚ ﻣﺘﻐﻴﺮ ﺳﺮﺍﺳﺮﻱ ﺍﺳﺖ.
;End
Begin ﺍﺻﻄﻼ ﺣﺎ ﺑﻪ ﻣﺤﺪﻭﺩﻳﺖ ﻫﺎﻱ ﺩﺳﺘﺮﺳﻲ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎ ﻭ ﻣﺘﻐﻴﺮ ﻫﺎ Scopeﻣﻲ ﮔﻮﻳﻨﺪ.
;)Write(F ﻛﻪ ﺍﻳﻦ Scopeﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﻪ ﺭﺍﺑﻄﻪ ﭘﺪﺭ ﻭ ﻓﺮﺯﻧﺪﻱ ﺗﺸﺒﻴﻪ ﻛﺮﺩ.
;))(Write(HH ﭘﺮﻭﺳﻴﺠﺮ AZﻓﺮﺯﻧـﺪﻱ ﺍﺯ ﺑـﻼﻙ ﺍﺻـﻠﻲ ﺍﺳـﺖ ﻭ ﻣﺘﻐﻴـﺮ Mﭼـﻮﻥ ﺩﺭ ﺑـﺎﻻﻱ ﻫﻤـﻪ
;K:=#68
;End ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎ ﻭ ﺑﻼﻙ ﺍﺻﻠﻲ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﺳﺖ ﻣﺮﺑﻮﻁ ﺑﻪ ﻫﻤﻪ ﺍﺳﺖ ﻭ ﺗﺎﺑﻊ HHﻓﺮﺯﻧﺪ
Begin ﭘﺮﻭﺳﻴﺠﺮ AZﺍﺳﺖ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ AZﻣﻲ ﺗﻮﺍﻧﺪ HHﺭﺍ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻛﻨﺪ ﻭ ….
;M:=14
;)AZ(M
;)’*’(Write
End.
ﻧﻜﺘﻪ( ﺍﮔﺮ ﺳﺎﺧﺘﺎﺭ ﻳﻚ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﻳﻚ ﺩﺭﺧﺖ )ﭘﺪﺭ ﻭ ﻓﺮﺯﻧﺪﻱ( ﺩﺭﻧﻈﺮ
ﺑﮕﻴﺮﻳﻢ ﺁﻧﮕﺎﻩ ﻫﺮ ﭘﺪﺭﻱ ﻣﻲ ﺗﻮﺍﻧﺪ ﻓﺮﺯﻧﺪ ﺧﻮﺩ ﺭﺍ ﺻﺪﺍ ﺑﺰﻧﺪ ﻭ ﻫﺮ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺍﻳﻲ
)ﺑﻪ ﻏﻴﺮ ﺍﺯ ﺑﻼﻙ ﺍﺻﻠﻲ( ﻣﻲ ﺗﻮﺍﻧﺪ ﺧﻮﺩﺵ ﺭﺍ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻛﻨﺪ)ﺗﻮﺍﺑﻊ ﺑﺎﺯﮔﺸﺘﻲ(
ﻭ ﻫﺮ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻣﻲ ﺗﻮﺍﻧﺪ ﺯﻳﺮﺑﺮﻧﺎﻣﺔ ﺑﺮﺍﺩﺭ ﺑﺎﻻﻱ ﺧﻮﺩ ﺭﺍ ﺻﺪﺍ ﺑﺰﻧﺪ!
ﻣﺜﻼ ﺯﻳﺮﺑﺮﻧﺎﻣﺔ Fﻣﻲ ﺗﻮﺍﻧﺪ ﺧﻮﺩﺵ ﻭ Rﺭﺍ ﺻﺪﺍ ﺑﺰﻧﺪ.
ﻳﺎ ﺯﻳﺮﺑﺮﻧﺎﻣﺔ Kﻣﻲ ﺗﻮﺍﻧﺪ ﺯﻳﺮ ﺑﺮﻧﺎﻣﺔ Zﻭ Bﻭ ﺧﻮﺩﺵ ﺭﺍ ﺻﺪﺍ ﺑﺰﻧﺪ.
ﺑﺮﺍﻱ ﺑﻘﻴﻪ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎ ﺧﻮﺩﺗﺎﻥ ﭘﻴﺪﺍ ﻛﻨﻴﺪ!
ﻧﮑﺘﻪ ( ﻫﻤﺎﻥ ﻃﻮﺭ ﮐﻪ ﮔﻔﺘﻴﻢ ﺩﺭ ﺻﻮﺭﺗﯽ ﻣﯽ ﺗﻮﺍﻥ ﺍﺯ ﻳﮏ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺍﯼ ﺩﻳﮕﺮ ﺍﺳﺘﻔﺎﺩﻩ ﮐﺮﺩ ﮐﻪ ﻗﺒـﻼ ﺗﻌﺮﻳﻒ ﺷـﺪﻩ ﺑﺎﺷـﺪ .ﺩﺭ
ﺗﻮﺭﺑﻮ ﭘﺎﺳﮑﺎﻝ ﻧﻘﺺ ﻓﻮﻕ ﺑﻪ ﮐﻤﮏ ﺍﻋﻼﻥ forwardﻗﺎﺑﻞ ﺣﻞ ﺍﺳﺖ .ﺑﺪﻳﻦ ﺻﻮﺭﺕ ﮐﻪ ﺍﮔﺮ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺍﯼ ﻫﻨﮕﺎﻡ ﺗﻌﺮﻳﻒ ﺑﺎ ﺍﻋﻼﻥ forward
ﻫﻤﺮﺍﻩ ﺑﺎﺷﺪ،ﺑﺪﻭﻥ ﺭﻋﺎﻳﺖ ﺍﺯ ﭘﻴﺶ ﺗﻌﺮﻳﻒ ﺷﺪﻥ ﻣﯽ ﺗﻮﺍﻧﺪ ،ﺩﺭ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎﯼ ﺩﻳﮕﺮ ﻇﺎﻫﺮ ﺷﻮﺩ.
ﺷﮑﻞ اﻋﻼن ﺑﻪ روش forwardﺑﺼﻮرت زﯾﺮ ﻣﯽ ﺑﺎﺷﺪ :
Procedure Name ; ) ; forwardﭘﺎراﻣﺘﺮﻫﺎ(
ﻧﮑﺘﻪ ( forwardﮐﻠﻤﻪ ذﺧﯿﺮه ﺷﺪه اﺳﺖ.
; Procedure p2 ; forward
;Procedure p1
ﻣﺜﺎل :
Begin ﻫﻤﺎﻥ ﻃﻮﺭ ﮐﻪ ﻣﺸﺎﻫﺪﻩ ﻣﯽ ﮐﻨﻴﺪ ﺩﺭ ﻣﺜﺎﻝ ﺭﻭﺑﺮﻭ ﺑﺎ ﺍﻋﻼﻥ forwardﺑـﺮﺍﯼ ﭘﺮﻭﺳـﻴﺠﺮ p2ﻣـﯽ
;P2 ﺗﻮﺍﻧﻴﻢ ﺩﺭ ﺩﺍﺧﻞ ﺑﻼﮎ ﭘﺮﻭﺳﻴﺠﺮ p1ﭘﺮﻭﺳﻴﺠﺮ p2ﺭﺍ ﻓﺮﺍﺧﻮﺍﻧﯽ ﮐﻨﻴﻢ.ﻳﻌﻨﯽ ﺩﺭ ﺣﺎﻟـﺖ ﻋـﺎﺩﯼ ﻭ
;End
ﺑﺪﻭﻥ ﺍﻋﻼﻥ forwardﻧﻤـﯽ ﺗﻮﺍﻧـﺴﺘیﻢ ﺍﺯ ﺩﺍﺧـﻞ ﭘﺮﻭﺳـﻴﺠﺮ p1ﭘﺮﻭﺳـﻴﺠﺮ p2ﺭﺍ ﻓﺮﺍﺧـﻮﺍﻧﯽ
;Procedure p2
Begin ﮐﻨﻴﻢ.
;End
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 60
زﯾﺮﺑﺮﻧﺎﻣﻪ ﻫﺎي ﺑﺎزﮔﺸﺘﯽ(Recursive) :
ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻳﻚ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺧﻮﺩﺵ ﺭﺍ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻣﻲ ﻛﻨﺪ ﻳﻚ ﺯﻳﺮﻧﺎﻣﻪ ﺑﺎﺯﮔﺸﺘﻲ ﺍﻳﺠﺎﺩ ﻣﻲ ﺷﻮﺩ .ﻣﻌﻤﻮﻻ ﺑﻌﻀﻲ ﻣﺴﺎﺋﻞ ﻣﺎﻫﻴﺘﻲ ﺑﺎﺯﮔﺸﺘﻲ
ﺩﺍﺭﻧﺪ ﻳﻌﻨﻲ ﻳﻚ ﻋﻤﻞ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﺍﻣﺎ ﺑﺮ ﺭﻭﻱ ﺩﺍﺩﻩ ﻫﺎﻱ ﻣﺨﺘﻠﻔﻲ .ﻣﺎﻧﻨﺪ ﻣﺤﺎﺳﺒﺔ ﻓﺎﻛﺘﻮﺭﻳﻞ ﻳﻚ ﻋﺪﺩ!7!=7*6
ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺍﻱ ﺑﺎﺯﮔﺸﺘﻲ ﺩﻭ ﻋﻴﺐ ﺩﺍﺭﻧﺪ:
-١ﺣﺎﻓﻈﻪ ﺍﻱ ﻛﻪ ﺑﺮﺍﻱ ﻧﮕﻬﺪﺍﺭﻱ ﭘﺎﺭﺍﻣﺘﺮﻫﺎ ﺩﺭ ﻫﺮ ﻣﺮﺣﻠﻪ ﻓﺮﺍﺧﻮﺍﻧﻲ ،ﻣﺼﺮﻑ ﻣﻲ ﻛﻨﻨﺪ)(Stack
-٢ﺑﻪ ﺩﻟﻴﻞ ﻓﺮﺍﺧﻮﺍﻧﻴﻬﺎﻱ ﻣﻜﺮﺭ ،ﺍﺟﺮﺍﻱ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺑﺎﺯﮔﺸﺘﻲ ﻛﻨﺪ ﺍﺳﺖ.
ﭼﮕﻮﻧﻪ ﻣﺘﻮﺟﻪ ﺷﻮﻳﻢ ﻛﻪ ﻳﻚ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺑﺎﺯﮔﺸﺘﻲ ﻫﺴﺖ ﻳﺎ ﻧﻪ؟ ﺍﮔﺮ ﺩﺭ ﺑﺪﻧﺔ ﻳﻚ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺧﻮﺩ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺻﺪﺍ ﺯﺩﻩ ﺷﺪﻩ ﺑﺎﺷـﺪ ﺑﺎﺯﮔﺸﺘﻲ
ﺍﺳﺖ؛ ﻫﻤﭽﻨﻴﻦ ﺩﺭ ﺍﻛﺜﺮ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺑﺎﺯﮔﺸﺘﻲ ﺍﺯ If Then – Elseﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ.
ﺑﺮﺍﻱ ﺍﻳﻨﻜﻪ ﻋﻤﻠﻜﺮﺩ ﻳﻚ ﺯﻳﺮﺑﺮﻧﺎﻣﺔ ﺑﺎﺯﮔﺸﺘﻲ ﺭﺍ ﻣﺘﻮﺟﻪ ﺷﻮﻳﻢ ﺭﺍﻫﻲ ﺑﻬﺘﺮ ﺍﺯ ﺭﺳﻢ Stackﺁﻥ ﻧﻴﺴﺖ.
ﻛﻪ ﺭﻭﺵ ﺭﺳﻢ Stackﺩﺭ ﻛﻼﺱ ﺑﺤﺚ ﺧﻮﺍﻫﺪ ﺷﺪ.
;Function K(n:integer):Integer
Begin ﺗﺴﺖ( ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﺔ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
If n=1 then ﺝ( 24ﺩ(0 ﺏ(120 ﺍﻟﻒ( 720
K:=1
Else
;)K:= n * K(n-1
;End
Begin
;))Writeln(K(5
End.
;Function OP(x,y:integer):integer
Begin
If X=Y then ﺗﺴﺖ( ﺗﺎﺑﻊ ﺭﻭﺑﺮﻭ ﭼﻪ ﻋﻤﻠﻲ ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﺪ؟ x,y>=1
OP:=0 ﺏ(X div Y ﺍﻟﻒ( X/Y
Else
If X>y then ﺩ(X*Y ﺝ(X mod Y
)OP:=OP(X-Y,Y
Else
;OP:=X
;End
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 61
ﺑﺮاي درك ﺑﻬﺘﺮ زﯾﺮﺑﺮﻧﺎﻣﻪ ﻫﺎي ﺑﺎزﮔﺸﺘﯽ ﺑﻪ ﺗﻮﺿﯿﺤﺎﺗﯽ ﮐﻪ در زﯾﺮ ﺑﺮاي ﺗﺎﺑﻊ ﻓﺎﮐﺘﻮرﯾﻞ آورده ﺷﺪه اﺳﺖ ﺗﻮﺟﻪ ﮐﻨﯿﺪ :
ﺗﺎﺑﻊ ﻓﺎﮐﺘﻮرﯾﻞ ﺑﺮ روي ﻣﺠﻤﻮﻋﻪ اﻋﺪاد ﺻﺤﯿﺢ ﻣﺜﺒﺖ ،ﺑﻪ دو ﺻﻮرت زﯾﺮ ﺗﻌﺮﯾﻒ ﻣﯽ ﺷﻮد :
N ! = 1 × 2 × 3 ×…× (N-1) × N ﺗﻌﺮﯾﻒ اول :
ﺩﺭ ﻣﺜﺎﻝ ﺻﻔﺤﻪ ۵۸ﺑﺮﺍﯼ ﺑﺪﺳﺖ ﺁﻭﺭﺩﻥ ﻓﺎﮐﺘﻮﺭﻳﻞ ﻳﮏ ﻋﺪﺩ ﺍﺯ ﻃﺮﻳﻖ ﺗﺎﺑﻊ Factﺍﺯ ﺗﻌﺮﻳﻒ ﺍﻭﻝ ﺗﺎﺑﻊ ﻓﺎﮐﺘﻮﺭﻳﻞ ﺍﺳﺘﻔﺎﺩﻩ ﮐﺮﺩﻩ ﺍﻳﻢ.
ﺗﻌـﺮﯾﻒ دوم :
!)N × (N-1 N≥2
=!N
1 N = 1ﯾﺎ N = 0
ﻃﺮﯾﻘﻪ ﻣﺤﺎﺳﺒﻪ ! 3ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﻌﺮﯾﻒ دوم در ﺟﺪول زﯾﺮ ﻣﺮﺣﻠﻪ ﺑﻪ ﻣﺮﺣﻠﻪ ﻧﺸﺎن داده ﺷﺪه اﺳﺖ.
ﻧﺘﯿﺠﻪ ﻣﺤﺎﺳﺒﻪ ! 3ﺑﺎ اﺳﺘﻔﺎده از ﻫﺮ ﯾﮏ از دو روش ﺑﺎﻻ ﯾﮑﺴﺎن و ﺑﺮاﺑﺮ 6اﺳﺖ .در ﺗﻌﺮﯾﻒ دوم ﻓﺎﮐﺘﻮرﯾـﻞ ،از ﺧـﻮد ﺗـﺎﺑﻊ
ﻓﺎﮐﺘﻮرﯾﻞ ،ﺑﺮاي ﺗﻌﺮﯾﻒ آن اﺳﺘﻔﺎده ﺷﺪه اﺳﺖ ﺑﻨﺎﺑﺮاﯾﻦ ﺗﻌﺮﯾﻒ دوم را ﺗﻌﺮﯾـﻒ ﺑﺎزﮔـﺸﺘﯽ ﻓﺎﮐﺘﻮرﯾـﻞ و ﺗﻌﺮﯾـﻒ اول را
ﺗﻌﺮﯾﻒ ﻏﯿﺮ ﺑﺎزﮔﺸﺘﯽ و ﯾﺎ ﺗﮑﺮاري ) ﺑﺪﻟﯿﻞ ﺗﮑﺮار دﺳﺘﻮر ﺿﺮب ( ﻓﺎﮐﺘﻮرﯾﻞ ﻣﯽ ﻧﺎﻣﻨﺪ.
ﺍﻟﻒ( ﻣﺘﻐﻴﺮﻫﺎﻱ ﺳﺮﺍﺳﺮﻱ ﺩﺭ ﻫﻤﻪ ﺟﺎﻱ ﺑﺮﻧﺎﻣﻪ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﻫﺴﺘﻨﺪ .ﺏ( ﻧﺎﻡ ﺗﺎﺑﻊ ﺣﺪﺍﻗﻞ ﻳﻚ ﺑﺎﺭ ﺑﺎﻳﺪ ﺩﺭ ﺑﺪﻧﻪ ﺗﺎﺑﻊ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﺷﻮﺩ.
ﺝ(ﺗﺎﺑﻊ ﺑﺎﺯﮔﺸﺘﻲ ﺩﺭﻭﻥ ﺑﻠﻮﻙ ﺧﻮﺩﺵ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻣﻲ ﺷﻮﺩ .ﺩ(ﻣﺘﻐﻴﺮﻫﺎﻱ ﻣﺤﻠﻲ ﻣﺮﺑﻮﻁ ﺑﻪ ﻳﻚ ﺗﺎﺑﻊ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺍﺻﻠﻲ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ
ﻫﺴﺘﻨﺪ.
;Function S(A:integer;VAR X:integer):integer -١٢ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﺭﻭﺑﺮﻭ ﺑﻪ ﺗﺮﺗﻴﺐ ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ ﻛﺪﺍﻡ ﺍﺳﺖ؟
Begin ﺍﻟﻒ(10,26,36,5,25
;A:=A+5
;X:=X+1 ﺏ( 30,6,36,6,25
;)Write(A,X ﺝ(10,26,36,5,26
;S:=X+A
;End ﺩ(30,6,36,5,26
Begin
;A:=25; X:=5
;))Writeln(S(X,A),X,A
End. -١٣ﺗﻔﺎﻭﺕ ﭘﺎﺭﺍﻣﺘﺮ ) Valueﺍﺭﺯﺷﻲ( ﻭ ) variableﻣﺮﺟﻊ( ﺩﺭ ﭼﻴﺴﺖ؟
ﺍﻟﻒ(ﭘﺎﺭﺍﻣﺘﺮ Valueﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺭ ﻣﻮﺍﻗﻌﻲ ﻫﻢ ﻭﺭﻭﺩﻱ ﻭ ﻫﻢ ﺧﺮﻭﺟﻲ ﺑﺎﺷﺪ ﺩﺭﺻﻮﺭﺗﻴﻜﻪ ﭘﺎﺭﺍﻣﺘﺮ Variableﻓﻘﻂ ﺧﺮﻭﺟﻲ ﺍﺳﺖ.
ﺏ(ﭘﺎﺭﺍﻣﺘﺮ Variableﺗﻨﻬﺎ ﻣﻲ ﺗﻮﺍﻧﺪ ﺧﺮﻭﺟﻲ ﺑﺎﺷﺪ.
ﺝ(ﭘﺎﺭﺍﻣﺘﺮ Variableﺩﺭ ﻣﻮﺍﻗﻌﻲ ﻫﻢ ﻭﺭﻭﺩﻱ ﻭ ﻫﻢ ﺧﺮﻭﺟﻲ ﻣﻲ ﺑﺎﺷﺪ ﻭﻟﻲ Valueﻫﻤﻴﺸﻪ ﻭﺭﻭﺩﻱ ﺍﺳﺖ.
ﺩ(ﭘﺎﺭﺍﻣﺘﺮ Valueﻭ variableﻫﻢ ﻣﻲ ﺗﻮﺍﻧﺪ ﻭﺭﻭﺩﻱ ﻭ ﻫﻢ ﺧﺮﻭﺟﻲ ﺑﺎﺷﻨﺪ.
;Function F(M,N:integer):integer
Begin -١٤ﺗﺎﺑﻊ ﺯﻳﺮ ﭼﻪ ﻋﻤﻠﻲ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﺪM,N>=1 .
If N=1 then F:=M ﺩ( M-N ﺝ(MN ﺏ(M*N ﺍﻟﻒ(M+N
Else
;F:=F(M,N-1)+M
;End
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 64
ﯾﻮﻧﯿـﺖ : CRT
ﺩﺭ ﺍﺩﺍﻣﻪ ﺗﻌﺪﺍﺩﻱ ﺍﺯ ﺗﻮﺍﺑﻌﻲ ﻛﻪ ﺩﺭ ﻳﻮﻧﻴﺖ crtﻛﺎﺭﺑﺮﺩ ﺑﻴﺸﺘﺮﻱ ﺩﺍﺭﻧﺪ ﺑﺤﺚ ﻣﻲ ﺷﻮﺩ .ﺑﺮﺍﻱ ﺍﻳﻨﻜﻪ ﺑﺘﻮﺍﻧﻴﻢ ﺍﺯ ﺍﻳـﻦ ﺗﻮﺍﺑـﻊ ﺍﺳـﺘﻔﺎﺩﻩ ﻛﻨـﻴﻢ ﺑﺎﻳـﺪ
ﻳﻮﻧﻴﺖ crtﺭﺍ ﺩﺭ ﺍﺑﺘﺪﺍﻱ ﺑﺮﻧﺎﻣﻪ Usesﻛﻨﻴﻢ.
ﭘﺮﻭﺳﻴﺠﺮ : GotoXYﺍﺯ ﺍﻳﻦ ﺗﺎﺑﻊ ﺑﺮﺍﻱ ﺟﺎﺑﺠﺎ ﻛﺮﺩﻥ ﻣﻜﺎﻥ ﻧﻤﺎ ﺩﺭ ﺻﻔﺤﻪ ﺧﺮﻭﺟﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ .ﺻـﻔﺤﻪ ﻣـﺎﻧﻴﺘﻮﺭ ﺩﺍﺭﺍﻱ ٢٥ﺳـﻄﺮ ﻭ
٨٠ﺳﺘﻮﻥ ﺍﺳﺖ ) ﺩﺭ ﺣﺎﻟﺖ ﻣﺘﻨﻲ( .ﻣﺜﻼ ﺩﺳﺘﻮﺭ ;) GotoXy(74,15ﻣﻜﺎﻥ ﻧﻤﺎ ﺭﺍ ﺑﻪ ﺳﺘﻮﻥ ٧٤ﻭ ﺳﻄﺮ ١٥ﻣﻨﺘﻘﻞ ﻣﻲ ﻛﻨﺪ.
ﻧﻜﺘﻪ( ﺩﻗﺖ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﭘﺎﺭﺍﻣﺘﺮ ﺍﻭﻝ ﺳﺘﻮﻥ ﺍﺳﺖ ﻭ ﭘﺎﺭﺍﻣﺘﺮ ﺩﻭﻡ ﺳﻄﺮ ﺍﺳﺖ .ﭘﺎﺭﺍﻣﺘﺮ ﺍﻭﻝ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺑﻴﺶ ﺍﺯ ٨٠ﻭ ﭘﺎﺭﺍﻣﺘﺮ ﺩﻭﻡ ﻧﻴﺰ ﻧﻤﻲ
ﺗﻮﺍﻧﺪ ﺑﻴﺶ ﺍﺯ ٢٥ﺑﺎﺷﺪ.
ﭘﺮﻭﺳﻴﺠﺮ : TEXTCOLORﺍﺯ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺮﺍﻱ ﺗﻐﻴﻴﺮ ﺭﻧﮓ ﻗﻠﻢ ﺩﺭ ﺧﺮﻭﺟﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷـﻮﺩ .ﺩﺍﺭﺍﻱ ﻳـﻚ ﭘـﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺍﺯ ﻧـﻮﻉ
ﺻﺤﻴﺢ ﺍﺳﺖ ﻛﻪ ﺷﻤﺎﺭﻩ ﺭﻧﮓ ﺭﺍ ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪ .ﻣﺜﻼ ;) TextColor(2ﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﺍﺯ ﺍﻳﻦ ﺩﺳـﺘﻮﺭ ﺑـﻪ ﺑﻌـﺪ ﻧﻮﺷـﺘﻪ ﻫـﺎﻳﻲ ﻛـﻪ ﺩﺭ
ﻣﺎﻧﻴﺘﻮﺭ ﭼﺎﭖ ﻣﻲ ﺷﻮﻧﺪ ﺭﻧﮓ ﺳﺒﺰ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ .ﺷﻤﺎﺭﻩ ﺭﻧﮓ ﻋﺪﺩﻱ ﺑﻴﻦ 0ﺗﺎ 15ﺍﺳﺖ .ﻫﺮ ﺭﻧﮕﻲ ﺩﺍﺭﺍﻱ ﻳﻚ ﺷﻤﺎﺭﻩ ﺍﺳﺖ ﻛﻪ ﺟﺪﻭﻝ ﺁﻥ ﺩﺭ
ﻛﺘﺎﺏ ﻭﺟﻮﺩ ﺩﺍﺭﺩ .ﺑﺮﺍﻱ ﺑﺎﻻ ﺑﺮﺩﻥ ﺧﻮﺍﻧﺎﻳﻲ ﺑﺮﻧﺎﻣﻪ ﺑﺮﺍﻱ ﻫﺮ ﺷﻤﺎﺭﻩ ﺛﺎﺑﺖ ﺁﻥ ﻧﻴﺰ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﺳﺖ .ﻣﺜﻼ ) Textcolor(Greenﻫﻤﺎﻥ ﻛﺎﺭ
ﻗﺒﻠﻲ ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﺪ .ﻣﺜﻼ ﻋﺪﺩ ١٤ﺑﺮﺍﻱ ﺭﻧﮓ ﺯﺭﺩ ﺍﺳﺖ ﻛﻪ ﻣﻲ ﺗﻮﺍﻧﻴﺪ ﺍﺯ ﺛﺎﺑﺖ Yellowﻧﻴﺰ ﺑﺠﺎﻱ ١٤ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ.
ﭘﺮﻭﺳﻴﺠﺮ : ClrScrﺍﻳﻦ ﭘﺮﻭﺳﻴﺠﺮ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﻧﺪﺍﺭﺩ ﻭ ﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﺻﻔﺤﻪ ﻣﺎﻧﻴﺘﻮﺭ ﭘﺎﻙ ﺷﻮﺩ )ﻣﺎﻧﻨﺪ ﺩﺳﺘﻮﺭ Clsﺩﺭ (Dos
ﭘﺮﻭﺳﻴﺠﺮ : TextBackGround
ﺍﻳﻦ ﭘﺮﻭﺳﻴﺠﺮ ﻳﻚ ﭘﺎﺭﺍﻣﺘﺮ ﻋﺪﺩﻱ ﺻﺤﻴﺢ ﺑﻴﻦ 0ﺗﺎ 7ﺩﺍﺭﺩ ﻛﻪ ﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﺭﻧﮓ ﭘﺲ ﺯﻣﻴﻨﺔ ﺧﺮﻭﺟﻲ ﺗﻐﻴﻴﺮ ﻛﻨﺪ .ﺷﻤﺎﺭﻩ ﺭﻧﮓ ﻋﺪﺩﻱ ﺑﻴﻦ
ﺻﻔﺮ ﺗﺎ ﻫﻔﺖ ﺍﺳﺖ .ﻣﺜﺎﻝ;) TextBackGround(Blueﻳﺎ ;) TextBackGround(1ﭘﺲ ﺯﻣﻴﻨﻪ ﺭﺍ ﺁﺑﻲ ﻣﻲ ﻛﻨﻨﺪ.
ﭘﺮﻭﺳﻴﺠﺮ :Windowﺍﺯ ﺍﻳﻦ ﭘﺮﻭﺳﻴﺠﺮ ﺑﺮﺍﻱ ﺗﻌﻴﻴﻦ ﻗﺴﻤﺘﻲ ﺍﺯ ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ﺑﻪ ﻋﻨﻮﺍﻥ ﭘﻨﺠﺮﺓ ﻓﻌﺎﻝ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ.
ﻣﺜﺎﻝ Window(10,12,40,20); :ﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﭘﻨﺠﺮﺓ ﻓﻌﺎﻝ ﺷﻤﺎ ﺩﺭ ﻳﻚ ﻣﺴﺘﻄﻴﻞ ﻗﺮﺍﺭ ﮔﻴﺮﺩ.
ﺗﺴﺖ :ﺍﺯ ﭘﺮﻭﺳﻴﺠﺮ ……… .ﺑﺮﺍﻱ ﺗﻌﻴﻴﻦ ﺭﻧﮓ ﻛﺎﺭﺍﻛﺘﺮﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ.
ﺩ(CharColor ﺝ(TextColor ﺏ(TextBackGround ﺍﻟﻒ( Color
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 65
ﺗﺴﺖ :
-١ﺩﺭ ﻣﺤﻴﻂ ﺗﻮﺭﺑﻮ ﭘﺎﺳﻜﺎﻝ ﺑﺮﺍﻱ ﺁﻧﻜﻪ ﭘﻨﺠﺮﻩ ﻱ ﺩﻳﮕﺮﻱ ﺭﺍ ﺑﻪ ﻋﻨﻮﺍﻥ ﭘﻨﺠﺮﻩ ﻱ ﺟﺎﺭﻱ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﻢ ﺍﺯ ﻛﺪﺍﻡ ﻛﻠﻴﺪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ؟
ﺩ(F7 ﺝ(F5 ﺏ(F6 ﺍﻟﻒ( F4
-٢ﺟﻬﺖ ﺍﺟﺮﺍﻱ ﺧﻂ ﺑﻪ ﺧﻂ ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﻣﺤﻴﻂ ﭘﺎﺳﻜﺎﻝ ﺍﺯ ﻛﺪﺍﻡ ﻛﻠﻴﺪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ؟
ﺩ(F9 ﺝ(F5 ﺏ(F6 ﺍﻟﻒ(F7
-٣ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺩﺭ ﻣﻮﺭﺩ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ Upcaseﺻﺤﻴﺢ ﺍﺳﺖ؟
ﺍﻟﻒ( ﻳﻚ ﺭﺷﺘﻪ ﺭﺍ ﺑﻪ ﻋﻨﻮﺍﻥ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺩﺭﻳﺎﻓﺖ ﻭ ﺣﺮﻭﻑ ﺁﻥ ﺭﺍ ﺑﻪ ﺑﺰﺭﮒ ﺗﺒﺪﻳﻞ ﻣﻲ ﻛﻨﺪ
ﺏ( ﻳﻚ ﻛﺎﺭﺍﻛﺘﺮ ﺭﺍ ﺑﻪ ﻋﻨﻮﺍﻥ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺩﺭﻳﺎﻓﺖ ﻭ ﺣﺮﻑ ﺑﺰﺭﮒ ﺁﻥ ﺭﺍ ﺑﺮﻣﻲ ﮔﺮﺩﺍﻧﺪ.
ﺝ( ﺍﮔﺮ ﺩﺭ ﺭﺷﺘﻪ ﻱ ﻭﺭﻭﺩﻱ ﻛﺎﺭﺍﻛﺘﺮﻱ ﻏﻴﺮ ﺍﺯ ﺣﺮﻭﻑ ﺍﻟﻔﺒﺎﻱ ﻛﻮﭼﻚ ﺑﺎﺷﺪ ﺁﻧﺮﺍ ﺑﻪ ﺭﺷﺘﻪ ﺗﻬﻲ ﺗﺒﺪﻳﻞ ﻣﻲ ﻛﻨﺪ.
ﺩ( ﻳﻚ ﻛﺎﺭﺍﻛﺘﺮ ﻳﺎ ﺭﺷﺘﻪ ﺭﺍ ﺑﻪ ﻋﻨﻮﺍﻥ ﭘﺎﺭﺍﻣﺘﺮ ﻭﺭﻭﺩﻱ ﺩﺭﻳﺎﻓﺖ ﻛﺮﺩﻩ ﻭ ﺁﻥ ﺭﺍ ﺑﻪ ﺣﺮﻑ ﻳﺎ ﺣﺮﻭﻑ ﺑﺰﺭﮒ ﺗﺒﺪﻳﻞ ﻣﻲ ﻛﻨﺪ.
-٤ﺑﺮﺍﻱ ﺩﺭﺝ ﺗﻮﺿﻴﺤﺎﺕ ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺍﺯ ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ؟
< ﺩ( > { ﺝ( } ( ﺏ( ) ﺍﻟﻒ( ] [
-٥ﻣﺘﻐﻴﺮ ﻧﻮﻉ wordﭼﻪ ﻣﺤﺪﻭﺩﻩ ﺍﻱ ﺍﺯ ﺍﻋﺪﺍﺩ ﺭﺍ ﺩﺭ ﺧﻮﺩ ﺫﺧﻴﺮﻩ ﻣﻲ ﻛﻨﺪ ﻭ ﭼﻨﺪ ﺑﺎﻳﺖ ﻓﻀﺎ ﺍﺷﻐﺎﻝ ﻣﻲ ﻛﻨﺪ؟
ﺝ( 65535ﺗﺎ 0ﻭ ٢ﺑﺎﻳﺖ ﺩ( -128ﺗﺎ +127ﻭ ٢ﺑﺎﻳﺖ ﺏ( 65535ﺗﺎ 0ﻭ ٤ﺑﺎﻳﺖ ﺍﻟﻒ( +32767ﺗﺎ –32768ﻭ ٢ﺑﺎﻳﺖ
-٦ﺧﺮﻭﺟﻲ ﺩﺳﺘﻮﺭ ) ) Write( ODD($D) > ODD(16ﻛﺪﺍﻡ ﺍﺳﺖ؟
ﺩ(False ﺝ( 0 ﺏ( 1 ﺍﻟﻒ( TRUE
)(X-Y<10) and ( X+3*Y/4=5 -٧ﺍﺭﺯﺵ ﺑﻮﻟﻲ ﻋﺒﺎﺭﺕ ﺯﻳﺮ ﺑﻪ ﺍﺯﺍﻱ X=3ﻭ Y=4ﭼﻴﺴﺖ؟
ﺩ(0 ﺝ(1 ﺏ(True ﺍﻟﻒ( False
-٨ﻛﺪﺍﻡ ﻳﻮﻧﻴﺖ ﺩﺭ ﭘﺎﺳﻜﺎﻝ ﺑﺼﻮﺭﺕ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﺩ؟
ﺩ(Graph ﺝ(Crt ﺏ( System ﺍﻟﻒ(Dos
Var -٩ﺍﺯ ﮔﺰﻳﻨﻪ ﻫﺎﻱ ﺯﻳﺮ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﻌﺎﺭﻳﻒ ﺭﻭﺑﺮﻭﻛﺪﺍﻡ ﺻﺤﻴﺢ ﺍﺳﺖ؟
;I,J:integer
;A,B,C : Char ﺝ(For M:=F To E Do ﺍﻟﻒ( For I:=A To B Do
;M,F,E:Real ﺩ(For I:=10 To F Do ﺏ(For A:=B To C Do
-١٠ﺣﺎﺻﻞ ﻋﺒﺎﺭﺕ ﺭﻭﺑﺮﻭ ﭼﻴﺴﺖ؟ 6+4 Mod 2*6-17
ﺩ(13 ﺝ(1 ﺏ(-17 ﺍﻟﻒ(-11
-١١ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺩﺳﺘﻮﺭ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺻﺤﻴﺢ ﺍﺳﺖ؟
For Y:=Trunc(X) To Round(X) Do
;)’*’(Write ﺝ( ﭘﻴﻐﺎﻡ ﺧﻄﺎ ﺻﺎﺩﺭ ﻣﻲ ﺷﻮﺩ ﺍﻟﻒ(ﺣﻠﻘﻪ ﺣﺪﺍﻗﻞ ﻳﻚ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ
ﺩ( ﺣﻠﻘﻪ ﺍﺻﻼ ﺗﻜﺮﺍﺭ ﻧﻤﻲ ﺷﻮﺩ ﺏ(ﺣﻠﻘﻪ ﺩﻭ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ
;IF A>5 Then Else A:=A*2 -١٢ﺍﮔﺮ A=5ﺑﺎﺷﺪ ﺧﺮﻭﺟﻲ ﺩﺳﺘﻮﺭﺍﺕ ﺭﻭﺑﺮﻭ ﻛﺪﺍﻡ ﺍﺳﺖ؟
;IF A>=5 Then A:=A*2 Else ﺩ(40 ﺝ(20 ﺏ(10 ﺍﻟﻒ(5
;)Write(A
-١٣ﺍﮔﺮ ﻛﺎﺭﺍﻛﺘﺮ ﻫﺎﻱ 1ﻭ 2ﻭ 3ﺭﺍ ﺩﺭ ﻭﺭﻭﺩﻱ ﺑﺎ Enterﺍﺯ ﻫﻢ ﺟﺪﺍ ﻛﻨﻴﻢ ﺧﺮﻭﺟﻲ ﻛﺪﺍﻡ ﺍﺳﺖ؟)ﻋﻼﻣﺖ ـ ﻧﺸﺎﻥ ﺩﻫﻨﺪﻩ ﻣﺤﻞ ﻛﺮﺳﻮﺭ
ﺩﺭﺧﺮﻭﺟﻲ ﺍﺳﺖ(
;Var A,B,C,D:Char
ﺩ(123 ﺝ(_123 ﺏ(_2 ﺍﻟﻒ(1
Begin
;)Readln(A,B,C,D ـ ـ
;)Write(A,B,D
End.
-١٤ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ IDEﻳﻌﻨﻲ ………
ﺩ(ﻫﺮ ﺳﻪ ﻣﻮﺭﺩ ﺝ(ﻣﺤﻴﻂ ﺑﺮﻧﺎﻣﻪ ﺏ( ﻭﻳﺮﺍﻳﺶ ﻛﺮﺩﻥ ﺑﺮﻧﺎﻣﻪ ﺍﻟﻒ( ﻗﺴﻤﺘﻲ ﺍﺯ ﺑﺮﻧﺎﻣﻪ
-١٥ﺑﺮﺍﻱ ﺍﺟﺮﺍﻱ ﻣﺤﻴﻂ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﺩﺭ ﺧﻂ ﻓﺮﻣﺎﻥ Dosﻛﻠﻤﻪ ……… ﺭﺍ ﻣﻲ ﻧﻮﻳﺴﻴﻢ.
ﺩ(Tp ﺝ(Tpascal ﺏ(Pascal ﺍﻟﻒ(Turbo
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 66
-١٦ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﭘﺎﺳﻜﺎﻝ ﺑﺎ ﭘﺴﻮﻧﺪ ……… ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﻧﺪ.
ﺩ(TBO ﺝ(TPU ﺏ(PAS ﺍﻟﻒ(TPS
-١٧ﻛﻤﻴﺖ ﺑﻮﻟﻲ ﭼﻪ ﻣﻘﺎﺩﻳﺮﻱ ﺭﺍ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ﺧﻮﺩ ﺍﺧﺘﺼﺎﺹ ﺩﻫﺪ؟
ﺩ(0 – 1 ﺝ(ﻣﻘﺎﺩﻳﺮ ﻋﺪﺩﻱ ﺏ(No-Yes ﺍﻟﻒ(False-True
-١٨ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﻣﻘﺎﺑﻞ ﭼﻴﺴﺖ؟
;Var A:Real
Begin ﺏ(105 ﺍﻟﻒ(1.05
;A:=10.5 ﺩ( 1.0500000000E+1 ﺝ(10.5
;)Writeln(A -١٩ﺗﻌﺎﺭﻳﻒ …… .ﺑﺎﻳﺪ ﻗﺒﻞ ﺍﺯ ﺷﺮﻭﻉ ﺑﻠﻮﻙ ﻛﺪ ﭘﺮﻭﺳﻴﺠﺮ ﻳﺎ ﺗﻮﺍﺑﻊ ﻗﺮﺍﺭ ﺩﺍﺩﻩ ﺷﻮﻧﺪ.
End.
ﺩ(ﺳﺮﺍﺳﺮﻱ ﺝ(ﻣﺤﻠﻲ ﺏ(ﻓﺮﻋﻲ ﺍﻟﻒ(ﺍﺻﻠﻲ
-٢٠ﺑﺮﺍﻱ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﭘﺮﻭﺳﻴﺠﺮﻫﺎ ﻭ ﺗﻮﺍﺑﻊ ﻛﻪ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﻭ ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ﺭﺍ ﻛﻨﺘﺮﻝ ﻣﻲ ﻛﻨﻨﺪ ﺑﺎﻳﺪ ﺍﺯ ﻛﺪﺍﻡ ﻳﻮﻧﻴﺖ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﭘﺎﺳﻜﺎﻝ
ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻮﺩ.
ﺩ(Printer ﺝ(System ﺏ(Dos ﺍﻟﻒ(Crt
-٢١ﺩﺭﭘﺎﺳﻜﺎﻝ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺑﺰﺭﮒ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﻪ ﺗﻜﻪ ﻫﺎﻱ ﻛﻮﭼﻜﺘﺮﻱ ﺗﻘﺴﻴﻢ ﻛﺮﺩ .ﺑﻪ ﺍﻳﻦ ﺗﻜﻪ ﺑﺮﻧﺎﻣﻪ ﻫﺎ ……… ﻣﻲ ﮔﻮﻳﻨﺪ.
ﺩ( ﭘﺮﻭﺳﻴﺠﺮﻫﺎ ﻳﺎ ﺭﻭﺗﻴﻦ ﻫﺎ ﺝ( ﺗﻮﺍﺑﻊ ﻳﺎ ﺭﻭﺗﻴﻦ ﻫﺎ ﺏ( ﭘﺮﻭﺳﻴﺠﺮﻫﺎﻳﺎ ﺗﻮﺍﺑﻊ ﺍﻟﻒ(ﺭﻭﺗﻴﻦ ﻫﺎ ﻳﺎ ﺳﺎﺑﺮﻭﺗﻴﻦ ﻫﺎ
;]Var A,B,C:String[3 -٢٢ﺍﺯ ﺍﻳﻦ ﺗﺎﺑﻊ ﺑﺮﺍﻱ ﺩﺭﻳﺎﻓﺖ ﻟﮕﺎﺭﻳﺘﻢ ﻃﺒﻴﻌﻲ ﻋﺪﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ؟
Begin ﺩ(INT ﺝ(Ln ﺏ(Lo ﺍﻟﻒ(Length
;’A:=’20’; B:=’30 -٢٣ﺧﺮﻭﺟﻲ ﺑﺮﻧﺎﻣﻪ ﻣﻘﺎﺑﻞ ﭼﻴﺴﺖ؟
;C:=A+B
ﺩ(2030 ﺝ(50 ﺏ(20+30 ﺍﻟﻒ(203
;)Writeln(c
End.
-٢٧ﺍﮔﺮ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺯﻳﺮ ﺑﺮﺍﻱ Aﻣﻘﺪﺍﺭ 12ﻭﺍﺭﺩ ﺷﻮﺩ ﻛﺪﺍﻡ ﺧﻂ ﺩﺭ Loopﻣﻲ ﺍﻓﺘﺪ؟
ﺏ( 1 ﺍﻟﻒ( 1ﻭ 2ﻭ 3
;)Readln(A
;Repeat ; Until A>10 }{1 ﺩ(3 ﺝ(2
; For B:=1 To A Do }{2
}While A>0 Do ; A:=A-1; {3
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 67
ﺍﻧـﻮﺍﻉ ﺩﺍﺩﻩ ﻫﺎ ﺩﺭ ﭘﺎﺳﮑﺎﻝ :
ﺻﺤﻴﺢ ﺑﻪ ﻏﻴﺮ ﺍﺯ comp
ﮐﺎﺭﺍﮐﺘﺮﻱ)(Char
ﺑﻮﻟﻴﻦ)(Boolean -۱ﺍﺳﮑﺎﻟﺮ
ﺯﻳﺮﻗﻠﻤﺮﻭ)(Sub Range
ﺷﻤﺎﺭﺷﻲ)(Enument -۱ﺳﺎﺩﻩ
-۲ﺍﻋﺸﺎﺭﻱ ﻭ Comp
- 1رﺷﺘﻪ ا ي
- 2آراﯾﻪ اي
-3رﮐﻮرد - 2ﺳﺎﺧﺘﺎري
- 4اﺷﺎره ﮔﺮ )ﻓﺎﯾﻠﻬﺎ(
- 5ﭘﺮدازه اي
ﻧﮑﺘﻪ :ﻧﻮﻉ ﺩﺍﺩﻩ ﺳﺎﺩﻩ ﻧﻮﻋﻲ ﺍﺳﺖ ﮐﻪ ﻗﺎﺑﻞ ﺗﻘﺴﻴﻢ ﺑﻪ ﻧﻮﻉ ﺩﺍﺩﻩ ﺩﻳﮕﺮﻱ ﻧﻴﺴﺖ ﻭ ﺧﻮﺩ ﺑﻪ ﺩﻭ ﮔﺮﻭﻩ ﺍﺳﮑﺎﻟﺮ ﻭ ﺍﻋﺸﺎﺭﯼ ﺗﻘﺴﯿﻢ ﻣﯽ ﺷﻮﺩ.
ﻧﮑﺘﻪ :ﻧﻮﻉ ﺍﺳﮑﺎﻟﺮ ﻧﻮﻉ ﺩﺍﺩﻩ ﺳﺎﺩﻩ ﺍﻱ ﺍﺳﺖ ﮐﻪ ﺩﺍﺭﺍﻱ ﺗﺮﺗﻴﺐ ﻭﺷﻤﺎﺭﺵ ﭘﺬﻳﺮ ﺑﺎﺷﺪ ﻭﻫﺮ ﻋﻀﻮ ﺁﻥ ﺩﺍﺭﺍﻱ ﻣﻘﺪﺍﺭ ﻗﺒﻠﻲ ﻭﺑﻌﺪﻱ ﺍﺳـﺖ.ﺍﻟﺒﺘـﻪ
ﺑﻪ ﺟﺰ ﺍﻭﻟﻴﻦ ﻣﻘﺪﺍﺭ ﮐﻪ ﻗﺒﻠﻲ ﻧﺪﺍﺭﺩ ﻭﺁﺧﺮﻳﻦ ﻣﻘﺪﺍﺭ ﮐﻪ ﺑﻌﺪﻱ ﻧﺪﺍﺭﺩ.
ﻧﮑﺘﻪ :ﺍﻭﻟﻴﻦ ﻋﻀﻮ ﻫﺮ ﻣﺠﻤﻮﻋﻪ ﺑﻪ ﺟﺰ ﻣﺠﻤﻮﻋﻪ ﺍﻋﺪﺍﺩ ﻋﻼﻣﺖ ﺩﺍﺭ ﺩﺍﺭﺍﻱ ﺷﻤﺎﺭﻩ ﺗﺮﺗﻴﺐ ﺻﻔﺮ ﺍﺳﺖ).ﻣﺮﺑﻮﻁ ﺑﻪ ﺗﺎﺑﻊ (ORD
ﻧﻮﻉ ﺩﺍﺩﻩ ﺯﻳﺮ ﻗﻠﻤﺮﻭ)ﺯﻳﺮﺑﺎﺯﻩ(:
ﺯﻳﺮ ﻗﻠﻤﺮﻭ ﻣﺤﺪﻭﺩﻩ ﺍﻱ ﺍﺯ ﻣﻘﺎﺩﻳﺮ ﻳﮏ ﻧﻮﻉ ﺩﺍﺩﻩ ﺍﺳﮑﺎﻟﺮ ﺑﻪ ﻧﺎﻡ ﻣﻴﺰﺑﺎﻥ ﻣﻲ ﺑﺎﺷﺪ.ﻣﺘﻐﻴﺮﻫﺎﻳﯽ ﺍﺯ ﻧﻮﻉ ﺯﻳﺮﻗﻠﻤﺮﻭ ،ﺗﻤﺎﻡ ﺧﺼﻮﺻﻴﺎﺕ ﻣﺘﻐﻴﺮﯼ
ﺍﺯ ﻧﻮﻉ ﻣﻴﺰﺑﺎﻥ ﺭﺍ ﺩﺍﺭﻧﺪ ﻭ ﺑﻪ ﺍﻧﺪﺍﺯﻩ ﻧﻮﻉ ﻣﻴﺰﺑﺎﻥ ﻧﻴﺰ ،ﺣﺎﻓﻈﻪ ﺍﺷﻐﺎﻝ ﻣﯽ ﮐﻨﻨﺪ.
ﺩﺭ ﺗﻌﺮﻳﻒ ﻧﻮﻉ ﺯﻳﺮ ﻗﻠﻤﺮﻭ ﮐﺎﻓﯽ ﺍﺳﺖ ﺍﻭﻟﻴﻦ)ﮐﻮﭼﮑﺘﺮﻳﻦ( ﻭ ﺁﺧﺮﻳﻦ)ﺑﺰﺭﮔﺘﺮﻳﻦ( ﻣﻘـﺪﺍﺭ ﻣﺠﻤﻮﻋـﻪ ﺭﺍ ﻣﻌـﻴﻦ ﮐﻨﻴـﺪ ﺗـﺎ ﺑـﻪ ﺍﻳـﻦ ﻃﺮﻳـﻖ ،
ﻣﺤﺪﻭﺩﻩ ﺑﻴﻦ ﺁﻥ ﺩﻭ ﺑﻪ ﻋﻨﻮﺍﻥ ﻧﻮﻉ ﺯﻳﺮ ﻗﻠﻤﺮﻭ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﻮﺩ.
ﺑﺮﺍﻱ ﺗﻌﺮﻳﻒ ﻳﮏ ﻣﺘﻐﻴﺮ ﺯﻳﺮ ﻗﻠﻤﺮﻭ ۲ﺭﻭﺵ ﻭﺟﻮﺩ ﺩﺍﺭﺩ:
ﺍﻟﻒ(ﺩﺭ ﺭﻭﺵ ﺍﻭﻝ ﺩﺭ ﻗﺴﻤﺖ VARﺑﻪ ﺭﻭﺵ ﺯﻳﺮ ﻋﻤﻞ ﻣﻲ ﮐﻨﻴﻢ:
VAR
; ﺛﺎﺑﺖ ﺩﻭﻡ ..ﺛﺎﺑﺖ ﺍﻭﻝ :ﻧﺎﻡ ﻣﺘﻐﻴﺮ
-ﺛﺎﺑﺖ ﺍﻭﻝ ﻫﻤﻮﺍﺭﻩ ﺑﺎﻳﺪ ﮐﻮﭼﮑﺘﺮ ﻳﺎ ﻣﺴﺎﻭﻱ ﺛﺎﺑﺖ ﺩﻭﻡ ﺑﺎﺷﺪ.
-ﺛﺎﺑﺖ ﺍﻭﻝ ﻭ ﺛﺎﺑﺖ ﺩﻭﻡ ﺑﺎﻳﺪ ﺍﺳﮑﺎﻟﺮ ﺑﺎﺷﺪ.
-ﺛﺎﺑﺖ ﺍﻭﻝ ﺛﺎﺑﺖ ﺩﻭﻡ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺛﺎﺑﺖ ﺑﺪﻭﻥ ﻧﻮﻉ ﺑﺎﺷﻨﺪ.
ﺏ( ﺩﺭ ﺭﻭﺵ ﺩﻭﻡ ﺗﻌﺮﻳﻒ ﺯﻳﺮ ﻗﻠﻤﺮﻭ ﺍﺑﺘﺪﺍ ﺩﺭ ﻗﺴﻤﺖ Typeﻧﻮﻉ ﺯﻳﺮ ﻗﻠﻤﺮﻭ ﺭﺍ ﺗﻌﺮﻳﻒ ﻣﻲ ﮐﻨﻴﻢ ﺳﭙﺲ ﺩﺭ ﻗﺴﻤﺖ VARﻣﺘﻐﻴﺮ ﺭﺍ ﺍﺯ
ﻫﻤﺎﻥ ﻧﻮﻉ ﺗﻌﺮﻳﻒ ﻣﻲ ﮐﻨﻴﻢ .ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ:
Type
; ﺛﺎﺑﺖ ﺩﻭﻡ ..ﺛﺎﺑﺖ ﺍﻭﻝ = ﻧﺎﻡ ﻧﻮﻉ
Var
; ﻧﺎﻡ ﻧﻮﻉ :ﻧﺎﻡ ﻣﺘﻐﻴﺮ
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 68
ﺩﺭ ﭘﺎﺳﮑﺎﻝ ﻣﻲ ﺗﻮﺍﻥ ﺩﺭ ﻗﺴﻤﺖ ﺗﻌﺎﺭﻳﻒ ﺩﺭ Typeﻧﻮﻉ ﺧﺎﺻﻲ ﺭﺍ ﺗﻌﺮﻳﻒ ﮐﺮﺩ ﻣﺜﻼ ﻣﻲ ﺗﻮﺍﻥ ﻧﻮﻉ ﺩﺍﺩﻩ ﻫﺎﻱ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺭﺍ ﺗﻐﻴﻴﺮ ﻧﺎﻡ ﺩﺍﺩ.
ﻣﺜﺎﻝ(
Type
;Myint=integer
Var
; A: myint
ﺩﺭ ﻗﺴﻤﺖ Typeﻣﻲ ﺗﻮﺍﻥ ﻧﻮﻉ ﺯﻳﺮ ﻗﻠﻤﺮﻭ ،ﺷﻤﺎﺭﺷﻲ ،ﺁﺭﺍﻳﻪ ﺭﮐﻮﺭﺩ ﻧﻴﺰ ﺗﻌﺮﻳﻒ ﮐﺮﺩ.
ﻣﻴـﺰﺑﺎﻥ:
ﻫﺮ ﻧﻮﻉ ﺯﻳﺮﻗﻠﻤﺮﻭﻳﻲ ﺩﺍﺭﺍﻱ ﻳﮏ ﻣﻴﺰﺑﺎﻥ ﺍﺳﺖ ﺍﻳﻦ ﻣﻴﺰﺑﺎﻥ ﺗﻮﺳﻂ ﻣﺘﺮﺟﻢ ﭘﺎﺳﮑﺎﻝ ﺗﻌﻴﻴﻦ ﻣﻲ ﺷﻮﺩ ﺑﻪ ﻃﻮﺭﻱ ﮐﻪ ﻣﺤﺪﻭﺩﻩ ﺭﺍ ﺷـﺎﻣﻞ ﺷـﻮﺩ
ﻭﮐﻤﺘﺮﻳﻦ ﻓﻀﺎ ﺭﺍ ﺍﺷﻐﺎﻝ ﮐﻨﺪ ﻭ ﻧﯿﺰ ﺍﺳﮑﺎﻟﺮ ﺑﺎﺷﺪ).ﺍﮔﺮ ﺩﻭ ﻧﻮﻉ ﻓﻀﺎﻱ ﻳﮑﺴﺎﻧﻲ ﺩﺍﺭﻧﺪ ﻭ ﻣﺤـﺪﻭﺩﻩ ﺭﺍ ﻧﻴـﺰ ﺷـﺎﻣﻞ ﻣـﻲ ﺷـﻮﻧﺪ ﭘﺎﺳـﮑﺎﻝ ﻧـﻮﻋﻲ ﺭﺍ
ﺍﻧﺘﺨﺎﺏ ﻣﻲ ﮐﻨﺪ ﮐﻪ ﻣﻨﻔﻲ ﻫﺎ ﺭﺍ ﻧﻴﺰ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ(.
ﻣﺜﺎﻝ(
Const
;H=20
Type
;Sub=0 .. H
Var
; A: sub
;Z:integer
Begin
;A:=25 ﺧﻄﺎﻱ ﺯﻣﺎﻥ ﺗﺮﺟﻤﻪ )(constant out of range
;Z:=40
;A:=Z
;A:=A+25
;)Readln(A
;)Writeln(A
End.
ﺑﺮﻧﺎﻣﻪ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺭﺍﺩﺭ ﺩﻭﺣﺎﻟﺖ ﺑﺮﺭﺳﻲ ﻣﻲ ﮐﻨﻴﻢ ﺍﺑﺘﺪﺍ ﺩﺭ ﺣﺎﻟﺘﻲ ﮐﻪ ﺑﺮﻧﺎﻣﻪ,ﺩﺭ ﺣﺎﻝ ﺗﺮﺟﻤﻪ ﺍﺳﺖ ﻳﻌﻨﻲ ﺩﺳﺘﻮﺭﺍﺕ ﺍﺟﺮﺍ ﻧﻤـﻲ ﺷـﻮﻧﺪ
ﺑﻠﮑﻪ ﺗﺮﺟﻤﻪ ﻣﻲ ﺷﻮﻧﺪ .ﺧﻂ ; A:=25ﻏﻠﻂ ﺍﺳﺖ ﺯﻳﺮﺍ ﺩﺭ ﺣﺎﻟﺖ ﺗﺮﺟﻤﻪ ﻧﻤﻲ ﺗﻮﺍﻥ ﻳﮏ ﺛﺎﺑﺖ ﺭﺍ ﮐﻪ ﺍﺯ ﻣﺤﺪﻭﺩﺓ ﺯﻳـﺮ ﻗﻠﻤـﺮﻭ ﺧـﺎﺭﺝ ﺍﺳـﺖ ﺭﺍ
ﺩﺍﺧﻞ ﻣﺘﻐﻴﺮ Aﺭﻳﺨﺖ .ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﭘﻴﻐﺎﻡ ﺧﻄﺎﻱ constant out of rangeﻇﺎﻫﺮ ﻣﻲ ﺷﻮﺩ .ﺍﻣﺎ ﺩﺭ ﻟﺤﻈـﻪ ﺗﺮﺟﻤـﻪ ﺩﺳـﺘﻮﺭ;A:=Z
ﺧﻄﺎ ﻧﻴﺴﺖ ﺯﻳﺮﺍ ﺩﺭ ﻟﺤﻈﻪ ﺗﺮﺟﻤﻪ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﺍﻧﺠﺎﻡ ﻧﻤﻲ ﺷﻮﺩ .ﺣﺎﻝ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺩﺭ ﺣﺎﻟﺖ ﺍﺟﺮﺍ ﺑﺮﺭﺳﻲ ﻣﻲ ﮐﻨﻴﻢ :ﻫﻨﮕﺎﻣﻲ ﮐﻪ ﺑﺮﻧﺎﻣﻪ ﺍﺟﺮﺍ ﻣﻲ
ﺷﻮﺩ ﻣﺘﻐﻴﺮ ﻫﺎﻱ ﺍﺯ ﻧﻮﻉ ﺯﻳﺮ ﻗﻠﻤﺮﻭ ﺧﺼﻮﺻﻴﺎﺕ ﻣﻴﺰﺑﺎﻧﺸﺎﻥ ﺭﺍ ﭘﻴﺪﺍ ﻣﻲ ﮐﻨﻨﺪ ﻣﺜﻼ ﻣﺘﻐﻴﺮ Aﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺫﮐﺮ ﺷـﺪﻩ ﺩﺭ ﺣﺎﻟـﺖ ﺍﺟـﺮﺍ ﻣﺎﻧﻨـﺪ ﻳـﮏ
ﻣﺘﻐﻴﺮ shortintﻋﻤﻞ ﻣﻲ ﮐﻨﺪ ﺑﻨﺎﺑﺮﺍﻳﻦ ﺩﺳﺘﻮﺭ ; A:=Zﺧﻄﺎ ﻧﻴﺴﺖ ﻭ ﺩﺍﺧﻞ ﻣﺘﻐﻴﺮ Aﻋـﺪﺩ ۴۰ﺭﻳﺨﺘـﻪ ﻣـﻲ ﺷـﻮﺩ ﻭ ﺍﮔـﺮ ﺑـﺮﺍﻱ ﺩﺳـﺘﻮﺭ
) readln(Aﻋﺪﺩﻱ ﺧﺎﺭﺝ ﺍﺯ ﻣﺤﺪﻭﺩﻩ ﻭﺍﺭﺩ ﮐﻨﻴﻢ ﺑﺎﺯﻫﻢ ﺧﻄﺎ ﺻﻮﺭﺕ ﻧﻤﻲ ﮔﻴﺮﺩ ﺑﻠﮑﻪ ﺳﺮﺭﻳﺰﻱ ﺭﺥ ﻣﻲ ﺩﻫﺪ).ﺳﺮﺭﻳﺰﻱ ﺧﻄﺎ ﻧﻴﺴﺖ(
ﺑﺎ ﺍﻳﻦ ﺗﻮﺿﻴﺤﺎﺕ ﻫﻴﭻ ﻣﺤﺪﻭﺩﻩ ﺍﻱ ﺑﺮﺍﻱ ﻣﺘﻐﻴﺮﻫﺎﻱ ﺯﻳﺮﻗﻠﻤﺮﻭ ﮐﻨﺘﺮﻝ ﻧﻤﻲ ﺷﻮﺩ ﺑﺮﺍﻱ ﺭﻓﻊ ﺍﻳﻦ ﻣﺸﮑﻞ ﺍﺯ ﺭﻫﻨﻤﻮﺩ } {$R+ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ
ﮐﻨﻴﻢ ﺍﻳﻦ ﺭﻫﻨﻤﻮﺩ ﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﻣﺤﺪﻭﺩﺓ ﻣﺘﻐﻴﺮﻫﺎ ﮐﻨﺘﺮﻝ ﺷﻮﺩ.ﻳﻌﻨﻲ ﺍﮔﺮ ﺍﺯ ﻣﺤﺪﻭﺩﺓ ﺯﻳﺮ ﻗﻠﻤﺮﻭ ﺧﺎﺭﺝ ﺷـﺪﻳﻢ ﭘﻴﻐـﺎﻡ ﺧﻄـﺎ ﺻـﺎﺩﺭ ﻣـﻲ
ﺷﻮﺩ).ﺩﺭ ﺯﻣﺎﻥ ﺍﺟﺮﺍ( ﺣﺘﻲ ﺍﮔﺮ ﺳﺮﺭﻳﺰﻱ ﻧﻴﺰ ﺭﺥ ﺩﻫﺪ ﺑﺎﺯ ﻫﻢ ﺧﻄﺎ ﺧﻮﺍﻫﺪ ﮔﺮﻓﺖ.
ﻧﮑﺘﻪ( ﺩﻭﺗﺎﺑﻊ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ lowﻭ highﮐﻤﺘﺮﻳﻦ ﻭﺑﻴﺸﺘﺮﻳﻦ ﻣﻘﺪﺍﺭ ﻳﮏ ﻧﻮﻉ ﺩﺍﺩﻩ ﺍﺳﮑﺎﻟﺮ ﺭﺍ ﺑﺮﻣﻲ ﮔﺮﺩﺍﻧﺪ.
ﮐﺎﺭﺑﺮﺩ ﺯﻳﺮﻗﻠﻤـﺮﻭ :
ﺯﻳﺮﻗﻠﻤﺮﻭﻫﺎ ﺭﺍ ﺑﻴﺸﺘﺮ ﺑﺮﺍﻱ ﮐﻨﺘﺮﻝ ﻣﺤﺪﻭﺩﻩ ﻣﺘﻐﻴﺮﻫﺎ ﺑﻪ ﮐﺎﺭ ﻣﻲ ﺑﺮﻧﺪ ﻭ ﺩﺍﺭﺍﻱ ﻣﺰﺍﻳﺎﻱ ﺯﻳﺮ ﺍﺳﺖ:
-۱ﮐﻨﺘﺮﻝ ﻣﺤﺪﻭﺩﺓ ﻣﺘﻐﻴﺮ ﻫﺎ ﻭﺻﺪﻭﺭ ﭘﻴﻐﺎﻡ ﺧﻄﺎ ﺗﻮﺳﻂ ﻣﺘﺮﺟﻢ
-۲ﭼﻮﻥ ﻧﻮﻉ ﻣﻴﺰﺑﺎﻥ ﺭﺍ ﭘﺎﺳﮑﺎﻝ ﺍﻧﺘﺨﺎﺏ ﻣﻲ ﮐﻨﺪ ﮐﻤﺘﺮﻳﻦ ﻓﻀﺎ ﺭﺍ ﺍﺷﻐﺎﻝ ﻣﻲ ﮐﻨﺪ ﻭﺩﺭ ﻣﺼﺮﻑ ﺣﺎﻓﻈﻪ ﺻﺮﻑ ﺟﻮﻳﻲ ﻣﻲ ﺷﻮﺩ.
-۳ﺯﻳﺮﻗﻠﻤﺮﻭﻫﺎ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﺑﺎ ﻣﻌﻨﻲ ﻫﺴﺘﻨﺪ ﻭﺧﻮﺍﻧﺎﻳﻲ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺑﺎﻻ ﻣﻲ ﺑﺮﻧﺪ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 69
ﻧـﻮﻉ ﺩﺍﺩﻩ ﺷﻤﺎﺭﺷﻲ:
ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻣﻮﺿﻮﻉ ﺑﺮﻧﺎﻣﻪ ﺗﻌﺪﺍﺩﻱ ﺷﻨﺎﺳﻪ)ﻧﻪ ﺭﺷﺘﻪ ،ﻧﻪ ﻋﺪﺩﻭ ﻧﻪ ﺛﺎﺑﺖ( ﺭﺍ ﺩﺭ ﻳﮏ ﻧﻮﻉ ﺷﻤﺎﺭﺷﻲ ﻗﺮﺍﺭ ﺩﻫﺪ.
ﻣﺜﺎﻝ(
Type
;)EnuA=(sat , sun , mon , tue
Var
;A:EnuA
Begin
;A:=sun
End.
üﻧﮑﺘﻪ :ﺷﻨﺎﺳﻪ ﻫﺎﻳﻲ ﮐﻪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺗﻌﻴﻦ ﻣﻲ ﮐﻨﺪ ﺑﺎﻳﺪ ﺗﺎﺑﻊ ﻧﺎﻡ ﮔﺬﺍﺭﻱ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﻏﻴﺮ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺑﺎﺷﺪ.
üﻧﮑﺘﻪ :ﻣﺘﻐﻴﺮ ﻫﺎﻱ ﻧﻮﻉ ﺷﻤﺎﺭﺷﻲ ﻫﻤﻴﺸﻪ ﻳﮏ ﺑﺎﻳﺖ ﻓﻀﺎ ﺍﺷﻐﺎﻝ ﻣﻲ ﮐﻨﻨﺪ.
üﻧﮑﺘﻪ :ﺗﻌﺪﺍﺩ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﻧﻮﻉ ﺩﺍﺩﻩ ﺷﻤﺎﺭﺷﻲ ﺣﺪﺍﮐﺜﺮ ۲۵۶ﺗﺎ ﺍﺳﺖ.
üﻧﮑﺘﻪ :ﺑﺮﺍﻱ ﻧﺎﻣﮕﺬﺍﺭﻱ ﻣﺘﻐﻴﺮﻫﺎﻱ ﺷﻤﺎﺭﺷﻲ ﻣﻌﻤﻮﻻ ﭘﻴﺸﻮﻧﺪ Enuﺑﻪ ﮐﺎﺭ ﻣﻲ ﺭﻭﺩ.
üﻧﮑﺘﻪ :ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﻣﻮﺟﻮﺩ ﺩﺭ ﻧﻮﻉ ﺩﺍﺩﻩ ﺷﻤﺎﺭﺷﻲ ﻧﺒﺎﻳﺪ ﺗﮑﺮﺍﺭﻱ ﺑﺎﺷﻨﺪ
type
ﺧﻄﺎﺳﺖ ;)enuDAY=(sat,sun,sat,mon
üﺷﻨﺎﺳﻪ ﻫﺎﻱ ﻣﻮﺟﻮﺩ ﺩﺭ ﻧﻮﻉ ﺷﻤﺎﺭﺷﻲ ﺑﻪ ﺗﺮﺗﻴﺐ ﺩﺍﺭﺍﻱ ﺭﺗﺒﻪ ﻫﺎﻱ ۰ﻭ ۱ﻭ...ﻭ ۲۵۵ﺍﺳﺖ.
ﻣﺜﺎﻝ(
Type
;)EnuB=(red,green,blue,black
Var
;X,Z:EnuB
;A:integer
Begin
ﺻﺤﻴﺢ -ﺯﻳﺮﺍ ﺩﺭ ﻣﺘﻐﻴﺮ ﻧﻮﻉ ﺷﻤﺎﺭﺷﻲ ﻓﻘﻂ ﻣﻲ ﺗﻮﺍﻥ ﺷﻨﺎﺳﻪ ﻫﺎﻱ ﻣﺮﺑﻮﻁ ﺑﻪ ﺧﻮﺩﺵ ﺭﺍ ﻗﺮﺍﺭ ﺩﺍﺩ z:=blue; ž
z:='black'; ž ﻏﻠﻂ -ﺯﻳﺮﺍ ﺭﺷﺘﻪ ﺍﺳﺖ
ﻏﻠﻂ z:=1; ž
ﺻﺤﻴﺢ a:=0; ž
ﻏﻠﻂ -ﻋﻤﻞ ﺍﻧﺘﺴﺎﺏ ﺩﺭ ﺻﻮﺭﺗﻲ ﺻﺤﻴﺢ ﺍﺳﺖ ﮐﻪ ﻫﺮ ﺩﻭ ﻣﺘﻐﻴﺮ ﻫﻢ ﻧﻮﻉ ﺑﺎﺷﻨﺪ z:=a; ž
a:=z; ž ﻏﻠﻂ
z:=x; ž ﺻﺤﻴﺢ
ﺻﺤﻴﺢ z:=pred(blue); ž
ﺻﺤﻴﺢ a:=ord(z); ž
ﻏﻠﻂ -ﻣﺘﻐﻴﺮﻫﺎﻱ ﺷﻤﺎﺭﺷﻲ ﻭﺷﻨﺎﺳﻪ ﻫﺎﻱ ﺁﻧﻬﺎ ﺭﺍ ﻧﻪ ﻣﻲ ﺗﻮﺍﻥ ﭼﺎﭖ ﮐﺮﺩ ﻭﻧﻪ ﻣﻴﺘﻮﺍﻥ ﺩﺭﻳﺎﻓﺖ ﮐﺮﺩ writeln(z); ž
ﻏﻠﻂ writeln(blue); ž
readln(z); ž ﻏﻠﻂ
ﺻﺤﻴﺢ -ﺭﺗﺒﻪ ﻣﺘﻐﻴﺮ ﻫﺎﻱ ﺷﻤﺎﺭﺷﻲ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﭼﺎﭖ ﮐﺮﺩ write(ord(z)); ž
ﻏﻠﻂ writeln(succ(green)); ž
end.
ﺣﺎﻝ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﻌﺎﺭﻳﻒ ﺑﺎﻻ ﺩﺭ ﺩﺍﺧﻞ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﻫﺎﻱ ﺯﻳﺮ ﺭﺍ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ :
; ]S := [2
; ]S := [2,1,4,5,2
; ]S := [1..4 , 8
; ]'C := ['a' , 'b' , 'c' , 'd
; ]G[1] := [1,2,3
ﻣﺠﻤﻮﻋﻪ ﺗﻬﻲ ; ][ =G[2] :
ﻧﻜﺘﻪ ( ﻣﺠﻤﻮﻋﻪ ﺗﻬﻲ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺳﺖ ﻛﻪ ﻫﻴﭻ ﻋﻀﻮﻱ ﻧﺪﺍﺭﺩ ﻭ ﺑﺎ ][ ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ.
ﻧﻜﺘﻪ ( ﺗﻜﺮﺍﺭ ﻋﻀﻮ ﺩﺭ ﻣﺠﻤﻮﻋﻪ ﻫﺎ ﺗﺎﺛﻴﺮﻱ ﻧﺪﺍﺭﺩ ﻭ ﻋﻀﻮﻫﺎﻱ ﺗﻜﺮﺍﺭﻱ ﻓﻘﻂ ﻳﻚ ﻋﻀﻮ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﻧﺪ.
ﻧﻜﺘﻪ ( ﺟﺎﺑﺠﺎﻳﻲ ﻋﻀﻮﻫﺎ ﺩﺭ ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﺗﺎﺛﻴﺮﻱ ﻧﺪﺍﺭﺩ.ﻳﻌﻨﻲ ﺩﻭ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﻛﻪ ﺍﻋﻀﺎﻳﺸﺎﻥ ﻳﻜـﺴﺎﻥ ﺍﺳـﺖ ﻭﻟـﻲ ﺟﺎﺑﺠـﺎ ﻫـﺴﺘﻨﺪ ﻣـﺴﺎﻭﻱ
ﻫﺴﺘﻨﺪ ﺑﺎ ﻫﻢ .
ﺗﻌﺎﺭﻳﻒ ﺯﻳﺮ ﺑﺮﺍﻱ ﻣﺠﻤﻮﻋﻪ ﻫﺎ ﺩﺭﺳﺖ ﻫﺴﺘﻨﺪ :
Var
; Ch : set of char
; Bool : set of boolean
; Num : set of byte
; X : set of 100..200
; 'Y : set of 'a'..'z
; 'Z : set of '0'..'9
ﺗﻌﺎﺭﻳﻒ ﺯﻳﺮ ﺑﺮﺍﻱ ﻣﺠﻤﻮﻋﻪ ﻫﺎ ﻧﺎﺩﺭﺳﺖ ﻫﺴﺘﻨﺪ :
Var
; R : set of real
; I : set of integer
; S : set of string
; X : set of 6..0
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 71
ﻋﻤﻠﯿﺎت روي ﻣﺠﻤﻮﻋـﻪ ﻫﺎ :
ﻋﻤﻞ ﻋﻀﻮﻳﺖ ﻣﺘﻐﻴﺮ ﺩﺭ ﻣﺠﻤﻮﻋﻪ ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺑﺎ ﻛﻠﻤﻪ ﻱ ﻛﻠﻴﺪﻱ Inﺻﻮﺭﺕ ﻣﻲ ﮔﻴﺮﺩ .ﺍﮔﺮ ﻋﻀﻮﻳﺖ ﺻﺤﻴﺢ ﺑﺎﺷﺪ ﻳﻌﻨﻲ ﺁﻥ ﻣﺘﻐﻴﺮ ﺩﺭ
ﻣﺠﻤﻮﻋﻪ ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﺟﻮﺍﺏ Trueﻭ ﺩﺭ ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ Falseﻣﻲ ﺑﺎﺷﺪ.
ﻫﻤﭽﻨﻴﻦ ﺩﻭ ﻣﺠﻤﻮﻋﻪ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﺎ ﻋﻼﻣﺖ ﻫﺎﻱ ﺷﺮﻃﻲ = و >< و =< و => ﻣﻘﺎﻳﺴﻪ ﻛﺮﺩ ﻛﻪ ﻫﻤﮕﻲ ﺩﺍﺭﺍﻱ ﺧﺮﻭﺟـﻲ ﺩﺭﺳـﺖ ﻳـﺎ ﻏﻠـﻂ
ﻣﻲ ﺑﺎﺷﻨﺪ .ﻭﻟﻲ ﻋﻼﻣﺖ ﻫﺎﻱ > < ,ﺩﺭ ﻣﺠﻤﻮﻋﻪ ﻫﺎ ﻛﺎﺭﺑﺮﺩﻱ ﻧﺪﺍﺭﻧﺪ.
Var
; A: set of byte
Begin
; ]A := [1..3,4
If 3 in a then
)'*'(Write
Else
;)'**'( Write
; ) Write ( 3 in a : Trueﺟﻮﺍﺏ
; ) Write ( 8 in a : Falseﺟﻮﺍﺏ
; ) Write ( [1,2,3,4] = a : Trueﺟﻮﺍﺏ
; ) ]Write ( [1,2] <= [1,2,3 : Trueﺟﻮﺍﺏ
; ) ]Write ( [] >= [1 : Falseﺟﻮﺍﺏ
End.
ﺩﺭ ﺭﻳﺎﺿﻴﺎﺕ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﻣﺠﻤﻮﻋﻪ ﻫﺎ ﺭﺍ ﺑﺎ ﻫﻢ ﺍﺟﺘﻤﺎﻉ ،ﺍﺷﺘﺮﺍﻙ ﻭ ﺗﻔﺎﺿﻞ ﻛﻨﻴﻢ ﻛﻪ ﺍﻳﻦ ﻋﻤﻠﻴﺎﺕ ﺩﺭ ﭘﺎﺳﻜﺎﻝ ﺑﻪ ﺗﺮﺗﻴﺐ ﺑﺎ :
ﻋﻤﻠﮕﺮﻫﺎﻱ +و * و – ﻣﻲ ﺑﺎﺷﺪ.
ﻧﻜﺘﻪ ( ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻭﺭﻭﺩﻱ ﭘﺮﻭﺳﻴﺠﺮ ﻣﻲ ﺗﻮﺍﻧﺪ ﻣﺠﻤﻮﻋﻪ ﺑﺎﺷﺪ ﺑﺸﺮﻃﻲ ﻛﻪ ﻗﺒﻼ ﺩﺭ Typeﺗﻌﺮﻳـﻒ ﺷـﺪﻩ ﺑﺎﺷـﻨﺪ ،ﻧـﻪ ﺍﻳﻨﻜـﻪ ﻣـﺴﺘﻘﻴﻤﺎ ﺩﺭ
ﭘﺮﻭﺳﻴﺠﺮ ﺑﻌﻨﻮﺍﻥ ﭘﺎﺭﺍﻣﺘﺮ ﺑﻴﺎﻳﺪ.
ﻧﻜﺘﻪ ( ﺧﺮﻭﺟﻲ ﻳﻚ ﺗﺎﺑﻊ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺍﺯ ﻧﻮﻉ ﻣﺠﻤﻮﻋﻪ ﺑﺎﺷﺪ.
Type
Ch = set of char ;
Function f2 ( x : integer ) : ch ;
ﺁﺭﺍﻳـﻪ ﻫﺎ :
ﺁﺭﺍﻳﻪ ﺗﻌﺪﺍﺩﻱ ﻣﺘﻐﻴﺮ ﻫﻢ ﻧﻮﻉ ﺍﺳﺖ ﮐﻪ ﺗﺤﺖ ﻳﮏ ﻧﺎﻡ ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﻧﺪ.ﻫﺮﺳﻠﻮﻝ ﺁﺭﺍﻳﻪ ﻳﮏ ﻣﺘﻐﻴﺮﺍﻧﺪﻳﺲ ﺩﺍﺭﺍﺳﺖ .ﺗﻌﺪﺍﺩ ﻋﻨﺎﺻﺮﺁﺭﺍﻳﻪ
ﻣﺤﺪﻭﺩﻭﺛﺎﺑﺖ ﺍﺳﺖ.ﻋﻨﺎﺻﺮ ﺁﺭﺍﻳﻪ ﺍﺯ ﻧﻈﺮ ﻓﻴﺰﻳﮑﻲ ﻣﮑﺎﻥ ﻫﺎﻱ ﻣﺘﻮﺍﻟﻲ ﺩﺭﺣﺎﻓﻈﻪ ﮐﺎﻣﭙﻴﻮﺗﺮﺍﺷﻐﺎﻝ ﻣﻲ ﮐﻨﻨﺪ.
ﺑﺮاي ﺗﻌﺮﯾﻒ آراﯾﻪ اﺑﺘﺪا ﻃﻮل )ﻧﻮع اﻧﺪﯾﺲ( آراﯾﻪ ﮐﻪ در ﺣﻘﯿﻘﺖ ﺗﻌﺪاد ﺧﺎﻧﻪ ﻫﺎي آﻧﺮا ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ ،ﻣﻌﯿﻦ ﻣﯽ ﮔﺮدد.
ﺳﭙﺲ ﻧﻮع ﺧﺎﻧﻪ ﻫﺎﯾﯽ ﮐﻪ داده ﻫﺎ در آن ﻗﺮار ﺧﻮاﻫﻨﺪ ﮔﺮﻓﺖ را ﺗﻌﯿﯿﻦ ﻣﯽ ﮐﻨﻨﺪ و در ﻧﻬﺎﯾﺖ ،ﻋﻨﺎﺻـﺮ داﺧـﻞ ﺧﺎﻧـﻪ ﻫـﺎي آراﯾـﻪ
ﺗﻮﺳﻂ اﻧﺪﯾﺲ آراﯾﻪ ﮐﻪ ﻣﺤﻞ ﻗﺮار ﮔﺮﻓﺘﻦ ﻋﻨﺼﺮ در آراﯾﻪ را ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ ،ﻗﺮار ﻣﯽ ﮔﯿﺮﻧﺪ.
ﻣﯽ ﺗﻮاﻧﯿﻢ آراﯾﻪ را ﺑﺼﻮرت زﯾﺮ در ﻧﻈﺮ ﮔﺮﻓﺖ :
1 2 3 … 10
]A[1 ]A[2 ]A[3 … ]A[10
ﻫﻤﺎن ﻃﻮر ﮐﻪ ﻣﻼﺣﻈﻪ ﻣﯽ ﮐﻨﯿﺪ داﺧﻞ ﻫﺮ ﮐﺪام از ﺧﺎﻧﻪ ﻫﺎي آراﯾﻪ ﯾﮏ ﻋﻨﺼﺮ ﻗﺮار ﻣﯽ ﮔﯿﺮد ﮐﻪ ﻧﻮع اﯾﻦ ﻋﻨﺎﺻﺮ ﺑﺎﯾﺪ ﺑﺎ ﻧﻮع
آراﯾﻪ ﯾﮑﺴﺎن ﺑﺎﺷﺪ.
ﺭﻭﺵ ﺩﻭﻡ (
Type
; ﻧﻮع ﻣﺤﺘﻮاي آراﯾﻪ ] OFﻧﻮع اﻧﺪﯾﺲ[ = arrayﻧﺎم ﻧﻮع
Var
; ﻧﺎم ﻧﻮع :ﻧﺎم آراﯾﻪ
ﺩﺭ ﺭﻭﺵ ﺩﻭﻡ ﺍﺑﺘﺪﺍ ﺩﺭ ﻗﺴﻤﺖ Typeﻧﻮﻉ ﺁﺭﺍﻳﻪ ﺭﺍ ﺗﻌﺮﻳﻒ ﻣﻲ ﮐﻨﻴﻢ ﺳﭙﺲ ﺩﺭ ﻗﺴﻤﺖ Varﺧﻮﺩ ﺁﺭﺍﻳﻪ ﺭﺍ ﺗﻌﺮﻳﻒ ﻣﻲ ﮐﻨﻴﻢ ﺭﻭﺵ
ﺩﻭﻡ ﺑﻬﺘـﺮ ﺍﺯ ﺭﻭﺵ ﺍﻭﻝ ﺍﺳﺖ ﺯﻳﺮﺍ :
- ۱ﺧﻮﺍﻧﺎﻳﻲ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ ﻣﻲ ﺭﻭﺩ.
- ۲ﺍﮔﺮ ﺩﺭ ﺟﺎﻱ ﺩﻳﮕﺮﻱ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﻧﻴﺎﺯ ﺑﻪ ﺁﺭﺍﻳﻪ ﺍﻱ ﺍﺯ ﻫﻤﻴﻦ ﻧﻮﻉ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ ﺑﻪ ﺳﺎﺩﮔﻲ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺗﻌﺮﻳﻒ ﮐﻴﻢ.
ﻧﮑﺘﻪ ( اﻧﺪﯾﺴﻬﺎ ﺣﺪﺍﮐﺜﺮ ﻣﯽ ﺗﻮﺍﻧﻨﺪ ﯾﮏ اﺳﮑﺎﻟﺮ 2ﺑﺎﯾﺘﯽ ﺑﺎﺷﻨﺪ.
74 ( – ﺻﻔﺤـﻪmohammadi.mm@gmail.com) ـﺪي ﻣﻬﻨـﺪس ﻣﺤﻤ-1388 ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد- ﭘﺎﺳـﮑﺎل
: ﺑﺮاي ﻣﺜﺎﻟﻬﺎي زﯾﺮ آراﯾـﻪ را رﺳﻢ ﮐﻨﯿﺪ، ﺑﺮاي درك ﺑﻬﺘﺮ آراﯾﻪ ﻫﺎ
A:array[1..20] of integer;
B:array[-4..10] of real;
B[-4]:=200; B[2]:=8+B[10];
c:array[byte] of longint ;
. Longint ﻧﻮﻉ ﺍﻧﺪﻳﺲ ﺁﺭﺍﻳﻪ ﺑﺎﻳﺪ ﺍﺳﮑﺎﻟﺮ ﺑﺎﺷﺪ ﺍﻟﺒﺘﻪ ﺑﻪ ﻏﻴﺮ ﺍﺯ: ﻧﮑﺘﻪü
H:array['A'..'Z'] of char;
H['B']:='c'; H[#65]:='M'; H['C']:=#65;
m:array[char] of 5..20;
m['!']:=12; m[#35]:=14; m[#2]:=3; • ﺧﻄﺎ
Type
EnuS=(red,blue,green,yellow,black);
M=5..20;
Var
n:array[m] of EnuS;
n[7]:=green; n[7]:='green' ;•ﺧﻄﺎ
n[ord(yellow)+3]:=yellow ; writeln( n[7] ) ;•ﺧﻄﺎ
TYPE
COLOR=(RED,BLUE,YELLOW,GREEN);
M=ARRAY[COLOR] OF INTEGER;
VAR
A:M;
I:COLOR;
BEGIN
FOR I:=RED TO GREEN DO
READLN(A[I]);
end.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 75
ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﻋﻨﺎﺻﺮ ﺁﺭﺍﻳﻪ:
ﺑﺮﺍﻱ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﻋﻨﺎﺻﺮ ﺁﺭﺍﻳﻪ ﻧﺎﻡ ﺁﺭﺍﻳﻪ ﺭﺍ ﻧﻮﺷﺘﻪ ﺳﭙﺲ ﺩﺍﺧﻞ ﮐﺮﻭﺷﻪ ﺍﻧﺪﻳﺲ ﺭﺍ ﻗﺮﺍﺭ ﻣﻲ ﺩﻫﻴﻢ .ﺍﻧﺪﻳﺲ ﻣﻲ ﺗﻮﺍﻧﺪ ﻳﮏ ﻋﺒﺎﺭﺕ ﻳﺎ ﻳﮏ
ﻣﺘﻐﻴﺮ ﺑﺎﺷﺪ ﺑﻪ ﻃﻮﺭﻱ ﮐﻪ ﻧﻮﻋﺶ ﺑﺎ ﻧﻮﻉ ﺍﻧﺪﻳﺲ ﻫﻤﺨﻮﺍﻧﻲ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ.
type
;myary=array[1..100] of real
var
;a:myary
;b:integer
begin
;b:=105
;a[-1]:=50
;a[b]:=180
;) ]writeln( a[b
end.
ﺍﮔﺮ ﺍﺯ ﻣﺤﺪﻭﺩﻩ ﺍﻧﺪﻳﺲ ﻳﮏ ﺁﺭﺍﻳﻪ ﺧﺎﺭﺝ ﺷﻮﻳﻢ ﺑﺮﻧﺎﻣﻪ ﺧﻄﺎ ﻧﻤﻲ ﮔﻴﺮﺩ ﺑﻠﮑﻪ ﺣﺎﻟﺖ ﻋﺎﺩﻱ ﻧﺪﺍﺭﺩ .ﺩﺭﺍﻳﻦ ﺣﺎﻟﺖ ﻣﻤﮑﻦ ﺍﺳﺖ ﺩﺳﺘﮕﺎﻩ ﺭﺍﻩ
ﺍﻧﺪﺍﺯﻱ ﻣﺠﺪﺩ ﺷﻮﺩ ﻳﺎ ﻗﻔﻞ ﮐﻨﺪ ﺑﺮﺍﻱ ﺟﻠﻮﮔﻴﺮﻱ ﺍﺯ ﭼﻨﻴﻦ ﻣﺸﮑﻠﻲ ﺑﺎﻳﺪ ﺍﺯ ﺭﻫﻨﻤﻮﺩ } {$R+ﺑﺮﺍﻱ ﮐﻨﺘﺮﻝ ﻣﺤﺪﻭﺩﻩ ﺍﻧﺪﻳﺲ ﺁﺭﺍﻳﻪ ﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ
ﮐﺮﺩ.
ﻧﻮﺷﺘﻦ ﺭﻫﻨﻤﻮﺩ } {$R+ﺑﺎﻋﺚ ﮐﻨﺪﻱ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﻣﻲ ﺷﻮﺩ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﻓﻘـﻂ ﻳﮏ ﺑﺎﺭ ﺍﺯ ﺁﻥ ﺍﺳﺘﻔﺎﺩﻩ ﮐﺮﺩﻩ ﻭﺩﺭ ﺻﻮﺭﺗﻲ ﮐـﻪ
ﺑﺮﻧﺎﻣﻪ ﺧﻄﺎ ﻧﺪﺍﺷﺖ ﺑﺮﺍﻱ ﺑﺎﺭ ﺩﻭﻡ ﺁﻥ ﺭﺍ ﺑﺮﺩﺍﺭﻳﺪ.
ﻣﺜﺎل ( 1ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ اﺑﺘﺪا ﯾﮏ آراﯾﻪ 10ﻋﻨﺼﺮي را ﺑﺎ اﻋﺪاد ﺗﺼﺎدﻓﯽ ﺑﯿﻦ ﺻﻔﺮ ﺗﺎ ﻫﺰار ﺗﻮﻟﯿﺪ ﮐﻨﺪ و آﻧـﺮا ﻧﻤـﺎﯾﺶ دﻫـﺪ ،ﺳـﭙﺲ
ﻣﺎﮐﺰﯾﻤﻢ و ﻣﻮﻗﻌﯿﺖ )اﻧﺪﯾﺲ ﺳﻠﻮل(آﻧﺮا ﻧﻤﺎﯾﺶ دﻫﺪ :
USES
;NEWDELAY,CRT
TYPE
;VECTOR=ARRAY[1..10] OF INTEGER
VAR
;B:VECTOR
;I,MAX,POS:INTEGER
BEGIN
;RANDOMIZE
;CLRSCR
)FOR I:=LOW(B TO ﺗﻮﻟﯿﺪ ﯾﮏ آراﯾﻪ 10ﺳﻠﻮﻟﯽ)ﻋﻨﺼﺮي( ﺑﺎ اﻋﺪاد ﺗﺼﺎدﻓﯽ ﺑﯿﻦ ﺻﻔﺮ ﺗﺎ ﻫﺰار HIGH(B) DO
BEGIN
;)B[I]:=RANDOM(1000
;)WRITE(B[I]:5
;END
;]MAX:=B[1
;POS:=1
FOR I:=2 TO 10 DO
IF B[I] > MAX THEN ﭘﯿﺪا ﮐﺮدن ﻣﺎﮐﺰﯾﻤﻢ و ﻣﻮﻗﻌﯿﺖ آن
BEGIN
;]MAX:=B[I
;POS:=I
;END
;WRITELN
;)WRITELN(MAX:4 , POS:4
END.
76 ( – ﺻﻔﺤـﻪmohammadi.mm@gmail.com) ـﺪي ﻣﻬﻨـﺪس ﻣﺤﻤ-1388 ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد- ﭘﺎﺳـﮑﺎل
ﺳﭙﺲ ﻓﺮاواﻧﯽ اﻋﺪاد، ﻋﺪد از ﮐﺎرﺑﺮ درﯾﺎﻓﺖ ﮐﻨﺪ و ذﺧﯿﺮه ﮐﻨﺪ10 ( ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﺑﺎ اﺳﺘﻔﺎده از آراﯾﻪ اﺑﺘﺪا2 ﻣﺜﺎل
: را ﺑﺎ اﺳﺘﻔﺎده از آراﯾﻪ اي دﯾﮕﺮ ﭼﺎپ ﮐﻨﺪ
USES
NEWDELAY,CRT;
TYPE
VECTOR=ARRAY[1..10] OF INTEGER;
VAR
F,A:VECTOR;
J,I:INTEGER;
BEGIN
CLRSCR;
FOR I:=1 TO 10 DO ﻋﺪد از ﮐﺎرﺑﺮ و ذﺧﯿﺮه ﺑﺼﻮرت ﯾﮏ آراﯾﻪ10 درﯾﺎﻓﺖ
READLN(A[I]);
CLRSCR;
FOR I:=1 TO 10 DO
BEGIN
F[I]:=0;
FOR J:=1 TO 10 DO ﻋﻨﺼﺮي دﯾﮕﺮ10 ﺑﺪﺳﺖ آوردن ﻓﺮاواﻧﯽ ﻫﺮ ﻋﺪد و ذﺧﯿﺮه آن در ﯾﮏ آراﯾﻪ
IF A[I]=A[J] THEN
F[I]:=F[I]+1;
END;
FOR I:=1 TO 10 DO
WRITELN(A[I], ' ',F[I]);
END.
: آن ﻋﺪد را درﺳﺖ ﭼﺎپ ﮐﻨﺪ16 ( ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﯾﮏ ﻋﺪد درﯾﺎﻓﺖ ﮐﻨﺪ و ﻣﺒﻨﺎي3 ﻣﺜﺎل
TYPE
VECTOR=ARRAY[1..10] OF CHAR;
VAR
I,R,J,N:INTEGER;
HEX:VECTOR;
BEGIN
READLN(N);
I:=1;
WHILE N>0 DO
BEGIN
R:=N MOD 16;
IF R<10 THEN
HEX[I]:=CHR(48+R)
ELSE
HEX[I]:=CHR(55+R);
I:=I+1;
N:=N DIV 16;
END;
FOR J:=I-1 DOWNTO 1 DO
WRITE(HEX[J]);
END.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 77
ﻣﺜﺎل ( 4ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ دو ﻋﺪد 10رﻗﻤﯽ را رﻗﻢ ﺑﻪ رﻗﻢ درﯾﺎﻓﺖ ﮐﻨﺪ؛ﺳﭙﺲ اﯾﻦ دو ﻋﺪد را ﮐﻪ در آراﯾـﻪ اي 10ﺗـﺎﯾﯽ
ذﺧﯿﺮه ﺷﺪه اﻧﺪ ،ﺑﺎ ﻫﻢ ﺟﻤﻊ ﮐﻨﺪ :
}{$R+
uses
;newdelay,crt
var
;A,B:array[1..10] of 0..9
;C:array[0..10] of 0..9
;r,i,D:integer
begin
;clrscr
;)'writeln('Enter A
for i:=1 to 10 do
;)]readln(A[i
;)'writeln('Enter B
for i:=1 to 10 do
;)]Readln(B[i
;D:=0
for i:=10 downto 1 do
begin
;r:=A[i]+B[i]+D
;C[i]:=r mod 10
;D:=r div 10
;end
;C[0]:=D
for I:=0 to 10 do
;)]Write(C[i
end.
ﻣﺜﺎل ( 5ﯾﮏ آراﯾﻪ ﻣﺮﺗﺐ ﺣﺪاﮐﺜﺮ 10ﻋﻨﺼﺮي را در ﻧﻈﺮ ﺑﮕﯿﺮﯾﺪ؛ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ اﯾﻦ آراﯾﻪ را درﯾﺎﻓﺖ ﮐﻨﺪ و ﺳـﭙﺲ ﺑـﺎ
درﯾﺎﻓﺖ ﯾﮏ ﻋﻨﺼﺮ ﺟﺪﯾﺪ Qاز ورودي،اﮔﺮ ﻋﻨﺼﺮ ﻣﻮرد ﻧﻈﺮ در آراﯾﻪ ﻣﻮﺟﻮد ﺑﻮد آﻧـﺮا ﺣـﺬف ﮐﻨـﺪ در ﻏﯿـﺮ اﯾﻨـﺼﻮرت ﻋﻨـﺼﺮ
ﺟﺪﯾﺪ را در ﻣﺤﻞ ﻣﺨﺼﻮص ﺑﻪ ﺧﻮد در آراﯾﻪ در ج ﮐﻨﺪ :
ﺗﻮﺿﯿﺢ :
ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ را ﺑﺎ اﯾﻦ ﺗﺤﻠﯿﻞ ﻣﯽ ﻧﻮﯾﺴﯿﻢ ﮐﻪ :
78 ( – ﺻﻔﺤـﻪmohammadi.mm@gmail.com) ـﺪي ﻣﻬﻨـﺪس ﻣﺤﻤ-1388 ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد- ﭘﺎﺳـﮑﺎل
uses
newdelay,crt;
var
A:array[1..10] of integer;
tedad:byte; i,z,m:integer; c:char;
function search(m:integer):byte;
var
i:integer;
begin
search:=0;
for i:=1 to tedad do
if A[i]=m then
search:=i;
end;
procedure hazf(z:integer);
var
i:integer;
begin
for i:=z to tedad do
A[i]:=A[i+1];
tedad:=tedad-1;
end;
procedure add(m:integer);
var
i,j:integer;
begin
i:=1;
if tedad=10 then exit;
for i:=1 to tedad+1 do
if A[i]>m then
break;
for j:=tedad+1 downto i do
A[j]:=A[j-1];
A[i]:=m;
tedad:=tedad+1;
end;
Begin
tedad:=0;
clrscr;
repeat
writeln('Enter a number');
readln(m);
z:=search(m);
if z<>0 then
hazf(z)
else
add(m);
for i:=1 to tedad do
write(A[i]:4);
readln(c);
until c='q';
end.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 79
ﺁﺭﺍﻳﻪ ﻫﺎﻱ ﺩﻭﺑﻌـﺪﻱ:
ﺑﺮﺍﻱ ﺗﻌﺮﻳﻒ ﻣﺎﺗﺮﻳﺲ )ﺁﺭﺍﻳﻪ ﺩﻭﺑﻌﺪﻱ( ﻣﺎﻧﻨﺪ ﺗﻌﺮﻳﻒ ﺁﺭﺍﻳﻪ ﻫﺎﻱ ﻳﮏ ﺑﻌﺪﻱ ﻋﻤﻞ ﻣﻲ ﮐﻨﻴﻢ ﺑﺎ ﺍﻳﻦ ﺗﻔﺎﻭﺕ ﮐﻪ ﺩﻭﺑﻌﺪ ﺑﻪ ﻋﻨﻮﺍﻥ ﺳﻄﺮ)ﺑﻌﺪ
ﺍﻭﻝ( ﻭﺳﺘﻮﻥ)ﺑﻌﺪ ﺩﻭﻡ( ﺗﻌﺮﻳﻒ ﻣﻲ ﮐﻨﻴﻢ.ﻧﻮﻉ ﺍﻧﺪﻳﺲ ﻫﺎ ﺑﺎﻳﺪ ﺍﺳﮑﺎﻟﺮ ﺑﺎﺷﺪ.
Type
;Mat = Array [1..5,boolean] of real
Var
; a : mat
Begin
ﺭﻭﺵ ﺍﻭﻝ ;a[3,true]:=100 ﺑـﺮﺍﻱ ﺩﺳﺘﺮﺳـﻲ ﺑـﻪ ﻋﻨﺎﺻـﺮ ﺁﺭﺍﻳـﻪ ﺑـﻪ ﺩﻭ ﺭﻭﺵ ﻣـﻲ ﺗـﻮﺍﻧﻴﻢ ﻋﻤـﻞ ﮐﻨـﻴﻢ:
ﺭﻭﺵ ﺩﻭﻡ ;a[3][true]:=100
;a[3,5>4]:=100
;a[6,false]:=200 ﺩﺭ ﺍﻳﻦ ﺳﻄﺮ ﭼﻮﻥ ﺍﺯ ﻣﺤﺪﻭﺩﻩ ﺍﻧﺪﻳﺲ ﻫﺎ ﺧﺎﺭﺝ ﺷﺪ ﺍﻳﻢ ﺑﺮﻧﺎﻣﻪ ﺣﺎﻟﺖ ﻋﺎﺩﻱ ﻧﺪﺍﺭﺩ.
end.
ﻣﺜﺎل ( 6ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ دو ﻣﺎﺗﺮﯾﺲ 3×4را درﯾﺎﻓﺖ ﮐﻨﺪ و ﺣﺎﺻﻞ ﺟﻤﻊ دو ﻣﺎﺗﺮﯾﺲ را ﭼﺎپ ﮐﻨﺪ :
uses
;newdelay,crt
var
;A,B,C:array[1..3 , 1..4]of integer
;i,j:integer
Begin
;)'Writeln('Enter A
for i:=1 to 3 do
for j:=1 to 4 do
;)]Readln(A[i][j
;)'Writeln('Enter B
for i:=1 to 3 do
for j:=1 to 4 do
;)]Readln(B[i][j
for i:=1 to 3 do
for j:=1 to 4 do
;]C[i,j]:=A[i,j]+B[i,j
for i:=1 to 3 do
begin
;writeln
for j:=1 to 4 do
;)write(C[i,j]:5
;end
End.
ﻣﺜﺎل ( 7ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﯾﮏ ﻣﺎﺗﺮﯾﺲ 4×4را درﯾﺎﻓﺖ ﮐﻨﺪ و ﺗﺮاﻧﻬﺎده آﻧﺮا ﭼﺎپ ﮐﻨﺪ :
uses
;newdelay,crt
var
;A,B:array[1..4 , 1..4]of integer
;i,j:integer
اداﻣﻪ ﺑﺮﻧﺎﻣﻪ در ﺻﻔﺤﻪ ﺑﻌﺪ
80 ( – ﺻﻔﺤـﻪmohammadi.mm@gmail.com) ـﺪي ﻣﻬﻨـﺪس ﻣﺤﻤ-1388 ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد- ﭘﺎﺳـﮑﺎل
Begin
CLRSCR;
Writeln('Enter A');
for i:=1 to 4 do
for j:=1 to 4 do
Readln(A[i][j]);
for i:=1 to 4 do
for j:=1 to 4 do
B[J,I]:=A[i,j];
for i:=1 to 4 do
begin
writeln;
for j:=1 to 4 do
write(B[i,j]:5);
end;
End.
: را درﯾﺎﻓﺖ ﮐﻨﺪ؛ﺳﭙﺲ ﺣﺎﺻﻠﻀﺮب اﯾﻦ دو ﻣﺎﺗﺮﯾﺲ را ﭼﺎپ ﮐﻨﺪ4×4 ( ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ دو ﻣﺎﺗﺮﯾﺲ8 ﻣﺜﺎل
uses
newdelay,crt;
var
A,B,C:array[1..4 , 1..4]of integer;
i,j,s,k:integer;
BEGIN
clrscr;
Writeln('Enter A');
For i:=1 to 4 do
for j:=1 to 4 do
read(A[i][j]);
Writeln('Enter B');
For i:=1 to 4 do
for j:=1 to 4 do
read(B[i,j]);
for i:=1 to 4 do
for j:=1 to 4 do
begin
s:=0;
ﻣﺤﺎﺳﺒﻪ ﺿﺮب دو ﻣﺎﺗﺮﯾﺲ: ﻣﻬﻤﺘﺮﯾﻦ ﻗﺴﻤﺖ ﺑﺮﻧﺎﻣﻪ
for k:=1 to 4 do
S := S + A[i,k] * B[k,j] ;
C[i,j]:=S ;
end;
for i:=1 to 4 do
begin
writeln;
for j:=1 to 4 do
write(C[i,j]:4);
end;
END.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 81
آراﯾﻪ ﻫﺎي ﭼﻨﺪ ﺑﻌـﺪي :
ﻣﯽ ﺗﻮان آراﯾﻪ ﻫﺎﯾﯽ ﺑﺎ اﺑﻌﺎد ﺑﯿﺸﺘﺮ از دو ﻧﯿﺰ ﺗﻌﺮﯾﻒ ﮐﺮد.ﺑﻄﻮر ﮐﻠﯽ ﺑﺮاي ﻣﻌﺮﻓﯽ ﯾﮏ آراﯾﻪ ﭼﻨـﺪ ﺑﻌـﺪي ﻣـﯽ ﺗـﻮان ﺑـﻪ دو
روش زﯾﺮ ﻋﻤﻞ ﮐﺮد :
; ) NAME : ARRAY [1..L] OF ARRAY [1..L2]… OF ARRAY [1..LN] OF TYPEروش اول
ﻣﺜﺎل ( آراﯾﻪ ﺳﻪ ﺑﻌﺪي ﺑﻪ روش دوم ﺑﺼﻮرت زﯾﺮ ﺗﻌﺮﯾﻒ ﻣﯽ ﮐﻨﯿﻢ :
VAR
; A : ARRAY [ 1..2 , 1..4 , 1..3 ] OF REAL
ﺑﺮاي دﺳﺘﺮﺳﯽ ﺑﻪ اﻋﻀﺎي اﯾﻦ آراﯾﻪ در ﺣﺎﻟﺖ ﮐﻠﯽ ﺑﺼﻮرت ] A [ I , J , Kﻋﻤﻞ ﻣﯽ ﮐﻨﻨﺪ ﮐﻪ در آن I,J,Kاﺑﻌﺎد آراﯾﻪ ﻣﯽ
ﺑﺎﺷﻨﺪ و در ﻣﺤﺪوده ﺗﻌﺮﯾﻒ ﺷﺪه ﺑﺮاي آراﯾﻪ ﺻﺪق ﻣﯽ ﮐﻨﻨﺪ.
ﻧﮑﺘﻪ ( آراﯾـﻪ ﻫﺎي ﻓﺸﺮده ) ( Packed Array
در ﭘﺎﺳﮑﺎل اﺳﺘﺎﻧﺪارد ﻫﺮ ﮐﺎراﮐﺘﺮ داﺧﻞ ﯾﮏ ﻋﻨﺼﺮ از آراﯾﻪ ﻗﺮار ﻣﯽ ﮔﯿﺮد .ﺣﺎل آﻧﮑﻪ ﻫﺮ ﻋﻨﺼﺮ آراﯾﻪ ﻇﺮﻓﯿﺖ ﭘـﺬﯾﺮش
ﺣﺪاﻗﻞ 4ﮐﺎراﮐﺘﺮ و ﺣﺪاﮐﺜﺮ 10ﮐﺎراﮐﺘﺮ را دارا ﻣﯽ ﺑﺎﺷﺪ .ﮐﻪ اﯾﻦ ﻣﻤﮑﻦ اﺳﺖ ﻣﺸﮑﻞ ﮐﻤﺒﻮد ﻓﻀﺎي ﺣﺎﻓﻈﻪ را اﯾﺠﺎد ﮐﻨﺪ ﻟـﺬا
ﺑﺮاي ﺟﻠﻮﮔﯿﺮي از اﺷﻐﺎل ﺣﺠﻢ ﺑﺰرﮔﯽ از ﺣﺎﻓﻈﻪ ،آراﯾﻪ ﻫﺎي ﮐﺎراﮐﺘﺮي ﻓﺸﺮده را ﺗﻌﺮﯾﻒ ﻣﯽ ﮐﻨﯿﻢ .در اﯾﻦ ﺣﺎﻟـﺖ ﻇﺮﻓﯿـﺖ
ﭘﺬﯾﺮش ﻫﺮﻋﻨﺼﺮ از ﯾﮏ ﮐﺎراﮐﺘﺮ ﺑﯿﺸﺘﺮ ﻧﯿﺴﺖ و ﺑﻨﺎﺑﺮاﯾﻦ ﺑﺪﯾﻦ ﺻﻮرت ﻣﯽ ﺗﻮاﻧﯿﻢ از ﺣﺎﻓﻈﻪ اﺳﺘﻔﺎده ﻣﻮﺛﺮﺗﺮي داﺷﺘﻪ ﺑﺎﺷﯿﻢ.
آراﯾﻪ ﻫﺎي ﻓﺸﺮده ﺑﺼﻮرت زﯾﺮ ﺗﻌﺮﯾﻒ ﻣﯽ ﺷﻮﻧﺪ :
Name : packed ] اﻧﺪﯾﺲ[ Array of ; type
ﺣﺴﻦ آراﯾﻪ ﻫﺎي ﻓﺸﺮده اﺳﺘﻔﺎده از ﺣﺎﻓﻈﻪ ﮐﻤﺘﺮ اﺳﺖ.
ﺗﻮﺟﻪ :در ﺗﻮرﺑﻮ ﭘﺎﺳﮑﺎل ﺑﻄﻮر اﺗﻮﻣﺎﺗﯿﮏ آراﯾـﻪ ﻫﺎ ﺑﺼﻮرت ﻓﺸﺮده در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﯽ ﺷﻮﻧﺪ و ﻧﯿﺎز ﺑﻪ ﺗﻌﺮﯾﻒ ﻣﺠﺪد آﻧﻬﺎ
آراﯾﻪ ﻣﻌﻤﻮﻟﯽ ﺑﺼﻮرت ﻓﺸﺮده ﻧﯿﺴﺖ.
A A
L L
I I
آراﯾﻪ ﻓﺸﺮده
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 82
ﺍﺭﺳﺎﻝ ﺁﺭﺍﻳﻪ ﺑﻪ ﺯﻳﺮ ﺑﺮﻧﺎﻣـﻪ:
Type
;Ar=array [1..10] of integer
Var
;h:Ar
;function test (m:ar) :integer
var
;I,f:integer
Begin
for i:=1 to 10 do
;]f:=f+m[i
;m[1]:=50
;test:=f div 10
;end
;var i:integer
begin
for i:=1 to 10 do
readln( H[I] ):
;))write(test(h
;)]write(h[1
end.
ﺍﻟﻒ ( ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺩﺭ ﺣﺎﻟﺘﻲ ﮐﻪ Mﺍﺭﺯﺵ )ﻣﻘﺪﺍﺭ( ﺑﺎﺷﺪ ﺑﺮﺭﺳﻲ ﻣﻲ ﮐﻨﻴﻢ :
ﺩﺭ ﺍﻳﻦ ﻣﺜﺎﻝ ﺁﺭﺍﻳﻪ Hﻫﻨﮕﺎﻡ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻓﺎﻧﮑﺸﻦ testﺗﺤﻮﻳﻞ Mﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ ﻭ ﭼﻮﻥ Mﻳﮏ ﭘﺎﺭﺍﻣﺘﺮ ﺍﺭﺯﺵ)ﻣﻘﺪﺍﺭ( ﺍﺳﺖ ﺍﺯ ﺁﺭﺍﻳﻪ Hﻳﮏ
ﮐﭙﻲ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ ﻭﮐﭙﻲ ﺁﻥ ﺑﻪ ﺍﺳﻢ Mﺷﻨﺎﺧﺘﻪ ﻣﻲ ﺷﻮﺩ .ﺩﺭﺍﻳﻦ ﺣﺎﻟﺖ ﺣﺎﻓﻈﻪ ﺩﻭ ﺑﺮﺍﺑﺮ ﺍﺷﻐﺎﻝ ﻣﻲ ﺷﻮﺩ ﻫﻤﭽﻨﻴﻦ ﺍﺟﺮﺍﻱ ﺯﻳـﺮ ﺑﺮﻧﺎﻣـﻪ
ﮐﻨﺪ ﻣﻲ ﺷﻮﺩ ﺯﻳﺮﺍ ﺑﺎﻳﺪ ﺗﻤﺎﻡ ﻣﺤﺘﻮﺍﻱ ﺳﻠﻮﻝ ﻫﺎﻱ Hﺩﺭ ﺳﻠﻮﻝ ﻫﺎﻱ Mﮐﭙﻲ ﺷﻮﺩ .ﺩﺭ ﻋﻮﺽ ﺗﻐﻴﻴﺮ ﺩﺍﺩﻥ ﺁﺭﺍﻳﻪ Mﺑﺎﻋﺚ ﺗﻐﻴﻴﺮ ﺁﺭﺍﻳـﻪ H
ﻧﻤﻲ ﺷﻮﺩ.ﺁﺭﺍﻳﻪ Mﻳﮏ ﺁﺭﺍﻳﻪ ﻣﺤﻠﻲ ﺍﺳﺖ ﮐﻪ ﻓﻘﻂ ﺩﺭ ﻓﺎﻧﮑﺸﻦ testﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻭﺑﻌﺪ ﺍﺯ ﺍﺗﻤﺎﻡ ﻓﺎﻧﮑﺸﻦ testﺍﺯ ﺑﻴﻦ ﻣﻲ ﺭﻭﺩ.
ﺏ ( ﺣﺎﻝ ﺑﺮﻧﺎﻣﻪ ﻗﺒﻞ ﺭﺍ ﺩﺭ ﺣﺎﻟﺘﻲ ﮐﻪ Mﻣﺮﺟﻊ )ﻣﺘﻐﻴﺮ( ﺑﺎﺷﺪ ﺑﺮﺭﺳﻲ ﻣﻲ ﮐﻨﻴﻢ :
ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﺁﺩﺭﺱ ﺁﺭﺍﻳﻪ Hﺑﻪ Mﺗﺤﻮﻳﻞ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ ﺩﺭ ﻭﺍﻗﻊ ﺁﺭﺍﻳﻪ Hﻭ ﺁﺭﺍﻳﻪ Mﻳﮑﻲ ﻫﺴﺘﻨﺪ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺣﺎﻓﻈﻪ ﺍﺿﺎﻓﻪ ﺍﺷـﻐﺎﻝ
ﻧﺸﺪﻩ ﺍﺳﺖ ﻭ ﺳﺮﻋﺖ ﻧﻴﺰ ﭘﺎﻳﻴﻦ ﻧﻴﺎﻣﺪﻩ ﺍﺳﺖ ﺍﻣﺎ ﺍﮔﺮ ﺁﺭﺍﻳﻪ Mﺭﺍ ﺗﻐﻴﻴﺮ ﺩﻫﻴﺪ ﺁﺭﺍﻳﻪ Hﻧﻴﺰ ﺗﻐﻴﻴﺮ ﻣﻲ ﮐﻨﺪ).ﺍﻣﻨﻴﺖ ﻧﺪﺍﺭﺩ(
ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﻣﺎﻧﻨﺪ ﺣﺎﻟﺖ ﻣﺮﺟﻊ ﻋﻤﻞ ﻣﻲ ﮐﻨﻴﻢ ﻳﻌﻨﻲ ﺁﺩﺭﺱ ﺁﺭﺍﻳﻪ Hﺗﺤﻮﻳﻞ Mﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ ﻳﻌﻨﻲ ﻓﻀﺎ ﺍﺷﻐﺎﻝ ﻧﻤﻲ ﺷﻮﺩ ﺯﻳـﺮ ﺑﺮﻧﺎﻣـﻪ
ﮐﻨﺪ ﻧﻤﻲ ﺷﻮﺩ ﺍﻣﺎ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺁﺭﺍﻳﻪ Mﺭﺍ ﺗﻐﻴﻴﺮ ﺩﻫﺪ ﮐﻪ ﺩﺭ ﺍﻳﻦ ﻣﺜﺎﻝ ﺧﻂ M[1]:=50ﺧﻄﺎ ﺧﻮﺍﻫﺪ ﺑﻮﺩ .ﮐﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ
ﺍﻣﻨﻴﺖ ﻧﻴﺰ ﺑﻪ ﻭﺟﻮﺩ ﻣﻲ ﺁﻳﺪ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 83
ﻧﮑﺘﻪ :ﻫﻨﮕﺎﻡ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻳﮏ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻳﺪ ﻧﻮﻉ ﭘﺎﺭﺍﻣﺘﺮ ﻫﺎ)ﺩﺭﻳﺎﻓﺘﻲ ﻭﺍﺭﺳﺎﻟﻲ ( ﻳﮑﻲ ﺑﺎﺷﺪ ﻳﻌﻨﻲ ﺍﮔﺮ ﻳﮏ ﺁﺭﺍﻳﻪ ﺭﺍ ﺑﻪ ﺯﻳﺮ ﺑﺮﻧﺎﻣـﻪ ﺍﺭﺳـﺎﻝ ﻣـﻲ
ﮐﻨﻴﻢ ﺑﺎﻳﺪ ﺑﺎ ﭘﺎﺭﺍﻣﺘﺮ ﻣﺠﺎﺯﻱ ﺁﻥ ﻫﻢ ﻧﻮﻉ ﺑﺎﺷﺪ ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ﺧﻄﺎﺳﺖ.
ﻧﮑﺘﻪ :ﺍﮔﺮ ﺁﺭﺍﻳﻪ ﺭﺍ ﺑﻪ ﺭﻭﺵ ﺩﻭﻡ ) (Typeﺗﻌﺮﻳﻒ ﮐﻨﻴﻢ ﻫﻨﮕﺎﻡ ﺍﺭﺳﺎﻝ ﺁﺭﺍﻳﻪ ﺑﻪ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ،ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺳﺎﺩﻩ ﺗﺮ ﻣﻲ ﺗﻮﺍﻧﺪ ﭘﺎﺭﺍﻣﺘﺮ ﻣﺠـﺎﺯﻱ
ﺭﺍ ﺗﻌﺮﻳﻒ ﮐﻨﺪ.
ﺗﻮﺍﻧﺪ ﺑﺎ ﻧﺎﻡ ﺧﻮﺩ ﻳﮏ ﺁﺭﺍﻳﻪ ﺭﺍ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺍﺻﻠﻲ ﺑﺮﮔﺮﺩﺍﻧﺪ ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﺧﺮﻭﺟﻲ ﺗﺎﺑﻊ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺁﺭﺍﻳﻪ ﺑﺎﺷﺪ .ﺑﺮﺍﻱ ﺍﻳﻨﮑﻪ ﻧﮑﺘﻪ :ﺗﺎﺑﻊ ﻧﻤﻲ
ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﺧﺮﻭﺟﻲ ﺍﺵ ﺁﺭﺍﻳﻪ ﺑﺎﺷﺪ ﺑﺎﻳﺪ ﻳﮏ ﭘﺎﺭﺍﻣﺘﺮ ﻣﺮﺟﻊ ﺑﻪ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﺍﺭﺳﺎﻝ ﮐﻨﻴﻢ ﺗﺎ ﺩﺭ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﺗﻐﻴﻴﺮ ﮐﻨﺪ ﻭﻫﻨﮕﺎﻣﻲ ﮐﻪ ﺑﻪ ﺑﺮﻧﺎﻣﻪ
ﺍﺻﻠﻲ ﺑﺮﮔﺸﺘﻴﻢ ﺗﻐﻴﻴﺮﺍﺕ ﺍﺻﻠﻲ ﺭﺍ ﻣﺸﺎﻫﺪﻩ ﮐﻨﻴﻢ.
ﭘﺎﺭﺍﻣﺘـﺮ ﺑﺎﺯ :
ﭘﺎﺭﺍﻣﺘﺮ ﺑﺎﺯ ﭘﺎﺭﺍﻣﺘﺮﻱ ﺍﺳﺖ ﮐﻪ ﻫﻨﮕﺎﻡ ﻓﺮﺍﺧﻮﺍﻧﻲ ﺗﺎﺑﻊ ﻳﺎ ﭘﺮﻭﺳﻴﺠﺮ ،ﻳﮏ ﺁﺭﺍﻳﻪ ﺑﺎ ﻫﺮ ﺗﻌﺪﺍﺩ ﺳﻠﻮﻝ ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﮐﻨﺪ .ﻧﺤﻮﻩ ﺗﻌﺮﻳﻒ ﭘـﺎﺭﺍﻣﺘﺮ
ﺑﺎﺯ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ:
;Function add(z : array of integer) : longint
ﺩﺭ ﭘﺎﺭﺍﻣﺘﺮ ﺑﺎﺯ ﻣﺤﺪﻭﺩﻩ ﺍﻧﺪﻳﺲ ﺍﻋﻼﻡ ﻧﻤﻲ ﺷﻮﺩ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﻫﺮ ﺁﺭﺍﻳﻪ ﺍﻱ ﺑﺎ ﺗﻌﺪﺍﺩ ﻋﻨﺎﺻﺮﻣﺨﺘﻠﻒ ﺭﺍ ﺑﻪ ﺁﻥ ﺗﺤﻮﻳﻞ ﺩﻫﻴﻢ.
ﺑﺮﺍﻱ ﻣﺸﺨﺺ ﮐﺮﺩﻥ ﮐﻤﺘﺮﻳﻦ ﻭﺑﻴﺸﺘﺮﻳﻦ ﺍﻧﺪﻳﺲ ﺍﺯ ﺗﻮﺍﺑﻊ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ lowﻭ highﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﮐﻨﻴﻢ.
ﻣﺜﺎﻝ(
Var
;A:array [1..10] of integer
;B:array[20..40] of integer
;i:integer
;function add(z : array of integer) : longint
var
;s:longint
;i,l,h : integer
begin
;)L:=low(z
;)H:=high(z
;s:=0
for i:=L to H do
;]s:=s+z[i
;add:=s
;end
begin
for i:=1 to 10 do
; ) ]readln( a[i
for i:=20 to 40 do
;) ]readln( b[i
;))writeln(add(a
;)writeln(add(b
end.
ﺩﺭ ﻣﺜﺎﻝ ﺫﮐﺮ ﺷﺪﻩ ﺩﻭ ﺁﺭﺍﻳﻪ Aﻭ Bﺍﺯ ﻧﻮﻉ integerﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﻧﺪ ﺍﻣﺎ ﺑﺎ ﻣﺤﺪﻭﺩﻩ ﺍﻧﺪﻳﺲ ﻫﺎﻱ ﻣﺘﻔﺎﻭﺕ .ﻓﺎﻧﮑﺸﻦ addﻫﺮ ﺩﻭ ﺁﺭﺍﻳﻪ
ﺭﺍ ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﺤﻮﻳﻞ ﺑﮕﻴﺮﺩ .ﺍﻳﻦ ﻓﺎﻧﮑﺸﻦ ﻣﺠﻤﻮﻉ ﻋﻨﺎﺻﺮ ﺁﺭﺍﻳﻪ ﺭﺍ ﺑﺮﻣﻲ ﮔﺮﺩﺍﻧﺪ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 84
ﺭﺷﺘـﻪ ﻫﺎ :
ﺭﺷﺘﻪ ﺷﺒﻴﻪ ﺁﺭﺍﻳﻪ ﺍﻱ ﺍﺯ ﻧﻮﻉ charﺍﺳﺖ ؛ ﻳﻌﻨﻲ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺧﻂ ﻋﻨﻮﺍﻥ stringﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺗﺼﻮﺭ ﮐﻨﻴﻢ:
Type
; String = array [0..255] of char
ﻣﺜﺎﻝ (
;'S:='ALIREZA
Writeln(s[4]);ž R
;'S[3]:='M
Writeln(s); ž ALMREZA
;'S[8]:='B
Writeln(s); ž ALMREZA
;S[0]:=#8
Writeln(s) ž ALMREZAB
;S[0]:=#0
ﭼﻴﺰﻱ ﭼﺎﭖ ﻧﻤﻲ ﺷﻮﺩ writeln(s); ž
;s[0]:=#3
writeln(s); ž ALM
; s[0]:=#10
ﻣﻌﻠﻮﻡ ﻧﻴﺴﺖ ﮐﻪ ﺩﻭ ﮐﺎﺭﺍﮐﺘﺮ ﺁﺧﺮ ﭼﻪ ﭼﻴﺰﻱ ﺑﺎﺷﺪwriteln(s); ž ALMREZAB
ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺑﻪ ﮐﺎﺭﺍﮐﺘﺮ ﻫﺎﻱ ﺩﺍﺧﻞ ﺭﺷﺘﻪ ﺩﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ ﻭ ﮐﺎﺭﺍﮐﺘﺮﻫﺎ ﺭﺍ ﺗﻐﻴﻴﺮدﻫﯿﻢ ﻳﺎ ﭼﺎﭖ ﮐﻨﻴﻢ.ﺍﮔﺮ ﺩﺳﺘﻮﺭ ﺍﻧﺘـﺴﺎﺏ
ﺑﺮ ﺭﻭﻱ ﮐﻞ ﺭﺷﺘﻪ ﺍﻧﺠﺎﻡ ﺷﻮﺩ)ﺧﻂ ﺍﻭﻝ ﺩﺭ ﻣﺜﺎﻝ ﺑﺎﻻ( ﺳﻠﻮﻝ ﺷﻤﺎﺭﻩ ﺻﻔﺮ ،ﺗﻐﻴﻴﺮ ﻣﻲ ﮐﻨﺪ ﺍﻣﺎ ﺍﮔﺮ ﺑﺮ ﺭﻭﻱ ﻳﮑﻲ ﺍﺯ ﺧﺎﻧﻪ ﻫﺎﻱ ﺭﺷﺘﻪ ﺑﺎﺷﺪ
ﺳﻠﻮﻝ ﺷﻤﺎﺭﻩ ﺻﻔﺮ ﺗﻐﻴﻴﺮ ﻧﻤﻲ ﮐﻨﺪ )ﺧﻂ ﭘﻨﺠﻢ ﺩﺭ ﻣﺜﺎﻝ ﺑﺎﻻ( ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻣﻲ ﺗﻮﺍﻧﺪ ﺧﺎﻧﻪ ﺷﻤﺎﺭﻩ ﺻﻔﺮ ﺭﺍ ﺗﻐﻴﻴﺮ ﺩﻫﺪ ﮐﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ
ﻃﻮﻝ ﺭﺷﺘﻪ ﺗﻐﻴﻴﺮ ﮐﺮﺩﻩ ﺍﺳﺖ.
üﻧﮑﺘﻪ :ﺩﺳﺘﻮﺭ ﺭﻭﺑﺮﻭ ﺧﻄﺎﺳﺖS[0]:=4 • .
ﻣﺜﺎل ( 1ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﯾﮏ رﺷﺘﻪ را درﯾﺎﻓﺖ ﮐﻨﺪ و اﻋﺪاد داﺧﻞ آﻧﺮا اﺳﺘﺨﺮاج ﮐﻨﺪ :
var
;]s:string[50 ﺑﻌﻨﻮان ﻣﺜﺎل رﺷﺘﻪ A5B82Cرا درﯾﺎﻓﺖ ﮐﻨﺪ و ﻋﺪد 582را
;N:longint
در ﺧﺮوﺟﯽ ﭼﺎپ ﮐﻨﺪ .
;i:integer
Begin
;)readln(S
;N:=0
for i:=1 to ord(S[0]) do
if (S[i]>='0') and (S[i]<='9') then
; N := N * 10 + Ord(s[i]) – 48
;)writeln(N
End.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 85
ﻣﺜﺎل ( 2ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﯾﮏ رﺷﺘﻪ را درﯾﺎﻓﺖ ﮐﻨﺪ و ﻣﻌﮑﻮس آﻧﺮا در ﺧﺮوﺟﯽ ﭼﺎپ ﮐﻨﺪ :
var
;s,m:string ﺑﻌﻨﻮان ﻣﺜﺎل رﺷﺘﻪ pascalرا درﯾﺎﻓﺖ ﮐﻨﺪ و رﺷﺘﻪ lacsapرا ﭼﺎپ ﮐﻨﺪ.
;i:integer
Begin
;)readln(S
;''=m:
for i:=1 to ord(S[0]) do
;m:= s[i] + m
;]m[0]:=s[0
;)writeln(m
End.
ﻣﺜﺎل ( 3ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﯾﮏ رﺷﺘﻪ از ﮐﺎرﺑﺮ درﯾﺎﻓﺖ ﮐﻨﺪ و ﻓﺮاواﻧﯽ ﻫﺮ ﯾﮏ از ﺣﺮوف اﻟﻔﺒـﺎي اﻧﮕﻠﯿـﺴﯽ را ﭼـﺎپ ﮐﻨـﺪ و
ﻫﻤﭽﻨﯿﻦ ﻓﺮاواﻧﯽ ﮐﺎراﮐﺘﺮﻫﺎي دﯾﮕﺮ را ﺑﻮﺳﯿﻠﻪ ﻣﺘﻐﯿﺮي ﺑﻨﺎم otherﭼﺎپ ﻧﻤﺎﯾﺪ :
var
;S:string ﺑﻌﻨﻮان ﻣﺜﺎل رﺷﺘﻪ WWW)987HHKKPHHرا درﯾﺎﻓﺖ ﻣـﯽ ﮐﻨـﺪ
;f:array['A'..'Z']of byte و ﺧﺮوﺟﯽ آن ﺑﺼﻮرت زﯾﺮ ﻣﯽ ﺑﺎﺷﺪ :
;other,i:integer
;C:char W 3
begin H 4
;)readln(S K 2
for C:='A' to 'Z' do P 1
;f[C]:=0 OTHER 4
;other:=0
for i:=1 to ord(s[0]) do
if (S[i]>='A') and (S[i]<='Z') then
F[S[i]]:=F[S[i]]+1
else
;other:=other+1
for c:='A' to 'Z' do
if F[C]>0 then
;)]Writeln(C ,' ', F[C
;)writeln('Other=',other
end.
ﺍﻟﺤﺎﻕ ﺭﺷﺘـﻪ ﻫﺎ :
ﺑﺮﺍﻱ ﺍﻟﺤﺎﻕ ﺭﺷﺘﻪ ﻫﺎ ﺍﺯ ﺩﻭ ﺭﻭﺵ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﮐﻨﻴﻢ :
-1ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻋﻤﻠﮕﺮ +
-2ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﺎﺑﻊ concat
ﺍﻟﺤﺎﻕ ﺩﺭ ﭘﺎﺳﮑﺎﻝ ﺧﺎﺻﻴﺖ ﺟﺎﺑﺠﺎﻳﻲ ﻧﺪﺍﺭﺩ.
ﺍﺭﺳﺎﻝ ﺭﺷﺘـﻪ ﺑﻪ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ:
ﺭﺷﺘﻪ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﻪ ﺳﻪ ﺭﻭﺵ ﻣﻘﺪﺍﺭ)ﺍﺭﺯﺷﻲ( ﻭﻣﺘﻐﻴﺮ)ﻣﺮﺟﻊ( ﻳﺎ ﺛﺎﺑﺖ ﺑﻪ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﺍﺭﺳﺎﻝ ﮐﺮﺩ.ﺧﺮﻭﺟﻲ ﺗﺎﺑﻊ ﻣﻲ ﺗﻮﺍﻧﺪ ﺭﺷﺘﻪ ﺍﻱ ﺑﺎﺷﺪ
ﺩﺭ ﺻﻮﺭﺗﻲ ﮐﻪ ﺁﺭﺍﻳﻪ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺑﺎﺷﺪ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 86
ﺁﺭﺍﻳﻪ ﺍﻱ ﺍﺯ ﺭﺷﺘـﻪ ﻫﺎ :
ﺁﺭﺍﻳﻪ ﺍﯼ ﺍﺯ ﺭﺷﺘﻪ ﻫﺎ ،ﺁﺭﺍﻳﻪ ﺍﻱ ﺍﺳﺖ ﮐﻪ ﻫﺮ ﻋﻨﺼﺮ ﺁﻥ ﻣﻲ ﺗﻮﺍﻧﺪ ﻳﮏ ﺭﺷﺘﻪ ﺭﺍ ﺩﺭ ﺧﻮﺩ ﻧﮕﻪ ﺩﺍﺭﺩ.
ﺗﺎﺑﻊ : concatﺍﻳﻦ ﺗﺎﺑﻊ ﺗﻌﺪﺍﺩ ﻧﺎﻣﺸﺨﺼﻲ ﺍﺯ ﺭﺷﺘﻪ ﻫﺎ ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﮐﺮﺩﻩ ﻭﺁﻧﻬﺎ ﺭﺍ ﺍﻟﺤﺎﻕ ﮐﺮﺩﻩ ﻭﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ ﺍﻳﻦ ﺗﺎﺑﻊ ﺣﺎﺻﻴﺖ ﺟﺎﺑﺠﺎﻳﻲ
ﻧﺪﺍﺭﺩ.
) ﺭﺷﺘﻪ , … , nﺭﺷﺘﻪ , ۲ﺭﺷﺘﻪ • Concat (۱ﺭﺷﺘﻪ
ﭘﺮوﺳﯿﺠﺮ : strﺍﻳﻦ ﭘﺮﻭﺳﻴﺠﺮﻳﮏ ﻋﺪﺩﺩﺭﻳﺎﻓﺖ ﮐﺮﺩﻩ ﻭﺁﻥ ﺭﺍ ﺗﺒﺪﻳﻞ ﺑﻪ ﺭﺷﺘﻪ ﻣﻲ ﮐﻨﺪ ﻭ ﺭﺷﺘﻪ ﺭﺍ ﺩﺭﭘﺎﺭﺍﻣﺘﺮﺩﻭﻡ ﻣﻲ ﺭﻳﺰﺩ.
. ﺍﻳﻦ ﺗﺎﺑﻊ ﻳﮏ ﮐﺎﺭﺍﮐﺘﺮ ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﮐﺮﺩﻩ ﻭﺣﺮﻑ ﺑﺰﺭﮒ ﺁﻥ ﺭﺍ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ: upcase ﺗﺎﺑﻊ
: ( ﺑﺮﻧﺎﻣﻪ ﺍﻱ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﺭﺷﺘﻪ ﺍﺯ ﻛﺎﺭﺑﺮ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ﻭ ﻫﻤﻪ ﻱ ﺣﺮﻭﻑ ﺁﻧﺮﺍ ﺑﻪ ﻛﻮﭼﻚ ﺗﺒﺪﻳﻞ ﻛﻨﺪ۵ ﻣﺜﺎﻝ
var
s:string; i:integer;
begin
readln(s);
for i:=1 to length(s) do
if (s[i]>='A') and (s[i]<='Z') then
s[i] := chr ( ord (s[i]) + 32 );
writeln(s);
end.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 88
ﭘﺮوﺳﯿﺠـﺮ : valﺍﻳﻦ ﭘﺮﻭﺳﻴﺠﺮ ﻳﮏ ﺭﺷﺘﻪ ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﮐﻨﺪ ﻭ ﺩﺭ ﺻﻮﺭﺗﻲ ﮐﻪ ﺑﺘﻮﺍﻧﺪ ﺁﻥ ﺭﺍ ﺗﺒﺪﻳﻞ ﺑﻪ ﻋﺪﺩ ﮐﻨﺪ ﻋﺪﺩ ﺭﺍ ﺩﺭ ﭘﺎﺭﺍﻣﺘﺮ ﺩﻭﻡ ﻭ
ﻋﺪﺩ ﺻﻔﺮ ﺭﺍ ﺩﺭ ﭘﺎﺭﺍﻣﺘﺮ ﺳﻮﻡ ﻣﻲ ﺭﻳﺰﺩ ﻭﻟﻲ ﺍﮔﺮ ﻧﺘﻮﺍﻧﺪ ﺗﺒﺪﻳﻞ ﮐﻨﺪ ﺁﻧﮕﺎﻩ ﻣﺤﻞ ﺧﻄﺎ)ﻣﺤﻞ ﮐﺎﺭﺍﮐﺘﺮ ﻏﻴﺮ ﻣﺠﺎﺯ( ﺭﺍ ﺩﺭ ﭘﺎﺭﺍﻣﺘﺮ ﺳﻮﻡ ﻣﻲ ﺭﻳﺰﺩ ﻭ
ﺩﺭ ﭘﺎﺭﺍﻣﺘﺮ ﺩﻭﻡ ﺻﻔﺮ ﻣﻲ ﺭﻳﺰﺩ.
)ﻣﺘﻐﻴﺮ ﺻﺤﻴﺢ ,ﻣﺘﻐﻴﺮ ﻋﺪﺩﻱ ,ﺭﺷﺘﻪ(Val
ﺗﺎﺑﻊ : posﺍﻳﻦ ﺗﺎﺑﻊ ﺭﺷﺘﻪ ۱ﺭﺍ ﺩﺭ ﺭﺷﺘﻪ ۲ﺟﺴﺖ ﻭﺟﻮ ﻣﻲ ﮐﻨﺪ ﺩﺭﺻﻮﺭﺕ ﭘﻴﺪﺍﺷﺪﻥ ﻣﺤﻞ ﺍﻭﻟﻴﻦ ﻭﻗﻮﻉ ﺁﻥ ﺭﺍﺑﺮﻣﻲ ﮔﺮﺩﺍﻧﺪ.
)ﺭﺷﺘﻪ , ۲ﺭﺷﺘﻪ • Pos(۱ﻋﺪﺩ ﺻﺤﻴﺢ
)'6 • Pos ('amh' , 'amzhbamhdqamh
)'0 • Pos ('abc' , 'aBCdABcd
)'0 • pos ('ABCDEF' , 'CD
; 'S := 'ABCDEFG
;)Delete(s,3,2
'Write(s); ž 'ABEFG
ﺑﻪ ﻭﺳﻴﻠﻪ ﺗﺎﺑﻊ copyﻭﻋﻤﻞ ﺍﻟﺤﺎﻕ ﭘﺮﻭﺳﻴﺠﺮ deleteﺭﺍ ﺷﺒﻴﻪ ﺳﺎﺯﻱ ﮐﻨﻴﺪ.
ﻣﺜﺎﻝ ( ۷ﺑﺮﻧﺎﻣﻪ ﺍﻱ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺭﺷﺘﻪ ﻫﺎﻱ Z1 , Z2 , Z3ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ؛ﺳﭙﺲ ﺭﺷﺘﻪ Z2ﺭﺍ ﺍﺯ Z1ﺣـﺬﻑ ﻛﻨـﺪ ﻭ ﺑﺠـﺎﻱ ﺁﻥ Z3ﺭﺍ
ﻗﺮﺍﺭ ﺩﻫﺪ :
;)procedure replace(var s1:string ; s2,s3:string
var
;p,L1:integer
begin ﻣـﺜﻼ ﺭﺷـﺘﻪ Z1 = abcdefcdghcdﻭ Z2 = cdﻭ Z3 = pascal
;)L1:=length(s2 ﺭﺍ ﻭﺍﺭﺩ ﻣــﻲ ﻛﻨــﻴﻢ cd ،ﺭﺍ ﻛــﻪ ﻫﻤــﺎﻥ Z2ﺍﺳــﺖ ﺍﺯ Z1ﻛــﻪ ﻫﻤــﺎﻥ
;)p:=pos(s2,s1
while(p<>0) do abcdefcdghcdﺍﺳﺖ ﺣﺬﻑ ﻣﻲ ﻛﻨـﺪ ﻭ ﺑﺠـﺎﻱ cdﻫـﺎﻱ ﺣـﺬﻑ ﺷـﺪﻩ ،
begin pascalﺭﺍ ﻗــــــﺮﺍﺭ ﻣﻴﺪﻫــــــﺪ ؛ ﻳﻌﻨــــــﻲ ﺩﺭ ﻧﻬﺎﻳــــــﺖ ﺭﺷــــــﺘﻪ
;)delete(s1,p,L1 abpascalefpascalghpascalﺭﺍ ﻛﻪ ﻫﻤﺎﻥ Z1ﺍﺳﺖ ﺩﺭ ﺧﺮﻭﺟﻲ ﭼـﺎﭖ
;)insert(s3,s1,p
ﻣﻲ ﻧﻤﺎﻳﺪ .
;)p:=pos(s2,s1
;end
;end
var
;z1,z2,z3:string
begin
;)readln(z1
;)readln(z2
;)readln(z3
;)replace(z1,z2,z3
;)writeln(z1
end.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 90
ﻣﺜﺎﻝ ( ۸ﺑﺮﻧﺎﻣﻪ ﺍﻳﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺭﺷﺘﻪ ﺍﻳﻲ ﺍﺯ ﻛﺎﺭﺍﻛﺘﺮﻫﺎ ﻛﻪ ﺑﻴﺎﻧﮕﺮ ﻳﻚ ﻋﺪﺩ ﺭﻭﻣﻲ ﺍﺳﺖ ﺭﺍ ﺍﺯ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﺑﺨﻮﺍﻧﺪ ﻭ ﺳﭙﺲ ﻋﺪﺩ ﻣﻌـﺎﺩﻝ ﺁﻥ
ﺭﺍ ﭼﺎﭖ ﻛﻨﺪ .ﺣﺮﻭﻑ ﺭﻭﻣﻲ ﺑﻪ ﺻﻮﺭﺕ ﺟﺪﻭﻝ ﺯﻳﺮ ﻫﺴﺘﻨﺪ.
ﺣﺮﻑ ﺭﻭﻣﻲ ﻋﺪﺩ ﻣﻌﺎﺩﻝ
M 1000
D 500
C 100
L 50
X 10
V 5
I 1
ﻣﺜﻼ ﺭﺷﺘﻪ MCXﻣﻌﺎﺩﻝ ﻋﺪﺩ 1110ﺍﺳﺖ ﻳﺎ ﺭﺷﺘﺔ DLXVIﻣﻌﺎﺩﻝ ﻋﺪﺩ 566ﺍﺳﺖ .ﻳﺎ ﺭﺷﺘﺔ CXXVﻣﻌﺎﺩﻝ ﻋﺪﺩ 125ﺍﺳﺖ.
Student
ﻫﻨﮕﺎﻣﻴﻜﻪ ﻣﻲ ﺧﻮﺍﻫﻴﻢ ﺍﻃﻼﻋﺎﺕ ﻣﺨﺘﻠﻔﻲ ﺍﺯ ﺷﻲ ﻳﺎ ﻓﺮﺩ ﻳﺎ ...ﺭﺍ ﺫﺧﻴﺮﻩ ﻛﻨﻴﻢ ﺑﻬﺘﺮ ﺍﺳﺖ ﻛﻪ ﺍﻃﻼ ﻋﺎﺕ ﺁﻥ ﺭﺍ ﻛﻨﺎﺭ ﻫﻢ ﺩﺍﺷﺘﻪ ﺑﺎﺷـﻴﻢ ﺑـﻪ
ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﺍﺯ ﺭﻛﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ .
ﻧﺤﻮﻩ ﻱ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﻓﻴﻠﺪﻫﺎﻱ ﺭﻛـﻮﺭﺩ :
ﺑﺮﺍﻱ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﻓﻴﻠﺪﻫﺎﻱ ﻳﻚ ﺭﻛﻮﺭﺩ ﺍﺑﺘﺪﺍ ﻧﺎﻡ ﺭﻛﻮﺭﺩ ﺭﺍ ﻧﻮﺷﺘﻪ ،ﺳﭙﺲ ﻳﻚ ﻧﻘﻄﻪ ﻣﻲ ﮔﺬﺍﺭﻳﻢ ﻭ ﺑﻌﺪ ﺍﺯ ﺁﻥ ﻧﺎﻡ ﻓﻴﻠﺪ ﺭﺍ ﻣﻲ ﮔﺬﺍﺭﻳﻢ.
ﻧﺎم ﻓﯿﻠﺪ .ﻧﺎم رﮐـﻮرد
Begin
;’Student . name := ‘ali
;)Readln (student . family
;Student . AVG := student . AVG+10
;)Writeln (student . STDid
;Student . name[0] := #3
End.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 92
ﺑﺮﺍﻱ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﻓﻴﻠﺪ ﻫﺎﻱ ﻳﻚ ﺭﻛﻮﺭﺩ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺍﺯ ﺩﺳﺘﻮﺭ Withﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ.ﺗﻜﺮﺍﺭ ﻧﺎﻡ ﺭﻛﻮﺭﺩ ﻭﻗﺖ ﮔﻴﺮ ﻭ ﺧﺴﺘﻪ ﻛﻨﻨﺪﻩ ﻣﻲ ﺑﺎﺷﺪ.
ﻣﺜﺎﻝ ( ۱ﺑﺮﺍﻱ ﭘﻲ ﺑﺮﺩﻥ ﺑﻪ ﭼﮕﻮﻧﮕﻲ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﺳﺘﻮﺭ Withﺑﻪ ﺑﺮﻧﺎﻣﻪ ﻱ ﺯﻳﺮ ﺩﻗﺖ ﻛﻨﻴﺪ :
TYPE
STD=RECORD
;NAME:STRING
;FAMILY:STRING
;AVG:REAL
;END
VAR
; S1 , S2 : STD
BEGIN
; 'S1.NAME := 'ALI
WITH S1 DO
BEGIN
; 'FAMILY := 'HASANI
; AVG := 14
;END
;S2 := S1
END.
ﺭﺷﺘﻪ ﻫﺎ ﻭ ﺁﺭﺍﻳﻪ ﻫﺎ ﺭﺍ ﻧﻤﻲ ﺗﻮﺍﻥ ﻳﻜﺠﺎ ﺩﺭﻳﺎﻓﺖ ﻳﺎ ﭼﺎﭖ ﮐﺮﺩ . ü
ﺍﮔﺮ ﺩﻭ ﺭﻛﻮﺭﺩ ﻫﻢ ﻧﻮﻉ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ ﺑﺎ ﻳﻚ ﺩﺳﺘﻮﺭ ﺍﻧﺘﺴﺎﺏ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﻣﺤﺘﻮﺍﻱ ﻓﻴﻠﺪ ﻫﺎﻱ ﻳﻜﻲ ﺭﺍ ﺩﺭ ﺩﻳﮕﺮﻱ ﻛﭙﻲ ﻛﻨﻴﻢ. ü
ﺭﻛـﻮﺭﺩ ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮ )ﺭﻛﻮﺭﺩ ﺣﺎﻭﻱ ﺭﻛﻮﺭﺩ( :
ﻓﻴﻠﺪﻫﺎﻱ ﻳﻚ ﺭﻛﻮﺭﺩ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺍﺯ ﻧﻮﻉ ﺭﻛﻮﺭﺩ ﺩﻳﮕﺮﻱ ﺑﺎﺷﻨﺪ ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻣﻲ ﺧﻮﺍﻫﻴﻢ ﺍﻃﻼﻋﺎﺕ ﻳﻚ ﺩﺍﻧﺶ ﺁﻣﻮﺯ ﺷﺎﻣﻞ
ﺷﻤﺎﺭﻩ ﺩﺍﻧﺶ ﺁﻣﻮﺯﻱ ،ﻧﺎﻡ ،ﻓﺎﻣﻴﻠﻲ ﻭ ﺗﺎﺭﻳﺦ ﺗﻮﻟﺪ ﺭﺍ داﺷﺘﻪ ﺑﺎﺷﯿﻢ ﮐﻪ ﺗﺎرﯾﺦ ﺗﻮﻟﺪ ﺧﻮﺩ ﺍﺯ ﺳﻪ ﻗﺴﻤﺖ ﺳﺎﻝ،ﻣﺎﻩ،ﺭﻭﺯ ﺗﺸﻜﻴﻞ ﻣﻲ ﺷﻮﺩ .
Type
Rec1= record
;Y: integer
;M: 1 .. 12
;D: 1 .. 31
;End
Rec2= record
;Id: longint
;]Name: string[10
;]Family: string [15
;BirthDate : rec1
;End
Var
;Student : rec2
ﻣﺘﻐﻴﺮ studentﭼﻨﺪ ﺑﺎﻳﺖ ﻓﻀﺎ ﺍﺷﻐﺎﻝ ﻣﻲ ﮐﻨﺪ؟
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 93
ﺁﺭﺍﻳﻪ ﺍﻱ ﺍﺯ ﺭﻛـﻮﺭﺩ ﻫﺎ :
ﺑﺮﺍﻱ ﺫﺧﻴﺮﻩ ﺍﻃﻼ ﻋﺎﺕ ۱۰۰ﺩﺍﻧﺶ ﺁﻣﻮﺯﻛﻪ ﻫﺮ ﺩﺍﻧﺶ ﺁﻣﻮﺯ ﺩﺍﺭﺍﻱ ﻧﺎﻡ،ﻓﺎﻣﻴﻠﻲ ﻭ ﻣﻌﺪﻝ ﺍﺳﺖ ﺍﺯ ﺳﺎﺧﺘﺎﺭ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ:
1 2 … 100
Name Family AVG Name Family AVG Name Family AVG
Students ...
TYPE
begin
REC=record
for i:=1 to 50 do
;number:integer
with M[i] do
;]name:string[10
begin
;]address:string[20
;)readln(number
;cost:longint
;)readln(name
;end
;)readln(address
var
;)readln(cost
;M:array[1..50] of REC
;end
;i:integer
;Hazine
;procedure Hazine
end.
var
;s:longint
begin
;s:=0
for i:=1 to 50 do ﻣﺤﺎﺳﺒﻪ ﻣﻴﺎﻧﮕﻴﻦ
ﻫﺰﻳﻨﻪ ﻣﺸﺘﺮﻛﻴﻦ ; s := s + M[i].cost
;s:=s div 50
for i:=1 to 50 do ﭼﺎﭖ ﻣﺸﺘﺮﻛﻴﻦ ﭘﺮ ﻣﺼﺮﻑ
if M[i].cost > s then
;)writeln(M[i].number,M[i].name,M[i].cost
;end
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 94
رﮐـﻮردي از آراﯾـﻪ :
ﺑﺮﺍﻱ ﺫﺧﻴﺮﻩ ﻛﺮﺩﻥ ﺍﻃﻼﻋﺎﺕ ﻳﻚ ﺩﺍﻧﺶ ﺁﻣﻮﺯ ﺷﺎﻣﻞ ﻧﺎﻡ ﻭ ﻓﺎﻣﻴﻠﻲ ﻭ ﻧﻤﺮﺍﺕ ۱۰ﺩﺭﺱ ﺁﻥ ﺍﺯ ﺳﺎﺧﺘﺎﺭ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ :
Name Family Grades
-ﺧﺮﻭﺟﻲ ﺗﺎﺑﻊ)ﻣﻘﺪﺍﺭ ﺑﺮﮔﺸﺘﻲ ﺁﻥ( ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺍﺯ ﻧﻮﻉ ﺁﺭﺍﻳﻪ ﻳﺎ ﺭﻛﻮﺭﺩ ﺑﺎﺷﺪ.ﺩﺭ ﺻﻮﺭﺕ ﻧﻴﺎﺯ ﺑﻪ ﻳﺮﮔﺸﺖ ﻳﻚ ﺭﻛﻮﺭﺩ ﺍﺯ ﻳﻚ ﺗﺎﺑﻊ ﺑﺎﻳﺪ ﺁﻥ ﺭﺍ
ﺑﻪ ﺻﻮﺭﺕ ﻣﺮﺟﻊ)ﻣﺘﻐﻴﺮ( ﺗﻌﺮﻳﻒ ﻛﻨﻴﻢ .
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 95
رﮐـﻮرد ﻣﺘﻐﯿـﺮ :
ﻣﻲ ﺧﻮﺍﻫﻴﻢ ﺍﻃﻼﻋﺎﺕ ﺩﺍﻧﺶ ﺁﻣﻮﺯﺍﻥ ﻳﻚ ﻣﺪﺭﺳﻪ ﺭﺍ ﺫﺧﻴﺮﻩ ﻛﻨﻴﻢ .ﺩﺭ ﻣﺪﺭﺳﻪ ﺩﻭ ﻧﻮﻉ ﺩﺍﻧﺶ ﺁﻣﻮﺯ ﻭﺟﻮﺩ ﺩﺍﺭﺩ :ﺩﺍﻧﺶ ﺁﻣﻮﺯ ﺗﺮﻣﻲ ﻭ ﺩﺍﻧﺶ
ﺁﻣﻮﺯ ﺳﺎﻟﻲ ﻭﺍﺣﺪﻱ .ﺑﺮﺍﻱ ﺫﺧﻴﺮﻩ ﺁﻧﻬﺎ ﻣﻲ ﺧﻮﺍﻫﻴﻢ ﻳﻚ ﺭﻛﻮﺭﺩ ﺑﺎ ﻣﺸﺨﺼﺎﺕ زﯾﺮﺗﻌﺮﻳﻒ ﻛﻨﻴﻢ.
ﺗﺮﻣﻲ ) ﻧﺎﻡ -ﻓﺎﻣﻴﻠﻲ -ﺷﻤﺎﺭﻩ ﺩﺍﻧﺶ ﺁﻣﻮﺯﻱ -ﺷﻤﺎﺭﻩ ﺗﺮﻡ -ﻣﻌﺪﻝ ﺗﺮﻡ -ﻣﺒﻠﻎ -ﺗﻌﺪﺍﺩ ﻭﺍﺣﺪ(
ﺳﺎﻟﻲ ﻭﺍﺣﺪﻱ )ﻧﺎﻡ -ﻓﺎﻣﻴﻠﻲ -ﺷﻤﺎﺭﻩ ﺩﺍﻧﺶ ﺁﻣﻮﺯﻱ -ﻣﻌﺪﻝ ﺳﺎﻝ -ﺳﻦ -ﺑﻴﻤﻪ(
ﺍﻳﻦ ﺩﻭ ﻧﻮﻉ ﺩﺍﻧﺶ ﺁﻣﻮﺯ ﺩﺍﺭﺍﻱ ﺳﻪ ﻓﻴﻠﺪ ﻣﺸﺘﺮﻙ ﻣﻲ ﺑﺎﺷﻨﺪ)ﻧﺎﻡ -ﻓﺎﻣﻴﻠﻲ -ﺷﻤﺎﺭﻩ ﺩﺍﻧﺶ ﺁﻣﻮﺯﻱ( .ﺍﻣﺎ ﺑﻘﻴﻪ ﺍﻃﻼﻋﺎﺕ ﺁﻧﻬﺎ ﺑﺎ ﻫﻢ ﻣﺘﻔــﺎﻭﺕ
ﺍﺳﺖ.
ﺑﺮﺍﻱ ﺫﺧﻴﺮﻩ ﻛﺮﺩﻥ ﺁﻧﻬﺎ ﻳﻚ ﺭﻛﻮﺭﺩ ﺑﻪ ﺻـﻮﺭﺕ ﺯﻳﺮ ﺗﻌﺮﻳﻒ ﻣﻲ ﻛﻨﻴﻢ :
ﻗﺴﻤﺖ ﻣﺘﻐﻴﺮ ﺭﻛﻮﺭﺩ ،ﻳﻚ ﻓﻀﺎﻱ ﻣﺸﺘﺮﻙ ﺍﺳﺖ ﺑﻴﻦ ﺩﻭ ﺣﺎﻟﺖ ﺗﺮﻣﻲ ﻭ ﺳﺎﻟﻲ ﻭﺍﺣﺪﻱ -ﻳﻌﻨﻲ ﻣﻲ ﺗﻮﺍﻥ ﺍﻳﻦ ﻗﺴﻤﺖ ﺭﺍ ﻛﻪ ﻳﻚ ﻓﻀﺎ
ﺍﺳﺖ ﺩﺭ ﻳﻚ ﺣﺎﻟﺖ ﺑﺎ ﭼﻬﺎﺭ ﻓﻴﻠﺪ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺖ) ﺗﺮﻣﻲ( ﻭ ﺩﺭ ﺣﺎﻟﺖ ﺩﻳﮕﺮ ﻫﻤﻴﻦ ﻓﻀﺎ ﺭﺍ ﺳﻪ ﻓﻴﻠﺪ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺖ)ﺳﺎﻟﻲ ﻭﺍﺣﺪﻱ(.ﻗﺴﻤﺖ
ﻣﺘﻐﻴﺮ ﺁﻥ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ :
ﺭﻛﻮﺭﺩ ﻣﺘﻐﻴﺮ ﺩﺍﺭﺍﻱ ﻳﻚ ﻓﻴﻠﺪ ﺑﻪ ﻧﺎﻡ ﻓﻴﻠﺪ ﻣﺸﺮﻭﻁ)ﺣﺎﻟﺖ( ﺍﺳﺖ ﻛﻪ ﻧﺸﺎﻥ ﺩﻫﻨﺪﻩ ﻱ ﺗﻔﺴﻴﺮ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺍﺯ ﻗﺴﻤﺖ ﻣﺘﻐﻴﺮ ﺍﺳﺖ .
ﻓﻴﻠﺪ ﻣﺸﺮﻭﻁ )ﺣﺎﻟﺖ( ﺑﺎﻳﺪ ﺍﺯ ﻧﻮﻉ ﺍﺳﻜﺎﻟﺮ ﺑﺎﺷﺪ .
ﭼﮕﻮﻧﮕﯽ ﺗﻌﺮﯾﻒ رﮐـﻮرد ﻣﺘﻐﯿـﺮ :
Type
Rec = record
;]Name : string [10
;]Family : string [15
;Shstd : longint
Case ts : byte of
;);1: ( sh-t:byte; avg-s:real; price:longint; T-V:byte
;);2: ( avg-t:real; age:byte; bimeh:boolean
;End
Var
;Student : rec
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 96
ﻣﻘﺪﺍﺭ ﻓﻀـﺎﻱ ﺍﺷﻐﺎﻟﻲ ﺭﻛـﻮﺭﺩ ﻫﺎﻱ ﻣﺘﻐﻴﺮ :
ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ ﻣﻘﺪﺍﺭ ﻓﻀﺎﻱ ﺍﺷﻐﺎﻟﻲ ﻳﻚ ﺭﻛﻮﺭﺩ ﻣﺘﻐﻴﺮ ﺑﻪ ﺭﻭﺵ ﺯﻳﺮ ﻋﻤﻞ ﻣﻲ ﻛﻨﻴﻢ :
ﻣﺎﮐﺰﯾﻤﻢ ﺣﺎﻟﺖ ﻣﺘﻐﯿﺮ ) +ﻓﯿﻠﺪ ﺗﻌﯿﯿﻦ ﮔﻮﻧﻪ( اﻧﺪازه ي ﻓﯿﻠﺪ ﻣﺸﺮوط +اﻧﺪازه ي ﻗﺴﻤﺖ ﺛﺎﺑﺖ = ﻓﻀﺎي اﺷﻐﺎﻟﯽ
ﻣﺜﺎﻝ ( ۳ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻛﻮﺭﺩ ﻣﺘﻐﻴﺮ ،ﺩﻭ ﻧﻮﻉ ﻛﺎﺭﮔﺮ ﺭﺳﻤﻲ ﻭ ﻗﺮﺍﺭﺩﺍﺩﻱ ﺭﺍ ﺗﻌﺮﻳﻒ ﻣﻲ ﻛﻨﻴﻢ ﻭ ﺑﺮﻧﺎﻣﻪ ﻱ ﺩﺭﻳﺎﻓﺖ ﺍﻃﻼﻋﺎﺕ ﺍﻳﻦ ﺩﻭ ﻧﻮﻉ ﻛﺎﺭﮔﺮ
ﺭﺍ ﻣﻲ ﻧﻮﻳﺴﻴﻢ :
ﺩﺭ ﺍﻳﻦ ﻣﺜﺎﻝ ۳ﻓﻴﻠﺪ ﻣﺸﺘﺮﻙ )ﻧﺎﻡ ،ﻓﺎﻣﻴﻠﻲ ﻭ ﺷﻤﺎﺭﻩ ﺷﻨﺎﺳﺎﻳﻲ( ﺩﺍﺭﻳﻢ ﻛﻪ ﺑﺮﺍﻱ ﻫﺮ ﺩﻭ ﻧﻮﻉ ﻛﺎﺭﮔﺮ ﻣﻲ ﺑﺎﺷﺪ.
ﺍﻣﺎ ﺑﺮﺍﻱ ﻛﺎﺭﮔﺮ ﺭﺳﻤﻲ ﻋﻼﻭﻩ ﺑﺮ ۳ﻓﻴﻠﺪ ﻣﺸﺘﺮﻙ ﻓﻴﻠﺪﻫﺎﻱ ﺑﻴﻤﻪ ،ﺣﻘﻮﻕ ﺛﺎﺑﺖ ﻭ ﭘﺎﺩﺍﺵ ﺩﺭ ﻧﻈﺮ ﻣـﻲ ﮔﻴـﺮﻳﻢ ﻭ ﺑـﺮﺍﻱ ﻛـﺎﺭﮔﺮ ﻗـﺮﺍﺭﺩﺍﺩﻱ ﻫـﻢ
ﻋﻼﻭﻩ ﺑﺮ ۳ﻓﻴﻠﺪ ﻣﺸﺘﺮﻙ ،ﻓﻴﻠﺪﻫﺎﻱ ﻣﺪﺕ ﻗﺮﺍﺭﺩﺍﺩ ﻭ ﺣﻘﻮﻕ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﻣﻲ ﮔﻴﺮﻳﻢ.
type
Worker = record
; ]name:string[10
ﻓﻴﻠﺪ ﻫﺎﻱ ﻣﺸﺘﺮﻙ ; ]family:string[20
; id:integer
;)readln(c
ﺩﺭﻳﺎﻓﺖ ﻳﻚ ﻛﺎﺭﺍﻛﺘﺮ ﺍﺯ ﻭﺭﻭﺩﻱ :
if c = 'r' then
w.t := false ﺍﮔﺮ ﻛﺎﺭﺍﻛﺘﺮ ) rﻛﺎﺭﮔﺮ ﺭﺳﻤﻲ( ﺑﺎﺷﺪ ﻓﻴﻠﺪ ﺣﺎﻟـﺖ ﺭﺍ falseﻣـﻲ ﻛﻨـﻴﻢ.
else ﺩﺭ ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ ﻓﻴﻠﺪ ﺣﺎﻟﺖ ﺭﺍ Trueﻣﻲ ﻛﻨﻴﻢ .
;w.t := true
ﺣﺎﻝ ﺍﮔﺮ w.tﻛﻪ ﻫﻤﺎﻥ ﻓﻴﻠﺪ ﻣﺸﺮﻭﻁ )ﺣﺎﻟﺖ( ﺍﺳـﺖ Falseﺑـﻮﺩ ،
if w.t = false then
ﺍﻃﻼﻋﺎﺕ ﻣﺮﺑﻮﻁ ﺑﻪ ﻛﺎﺭﮔﺮ ﺭﺳﻤﻲ)ﺑﻴﻤﻪ ،ﺣﻘﻮﻕ ﺛﺎﺑﺖ ﻭ ﭘﺎﺩﺍﺵ( ﺭﺍ ﺍﺯ ) readln( w.bime , w.sabet , w.padash
else ﻭﺭﻭﺩﻱ ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﻛﻨﻴﻢ ﺩﺭ ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ )ﺍﮔـﺮ ; ( w.t = true
;) readln( w.modat , w.salary ﺍﻃﻼﻋﺎﺕ ﻣﺮﺑﻮﻁ ﺑﻪ ﻛـﺎﺭﮔﺮ ﻗـﺮﺍﺭﺩﺍﺩﻱ )ﻣـﺪﺕ ﻗـﺮﺍﺭﺩﺍﺩ ﻭ ﺣﻘـﻮﻕ( ﺭﺍ
end.
ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﻛﻨﻴﻢ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 97
روﺷﻬـﺎي ﺟﺴﺘﺠﻮ و ﻣﺮﺗﺐ ﺳﺎزي
ﺗﻌﺮﯾﻒ ﻟﯿﺴﺖ :
ﻟﻴﺴﺖ ﺍﺯ ﺗﻌﺪﺍﺩﻱ ﺩﺍﺩﻩ ﺗﺸﻜﻴﻞ ﺷﺪﻩ ﺍﺳﺖ ﻛﻪ ﺑﺎ ﻳﻜﺪﻳﮕﺮ ﺩﺭ ﺧﺎﺻﻴﺘﻲ ﻣﺸﺘﺮﻙ ﻫﺴﺘﻨﺪﻭ ﺗﻌﺮﻳﻒ ﻟﻴـﺴﺖ ﺑـﺴﻴﺎﺭ ﺷـﺒﻴﻪ ﺗﻌﺮﻳـﻒ ﻣﺠﻤﻮﻋـﻪ ﺩﺭ
ﺭﻳﺎﺿﻲ ﺍﺳﺖ ﺑﺎ ﺍﻳﻦ ﺗﻔﺎﻭﺕ ﻛﻪ :
• ﺩﺭ ﻣﺠﻤﻮﻋﻪ) (Setﻋﻀﻮ ﺗﻜﺮﺍﺭﻱ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ ﺍﻣﺎ ﺩﺭ ﻟﻴﺴﺖ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺍﺩﻩ ﺗﻜﺮﺍﺭﻱ ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ.
• ﺩﺭ ﻣﺠﻤﻮﻋﻪ ﺗﺮﺗﻴﺐ ﺍﻋﻀﺎ ﺍﻫﻤﻴﺖ ﻧﺪﺍﺭﺩ ﺍﻣﺎ ﺩﺭ ﻟﻴﺴﺖ ﺗﺮﺗﻴﺐ ﺩﺍﺩﻩ ﻫﺎ ﺍﻫﻤﻴﺖ ﺩﺍﺭﺩ.
ﺳﺌﻮﺍﻝ( ﺁﻳﺎ ﻧﻤﺮﺍﺕ ﺩﺭﺱ ﭘﺎﺳﻜﺎﻝ ﻣﻲ ﺗﻮﺍﻧﺪ ﻣﺠﻤﻮﻋﻪ ﺑﺎﺷﺪ؟ ﺟﻮﺍﺏ :ﺍﮔﺮ ﻧﻤﺮﻩ ﺗﻜﺮﺍﺭﻱ ﺩﺭ ﺁﻧﻬﺎ ﻧﺒﺎﺷﺪ ﻣﻲ ﺗﻮﺍﻧﺪ ﻣﺠﻤﻮﻋﻪ ﺑﺎﺷﺪ
ﺳﺌﻮﺍﻝ( ﺁﻳﺎ ﻟﻴﺴﺖ ﺭﻭﺑﺮﻭ ﻣﻲ ﺗﻮﺍﻧﺪ ﻣﺠﻤﻮﻋﻪ ﺑﺎﺷﺪ؟ } {2 , 7 , 8 , 3 , 2 , 4ﺟﻮﺍﺏ :ﺧﻴﺮ ﺯﻳﺮﺍ ﻋﻀﻮﺗﻜﺮﺍﺭﻱ ﺩﺍﺭﺩ.
ﻧﻜﺘﻪ( ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﻣﻲ ﺗﻮﺍﻧﺪ ﺣﺘﻤﺎ ﻟﻴﺴﺖ ﺑﺎﺷﺪ ﺍﻣﺎ ﻳﻚ ﻟﻴﺴﺖ ﻫﻤﻴﺸﻪ ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺑﺎﺷﺪ.
}{ ali , 14 , 15.5 , 18 ﻧﻜﺘﻪ( ﺩﺍﺩﻩ ﻫﺎﻱ ﻣﻮﺟﻮﺩ ﺩﺭ ﻳﻚ ﻟﻴﺴﺖ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﺯ ﭼﻨﺪ ﻧﻮﻉ ﺩﺍﺩﻩ ﻣﺘﻔﺎﻭﺕ ﺑﺎﺷﺪ ﻣﺜﻼ :
ﺩﻗﺖ ﺷﻮﺩ ﻛﻪ ﺩﺍﺩﻩ ﻫﺎﻱ ﻳﻚ ﻟﻴﺴﺖ ﺩﺭ ﺧﺎﺻﻴﺘﻲ ﺑﺎﻳﺪ ﻣﺸﺘﺮﻙ ﺑﺎﺷﻨﺪ.
ﻧﻜﺘﻪ( ﺭﻛﻮﺭﺩ ﻭ ﺁﺭﺍﻳﻪ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﻳﻚ ﻟﻴﺴﺖ ﺑﺎﺷﻨﺪ.
5 8.5 ''A ALI 5 25 19 14 6 13 9 8
10 13 14 11 7 12 19 17 12 2
ﻧﻜﺘﻪ( ﺍﮔﺮ ﺩﺭ ﻟﻴﺴﺖ ﭼﻨﺪ ﻣﻮﺭﺩ ﺍﺯ ﻛﻠﻴﺪ ﺑﺎﺷﺪ ﻭ ﺑﻪ ﺭﻭﺵ ﺧﻄﻲ ﺟﺴﺘﺠﻮ ﻛﻨﻴﻢ ﺍﻭﻟﻴﻦ ﻛﻠﻴﺪ ﺭﺍ ﭘﻴﺪﺍ ﻣﻲ ﻛﻨﺪ ﻭ ﺍﻧﺪﻳﺲ )ﻓﻴﻠﺪ( ﻟﻴﺴﺖ ﺭﺍ ﺑﺮﻣﻲ
ﮔﺮﺩﺍﻧﺪ ﻭ ﻛﺎﺭ ﺟﺴﺘﺠﻮ ﺗﻤﺎﻡ ﻣﻲ ﺷﻮﺩ .ﺩﺭ ﻣﺜﺎﻝ ﺑﺎﻻ ﺩﻭ ﻋﺪﺩ 12ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﺍﻣﺎ ﺍﻭﻟﻴﻦ 12ﻛﻪ ﺩﺭ ﺧﺎﻧﻪ ﺷﺸﻢ ﺍﺳﺖ ﭘﻴﺪﺍ ﻣﻲ ﺷﻮﺩ ﻭ ﻛﺎﺭ ﺗﻤﺎﻡ
ﻣﻲ ﺷﻮﺩ.
ﻧﻜﺘﻪ( ﺩﺭ ﺭﻭﺵ ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ﻻﺯﻡ ﻧﻴﺴﺖ ﻛﻪ ﻟﻴﺴﺖ ﻣﺎ ﻣﺮﺗﺐ ﺷﺪﻩ ﺑﺎﺷﺪ).ﻳﻌﻨﻲ ﺩﺍﺩﻩ ﻫﺎ ﺩﺭ ﻟﻴﺴﺖ ﺻﻌﻮﺩﻱ ﻳﺎ ﻧﺰﻭﻟﻲ ﺑﺎﺷﻨﺪ(.
Var ;A: Array[1..100] of integer ﻧﻜﺘﻪ( ﺩﺭ ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖِ ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ﻋﻤﻞ ﻣﻘﺎﻳﺴﻪ ﻳﻜﺒﺎﺭ ﺍﻧﺠﺎﻡ ﻣﻴﺸﻮﺩ.ﺩﺭ
;Key , F:integer; B:Boolean
Begin ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖِ ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ،ﺑﻪ ﺗﻌﺪﺍﺩ ﺧﺎﻧﻪ ﻫﺎﻱ ﻟﻴﺴﺖ ،ﻋﻤﻞ ﻣﻘﺎﻳﺴﻪ ﺍﻧﺠﺎﻡ
For F:=1 to 100 do ﻣﻴﺸﻮﺩ ؛ ﺑﻨﺎﺑﺮﺍﻳﻦ ﺍﮔﺮ ﻟﻴﺴﺖ Nﺗﺎ ﻋﻨﺼﺮ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ Nﻋﻤﻞِ ﻣﻘﺎﻳﺴﻪ
;)]Readln( A[F
ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ .ﺩﺭ ﺣﺎﻟﺖ ﻣﺘﻮﺳﻂ N / 2ﻋﻤﻞِ ﻣﻘﺎﻳﺴﻪ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ.
;)Readln(Key
;B:=False ﺳﺌﻮﺍﻝ( ﺍﮔﺮ ﻟﻴﺴﺘﻲ ﺩﺍﺭﺍﻱ ٢٠ﻋﻨﺼﺮ ﺑﺎﺷﺪ ﺩﺭ ﺭﻭﺵ ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ﺩﺭ
For F:=1 to 100 do
IF A[F] = Key then
ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﻭ ﺣﺎﻟﺖ ﻣﺘﻮﺳﻂ ﭼﻨﺪ ﻋﻤﻞ ﻣﻘﺎﻳﺴﻪ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ؟
Begin
;B:=True
;Break ﻧﻜﺘﻪ( ﺩﺭ ﺭﻭﺵ ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ﻟﻴﺴﺖ ﻣﻲ ﺗﻮﺍﻧﺪ ﻧﺎﻣﺮﺗﺐ ﺑﺎﺷﺪ.
;End ﻭﻟﻲ ﺗﻌﺪﺍﺩ ﻣﻘﺎﻳﺴﻪ ﻫﺎﺯﻳﺎﺩ ﺍﺳﺖ ﻭ ﺟﺴﺘﺠﻮ ﺑﻪ ﻛﻨﺪﻱ ﺻﻮﺭﺕ ﻣﻲ ﮔﻴﺮﺩ.
If B=False then
)' Writeln(' Not Found
Else
;)Wrietln(' Find ' , F
End.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 98
- 2روش ﺟﺴﺘﺠﻮي دودوﯾـﯽ ) ﺑﺎﯾﻨﺮي( :
ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﺑﺎﻳﺪ ﻟﻴﺴﺖ ﺍﺯ ﻗﺒﻞ ﻣﺮﺗﺐ ﺑﺎﺷﺪ .ﭘﺲ ﺍﻳﻦ ﺭﻭﺵ ﻣﺨﺼﻮﺹ ﻟﻴﺴﺖ ﻫﺎﻳﻲ ﺍﺳﺖ ﻛﻪ ﺍﺯ ﻗﺒﻞ ﻣﺮﺗﺐ) ﺻﻌﻮﺩﻱ ﻳﺎ ﻧﺰﻭﻟﻲ( ﺷﺪﻩ ﺍﻧﺪ.
ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻳﻚ ﺁﺭﺍﻳﻪ ﻣﺮﺗﺐ ﺻﻌﻮﺩﻱ )ﺍﺯ ﻛﻮﭼﻚ ﺑﻪ ﺑﺰﺭﮒ( ﺩﺍﺭﻳﻢ ﻭ ﻣﻲ ﺧﻮﺍﻫﻴﻢ ﻛﻠﻴﺪﻱ ﺭﺍ ﺩﺭ ﺁﻥ ﺑﻪ ﺭﻭﺵ ﺑﺎﻳﻨﺮﻱ ﺟﺴﺘﺠﻮ ﻛﻨﻴﻢ :
ﺁﺭﺍﻳﻪ ﺭﺍ ﺍﺯ ﻭﺳﻂ ﻧﺼﻒ ﻣﻲ ﻛﻨﻴﻢ ﻭ ﻛﻠﻴﺪ ﺭﺍ ﺑﺎ ﻋﻨﺼﺮ ﻭﺳﻂ ﺁﺭﺍﻳﻪ ﻣﻘﺎﻳﺴﻪ ﻣﻲ ﻛﻨﻴﻢ ﻛﻪ ﺳﻪ ﺣﺎﻟﺖ ﻣﻤﻜﻦ ﺍﺳﺖ ﺭﺥ ﺩﻫﺪ:
(1ﮐﻠﯿﺪ از ﻋﻨﺼﺮ وﺳﻂ ﺑﺰرﮔﺘﺮ ﺑﺎﺷﺪ) ] : (Key > A[Cﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺍﻳﻨﻜﻪ ﻟﻴﺴﺖ ﻣﺮﺗﺐ )ﺻﻌﻮﺩﻱ( ﺍﺳﺖ ﺣﺘﻤﺎ ﻛﻠﻴﺪ ﺩﺭ
ﻧﻴﻤﻪ ﺳﻤﺖ ﺭﺍﺳﺖ ﺍﺳﺖ ﻭ ﻣﺎ ﺑﺎﻳﺪ ﻧﻴﻤﻪ ﺳﻤﺖ ﺭﺍﺳﺖ ﺭﺍ ﺟﺴﺘﺠﻮ ﻛﻨﻴﻢ ﻭ ﻧﻴﻤﻪ ﺳﻤﺖ ﭼﭗ ﺭﺍ ﺟﺴﺘﺠﻮ ﻧﺨﻮﺍﻫﻴﻢ ﻛﺮﺩ.
(2ﮐﻠﯿﺪ از ﻋﻨﺼﺮ وﺳﻂ ﻟﯿﺴﺖ ﮐﻮﭼﮑﺘﺮ اﺳﺖ :ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺍﻳﻨﻜﻪ ﻟﻴﺴﺖ ﺑﻪ ﺻﻮﺭﺕ ﺻﻌﻮﺩﻱ ﻣﺮﺗﺐ ﺍﺳﺖ ﺣﺘﻤـﺎ ﻛﻠﻴـﺪ ﺩﺭ
ﻧﻴﻤﻪ ﺳﻤﺖ ﭼﭗ ﺍﺳﺖ ﻭ ﺑﺎﻳﺪ ﻧﻴﻤﻪ ﺳﻤﺖ ﭼﭗ ﺭﺍ ﺟﺴﺘﺠﻮ ﻛﺮﺩ ﻭ ﻧﻴﻤﻪ ﺳﻤﺖ ﺭﺍ ﺟﺴﺘﺠﻮ ﻧﺨﻮﺍﻫﻴﻢ ﻛﺮﺩ.
(3در ﺑﻬﺘﺮﯾﻦ ﺣﺎﻟﺖ ﮐﻠﯿﺪ ﻣﺴﺎوي ﻋﻨﺼﺮ وﺳﻂ ﻟﯿﺴﺖ ﺑﺎﺷﺪ :ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﻛﻠﻴﺪ ﭘﻴﺪﺍ ﺷﺪﻩ ﺍﺳﺖ ﻭ ﻋﻤﻞ ﺟﺴﺘﺠﻮ ﻣﺘﻮﻗﻒ ﻣﻲ ﺷﻮﺩ.
ﺍﮔﺮ ﻫﺮ ﻛﺪﺍﻡ ﺍﺯ ﺣﺎﻟﺖ ﻫﺎﻱ ﻳﻚ ﻳﺎ ﺩﻭ ﺭﺥ ﺩﻫﺪ؛ ﻋﻤﻞ ﺟﺴﺘﺠﻮ ﺭﺍ ﺩﺭ ﻧﻴﻤﻪ ﺳﻤﺖ ﺭﺍﺳﺖ ﻳﺎ ﭼﭗ ﺍﺩﺍﻣﻪ ﻣﻲ ﺩﻫﻴﻢ .ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﻧﻴﻤﻪ ﺳﻤﺖ
ﺭﺍﺳﺖ ﻳﺎ ﻧﻴﻤﻪ ﺳﻤﺖ ﭼﭗ ﺭﺍ ﺩﻭﺑﺎﺭﻩ ﺍﺯ ﻭﺳﻂ ﻧﺼﻒ ﻣﻲ ﻛﻨﻴﻢ ﻭ ﺩﻭﺑﺎﺭﻩ ﻋﻤﻞ ﺑﺎﻻ ﺭﺍ ﺭﻭﻱ ﺁﻥ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﻴﻢ.
ﺳﺌﻮﺍﻝ( ﺍﮔﺮ ﻋﻀﻮ ﺗﻜﺮﺍﺭﻱ ﺩﺭ ﻟﻴﺴﺖ ﺑﺎﺷﺪ ﻭ ﺑﻪ ﺭﻭﺵ ﺑﺎﻳﻨﺮﻱ ﺟﺴﺘﺠﻮ ﻛﻨﻴﻢ ﻛﺪﺍﻡ ﻋﻀﻮ ﭘﻴﺪﺍ ﺧﻮﺍﻫﺪ ﺷﺪ؟
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 99
ﺳﺌﻮﺍﻝ( ﺁﺭﺍﻳﻪ ﺭﻭﺑﺮﻭ ﺭﺍ ﺑﺮﺍﻱ ﻛﻠﻴﺪ 34ﺑﻪ ﺩﻭ ﺭﻭﺵ ﺧﻄﻲ ﻭ ﺑﺎﻳﻨﺮﻱ ﺟﺴﺘﺠﻮ ﻛﻨﻴﺪ ﻭ ﺗﻌﺪﺍﺩ ﻣﻘﺎﻳﺴﻪ ﻫﺎ ﺭﺍ ﺩﺭ ﻫﺮ ﺩﻭ ﺭﻭﺵ ﺑﺪﺳﺖ ﺁﻭﺭﻳﺪ:
8 15 32 17 19 34 21 12 2 38 34 13 9 20
1 2 3 4 5 6 1 2 3 4 5 6
12 18 10 17 13 9 12 10 17 13 9 18
12 18 10 17 13 9 10 12 17 13 9 18
12 10 18 17 13 9 10 12 17 13 9 18
12 10 17 18 13 9 10 12 13 17 9 18
12 10 17 13 18 9 10 12 13 9 17 18
12 10 17 13 9 18 ﻣﺮﺣﻠﻪ : ٢ﭼﻬﺎﺭ ﻋﻤﻞ ﻣﻘﺎﻳﺴﻪ ﻭ ﺳﻪ ﺟﺎﺑﺠﺎﻳﻲ ﺭﺥ ﺩﺍﺩﻩ ﺍﺳﺖ.
ﻣﺮﺣﻠﻪ ٥ : ١ﻋﻤﻞ ﻣﻘﺎﻳﺴﻪ ﻭ ﭼﻬﺎﺭ ﺟﺎﺑﺠﺎﻳﻲ ﺭﺥ ﺩﺍﺩﻩ ﺍﺳﺖ.
ﺳﺌﻮﺍﻝ( ﺍﮔﺮ ﺑﺨﻮﺍﻫﻴﻢ ﻳﻚ ﻟﻴﺴﺖ ١٠ﻋﻨﺼﺮﻱ ﺭﺍ ﺑﻪ ﺭﻭﺵ ﺣﺒﺎﺑﻲ ﻣﺮﺗﺐ ﻛﻨﻴﻢ ﭼﻨﺪ ﻣﻘﺎﻳﺴﻪ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ؟
ﺩ( ٤٥ ﺝ( ٥٠ ﺏ( ١٥ ﺍﻟﻒ( ٩
ﺳﺌﻮﺍﻝ( ﺁﺭﺍﻳﻪ ﺯﻳﺮ ﺭﺍ ﺑﻪ ﺭﻭﺵ ﺣﺒﺎﺑﻲ ﻣﺮﺗﺐ ﻧﺰﻭﻟﻲ ﻛﻨﻴﺪ ،ﺷﻜﻞ ﺁﺭﺍﻳﻪ ﺩﺭ ﮔﺬﺭ ﭼﻬﺎﺭﻡ ﭼﮕﻮﻧﻪ ﺍﺳﺖ؟
12 18 9 13 15 7 10 14
ﻣﺜﺎﻝ ( ﺑﺮﻧﺎﻣﻪ ﺍﻳﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﺁﺭﺍﻳﻪ ١٠ﻋﻨﺼﺮﻱ ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ﻭ ﺑﻪ ﺭﻭﺵ ﺣﺒﺎﺑﻲ ،ﺻﻌﻮﺩﻱ ﻣﺮﺗﺐ ﻛﻨﺪ ﻭ ﭼﺎﭖ ﻛﻨﺪ :
Var
;A:Array[1..10] of integer
;G, B , C:Integer
Begin
For B:=1 To 10 do
;)]Readln(A[B
For G:=9 Downto 1 do
For B:=1 To G Do
If A[ B] > A[B+1] then
} ﺟﺎﺑﺠﺎﻳﻲ { Begin
;]C:=A[B
;]A[B]:=A[B+1
;A[B+1]:=C
;End
For B:=1 to 10 do
;)]Writeln(A[B
End.
ﻣﺜﺎﻝ ( ﺩﺭ ﻣﺜﺎﻝ ٢ﻓﺼﻞ ﺭﻛﻮﺭﺩ ﺩﺭ ﺻﻔﺤﻪ ٩٣ﻣﺮﺑﻮﻁ ﺑﻪ ﻣﺸﺘﺮﻛﻴﻦ ﺗﻠﻔﻦ ،ﭘﺮﻭﺳﻴﺠﺮﻱ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﺸﺘﺮﻛﻴﻦ ﺭﺍ ﺑﺮ ﺍﺳﺎﺱ ﺷﻤﺎﺭﻩ ﺗﻠﻔﻦ
ﻣﺮﺗﺐ ﻛﻨﺪ :
;procedure sort
var
;i,j:integer
;temp:REC
begin
for i:=49 downto 1 do
for j:=1 to i do
if M[j].number>M[j+1].number then
begin
;]temp:=M[j
;]M[j]:=M[j+1
;M[j+1]:=temp
;end
;end
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 101
- 2روش ﻣﺮﺗﺐ ﺳﺎزي اﻧﺘﺨـﺎﺑﯽ (Selection ) :
ﻓﺮﺽ ﻛﻨﻴﺪ ﻣﻲ ﺧﻮﺍﻫﻴﻢ ﻳﻚ ﻟﻴﺴﺖ ﺷﺎﻣﻞ Nﺧﺎﻧﻪ ﺭﺍ ﺑﻪ ﺭﻭﺵ ﺍﻧﺘﺨﺎﺑﻲ ﻣﺮﺗﺐ ﻛﻨﻴﻢ) ﺻﻌﻮﺩﻱ(:
ﻣﺮﺣﻠﻪ ﺍﻭﻝ( ﺍﺯ ﺍﺑﺘﺪﺍ ﺗﺎ ﺍﻧﺘﻬﺎﻱ ﻟﻴﺴﺖ ﺭﺍ ﺟﺴﺘﺠﻮ ﻛﺮﺩﻩ ﻭ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﺪﺩ ﺭﺍ ﭘﻴﺪﺍ ﻛﺮﺩﻩ ﻭ ﻣﺤﻞ ﺁﻥ ﺭﺍ ﺑﺎ ﺍﻭﻟﻴﻦ ﻋﻨﺼﺮ ﻟﻴﺴﺖ ﻋﻮﺽ ﻣﻲ ﻛﻨﻴﻢ.
ﻣﺮﺣﻠﻪ ﺩﻭﻡ( ﺍﺯ ﺧﺎﻧﻪ ﺩﻭﻡ ﺗﺎ ﺍﻧﺘﻬﺎﻱ ﻟﻴﺴﺖ ﺭﺍ ﺟﺴﺘﺠﻮ ﻛﺮﺩﻩ ﻭ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﺪﺩ ﺭﺍ ﭘﻴﺪﺍ ﻛﺮﺩﻩ ﻭ ﻣﺤﻞ ﺁﻥ ﺭﺍ ﺑﺎ ﺧﺎﻧﻪ ﺩﻭﻡ ﻋﻮﺽ ﻣﻲ ﻛﻨﻴﻢ.
ﺩﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﺩﺭ ﻫﺮ ﻣﺮﺣﻠﻪ ﻣﺤﻞ ﻭﺍﻗﻌﻲ ﻳﻚ ﺍﺯ ﺍﻋﺪﺍﺩ ﻣﺸﺨﺺ ﻣﻲ ﺷﻮﺩ.
ﻣﺮﺣﻠﻪ ﺳﻮﻡ( ﺍﺯ ﺧﺎﻧﻪ ﺳﻮﻡ ﺗﺎ ﺍﻧﺘﻬﺎﻱ ﻟﻴﺴﺖ ﺭﺍ ﺟﺴﺘﺠﻮﻛﺮﺩﻩ ﻭ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﺪﺩ ﺭﺍ ﭘﻴﺪﺍ ﻛﺮﺩﻩ ﻭ ﻣﺤﻞ ﺁﻥ ﺭﺍ ﺑﺎ ﺳﻮﻣﻴﻦ ﻋﻨـﺼﺮ ﻟﻴـﺴﺖ ﻋـﻮﺽ
ﻣﻲ ﻛﻨﻴﻢ.
ﺍﻳﻦ ﻛﺎﺭ ﺭﺍ ﺗﺎ ﺍﻧﺘﻬﺎﻱ ﻟﻴﺴﺖ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﻴﻢ .
ﺍﮔﺮ ﻟﻴﺴﺖ ﺩﺍﺭﺍﻱ Nﺗﺎ ﻋﻨﺼﺮ ﺑﺎﺷﺪ N-1ﮔﺬﺭ ﻳﺎ ﻓﺎﺯ ﺧﻮﺍﻫﻴﻢ ﺩﺍﺷﺖ ﻭ ﺩﺭ ﻫﺮ ﻣﺮﺣﻠﻪ ﻓﻘﻂ ﻳﻚ ﺟﺎﺑﺠﺎﻳﻲ ﺭﺥ ﻣﻲ ﺩﻫﺪ.
12 18 10 17 13 9 ﺳﺌﻮﺍﻝ( ﺁﺭﺍﻳﻪ ﺭﻭﺑﺮﻭ ﺭﺍ ﺑﻪ ﺭﻭﺵ ﺍﻧﺘﺨﺎﺑﻲ ،ﺻﻌﻮﺩﻱ ﻣﺮﺗﺐ ﻛﻨﻴﺪ:
ﺳﺌﻮﺍﻝ( ﺁﺭﺍﻳﻪ ﺭﻭﺑﺮﻭ ﺭﺍ ﺑﻪ ﺭﻭﺵ ﺍﻧﺘﺨﺎﺑﻲ ﻣﺮﺗﺐ ﻛﻨﻴﺪ ﻧﺰﻭﻟﻲ ﻛﻨﻴﺪ ﻭ ﮔﺬﺭ ﭼﻬﺎﺭﻡ ﺁﻥ ﺭﺍ ﺑﺪﺳﺖ ﺁﻭﺭﻳﺪ؟
ﻧﻜﺘﻪ( ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﻟﻴﺴﺖ ﻫﺎﻱ ﻏﻴﺮ ﻋﺪﺩﻱ ﻧﻈﻴﺮ ﺭﺷﺘﻪ ﻫﺎ ﺩﻗﻴﻘﺎ ﻣﺎﻧﻨﺪ ﻟﻴﺴﺖ ﻫﺎﻱ ﻋﺪﺩﻱ ﺍﺳﺖ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 102
ﻣﺜﺎﻝ ( ﺑﺮﻧﺎﻣﻪ ﺍﻳﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﺁﺭﺍﻳﻪ ١٠ﻋﻨﺼﺮﻱ ﺍﺯ ﺍﻋﺪﺍﺩ ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪﻭ ﺑﻪ ﺭﻭﺵ ﺍﻧﺘﺨﺎﺑﻲ ﻣﺮﺗﺐ ﺻﻌﻮﺩﻱ ﻛﻨﺪ ﻭ ﭼﺎﭖ ﻛﻨﺪ.
;Var A:Array [1 .. 10 ] of integer
;K , L , T,Min , C: integer
Begin
For K:=1 to 10 do
;)]Readln( A[K
For K:=1 to 9 do
Begin
;]Min:=A[K
} ﻣﻮﻗﻌﻴﺖ ﻋﺪﺩ ﻛﻮﭼﻚ{ ;C:=K
For L:=K+1 To 10 Do
IF A[L] < Min then
Begin
;]Min:=A[L
;C:=L
;End
;]T:=A[K
;A[K]:=Min ﺟﺎﺑﺠـﺎﻳﻲ
;A[C]:=T
;End
For L:=1 To 10 do
;)Writeln(A[L
End.
ﺗﺴﺖ (١ﺍﮔﺮ ﺁﺭﺍﻳﻪ Aﻳﻚ ﺁﺭﻳﻪ Nﻋﻨﺼﺮﻱ ﻣﺮﺗﺐ ﺷﺪﻩ ﻧﺰﻭﻟﻲ ﺑﺎﺷﺪ ﺣﺪﺍﻛﺜﺮ ﭼﻨﺪ ﻋﻤـﻞ ﻣﻘﺎﻳـﺴﻪ ﻭ ﺟﺎﺑﺠـﺎﻳﻲ ﻻﺯﻡ ﺍﺳـﺖ ﺗـﺎ ﻣﺮﺗـﺐ ﺳـﺎﺯﻱ
ﺍﻧﺘﺨﺎﺑﻲ ﺑﻪ ﺻﻮﺭﺕ ﺻﻌﻮﺩﻱ ﺩﺭ ﺑﻴﺎﻳﺪ؟
ﺩ( N
2
ﺝ( Log2(N)+1 ﺏ(N(N+1)/2 ﺍﻟﻒ( N(N-1)/2
ﺗﺴﺖ (٢ﺍﮔﺮ ﺁﺭﺍﻳﻪ Sﻳﻚ ﺁﺭﺍﻳﻪ Nﻋﻨﺼﺮﻱ ﺑﺎﺷﺪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﺣﺪﺍﻛﺜﺮ ﭼﻨﺪ ﻋﻤﻞ ﺟﺎﺑﺠﺎﻳﻲ ﻻﺯﻡ ﺍﺳﺖ ﺗﺎ ﺑـﺎ ﻣﺮﺗـﺐ ﺳـﺎﺯﻱ ﺣﺒـﺎﺑﻲ ﺑﺘـﻮﺍﻥ
ﺁﺭﺍﻳﻪ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺻﻌﻮﺩﻱ ﻣﺮﺗﺐ ﻧﻤﻮﺩ؟
ﺩ( ﻧﺎﻣﺸﺨﺺ ﺍﺳﺖ ﺝ(N(N+1)/2 ﺏ( N(N-1)/2 ﺍﻟﻒ( N+ N-1 + N-2 +….+2+1
ﺳﺌﻮﺍﻝ( ﺍﮔﺮ ﻳﻚ ﺁﺭﺍﻳﻪ 10ﻋﻨﺼﺮﻱ ﻧﺎﻣﺮﺗﺐ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ ﻭ ﺑﺨﻮﺍﻫﻴﻢ ﺩﺭ ﺭﺍ ﺑﻪ ﺭﻭﺵ ﺑﺎﻳﻨﺮﻱ ﻋﻤﻞ ﺟﺴﺘﺠﻮ ﺭﺍ ﺍﻧﺠﺎﻡ ﺩﻫﻴﻢ ﭼﻨﺪ ﻋﻤﻞ ﻣﻘﺎﻳـﺴﻪ
ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ؟
ﺗﺴﺖ (٣ﺍﮔﺮﻋﻤﻠﻴﺎﺕ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺣﺒﺎﺑﻲ ﺭﺍ ﺑﺮﺍﻱ ﻣﺮﺗﺐ ﻛﺮﺩﻥ ﺻﻌﻮﺩﻱ ﺁﺭﺍﻳﻪ ﺯﻳﺮ ﺑﻜﺎﺭ ﺑﺒﺮﻳﻢ ﭘﺲ ﺍﺯ ﭼﻨﺪ ﮔﺬﺭ ﺁﺭﺍﻳﻪ ﻣﺮﺗﺐ ﻣﻲ ﺷﻮﺩ؟
5 , 3 , -4 , 204 , 190 , 180
ﺩ( 2 ﺝ( 5 ﺏ( 4 ﺍﻟﻒ( 3
ﺗﺴﺖ (٤ﺩﺭ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺻﺤﻴﺢ ﺍﺳﺖ؟
ﺝ( ﻋﻨﺼﺮ ﻣﻮﺭﺩ ﺟﺴﺘﺠﻮ ﺑﺎ ﺗﻚ ﺗﻚ ﻋﻨﺎﺻﺮ ﻣﻘﺎﻳﺴﻪ ﻣﻲ ﺷﻮﺩ ﺍﻟﻒ( ﺳﺮﻋﺖ ﺟﺴﺘﺠﻮ ﻧﺴﺒﺖ ﺑﻪ ﺧﻄﻲ ﻛﻤﺘﺮ ﺍﺳﺖ.
ﺩ( ﻟﻴﺴﺖ ﺣﺘﻤﺎ ﺑﺎﻳﺪ ﻣﺮﺗﺐ ﺑﺎﺷﺪ ﺏ( ﻟﻴﺴﺖ ﻣﺮﺗﺐ ﺷﺪﻩ ﺑﻬﺘﺮ ﺍﺳﺖ
ﺗﺴﺖ (٥ﻟﻴﺴﺘﻲ ﺩﺍﺭﺍﻱ ١٠٠٠ﻋﻀﻮ ﺍﺳﺖ ﺣﺪﺍﻛﺜﺮ ﭼﻨﺪ ﻣﻘﺎﻳﺴﻪ ﺑﺮﺍﻱ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﻳﻚ ﺁﻳﺘﻢ ﺩﺭ ﻟﻴﺴﺖ ﻣﻮﺭﺩ ﻧﻈﺮ ﺑﺎ ﺭﻭﺵ ﺩﻭﺩﻭﻳﻲ ﻻﺯﻡ ﺍﺳﺖ؟
ﺩ(١٠٠٠ ﺝ( ٥٠٠ ﺏ( ١١ ﺍﻟﻒ( ١٠
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 103
ﻓﺎﯾـﻠﻬﺎ )(FILES
ﻓﺎﯾﻞ ﭼﯿﺴﺖ ؟
ﻓﺎﻳﻞ ،ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺍﻃﻼﻋﺎﺕ ﺩﺭﺑﺎﺭﻩ ﻳﻚ ﻣﻮﺿﻮﻉ ﺍﺳﺖ ﻛﻪ ﺭﻭﻱ ﺣﺎﻓﻈﻪ ﻫﺎﻱ ﺟﺎﻧﺒﻲ ﻧﻈﻴﺮ ﺩﻳﺴﻜﺖ ﻭ ﻳﺎ ﻫﺎﺭﺩﺩﻳﺴﻚ ﻧﮕﻪ ﺩﺍﺭﻱ ﻣﻲ ﮔـﺮﺩﺩ.
ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺮﺍﻱ ﺫﺧﻴﺮﻩ ﺩﺍﺋﻤﻲ ﺩﺍﺩﻩ ﻫﺎ ﻭ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﺳﺎﺧﺘﺎﺭﻱ ﺑﻨﺎﻡ ﻓﺎﻳﻞ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ .ﭘﺲ ﺗﻤﺎﻡ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻳﻲ ﻛﻪ ﺗﺎ ﻛﻨﻮﻥ ﻣﻲ ﻧﻮﺷﺘﻴﻢ ﻭ
ﻫﻤﭽﻨﻴﻦ ﻋﻤﻠﻴﺎﺕ ﻣﺮﺑﻮﻁ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﺩﺭ ﺣﺎﻓﻈﻪ ﺍﺻﻠﻲ ) (RAMﻛﺎﻣﭙﻴﻮﺗﺮ ﺍﻧﺠﺎﻡ ﻣﻲ ﮔﺮﻓﺖ ﻛﻪ ﮔـﺬﺭﺍ ﻭ ﻓﻘـﻂ ﺑـﻪ ﺯﻣـﺎﻥ ﺍﺟـﺮﺍﻱ ﺑﺮﻧﺎﻣـﻪ ﻭ
ﺭﻭﺷﻦ ﺑﻮﺩﻥ ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﺴﺘﮕﻲ ﺩﺍﺷﺖ.ﻭﻟﻲ ﺩﺭ ﻓﺎﻳﻞ ﻫﺎ ﭼﻨﻴﻦ ﻧﻴﺴﺖ ،ﺑﻠﻜﻪ ﺩﺍﺩﻩ ﻫﺎ ﺩﺭ ﻓﺎﻳﻠﻬﺎﻳﻲ ﻗﺮﺍﺭ ﺩﺍﺭﻧﺪ ﻛﻪ ﺑﻌﺪﺍ ﻭ ﺣﺘـﻲ ﺑﻌـﺪ ﺍﺯ ﺧـﺎﻣﻮﺵ
ﻛﺮﺩﻥ ﻛﺎﻣﭙﻴﻮﺗﺮ ،ﺑﺎﺯ ﻫﻢ ﺩﺍﺩﻩ ﻫﺎ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﻫﺴﺘﻨﺪ.
ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ﻛﻪ ﺩﺭ ﺣﺎﻝ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﺍﻱ ﻫﺴﺘﻴﻢ ﻛﻪ ۱۰۰ﻋﺪﺩ ﺍﺯ ﻭﺭﻭﺩﻱ ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﻛﻨﺪ ﻭ ۲۰۰ﻋـﺪﺩ ﺩﺭ ﺧﺮﻭﺟـﻲ ﺗﻮﻟﻴـﺪ ﻣـﻲ ﻛﻨـﺪ.
ﺣﺎﻝ ﺑﺎ ﻫﺮ ﺑﺎﺭ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ،ﺑﺎﻳﺪ ﺗﻌﺪﺍﺩ ۱۰۰ﻋﺪﺩ ﺑﻌﻨﻮﺍﻥ ﺩﺍﺩﻩ ﻫﺎﻱ ﻭﺭﻭﺩﻱ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ،ﻭﺍﺭﺩ ﻛﻨﻴﻢ ﺗﺎ ﺩﺭ ﺧﺮﻭﺟﻲ ۲۰۰ﻋﺪﺩ ﺑﺒﻴﻨﻴﻢ ﻛـﻪ ﺍﻳـﻦ
ﺑﺴﻴﺎﺭ ﺧﺴﺘﻪ ﻛﻨﻨﺪﻩ ﺍﺳﺖ .ﻟﺬﺍ ﺑﻬﺘﺮ ﺍﺳﺖ ﻛﻪ ﺍﻳﻦ ۱۰۰ﻋﺪﺩ ﺍﺯ ﻗﺒﻞ ﻳﻜﺒﺎﺭ ﺩﺭ ﻓﺎﻳﻠﻲ ﺫﺧﻴﺮﻩ ﺷﻮﻧﺪ ﻭ ﺩﺭ ﻫﻨﮕﺎﻡ ﺍﺟﺮﺍﻱ ﺑﺮﻧﺎﻣـﻪ ﻓﺎﻳـﻞ ﺍﺯ ﻭﺭﻭﺩﻱ
ﺧﻮﺍﻧﺪﻩ ﺷﻮﺩ ﻭ ﻫﻤﭽﻨﻴﻦ ﺍﻃﻼﻋﺎﺕ ﺧﺮﻭﺟﻲ ﻧﻴﺰ ﺩﺭ ﻓﺎﻳﻞ ﺗﻮﻟﻴﺪ ﺷﻮﺩ ﻭ ﺑﺪﻳﻦ ﺗﺮﺗﻴﺐ ﺩﺍﺩﻩ ﻫﺎ ﻣﺎﻧﺪﮔﺎﺭ ﺷﻮﻧﺪ ﻭ ﺍﺯ ﺑﻴﻦ ﻧﻴﺰ ﻧﺮﻭﻧﺪ.
ﺩﺭ ﺯﺑﺎﻥ ﭘﺎﺳﻜﺎﻝ ﺳـﻪ ﻧﻮﻉ ﻓﺎﻳﻞ ﺯﻳﺮ ﻭﺟﻮﺩ ﺩﺍﺭﻧﺪ ﻛﻪ ﺩﺭ ﺍﻳﻦ ﻓﺼﻞ ﺩﺳﺘﻮﺭﺍﺕ ﻣﺮﺑﻮﻁ ﺑﻪ ﻫﺮ ﻳﻚ ﺭﺍ ﺑﺮﺭﺳﻲ ﻣﻲ ﻛﻨﻴﻢ :
- 1ﻓﺎﯾﻠﻬﺎي ﻣﺘﻨﯽ ) -Text -ﺗﺮﺗﯿﺒﯽ (
-2ﻓﺎﯾﻠﻬﺎي ﻧﻮع دار ) - Typed File -ﺑﺎﯾﻨﺮي ﯾﺎ دودوﯾﯽ ﯾﺎ ﺗﺼﺎدﻓﯽ (
- 3ﻓﺎﯾﻠﻬﺎي ﺑﺪون ﻧﻮع Untyped File -
ﺑﺮاي ﮐﺎر ﺑﺎ ﻫﺮ ﻧﻮع ﻓﺎﯾﻞ در ﺗﻮرﺑـﻮ ﭘﺎﺳﮑﺎل ﺑﺎﯾﺪ روﻧﺪ زﯾﺮ اﻧﺠﺎم ﮔﯿﺮد :
-۱ﺗﻌﺮﻳﻒ ﻳﻚ ﺍﺷﺎﺭﻩ ﮔﺮ ﺑﻪ ﻓﺎﻳﻞ -۱ﺑﺮﺍﻱ ﻛﺎﺭ ﺑﺎ ﻫﺮ ﻧﻮﻉ ﻓﺎﻳﻞ ﺍﺑﺘﺪﺍ ﺑﺎﻳﺪ ﻣﺘﻐﻴﺮﻱ ﺍﺯ ﻧﻮﻉ ﻓﺎﻳﻞ ﻣﻮﺭﺩﻧﻈﺮ ﺍﻳﺠﺎﺩ ﻧﻤﺎﻳﻴﻢ.
ﺑﻌﻨﻮﺍﻥ ﻣﺜﺎﻝ ﺑﺮﺍﻱ ﻓﺎﻳﻠﻬﺎﻱ ﻣﺘﻨﻲ ،ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ)ﻳﺎ ﺍﺷﺎﺭﻩ ﮔﺮ( ﭼﻨﻴﻦ ﺍﺳﺖ :
Var
; F:Text
-۲ﻧﺴﺒﺖ ﺩﺍﺩﻥ ﺍﺷﺎﺭﻩ ﮔﺮ ﻓﺎﻳﻞ ﺑﻪ
ﻧﻜﺘﻪ ( ﺷﻨﺎﺳﻪ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ Textﻧﻮﻉ ﻓﺎﻳﻠﻬﺎﻱ ﻣﺘﻨﻲ ﺭﺍ ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪ.
ﻳﻚ ﻓﺎﻳﻞ ﺩﺭ ﺣﺎﻓﻈﻪ ﻱ ﺟﺎﻧﺒﻲ
- ۲ﺑﻌﺪ ﺍﺯ ﺗﻌﺮﻳﻒ ﺍﺷﺎﺭﻩ ﮔﺮ ،ﺑﺎﻳﺪ ﺁﻧﺮﺍ ﺑﺎ ﻧﺎﻡ ﻳﻚ ﻓﺎﻳﻞ ﺩﺭ ﻫﺎﺭﺩ ﺩﻳﺴﻚ ﻣﺮﺗﺒﻂ ﻛﻨـﻴﻢ ،ﻳـﺎ
ﺑﻌﺒﺎﺭﺕ ﺩﻳﮕﺮ ﺑﺎﻳﺪ ﺁﻧﺮﺍ ﺑﻪ ﻳﻚ ﻓﺎﻳﻞ ﺩﺭ ﺣﺎﻓﻈﻪ ﺟﺎﻧﺒﻲ ﻧﺴﺒﺖ ﺩﻫﻴﻢ .ﺍﻳﻦ ﻛـﺎﺭ ﺑـﺎ ﺩﺳـﺘﻮﺭ
Assignﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ.ﺑﻌﻨﻮﺍﻥ ﻣﺜﺎﻝ ﺑﺮﺍﻱ ﻧﺴﺒﺖ ﺩﺍﺩﻥ ﺍﺷﺎﺭﻩ ﮔـﺮ Fﺑـﻪ ﻓﺎﻳـﻞ ﻣﺘﻨـﻲ
-۳ﺑﺎﺯ ﻛﺮﺩﻥ ﻓﺎﻳﻞ
Student.txtﺩﺭ ﺩﺭﺍﻳﻮ Cﻛﺎﻣﭙﻴﻮﺗﺮﻣﺎﻥ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﻋﻤﻞ ﻣﻲ ﻛﻨﻴﻢ :
VAR
;F : TEXT
-۴ﭘﺮﺩﺍﺯﺵ )ﺧﻮﺍﻧﺪﻥ ﺍﺯ ﻓﺎﻳﻞ ﻳﺎ
BEGIN
ﻧﻮﺷﺘﻦ ﺩﺭ ﻓﺎﻳﻞ ﻭ (... ;) ‘ ASSIGN( F, ‘ C:\Student.TXT
ﻧﻜﺘﻪ ( ﺩﺳﺘﻮﺭ Assignﻓﻘﻂ ﻛﺎﻓﻲ ﺍﺳﺖ ﻳﻜﺒﺎﺭ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻧﻮﺷﺘﻪ ﺷﻮﺩ.
ﺑﻌﺪ ﺍﺯ ﺍﺟﺮﺍﻱ ﺩﺳﺘﻮﺭ ، Assignﺑﺮﺍﻱ ﺍﻧﺠﺎﻡ ﻋﻤﻞ ﺧﻮﺍﻧﺪﻥ ﻳﺎ ﻧﻮﺷﺘﻦ ﻭ ﻳﺎ ﺗﻐﻴﻴـﺮ ﺩﺍﺩﻥ ﺩﺭ
-۵ﺑﺴﺘﻦ ﻓﺎﻳﻞ
ﻓﺎﻳﻞ ﺍﺯ ﺍﺷﺎﺭﻩ ﮔﺮ Fﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ.ﺑﻌﺒﺎﺭﺕ ﺩﻳﮕﺮ ﻫﺮ ﻋﻤﻠﻲ ﻛﻪ ﺑﺮ ﺭﻭﻱ Fﺍﻧﺠﺎﻡ ﺷـﻮﺩ
ﺩﺭ ﻭﺍﻗﻊ ﺑﺮ ﺭﻭﻱ ﻓﺎﻳﻞ Student.txtﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 104
ﻣﺮﺍﺣﻞ ۳ﻭ ۴ﻭ ۵ﺑﺮﺍﻱ ﻓﺎﻳﻠﻬﺎ ﺩﻗﻴﻘﺎ ﻣﺎﻧﻨﺪ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺑﺨﻮﺍﻫﻴﻢ ﻳﻚ ﭘﺮﻭﻧﺪﻩ ﻳﺎ ﻛﺘﺎﺑﻲ ﺭﺍ ﺍﺑﺘﺪﺍ ﺑﺎﺯ ﻛﺮﺩﻩ ﻭ ﺳﭙﺲ ﻣﻄﺎﻟﺒﻲ ﺭﺍ ﺍﺯ ﺁﻥ ﺧﻮﺍﻧـﺪﻩ ﻭ
ﻳﺎ ﺩﺭ ﺁﻥ ﺍﺿﺎﻓﻪ ،ﺣﺬﻑ ﻭ ﻳﺎ ﺗﻐﻴﻴﺮ ﺩﺍﺩﻩ ﻭﺩﺭ ﺍﻧﺘﻬﺎ ﭘﺮﻭﻧﺪﻩ ﻳﺎ ﻛﺘﺎﺏ ﺭﺍ ﺑﺒﻨﺪﻳﻢ.
-1ﻓﺎﯾﻠﻬﺎي ﻣﺘﻨـﯽ :
ﻓﺎﻳﻞ ﻣﺘﻨﻲ ،ﻓﺎﻳﻠﻲ ﺍﺳﺖ ﻛﻪ ﺍﺯ ﺗﻌﺪﺍﺩﻱ ﺧﻂ ﺷﺎﻣﻞ ﻛﺎﺭﺍﻛﺘﺮﻫﺎﻳﻲ ﺑﺎ ﻛﺪ ﺍﺳﻜﻲ ﺗﺸﻜﻴﻞ ﺷﺪﻩ ﺍﺳﺖ .ﻫﺮ ﺧﻂ ﺑﻪ ﻛﺎﺭﺍﻛﺘﺮﻫﺎﻱ CRﻭ LFﺧﺘﻢ
ﻣﻲ ﮔﺮﺩﺩ.ﺗﺮﻛﻴﺐ CRﻭ LFﺑﻌﻨﻮﺍﻥ ﺟﺪﺍ ﻛﻨﻨﺪﻩ ﺧﻄﻮﻁ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ .ﻓﺎﻳﻠﻬﺎﻱ ﻣﺘﻨﻲ ﻣﻌﻤﻮﻻ ﺩﺍﺭﺍﻱ ﭘﺴﻮﻧﺪ TXTﻣـﻲ
ﺑﺎﺷﻨﺪ.
ﻫﺮ ﺍﻃﻼﻋﺎﺗﻲ ﻛﻪ ﺩﺍﺧﻞ ﻓﺎﻳﻠﻬﺎﻱ ﻣﺘﻨﻲ ﺭﻳﺨﺘﻪ ﺷﻮﺩ ﺑﻪ ﺭﺷﺘﻪ ﺗﺒﺪﻳﻞ ﻣﻲ ﺷﻮﺩ ؛ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ ﻓﺎﻳﻠﻬﺎﻱ ﻣﺘﻨﻲ ﻧﺴﺒﺖ ﺑﻪ ﺩﻭ ﻧﻮﻉ ﺩﻳﮕـﺮ ﻛﻨـﺪﺗﺮ
ﻫﺴﺘﻨﺪ.
ﻋﻤﻞ ﺑﺎﺯ ﻛﺮﺩﻥ ﻓﺎﻳﻞ ﻣﺘﻨـﻲ ﺑﺮﺍﻱ ﻳﻜﻲ ﺍﺯ ۳ﻫﺪﻑ ﺯﻳﺮ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ :
- ۱ﺍﻳﺠﺎﺩ ﻛﺮﺩﻥ ﻳﻚ ﻓﺎﻳﻞ ﺟﺪﻳﺪ
- ۲ﺧﻮﺍﻧﺪﻥ ﻣﺤﺘﻮﺍﻱ ﻳﻚ ﻓﺎﻳﻞ ﻣﻮﺟﻮﺩ
- ۳ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﺩﺍﺩﻩ ﺑﻪ ﺍﻧﺘﻬﺎﻱ ﻳﻚ ﻓﺎﻳﻞ ﻣﺘﻨﻲ
ﺩﺭ ﺗﻮﺭﺑﻮ ﭘﺎﺳﻜﺎﻝ ﺑﺮﺍﻱ ﻫﺮ ﻳﻚ ﺍﺯ ﻋﻤﻠﻴﺎﺕ ﺑﺎﺯ ﻛﺮﺩﻥ ﻓﺎﻳﻞ ﻣﺘﻨﻲ ،ﻳﻚ ﺩﺳﺘﻮﺭ ﻭﺟﻮﺩ ﺩﺍﺭﺩ .ﺑﺮﺍﻱ ﺍﻳﺠﺎﺩ ﻛﺮﺩﻥ ﻳﻚ ﻓﺎﻳـﻞ ﺟﺪﻳـﺪ ﺍﺯ ﺩﺳـﺘﻮﺭ
Rewriteﻭﺑﺮﺍﻱ ﺧﻮﺍﻧﺪﻥ ﺍﺯ ﻳﻚ ﻓﺎﻳﻞ ﻣﻮﺟـﻮﺩ ﺍﺯ ﺩﺳﺘﻮﺭ Resetﻭ ﺑﺮﺍﻱ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﺩﺍﺩﻩ ﺑﻪ ﺍﻧﺘﻬﺎﻱ ﻳـﻚ ﻓﺎﻳـﻞ ﻣﺘﻨـﻲ ﺍﺯ ﺩﺳـﺘﻮﺭ
Appendﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ.
-1دﺳﺘﻮر : Rewriteﺍﮔﺮ ﺑﻪ ﺍﻳﻦ ﺭﻭﺵ ﻓﺎﻳﻞ ﻣﺘﻨﻲ ﺭﺍ ﺑﺎﺯ ﻛﻨﻴﻢ ،ﻓﺎﻳﻞ ﻣﺘﻨﻲ ﺳﺎﺧﺘﻪ ﻣﻲ ﺷﻮﺩ ﻭ ﻓﻘﻂ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺩﺍﺧﻞ ﺁﻥ ﺍﻃﻼﻋﺎﺕ
ﺑﺮﻳﺰﻳﻢ.ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﻓﺎﻳﻞ ﺍﺯ ﻗﺒﻞ ﻣﻮﺟﻮﺩ ﺑﺎﺷﺪ ﻭ ﺁﻥ ﺭﺍ ﺑﺎ ﺩﺳﺘﻮﺭ Rewriteﺑﺎﺯ ﻛﻨﻴﻢ ،ﻓﺎﻳﻞ ﺭﺍ ﭘﺎﻙ ﻛﺮﺩﻩ ﻭ ﺍﺯ ﻧﻮ ﻣﻲ ﺳﺎﺯﺩ.
– 2دﺳﺘﻮر : Resetﺍﮔﺮ ﻓﺎﻳﻞ ﻣﺘﻨﻲ ﺭﺍ ﺑﻪ ﺍﻳﻦ ﺭﻭﺵ ﺑﺎﺯ ﻛﻨﻴﻢ ﻓﺎﻳﻞ ﺭﺍ ﻓﻘﻂ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺑﺨﻮﺍﻧﻴﻢ ﻭ ﻧﻤﻲ ﺗـﻮﺍﻧﻴﻢ ﺩﺭ ﺁﻥ ﺍﻃﻼﻋـﺎﺕ ﺑﺮﻳـﺰﻳﻢ.
ﻧﻜﺘﻪ ﻣﻬﻤﻲ ﻛﻪ ﺑﺎﻳﺪ ﺑﻪ ﺁﻥ ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﺑﺎﻳﺪ ﺍﺯ ﻗﺒﻞ ﻓﺎﻳﻞ ﻣﻮﺟﻮﺩ ﺑﺎﺷﺪ.ﺍﮔﺮ ﻓﺎﻳـﻞ ﻣﻮﺟـﻮﺩ ﻧﺒﺎﺷـﺪ ﻭ ﻣـﺎ
ﺑﺨﻮﺍﻫﻴﻢ ﻓﺎﻳﻞ ﻭﺟﻮﺩ ﻧﺪﺍﺷﺘﻪ ! ﺭﺍ ﺑﺎﺯ ﻛﻨﻴﻢ ﻗﻄﻌﺎ ﺑﺮﻧﺎﻣﻪ Errorﻣﻴﺪﻫﺪ.
– 3دﺳﺘﻮر : Appendﺑﺎ ﺑﺎﺯ ﻛﺮﺩﻥ ﻓﺎﻳﻞ ﻣﺘﻨﻲ ﺑﻪ ﺍﻳﻦ ﺭﻭﺵ ﻓﻘﻂ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺑﻪ ﺍﻧﺘﻬﺎﻱ ﻓﺎﻳﻞ ﺍﺯ ﻗﺒﻞ ﻣﻮﺟﻮﺩ ،ﺍﻃﻼﻋﺎﺕ ﺍﺿﺎﻓﻪ ﻛﻨﻴﻢ .
ﻳﻌﻨﻲ ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﻧﻴﺰ ﻓﺎﻳﻞ ﺑﺎﻳﺪ ﺍﺯ ﻗﺒﻞ ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ .ﻫﻤﭽﻨﻴﻦ ﺍﻃﻼﻋﺎﺕ ﺭﺍ ﻧﻴﺰ ﻧﻤﻲ ﺗﻮﺍﻥ ﺧﻮﺍﻧﺪ.
ﻧﻜﺘﻪ ( ﺩﺭ ﻫﺮ ﻟﺤﻈﻪ ﻓﻘﻂ ﺑﺎﻳﺪ ﺍﺯ ﻳﻜﻲ ﺍﺯ ۳ﺭﻭﺵ ﺑـﺎﻻ ﺍﺳـﺘﻔﺎﺩﻩ ﻛـﺮﺩ.ﻳﻌﻨـﻲ ﻧﻤـﻲ ﺗـﻮﺍﻧﻴﻢ ﻓﺎﻳـﻞ ﺭﺍ ﻫـﻢ Resetﻛﻨـﻴﻢ ﻭ ﻫـﻢ Rewrite
ﻛﻨﻴﻢ؛ﺑﻠﻜﻪ ﺑﺎﻳﺪ ﻓﺎﻳﻞ ﺭﺍ ﺑﺴﺖ ﻭ ﺩﻭﺑﺎﺭﻩ ﺑﻪ ﺭﻭﺵ ﺩﻳﮕﺮ ﺑﺎﺯ ﻛﺮﺩ.
ﺑﻮﺳﻴﻠﻪ ﺩﺳﺘﻮﺭﺍﺕ read , readlnﻣﻲ ﺗﻮﺍﻥ ﺍﻃﻼﻋﺎﺕ ﺭﺍ ﺍﺯ ﻓﺎﻳﻞ ﺧﻮﺍﻧﺪ.ﻭﺑﺮﺍﻱ ﻧﻮﺷﺘﻦ ﺍﻃﻼﻋـﺎﺕ ﺩﺭ ﻓﺎﻳـﻞ ﺍﺯ Write , Writelnﺍﺳـﺘﻔﺎﺩﻩ
ﻣﻲ ﻛﻨﻴﻢ).ﺍﻟﺒﺘﻪ ﺑﻪ ﺷﺮﻁ ﺑﺎﺯ ﺑﻮﺩﻥ ﻓﺎﻳﻞ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺍﺯ ﻓﺎﻳﻞ ﺑﺨﻮﺍﻧﻴﻢ ﻭ ﻳﺎ ﺩﺭ ﻓﺎﻳﻞ ﺑﻨﻮﻳﺴﻴﻢ(.
ﻧﻜﺘﻪ ( ﺗﻔﺎﻭﺕ Readﺑﺎ Readlnﻭ ﻫﻢ ﭼﻨﻴﻦ Writeﺑﺎ Writelnﻣﺎﻧﻨﺪ ﻗﺒﻞ ﺍﺳﺖ.
ﻫﻨﮕﺎﻣﻴﻜﻪ ﻓﺎﻳﻠﻲ ﺭﺍ ﺑﻪ ﺭﻭﺵ Resetﺑﺎﺯ ﻣﻲ ﻛﻨﻴﻢ ﻳﻚ ﻣﻜﺎﻥ ﻧﻤﺎﻱ ﻓﺮﺿﻲ ﺩﺭ ﺍﺑﺘﺪﺍﻱ ﻓﺎﻳﻞ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ ؛ ﺑﺎ ﻫﺮ ﺑﺎﺭ ﺧﻮﺍﻧﺪﻥ ﺍﻃﻼﻋﺎﺕ ﻓﺎﻳـﻞ
،ﻣﻜﺎﻥ ﻧﻤﺎﻱ ﻓﺮﺿﻲ ﻳﻜﻲ ﺑﻪ ﺟﻠﻮ ﺣﺮﻛﺖ ﻣﻲ ﻛﻨﺪ.
ﺍﮔﺮ ﻓﺎﻳﻠﻲ ﺭﺍ ﺑﻪ ﺭﻭﺵ Appendﺑﺎﺯ ﻛﻨﻴﻢ ﻣﻜﺎﻥ ﻧﻤﺎﻱ ﻓﺮﺿﻲ ﺩﺭ ﺍﻧﺘﻬﺎﻱ ﻓﺎﻳﻞ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ ﻛﻪ ﺑﺎ ﻫﺮ ﺑﺎﺭ ﻧﻮﺷﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺩﺭ ﻓﺎﻳﻞ ،ﻣﻜـﺎﻥ
ﻧﻤﺎ ﻳﻜﻲ ﺑﻪ ﺟﻠﻮ ﺣﺮﻛﺖ ﻣﻲ ﻛﻨﺪ.
ﺑﺮﺍﻱ ﺑﺴﺘﻦ ﻓﺎﻳﻞ ﺍﺯ ﺩﺳﺘﻮﺭ Closeﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ.
ﺩﺳﺘﻮﺭ closeﺑﺎﻋﺚ saveﺷﺪﻥ ﻓﺎﻳﻞ ﻣﻲ ﺷﻮﺩ ؛ ﺍﻟﺒﺘﻪ ﺍﮔﺮ ﻓﺎﻳﻞ ﺭﺍ ﺑﺒﻨﺪﻳﻢ ﺍﺭﺗﺒﺎﻁ ﺍﺷﺎﺭﻩ ﮔﺮ ﺑﺎ ﺁﻥ ﻓﺎﻳﻞ ﻗﻄﻊ ﻧﻤﻲ ﺷﻮﺩ ﻭ ﺑﺮﺍﻱ ﺑﺎﺯ ﻛﺮﺩﻥ
ﻣﺠﺪﺩ ﺁﻥ ﻓﺎﻳﻞ ﻧﻴﺎﺯﻱ ﺑﻪ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﺳﺘﻮﺭ Assignﻧﻴﺴﺖ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 105
ﺣﺎﻝ ﺑﻪ ﻣﺜﺎﻟﻲ ﻛﻪ ﺩﺭ ﺯﻳﺮ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺍﺳﺖ ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻭ ﺑﻪ ﻧﺤﻮﻩ ﻱ ﺗﻌﺮﻳﻒ ﺍﺷﺎﺭﻩ ﮔﺮ ﻭ ﺑﺎﺯﻛﺮﺩﻥ ﻓﺎﻳﻞ ﻭ ﭘﺮﺩﺍﺯﺵ ﻓﺎﻳﻞ ﻭ ﺑـﺴﺘﻦ ﺁﻥ ﺩﻗـﺖ
ﻛﻨﻴﺪ :
ﻣﺜﺎﻝ ( ۱ﺑﺮﻧﺎﻣﻪ ﺍﻱ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺗﻌﺪﺍﺩﻱ ﻋﺪﺩ ﺍﺯ ﻛﺎﺭﺑﺮ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ﻭ ﺳﭙﺲ ﺩﺍﺧﻞ ﻳﻚ ﻓﺎﻳﻞ ﻣﺘﻨﻲ ﺑﺮﻳﺰﺩ.ﭘﺎﻳﺎﻥ ﺑﺨﺶ ﺩﺍﺩﻩ ﻫﺎ ﺻﻔﺮ ﺍﺳﺖ ﻭ
ﻫﻤﭽﻨﻴﻦ ﺑﻮﺳﻴﻠﻪ ﻳﻚ ﭘﺮﻭﺳﻴﺠﺮ ﺍﻋﺪﺍﺩ ﺩﺍﺧﻞ ﻓﺎﻳﻞ ﺭﺍ ﺧﻮﺍﻧﺪﻩ ﻭ ﺟﻤﻊ ﻭ ﺗﻌﺪﺍﺩ ﺍﻋﺪﺍﺩ ﺭﺍ ﺩﺭ ﻣﺎﻧﻴﺘﻮﺭ ﭼﺎﭖ ﻛﻨﺪ :
var
;f:text
;n:integer
;procedure sum
var
;x,s,i:integer
begin
;)'assign(f,'c:\m.txt
;)reset(f
;i:=0; s:=0
while not eof(f) do
begin
;) Readln ( f , x
;s:=s+x
;i:=i+1
;end
;)close(f
;)writeln(s
;)writeln(i
;end
begin
;)'assign(f,'c:\m.txt
;)rewrite(f
repeat
;)readln(n
;if n=0 then break
;) writeln ( F , n
;until false
;)close(f
;sum
end.
ﺳﻮﺍﻝ ( ﺣﺎﻝ ﺍﮔﺮ ﺑﺨﻮﺍﻫﻴﻢ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻱ ﺑﺎﻻ ﺩﺭ ﺍﻧﺘﻬﺎﻱ ﻓﺎﻳﻞ ﺩﻭ ﻣﺘﻐﻴﺮ )Sﺟﻤﻊ ﺍﻋﺪﺍﺩ( ﻭ ) Iﺗﻌﺪﺍﺩ ﺍﻋﺪﺍﺩ( ﺍﺿﺎﻓﻪ ﺷﻮﺩ؛ ﭼﻪ ﺗﻐﻴﻴـﺮﻱ ﺑﺎﻳـﺪ ﺩﺭ
ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ ﺑﺪﻫﻴﻢ ﻳﺎ ﺑﻌﺒﺎﺭﺕ ﺩﻳﮕﺮ ﭼﻪ ﺩﺳﺘﻮﺭﻫﺎﻳﻲ ﺑﺎﻳﺪ ﺑﻪ ﻗﺴﻤﺖ ﭘﺮﻭﺳﻴﺠﺮ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ ﺍﺿﺎﻓﻪ ﻛﻨﻴﻢ ؟
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 106
ﻣﺜﺎﻝ ( ۲ﺑﺮﻧﺎﻣﻪ ﺍﻱ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﺤﺘﻮﺍﻱ ﻓﺎﻳﻞ m.txtﺭﺍ ﺩﺭ ﻓﺎﻳﻞ p.txtﻛﭙﻲ ﻛﻨﺪ :
var
;f1,f2:text ﺳﻮﺍﻝ ( ﺍﮔﺮ ﺑﺠﺎﻱ ﺩﺳﺘﻮﺭ ) Read(f1,cﺩﺳﺘﻮﺭ ) Readln(f1,cﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺑﻮﺩ ؛
;c:char ﻣﺤﺘﻮﺍﻱ ﻓﺎﻳﻞ F2ﭼﻪ ﺗﻐﻴﻴﺮﻱ ﻣﻲ ﻛﺮﺩ ؟
begin
;)'assign(f1,'c:\m.txt
;)'assign(f2,'c:\p.txt
;)reset(f1
;)rewrite(f2
while not eof(f1) do
begin
;)read(f1,c
;)write(f2,c
;end
;)close(f1
;)close(f2
end.
ﺩﺭ ﻫﺮ ﻟﺤﻈﻪ ﺗﻨﻬﺎ ﻳﻜﻲ ﺍﺯ ﺭﻛﻮﺭﺩﻫﺎﻱ ﻓﺎﻳﻞ ﻧﻮﻉ ﺩﺍﺭ ﻗﺎﺑﻞ ﺩﺳﺘﻴﺎﺑﻲ ﺍﺳﺖ .ﻫﻨﮕﺎﻣﻴﻜﻪ ﻳﻚ ﻓﺎﻳﻞ ﺭﺍ ﺑﺎﺯ ﻣﻲ ﻛﻨﻴﻢ ﺍﻭﻟﻴﻦ ﺭﻛـﻮﺭﺩ ﻭ ﺑـﺎ ﺍﺟـﺮﺍﻱ ﻫـﺮ
ﺩﺳﺘﻮﺭ Readﻳﺎ ، Writeﺭﻛﻮﺭﺩ ﺑﻌﺪﻱ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﺧﻮﺍﻫﺪ ﺑﻮﺩ .ﺑﺮﺍﻱ ﻣـﺸﺨﺺ ﺷـﺪﻥ ﺍﻳـﻦ ﻛـﻪ ﺩﺭ ﺣـﺎﻝ ﺣﺎﺿـﺮ ﻛـﺪﺍﻡ ﺭﻛـﻮﺭﺩ ﻗﺎﺑـﻞ
ﺩﺳﺘﻴﺎﺑﻲ ﺍﺳﺖ ﺷﻤﺎﺭﻩ ﺭﻛﻮﺭﺩ ﻣﺰﺑﻮﺭ ﺩﺭ ﺩﺍﺧﻞ ﻣﺘﻐﻴﺮﻱ ﺑﻨﺎﻡ ﻣﻜﺎﻥ ﻧﻤﺎﻱ ﻓﺎﻳﻞ ﻛﻪ ﻓﻴﻠﺪﻱ ﺍﺯ ﻣﺘﻐﻴﺮ ﻓﺎﻳﻞ ﺍﺳﺖ ﻧﮕـﻪ ﺩﺍﺭﻱ ﻣﻴﮕـﺮﺩﺩ .ﺑـﺎ ﺍﺟـﺮﺍﻱ
ﺩﺳﺘﻮﺭ Resetﻳﺎ Rewriteﺩﺭ ﻣﻜﺎﻥ ﻧﻤﺎﻱ ﻓﺎﻳﻞ ﻋﺪﺩ ﺻﻔﺮ ﻗﺮﺍﺭ ﻣﻴﮕﻴﺮﺩ ﻭ ﺍﺟﺮﺍﻱ ﺩﺳـﺘﻮﺭﺍﺕ Readﻳـﺎ Writeﺳـﺒﺐ ﺍﻓـﺰﺍﻳﺶ ﻣﻘـﺪﺍﺭ
ﻣﻜﺎﻥ ﻧﻤﺎﻱ ﻓﺎﻳﻞ ﻧﻴﺰ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺍﺻﻄﻼﺣﺎ ﮔﻔﺘﻪ ﻣﻲ ﺷﻮﺩ ﻣﻜﺎﻥ ﻧﻤﺎﻱ ﻓﺎﻳﻞ ﺟﻠﻮ ﻣﻲ ﺭﻭﺩ.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 110
ﺑﺮﺍﻱ ﺍﻳﻨﻜﻪ ﺑﺘﻮﺍﻥ ﻳﻚ ﺭﻛﻮﺭﺩ ﺩﻟﺨﻮﺍﻩ ﺍﺯ ﻓﺎﻳﻞ ﻧﻮﻉ ﺩﺍﺭ ﺭﺍ ﭘﺮﺩﺍﺯﺵ ﻛﺮﺩ ﻻﺯﻡ ﺍﺳﺖ ﻣﻜﺎﻥ ﻧﻤﺎﻱ ﻓﺎﻳﻞ ﺭﺍ ﺑﻪ ﺍﺑﺘﺪﺍﻱ ﺭﻛﻮﺭﺩ ﺩﻟﺨﻮﺍﻩ ﺑﺒﺮﻳﻢ ؛ ﺑﺮﺍﻱ
ﺍﻳﻨﻜﺎﺭ ﺍﺯ ﭘﺮﺩﺍﺯﻩ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ Seekﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ :
; ) Seek ( f , n
ﻣﻨﻈﻮﺭ ﺍﺯ fﻣﻜﺎﻥ ﻧﻤﺎﻱ ﻓﺎﻳﻞ ﺍﺳﺖ ﻭ nﺷﻤﺎﺭﻩ ﺭﻛﻮﺭﺩ ﻣﻮﺭﺩ ﻧﻈﺮ ﺍﺳﺖ .ﺷﻤﺎﺭﻩ ﺍﻭﻟﻴﻦ ﺭﻛﻮﺭﺩ ﺻﻔـﺮ ﺍﺳﺖ.
ﻣﺜﺎﻝ ( ﺩﺳﺘﻮﺭﺍﺕ ﻻﺯﻡ ﺑﺮﺍﻱ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﻋﻨﺼﺮ ﺩﻫﻢ ﻓﺎﻳﻞ school info.datﺭﺍ ﺑﻨﻮﻳﺴﻴﺪ :
; ) 'Assign (f , 'c:\school info.dat
; )Reset (f
;) Seek ( f , 9
ﻧﻜﺘﻪ ( ﺑﺮﺍﻱ ﺍﻃﻼﻉ ﺍﺯ ﺗﻌﺪﺍﺩ ﺭﻛﻮﺭﺩ ﻫﺎ ﻳﺎ ﺗﻌﺪﺍﺩ ﻋﻨﺎﺻﺮ ﻳﻚ ﻓﺎﻳﻞ ﻧﻮﻉ ﺩﺍﺭ ﺍﺯ ﺗﺎﺑﻊ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ FileSizeﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ.
ﻣﺜﺎﻝ ( ﺩﺳﺘﻮﺭﺍﺕ ﻻﺯﻡ ﺑﺮﺍﻱ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﺁﺧﺮﻳﻦ ﻋﻨﺼﺮ ﻓﺎﻳﻞ school info.datﺭﺍ ﺑﻨﻮﻳﺴﻴﺪ :
; ) 'Assign (f , 'c:\school info.dat
; )Reset (f
;) Seek ( f , FileSize (f) - 1
ﻣﺜﺎﻝ ( ﺩﺳﺘﻮﺭﺍﺕ ﻻﺯﻡ ﺑﺮﺍﻱ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﻳﻚ ﻋﻨﺼﺮ ﺑﻪ ﺍﻧﺘﻬﺎﻱ ﻓﺎﻳﻞ school info.datﺭﺍ ﺑﻨﻮﻳﺴﻴﺪ :
; ) 'Assign (f , 'c:\school info.dat
; )Reset (f
;) )Seek ( f , FileSize (f
ﺑﺮﺍﻱ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﻳﻚ ﻋﻨﺼﺮ ﺑﻪ ﺍﻧﺘﻬﺎﻱ ﻓﺎﻳﻞ ،ﻛﺎﻓﻲ ﺍﺳﺖ ﻣﻜﺎﻥ ﻧﻤﺎﻱ ﻓﺎﻳﻞ ﺭﺍ ﺑﻌﺪ ﺍﺯ ﺁﺧﺮﻳﻦ ﻋﻨﺼﺮ ﻗﺮﺍﺭ ﺩﻫﻴﻢ ﻭ ﺳﭙﺲ ﺩﺳـﺘﻮﺭ
Writeﺭﺍ ﺍﺟﺮﺍ ﻛﻨﻴﻢ.
ﻧﻜﺘﻪ ( ﺍﮔﺮ ﺑﺎ ﺩﺳﺘﻮﺭ seekﺍﺷﺎﺭﻩ ﮔﺮ ﻓﺎﻳﻞ ﺭﺍ ﺍﺯ ﻣﺤﺪﻭﺩﻩ ﻓﺎﻳﻞ ﺧﺎﺭﺝ ﮐﻨﻴﻢ ﭘﻴﻐﺎﻡ ﺧﻄﺎﻱ ﺷﻤﺎﺭﻩ ۱۰۰ﻳﻌﻨﻲ disk read errorﺻﺎﺩﺭ
ﻣﻲ ﺷﻮﺩ.
Seek (f, filesize(f) +1) ž ﻏﻠﻂ
ﻏﻠﻂ Seek (f,-1) ž
)ﭘﺎﻳﺎﻥ ﺑﺨﺶ ﺩﺍﺩﻫـﺎ )ﺁﺧـﺮﻳﻦ ﻋـﺪﺩ ﻭﺭﻭﺩﻱ( ﻋـﺪﺩ. ( ﺑﺮﻧﺎﻣﻪ ﺍﻱ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺗﻌﺪﺍﺩﻱ ﻋﺪﺩ ﺍﺯ ﻛﺎﺭﺑﺮ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ﻭ ﺁﻧﺮﺍ ﺩﺭ ﻓﺎﻳﻞ ﺑﺮﻳﺰﺩ۵ ﻣﺜﺎﻝ
ﺑﺮﻳﺰﺩ ﻭ ﻫﻤﭽﻨﻴﻦ ﺗﻌـﺪﺍﺩS ﺍﻋﺪﺍﺩ ﻣﻮﺟﻮﺩ ﺩﺭ ﻓﺎﻳﻞ ﺭﺍ ﺑﺎ ﻫﻢ ﺟﻤﻊ ﻛﻨﺪ ﻭ ﺩﺭ ﻣﺘﻐﻴﺮﻱ ﺑﻨﺎﻡSum ﻫﻤﭽﻨﻴﻦ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﭘﺮﻭﺳﻴﺠﺮ.(ﺻﻔﺮ ﺍﺳﺖ
. ﺭﺍ ﺩﺭ ﻣﺎﻧﻴﺘﻮﺭ ﭼﺎﭖ ﻛﻨﺪI ﻭS ﺑﺮﻳﺰﺩ ﻭ ﺳﭙﺲI ﺍﻋﺪﺍﺩ ﺭﺍ ﺩﺭ ﻣﺘﻐﻴﺮﻱ ﺑﻨﺎﻡ
Var
F: file of integer ; X: integer ;
Procedure Sum ;
Var
s , i , x : integer ;
Begin
Assign ( F, 'c:\mydigit.dat' ) ;
Reset (f) ;
s:= 0 ; i:= 0 ;
while not eof(f) do
begin
read( f , x ) ;
s:= s + x ; i := i + 1 ;
end ;
close (f) ;
writeln ( s ) ; writeln ( i ) ;
end;
Begin
Assign ( F, 'c:\mydigit.dat' ) ;
Rewrite (f) ;
Repeat
Read (x) ;
Write (f , x) ;
Until x = 0 ;
Close (f) ;
Sum ;
End.
ﭘﺎﺳـﮑﺎل -ﻧﺴﺨﻪ آزﻣﺎﯾﺸﯽ – ﺧﺮداد -1388ﻣﻬﻨـﺪس ﻣﺤﻤـﺪي ) – (mohammadi.mm@gmail.comﺻﻔﺤـﻪ 112
ﻓﺎﻳﻞ ﺑﺪﻭﻥ ﻧـﻮﻉ:
ﻓﺎﻳﻞ ﺑﺪﻭﻥ ﻧﻮﻉ ﻓﺎﻳﻠﻲ ﺍﺳﺖ ﮐﻪ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺍﺟﺎﺯﻩ ﻣﻲ ﺩﻫﺪ ﺩﺭ ﻣﻮﺭﺩ ﺩﺍﺩﻩ ﻫﺎﻱ ﺩﺭﻭﻥ ﻓﺎﻳﻞ ﻫﺮﮔﻮﻧﻪ ﺗﻔﺴﻴﺮ ﺩﻟﺨﻮﺍﻫﻲ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ
ﺩﺭ ﺍﻳﻦ ﻧﻮﻉ ﻓﺎﻳﻞ ﻫﺎ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﺎ ﻳﮏ ﺩﺳﺘﻮﺭ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﺣﺠﻢ ﺩﻟﺨﻮﺍﻫﻲ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎ ﺭﺍ ﺑﺨﻮﺍﻧﺪ ﻳﺎ ﺑﻨﻮﻳﺴﺪ .ﺍﻳـﻦ ﻧـﻮﻉ ﻓﺎﻳـﻞ
ﺍﻧﻌﻄﺎﻑ ﺯﻳﺎﺩ ﻭﺳﺮﻋﺖ ﺑﺴﻴﺎﺭ ﺑﺎﻻﻳﻲ ﺩﺍﺭﺩ.
ﺩﺳﺘﻮﺭ ;) reset(f,10ﻓﺎﻳﻞ fﺭﺍ ﺑﺮﺍﻱ ﺧﻮﺍﻧﺪﻥ ﻭﻧﻮﺷﺘﻦ ﺑﺎﺯ ﻣﻲ ﮐﻨﺪ ﺑﺎ ﺍﻳﻦ ﻓﺮﺽ ﮐﻪ ﻓﺎﻳﻞ ﻣﺰﺑﻮﺭ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎﻳﻲ ﺑﻪ ﺍﻧﺪﺍﺯﻩ ۱۰ﺑﺎﻳﺖ ﺗـﺸﻜﻴﻞ
ﺷﺪﻩ ﺍﺳﺖ.
ﺩﺳﺘﻮﺭ ;) rewrite(f,1ﻓﺎﻳﻞ ﺟﺪﻳﺪﻱ ﺍﻳﺠﺎﺩ ﻣﻲ ﮐﻨﺪ ﮐﻪ ﻫﺮ ﺩﺍﺩﻩ ﺍﻱ ﮐﻪ ﺩﺍﺧﻞ ﺁﻥ ﻣﻲ ﺭﻳﺰﻳﻢ ۱ﺑﺎﻳﺖ ﻓﻀﺎ ﺍﺷﻐﺎﻝ ﻣﻲ ﮐﻨﺪ.
ﺑﺮﺍﻱ ﻧﻮﺷﺘﻦ ﻭ ﺧﻮﺍﻧﺪﻥ ﺩﺭ ﻓﺎﻳﻠﻬﺎﻱ ﺑﺪﻭﻥ ﻧﻮﻉ ﺍﺯ ﺩﺳﺘﻮﺭﻫﺎﻱ BlockWriteﻭ BlockReadﺑﺎ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻳﻲ ﺑﺼﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ
ﻣﻲ ﺷﻮﺩ :
; ) BlockWrite ( F , B , N , W
; ) BlockRead ( F , B , N , R
ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﺩﺳﺘـﻮﺭ : BlockWrite
:Fﺍﺷﺎﺭﻩ ﮔﺮ ﻓﺎﻳﻞ
:Bﺑﺎﻓﺮ ﮐﻪ ﻣﻌﻤﻮﻻ ﺁﺭﺍﻳﻪ ﺍﻱ ﺍﺯ ﻧﻮﻉ charﺍﺳﺖ.
:Nﻳﮏ ﻋﺪﺩ ﺻﺤﻴﺢ ﺍﺳﺖ ﮐﻪ ﻧﺸﺎﻥ ﺩﻫﻨﺪﻩ ﺗﻌﺪﺍﺩ ﺩﺍﺩﻩ ﻫﺎﻳﻲ ﺍﺳﺖ ﮐﻪ ﻗﺮﺍﺭ ﺍﺳﺖ ﺍﺯ ﺑﺎﻓﺮ ) (Bﺩﺭ ﻓﺎﻳﻞ ﺭﻳﺨﺘﻪ ﺷﻮﺩ.
:Wﻣﺘﻐﻴﺮﻱ ﺻﺤﻴﺢ ﺍﺳﺖ ﮐﻪ ﺑﻌﺪ ﺍﺯ ﻋﻤﻠﻴﺎﺕ ﻧﻮﺷﺘﻦ ﺩﺭ ﻓﺎﻳﻞ ﻣﺸﺨﺺ ﻣﻴﮑﻨﺪ ﭼﻪ ﻣﻘﺪﺍﺭ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺩﺭﻓﺎﻳﻞ ﺭﻳﺨﺘﻪ ﺷﺪﻩ ﺍﻧﺪ.
-ﺍﮔﺮ ﺑﻌﺪ ﺍﺯ ﺍﺟﺮﺍﻱ ﺍﻳﻦ ﺩﺳﺘﻮﺭ N=Wﺑﺎﺷﺪ ﻳﻌﻨﻲ ﻫﻤﻪ ﺩﺍﺩﻩ ﻫﺎ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺩﺭ ﻓﺎﻳﻞ ﺭﻳﺨﺘﻪ ﺷﺪﻩ ﺍﻧﺪ.
ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﺩﺳﺘـﻮﺭ : BlockRead
:Fﺍﺷﺎﺭﻩ ﮔﺮ ﻓﺎﻳﻞ
:Bﺑﺎﻓﺮ ﮐﻪ ﻣﻌﻤﻮﻻ ﺁﺭﺍﻳﻪ ﺍﻱ ﺍﺯ ﻧﻮﻉ charﺍﺳﺖ.
:Nﻳﮏ ﻋﺪﺩ ﺻﺤﻴﺢ ﺍﺳﺖ ﮐﻪ ﻧﺸﺎﻥ ﺩﻫﻨﺪﻩ ﺗﻌﺪﺍﺩ ﺩﺍﺩﻩ ﻫﺎﻳﻲ ﺍﺳﺖ ﮐﻪ ﻗﺮﺍﺭ ﺍﺳﺖ ﺍﺯ ﻓﺎﻳﻞ ﺧﻮﺍﻧﺪﻩ ﻭ ﺩﺭﺑﺎﻓﺮ ) (Bﺭﻳﺨﺘﻪ ﺷﻮﺩ.
:Rﻣﺘﻐﻴﺮﻱ ﺻﺤﻴﺢ ﺍﺳﺖ ﮐﻪ ﺑﻌﺪ ﺍﺯﻋﻤﻠﻴﺎﺕ ﺧﻮﺍﻧﺪﻥ ﺍﺯ ﻓﺎﻳﻞ ﻣﺸﺨﺺ ﻣﻲ ﮐﻨﺪ ﭼﻪ ﻣﻘﺪﺍﺭ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺍﺯﻓﺎﻳﻞ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺍﻧﺪ.
-ﺍﮔﺮ ﺑﻌﺪ ﺍﺯ ﺍﺟﺮﺍﻱ ﺍﻳﻦ ﺩﺳﺘﻮﺭ N=Rﺑﺎﺷﺪ ﻳﻌﻨﻲ ﻫﻤﻪ ﺩﺍﺩﻩ ﻫﺎ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺍﺳﺖ ﻭﺍﮔﺮ R<Nﺑﺎﺷﺪ ﻳﻌﻨﻲ ﺑﻪ ﺍﻧﺘﻬـﺎﻱ ﻓﺎﻳـﻞ ﺭﺳـﻴﺪﻩ
ﺍﻳﻢ.