A Drop of the Programming Sea

یک قطره از دریای برنامه نویسی: وبلاگ امیرحسین مهدی‌نژاد، برنامه‌نویس، مدرس برنامه‌نویسی و دانشجوی مهندسی کامپیوتر

A Drop of the Programming Sea

یک قطره از دریای برنامه نویسی: وبلاگ امیرحسین مهدی‌نژاد، برنامه‌نویس، مدرس برنامه‌نویسی و دانشجوی مهندسی کامپیوتر

۸ مطلب در آبان ۱۳۹۲ ثبت شده است

در کشور ژاپن، چرتکه ای توسعه یافته به نام Soroban دارند که در مدارس ابتدایی استفاده آن را به دانش آموزان می آموزند تا جمع و تفریق را به خوبی یاد بگیرند. ما قصد نداریم در مورد آنها صحبت کنیم، بیایید نگاهی دقیق تر به ساختار این چرتکه بیاندازیم:

Soroban دارای تعدادی میله افقی و هر میله شامل 5 مهره است. نوار عمودی که یک مهره سمت چپ را از 4 مهره ی دیگر جدا می کند، نوار حساب نام دارد، این مهره تک نامیده می شود (طبق شکل) و مهره های سمت راست نوار حساب را ایچی می گویند. هر میله ی افقی رقمی از 0 تا 9 را نشان می دهد که با این الگوریتم، به سادگی می توان آنرا بدست آورد:

     ابتدا همه ی میله ها، رقم 0 را نشان می دهند. (مهره های ایچی، کاملاً راست و مهره ی تک، چپ) مثل ردیف اوّل در شکل.

     اگر مهره ی تک به سمت راست برود، 5 واحد اضافه می شود.

     به ازای هریک از مهره های ایچی که سمت چپ برود، 1 واحد اضافه می شود.

بنابراین در شکل، ردیف اوّل نشان دهنده ی رقم 0، ردیف دوّم نشان دهنده ی رقم 2 و ردیف سوّم نشان دهنده ی رقم 7 است که چرتکه عدد 720 را نشان می دهد.

کار شما نوشتن برنامه ای است که به ازای هر عددی، Soroban آن را نمایش دهد...

input
720
output
O-|-OOOO
O-|OO-OO
-O|OO-OO
۰ نظر موافقین ۰ مخالفین ۰ ۲۱ آبان ۹۲ ، ۱۹:۴۰
Amirhossein Mahdinejad

میثم از دانش آموزان سال اوّل دبیرستان علامه حلی 5 است، او قبلاً اثبات کرده که به ازای هر عدد ثابتی مثل k ، می توان در هر مربع n×n طوری یک سری اعداد (که لزوما متمایز نیستند) درون آن قرار داد به طوری که جمع اعداد هر ستون و هر سطر مربع، k باشد. (بدیهیات را اثبات کرده!)

حال برای تمرین تکمیلی می خواهد برنامه ای بنویسد که با گرفتن n و k، جدول دلخواه را چاپ کند. طبق معمول کمک می خواهد!


input
4 7
output
2 1 0 4
4 0 2 1
1 3 3 0
0 3 2 2
۰ نظر موافقین ۰ مخالفین ۰ ۱۹ آبان ۹۲ ، ۲۲:۳۰
Amirhossein Mahdinejad

قلی از دانش آموزان گروه مکانیک دبیرستان علامه حلی 5 است! برای سمینار سوّم، او رباتی ساخته است که قابلیت های زیر را دارد:

     یک بازوی راست و یک بازوی چپ دارد که می تواند به وسیله ی آنها شئی را بلند کند.

     اگرشئی را با بازوی راست بلند کند، به اندازه ی (وزن بازوی راست × وزن شئ) سنگین خواهد بود و اگرشئی را با بازوی چپ بلند کند، به اندازه ی (وزن بازوی چپ × وزن شئ) سنگین خواهد بود.

     اگر دوبار متوالی از بازوی راستش کار بکشد، به مقدار Qr به سنگینی افزوده می شود و اگر دوبار متوالی از بازوی چپش کار بکشد، به مقدار Ql به سنگینی افزوده می شود.

قبل از برگزاری سمینار، برای تست نحوه ی عملکرد و تأیید پروژه، n شئ با وزن های W1 , W2, ..., Wn در یک ردیف گذاشته اند به طوری که شئ n-ام در سمت چپ قرار گرفته است و ربات باید همه ی اشیاء را بلند کند. از قلی می خواهند طوری ربات را هدایت کند که کمترین انرژی را مصرف کند (هرچه مجموع سنگینی های وارد بر دو بازوی ربات بیشتر شود، انرژی بیشتری می سوزاند).

و مسلّم است که ربات نمی تواند شئی که در سمت چپ است را با دست راست بلند کند (و بلعکس) و نیز مجاز به برداشتن از اشیاء میانی نیست. قلی برای رساندن پروژه به سمینار، از کامپیوتری های مدرسه کمک می خواهد...


input
3 4 4 19 1
42 3 99
output
576
۰ نظر موافقین ۰ مخالفین ۰ ۱۵ آبان ۹۲ ، ۱۷:۳۸
Amirhossein Mahdinejad

کتاب اثبات! کتاب زبان اصلی "Proofs from THE BOOK" را برای دانلود آماده کرده ایم. در این کتاب، طی چند بخش گزیده‌ای از اثبات‌های عالی در نظریه اعداد، هندسه، آنالیز، ترکیبات و نظریه گراف (برگرفته از منابع مختلف) گردآوری شده است.

مثلاً از مهم ترین اثبات های گراف آن می توان به اثبات قضیه توران و مسئله ی محافظت از موزه اشاره کرد. هر اثبات با جدول، نمودار، تمرین، فهرست منابع و شرح کوتاهی از تاریخچه ی آن همراه است.

MartinAigners_proofBook

دانلود کتاب اثبات زبان در ادامه مطلب...

۰ نظر موافقین ۰ مخالفین ۰ ۱۴ آبان ۹۲ ، ۲۱:۳۷
Amirhossein Mahdinejad

کتاب "A Byte of Python" یکی از کتاب های خیلی خوب و معروف برای آموزش برنامه نویسی به زبان Python است. پایتون یکی از زبان های برنامه نویسی است که علاوه بر قدرتمند بودن و سادگی، به زبان روزمرّه ی انسان نیز نزدیک است؛ در اینجا نسخه ی فارسی این کتاب را برای دانلود آماده کرده ایم.

_coverA_Byte_of_Python

دانلود کتاب ترجمه شده ی یک بیت پایتون در ادامه مطلب...

۰ نظر موافقین ۲ مخالفین ۱ ۱۴ آبان ۹۲ ، ۲۱:۰۴
Amirhossein Mahdinejad

پیدا کردن مؤلفه های همبندی یک گراف (توضیح بیشتر) به وسیله ی DFS) Depth-first search) یا همان جستجوی اول سطح، یکی از برنامه های مفید برای یاد گرفتن مفاهیم گراف در برنامه نویسی است.


input
5
3
1 2
2 3
4 5
output
1 2 3
4 5

۰ نظر موافقین ۰ مخالفین ۰ ۱۴ آبان ۹۲ ، ۲۰:۳۴
Amirhossein Mahdinejad

تابستان 92 است! دبیرستان علامه حلی 5 تهران، برای ورودی های جدید (دوره 3) آزمونی برگزار کرد که برنامه نویس های قوی (رده الف) و ضعیف(رده ب) را دو دسته کند. از ما به عنوان بهترین برنامه نویس های حلی 5 تقاضا شده که نمره قبولی این آزمون را طوری تعیین کنیم که تعداد قبولی های رده الف از گنجایش کلاس آن بیشتر نشود و همین طور برای رده ب.


input
5
3 4 3 2 1
6 8
output
3

۰ نظر موافقین ۰ مخالفین ۰ ۰۳ آبان ۹۲ ، ۱۰:۵۰
Amirhossein Mahdinejad