P1.pdf

‫مبانی برنامه نویسی ‪C‬‬
‫نیم سال اول ‪20-29‬‬
‫دانشکده مهندسی کامپیوتر‬
‫فاز اول پروژه‬
‫مدرس‪ :‬امید جعفر نژاد‬
‫مهلت تحویل ‪ 03‬آذر‬
‫مالحظات‪:‬‬
‫به موارد زیر توجه کنید‪:‬‬
‫‪ .1‬این پروژه می تواند در گروه های دو نفره انجام شود‪ .‬اسامی اعضای تیم را تا ‪ 99‬آذر به آدرس ‪[email protected]‬‬
‫با عنوان ‪ C Project Team_7‬ارسال کنید‪.‬‬
‫‪ .9‬موعد تحویل ساعت ‪ 90:32‬روز ‪ 03‬ام آذر است و به هیچ عنوان تمدید نخواهد شد‪.‬‬
‫‪ .0‬با هرگونه تقلب به صورت جدی برخورد خواهد شد‪.‬‬
‫‪ .4‬هرگونه سوال مربوط به این فاز پروژه را در با تگ مناسب در صفحه ی درس در سایت ‪ piazza‬مطرح کنید‪.‬‬
‫توضیحات بازی‪:‬‬
‫جدول سودوکو یک جدول ژاپنی است که به آن جدول اعداد متقاطع هم گفته می شود‪ .‬این جدول‪ ،‬جدولی مربعی‬
‫شکل است که از ‪ 2‬سطر و ‪ 2‬ستون تشکیل شده و از طرف دیگر به ‪ 2‬مربع مساوی تقسیم می شود که این مربع‬
‫های ‪ 0‬در ‪ 0‬درون مربع اصلی قرار دارند که به آن ها بلوک گفته میشود‪ .‬شکل زیر یک جدول سودوکوی خالی‬
‫هست که در آن یک بلوک و یک سطر و یک ستون برای مثال مشخص شده‪:‬‬
‫قانون های این بازی ‪ 4‬شرط اصلی سادست که در زیر آمده اند‪:‬‬
‫قانون اول‪ :‬داخل هر خانه یه عدد بین ‪ 1‬تا ‪ 2‬باید قرار بگیرد‬
‫قانون دوم‪ :‬داخل هر سطر نباید اعداد تکراری وجود داشته باشد‬
‫قانون سوم‪ :‬داخل هر ستون نباید اعداد تکراری وجود داشته باشد‬
‫قانون چهارم‪ :‬داخل هر بلوک نباید اعداد تکراری وجود داشته باشد‬
‫یک نمونه از یه جدول سودوکوی حل شده را در زیر مشاهده می کنید‪.‬‬
‫همیشه از ابتدا تعدادی از خانه های جدول سودوکو با اعدادی پر شده اند و هدف این است که باقی خانه ها را با‬
‫ضوابط موجود پر کنیم‪ .‬برای مثال جدول سمت چپ یک جدول ابتدایی است و پس از حل به جدول سمت راست‬
‫باید برسیم‪.‬‬
‫صورت پروژه‪:‬‬
‫شما باید در این فاز نام توابعی که می خواهید پیاده سازی کنید و توضیحی از الگوریتم های خود ارائه دهید‪ .‬به‬
‫عبارتی فاز اول اصال برنامه نویسی ندارد و فقط باید مسیر اجرای پروژه را مشخص کنید‪ .‬به این معنی که توضیح‬
‫کوتاهی در مورد روش و چگونگی پیاده سازی ارایه دهید‪ .‬روش شما باید قابلیت های زیر را پیاده سازی کند‪:‬‬
‫بازی شما باید با یک منو شروع شود که منوی اصلی بازی خواهد بود‪ .‬در این منو باید امکان ایجاد "بازی جدید" و‬
‫امکان "حل یک جدول" و "خروج" باشد‪.‬‬
‫"بازی جدید" باید به این صورت باشد که یک جدول با حداکثر ‪ 03‬خانه ی پر شده به کاربر تحویل داده شود‪ .‬کاربر‬
‫میتواند با استفاده از دستور های زیر بازی کند‪:‬‬
‫‪ .1‬دستور پر کردن خانهای از جدول‪ .‬به این صورت که کاربر آدرس یک خانه از جدول و یک عدد میدهد و‬
‫بازی آن عدد را در جای گفته شده قرار میدهد‪ .‬اگر که خانه قبال با عددی پر شده بود‪ ،‬عدد جدید جای آن‬
‫عدد را میگیرد‪ .‬در صورتی که بعد از پر شدن یک خانه توسط کاربر جدول کامل شده بود عبارتی به عنوان‬
‫نشان دادن پیروزی کاربر داده شود‪ .‬در غیر این صورت بازی ادامه پیدا میکند‪.‬‬
‫‪ .9‬دومین دستور شما دستوری است که کاربر با دادن آن دستور خانه هایی که با ‪ 4‬قانون جدول سودوکو‬
‫تداخل دارند مشخص میشوند‪ .‬این کار میتواند به این صورت باشد که در جدول چاپ شده در این مرحله‬
‫در کنار اعدادی که مشکل دار هستند یک عالمت تعجب (!) گذاشته شود‪.‬‬
‫‪ .0‬سومین دستور شما راهنمایی است‪ .‬به این صورت که هنگامی که کاربر این دستور را وارد کرد یکی از خانه‬
‫های جدول به صورت تصادفی عدد گذاری شودو به عنوان راهنمایی پر می شود‪( .‬راهنمایی در صورتی کار‬
‫می کند که هیچ خانه پر شده ای با قوانین بازی در تناقض نباشد‪).‬‬
‫‪ .4‬دستور اخر شما حل تمامی جدول است‪ .‬با دادن این دستور تمام جدول حل میشود‪.‬‬
‫"حل جدول" به این صورت کار میکند که کاربر یک جدول ‪ 2*2‬به شما میدهد که در بعضی خانه ها عدد و‬
‫بعضی خالی هستند‪ .‬خانه های پر با عدد آن خانه و خانه های خالی با ‪ #‬نمایش داده میشوند‪ .‬بازی شما باید در‬
‫صورتی که جدول داد شده را بتوان با توجه به قوانین سودوکو پر کرد جدول پر شده را چاپ کند‪ .‬در غیر این‬
‫صورت عبارتی مبنی بر این که جدول داده شده جدول سودوکو نیست چاپ کند‪.‬نمونه ای از جدول در شکل زیر‬
‫امده‪.‬‬
‫دقت کنید ممکن است جدول داده شده به صورت یکتا قابل حل نباشد!(بتوان به چندین صورت عدد گذاری کرد‬
‫که جدول با قوانین سودوکو پر شود) مثال ممکن است یک جدول خالی داده شود که هر روشی که قوانین رو نقض‬
‫نکند قابل پرکردن است! یا ممکن است جدول اصال قابل حل نباشد که در این صورت پیغامی دهید که این جدول‬
‫قابل حل نیست‪.‬‬
‫فرمت ورودی یک جدول به صورت زیر است که خانه هایی که با نماد ‪ #‬آمده اند نشان دهنده ی خانه های خالی‬
‫هستند‪.‬‬
‫‪#####98##‬‬
‫‪#184###2#‬‬
‫‪##4#7####‬‬
‫‪#####6###‬‬
‫‪6######5#‬‬
‫‪###18#7#2‬‬
‫‪#518###93‬‬
‫‪97##3###4‬‬
‫‪#3##6####‬‬
‫توجه کنید برای فاز یک باید یک شمای کلی از روش پیاد سازی بدهید‪ .‬به این صورت که نام تابع ها به همراه‬
‫ورودی ها و خروجی هایش و توضیح کوتاهی در مورد اینکه هر تابع دقیقا چه کاری انجام میدهد و در بازی چگونه‬
‫استفاده می شوند ‪ ،‬باید ذکر شوند‪ .‬همچنین توضیحی از الگوریتم مورد نظر خود نیز باید ارائه دهید‪.‬‬
‫موفق باشید‪...‬‬