المپدیا

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

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۲۰:برنامه نویسی:سوال ۲

یه کم کدنویسی

در برنامه‌های زیر نیازی به نوشتن include ها نیست و تنها رویه داخلی برنامه (همراه با تغییر متغیرها) را بنویسید.

  1. می‌دانیم حلقه‌های ‎for‎ و ‎while‎ عملکرد مشابهی دارند. آیا همواره و در هر شرایطی می‌توان کدی که در آن از ‎for‎ استفاده شده است را بدون استفاده از ‎goto‎ به یک کد بدون ‎for‎ و با while‎ تبدیل کرد؟ اگر بله، رویه کلّی این تبدیل را شرح دهید. اگر خیر، مثالی بزنید که نشود ‎for‎ را بدون استفاده از ‎goto‎ به ‎while‎ تبدیل کرد‎.‎
  2. برنامه‌ای بنویسید که عدد ‎unsigned int x‎ را از ورودی بخواند و بایتاینه‌ی آن را در متغیر ‎y‎ نوشته و سپس در خروجی چاپ کند. بایتاینه‌ی یک عدد ‎unsigned int‎ چهار بایتی، عددی است که از تعویض swap بایت اول با چهارم و دوم با سوم (آینه‌ای بایت بایت) به‌دست می‌آید. مثلاً بایتاینه‌ی عدد ‎$(00000001~00000010~00000011~00000100)_2$‎ برابر است با ‎$(00000100~00000011~00000010~00000001)_2$‎. شما باید برنامه خود را با عملگرهای معرفی شده و بدون استفاده از تابع یا متغیر اضافه بنویسید. نمره شما از این سؤال متناسب با تعداد عملگرهایی است که استفاده می‌کنید‎.
  3. می‌دانیم مهره اسب در صفحه شطرنج به این صورت حرکت می‌کند ابتدا یک/دو خانه به‌صورت افقی/عمودی می‌رود و سپس دو/یک خانه به‌صورت عمودی/افقی. شدّت اسبیّت (اسبی بودن) یک خانه در صفحه شطرنج (وقتی کلّ صفحه خالی است) برابراست با تعداد خانه‌های مقصد مختلفی که که یک اسب از آن خانه می‌تواند برود. برای مثال اسبیّت هر کدوم از ‎۴‎ خانه‌ی گوشه‌ی مربع ‎۸در۸‎ شطرنج برابر ‎۲‎ و اسبیّت خانه‌های وسط برابر ‎۸‎ است.
  1. می‌خواهیم برنامه‌ای بنویسیم که در یک ماتریس ‎۸‎ در ‎۸‎ در خروجی، میزان اسبیّت ‎۶۴‎ خانه‌ی شطرنج را محاسبه کرده و بنویسد.

این برنامه را طوری بنویسید که در آن حداکثر از یک if‎ استفاده شود (عملگر ~?~:~‎ مجاز نیست). برنامه شما نباید آرایه اضافه (به جز آرایه دو بعدی جواب خروجی) بگیرد. برنامه شما نباید بیش از ‎۲۵‎ خط (خط عادی، بدون زورچپانی‎!‎) باشد وگرنه درصد زیادی از نمره این قسمت را از دست خواهید داد.


ابزار صفحه