Processing math: 100%

المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۹:الگوریتم ها:سوال ۳

توابع منطقی

در این مسئله با توابع اندیس‌دار که مقدار برگشتی آن‌ها True یا False است سر و کار داریم. مثلا ممکن است تابع اندیس‌دار F‌را به صورت زیر تعریف کنیم:

fi(x)={Truei+x=2kFalseo.w.

برای معرفی چنین تابعی از زبانی با ساختار خاص استفاده می‌کنیم که در آن سه نماد i، n و p‌ به شرح زیر معرفی می‌شوند:

  • i‌ مقدار صفر
  • n‌ مقدار بعدی
  • p‌ مقدار قبلی

به عنوان مثال inn‌نشان‌گر ۲ و ip نشان‌گر مقدار 1 است.

در این زبان یک تابع اندیس‌دار به این صورت مشخص می‌شود که در سمت چپ با نشانه‌های گفته شده‌ی i,n,p پارامتر را مشخص کرده و سپس یک حرف الفبای لاتین به نشانه‌ی نام تابع و سپس با همان نشانه‌ها اندیس می‌آوریم. به عنوان مثال F2(1) با ipFinn‌مشخص می‌شود. همچنین یک برنامه‌ی مفسر، تابع‌های مورد نظر خود را با دو نوع گزاره معرفی می‌کند:

  • گزاره‌ی اولیه که با مشخص کردن یک تابع با ندیس و پارامتر آن نوشته می‌شود و به معنای درست بودن آن است! مثلا inFi یعنی F0(1)=True.
  • گزاره‌ی شرطی که به فرم یک ترکیب شرطی است و نشان می‌دهد اگر تابع سمت چپ درست باشد تابع سمت راست نیز درست است. در ضمن اگر در تابع سمت چپ، اندیس یا پارامتر مشخص نشود، می‌توان در سمت راست مقدار آن را با n,p تغییر داد و یک گزاره‌ی سوری ساخت! مثلا FinGin معادل x:F0(x)G1(x+1) و GiGpp‌به معنای x,y:Gx(y)Gx2(0) است.

اگر در برنامه‌ای F0(x)‌درست باشد، می‌گوییم برنامه، x‌را تولید می‌کند. به عنوان مثال برنامه‌ی زیر اعداد زوج را تولید می‌کند:

  • iFi
  • FinnFi
  1. برنامه‌ای بنویسید که در آن Fi(x)=True اگر و فقط اگر x+i مضرب مثبت ۳ باشد.
  2. برنامه‌ای بنویسید که توان‌های مثبت ۲ را تولید کند.

ابزار صفحه