المپدیا

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

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره‌ی تابستان:دوره‌ی ۱۹:برنامه‌نویسی:سوال ۸

سوال ۸

علی یک برنامه‌ی ‎C++‎ نوشته‌است که یک عدد صحیح ‎(int)‎ را از ورودی می‌خواند و آن‌را به حروف ‎(انگلیسی)‎ در خروجی می‌نویسد. در راستای جذب مشتری، علی می‌خواهد این برنامه را در دو نسخه‌ی ‎«demo»‎ و ‎«کامل» (یا اصطلاحاً ‎full‎) به بازار عرضه کند‎!‎ در نسخه‌ی «demo» (که رایگان عرضه می‌شود) برنامه فقط برای ورودهای مثبت و حداکثر دو رقمی کار می‌کند. اما در نسخه‌ی ‎«کامل» (که قیمت آن ‎۱۰۰‎هزار تومن است!)‎ برنامه نه‌تنها برای تمام ورودی‌ها کار می‌کند، بلکه قابلیت خواندن به‌حروف و نوشتن به عدد (و تعدادی امکانات جانبی مشابه) را نیز دارد‎!‎

برای دریافت این برنامه شما به علی یک ایمیل می‌زنید و درصورتی که نسخه ‎«کامل»‎ را بخواهید مبلغ خواسته‌شده را به حساب بانکی علی واریز کرده و شماره فیش واریزی را نیز در ایمیل‌تان ذکر می‌کنید. در پاسخ به درخواست شما، علی یکی از فایل‌های ‎demo.exe‎ یا ‎full.exe‎ را (بسته به این‌که پول ریخته‌اید یا نه) برای شما می‌فرستد.

از آن‌جا که علی دائماً در تلاش برای ارتقا و بهبود برنامه است (مثلاً تلاش برای نوشتن به زبان‌های فرانسه و روسی در خروجی)، تنها یک فایل مبدأ ‎(source code)‎ به‌نام ‎ali.cpp‎ دارد که در یکی از خطوط اولیه آن یک پارامتر قابل تغییر وجود دارد. هر بار که مشتری یک نسخه از برنامه را از علی می‌خواهد، علی ابتدا برحسب نوع نسخه درخواست شده (‎demo‎ یا ‎full‎) پارامتر کدش را تنظیم می‌کند و سپس کدش را کامپایل کرده، فایل ‎exe‎ خروجی کامپایلرش را برای مشتری می‌فرستد.

می دانیم مشتری‌ها علی، ممکن‌ست ذاتاً آدم‌های شروری باشند، اما بین همدیگر رودربایستی دارند‎!‎ به‌عبارت دقیق‌تر یک مشتری ممکن‌ست فایل ‎demo.exe‎ را از علی بگیرد و خودش (با معلومات شخصی خودش) سعی کند از روی بیت‌ها و دستورهای اسمبلی ‎demo.exe‎ آن را به چیزی شبیه ‎full.exe‎ تبدیل کند. اما کسی که ‎full.exe‎ را از علی می‌خرد، هرگز آن فایل را به دیگران نمی‌دهد.

با این وصف برای علی دو راهکار ارائه دهید که ‎ بتواند تنها با تغییر یک پارامتر (در اوایل فایل ‎ali.cpp‎) نسخه فایل خروجی (‎demo‎ یا ‎full‎) را تعیین کند‎.

دو راهکار خود برای پیاده‌سازی آن پارامتر را از نظر ‎«امنیت» (این‌که مشتریان بی‌چشم و رو آن را ‎Crack‎ نکنند. یعنی مثلاً نسخه ‎demo‎ را بخرند و خودشان آن را به ‎full‎ تبدیل کنند)، از نظر ‎«سرعت اجرا»‎ و از نظر «راحتی خود علی برای اِعمال تغییرات آتی»‎ مقایسه کنید.


ابزار صفحه