شرق کشور، دانشگاه حکیم سبزواری

نحوه گرفتن ورودی و خروجی

شما میتوانید نسخه pdf این مقاله را از این لینک + دانلود کنید.

 

هر برنامه‌ باید ورودی سوال را از «ورودی استاندارد» (stdin) بخواند و در «خروجی استاندارد» (stdout) چاپ کند. برای دانستن این‌که هر ورودی که برنامه‌ از «ورودی استاندارد» می‌خواند، نمایان‌گر کدام یک از متغیر‌های سوال است باید به توضیحاتی که در قسمت ورودی هر سوال آورده می‌شود دقت شود. هم‌چنین برای نحوه‌ی خروجی دادن توضیحاتی در قسمت خروجی هر سوال آمده‌است. یعنی شما برای این‌که برنامه خودتان را تست کنید می‌توانید از این ورودی و خروجی‌های نمونه استفاده کنید.

توجه کنید که در صورتی که از ورودی استاندارد نخوانید و یا در خروجی استاندارد جواب را چاپ نکنید نمره صفر خواهید گرفت.

برای این‌که این موضوع کمی روشن‌تر شود، در اینجا دو مثال آورده شده است:

 

جمع دو عدد

در ورودی دو عدد داده می‌شود و از برنامه شما باید جمع این دو عدد را چاپ کند. دراین گونه سوالات نحوه‌ی آمدن اعداد در ورودی این گونه است که دو عدد ورودی با یک فاصله (space) در یک خط می‌آیند. خروجی نیز باید در یک خط چاپ شود.

برای مثال اگر ورودی اعداد ۳ و ۵ باشد، خروجی ۸ می‌شود:

ورودی که به ترمینال داده خواهد شد:

Input

3 5

 

خروجی که ترمینال باید چاپ کند:

Output

8

 

برای درک بهتر موضوع می‌توان کد‌های زیر را مشاهده کرد که هر کدام جواب این سوال در یک زبان‌ برنامه‌نویسی‌ است:

c++

#include <iostream>

using namespace std;

 

int main()

{

    int a, b;

    cin >> a >> b;

    cout << a + b << endl;

    return 0;

}

 

 

python

s = input()

a, b = s.split(" ")

print(int(a) + int(b))

 

 

جمع آرایه

حالا به جای آن که فقط دو عدد به عنوان ورودی به برنامه بدهد تعداد اعداد ثابت نیست، اما تعداد این اعداد در ورودی آمده است. در این گونه سوالات ورودی می‌تواند به این صورت باشد که ابتدا در خط اول ورودی یک عدد می‌آید که نمایانگر تعداد اعدادی است که قرار است با هم جمع شوند. سپس در خط دوم به همان تعدادی که در خط اول گفته شد عدد می‌آید که این اعداد با فاصله از هم جدا شده‌اند. خروجی هم مانند سوال قبلی به این صورت است که باید در یک خط، جمع اعداد داده شده چاپ شود.

برای مثال ورودی اعداد ۳ و ۵ و ۷ و ۹ باشد و در نتیجه خروجی ۲۴ می‌شود:

 

ورودی که به ترمینال داده خواهد شد:

Input

4

9 7 5 3

 

خروجی که ترمینال باید چاپ کند:

Output

24

 

برای درک بهتر موضوع می‌توانید کد‌های زیر را ببینید که هر کدام جواب این سوال در یک زبان‌ برنامه‌نویسی‌ است:

c++

#include <iostream>

using namespace std;

 

int main()

{

    int ans = 0, n;

    cin >> n;

    for(int i = 0; i < n; i++)

    {

        int a;

        cin >> a;

        ans += a;

    }

    cout << ans << endl;

    return 0;

}

 

 

python

ans = 0

n = int(input())

str = input().split(" ")

for i in range(n) :

    ans = ans + int(str[i])

print(ans)

 

 

 

رحمت انصاری

خطاهای کد در سیستم داوری

خطاهای زیر باعث نگرفتن امتیاز توسط کد شما خواهد شد:

خطای کامپایل (Compilation Error)

هرگونه خطایی داخل فرسته وجود داشته باشد که کامپایلر به آن بر بخورد و عملیات کامپایل نتواند به درستی انجام شود (مثلا Syntax Error) خطای کامپایل به عنوان نتیجه اعلام می‌شود.

خطای نحوی (Syntax Error)

این خطا زمانی رخ می‌دهد که برنامه‌ای که ارسال کردید نتواند اجرا شود و با نحوه‌ی دستورات زبان انتخابی (Syntax) هم‌خوانی نداشته باشد. (برای مثال زمانی که در پایتون در محدوده‌های تعریف شده به درستی تب (Tab) نزده شده باشد.)

خطای تجاوز از محدودیت زمان (Time Limit Exceeded)

هر سوال برنامه‌نویسی یک محدودیت زمانی دارد که فرسته باید هر تست را در زمان کمتر از آن اجرا کند و اگر از این زمان بیشتر طول بکشد، برنامه توسط سیستم داوری متوقف شده و این خطا برای این تست نشان داده می‌شود.

خطای تجاوز از محدودیت حافظه (Memory Limit Exceeded)

هر سوال مانند محدودیت زمان، محدودیت حافظه نیز دارد. یعنی فرسته هنگام اجرا برای هر تست، نباید در هیچ زمانی حافظه‌ای بیش از این مقدار استفاده کند و گرنه برنامه توسط سیستم داوری متوقف و نتیجه‌ی تست این خطا می‌شود.

خطای زمان اجرا (Runtime Error یا Killed by a signal)

این خطا هنگام اجرای برنامه رخ می‌دهد و باعث می‌شود که برنامه نتواند به کار خود ادامه دهد. این خطا (Exception) به دو دلیل می‌تواند رخ دهد:

  • سیستم عامل جلوی ادامه‌ی اجرای برنامه را می‌گیرد. این می‌تواند به‌دلیل درخواست دسترسی به فضاها و یا آدرس‌های غیرمجاز باشد.

  • خود برنامه نمی‌تواند به اجرا ادامه دهد. این می‌تواند بدلیل وجود دستورهایی در برنامه باشد که اجرایشان بی‌معنی است؛ مثلا استفاده از حاصل تقسیم یک عدد بر ۰.

البته گاهی وقت‌ها هنگام استفاده از مقدار زیادی حافظه به‌جای خطای تجاوز از محدودیت حافظه، خطای زمان اجرا نشان داده می‌شود.

خطای پاسخ غلط (Wrong Answer)

این خطا هنگامی داده می‌شود که پاسخ برنامه شما با پاسخ مدنظر ما متفاوت باشد. توجه کنید که در این حالت برنامه شما سه خطای بالا را نداده است و با موفقیت خروجی را چاپ کرده است اما جواب چاپ شده غلط است.

هم‌چنین در مورد همه خطاهای بالا با کلیک کردن روی نمره می‌توانید جزییات بیشتر در رابطه خطا و نحوه عملکرد برنامه روی تست‌های مختلف را ببینید.

رحمت انصاری

اطلاعیه تیم داوری

فایل سوالات هنگام شروع مسابقه در وبلاگ مسابقه در دسترس شرکت‌کنندگان و قابل دانلود خواهد بود. شرکت‌کنندگان باید جواب سوالات را با فرمت مشخص شده به ایمیل مندرج در فایل سوالات ارسال که راه ارتباطی با تیم داوری خواهد بود بفرستند. مدت زمان حل سوالات با توجه به زمان دریافت ایمیل و شروع مسابقه ثبت خواهد شد. با توجه به نبود سیستم real time بدیهی است که اولین جواب درست به عنوان جواب ثبت شده و تمامی جواب‌هایی که قبل از آن دریافت گردند ۲۰ دقیقه زمان به مجموع زمان حل سوالات اضافه می‌کنند.

نحوه دقیق داوری طبق مسابقات icpc خواهد بود که در فایل قوانین درج شده است. تیمی که بیشترین حل را داشته باشد برنده خواهد بود. اگر چندین تیم تعداد سوالات برابری را حل کرده بودند رتبه آن‌ها از طریق مجموع زمان حل سوالات تعیین خواهد شد.

در زبان پایتون از کتابخانه‌های استاندارد مانند json و math می‌توانید استفاده کنید اما از دیگر کتابخانه‌ها مانند pandas نمی‌توانید استفاده کنید. همچنین در زبان c++ نمی‌توانید از کتابخانه conio.h استفاده کنید. تیم داوری هیچ مسئولیتی در قبال زمان اجرای برنامه شما ندارد و اگر از محدودیت زمانی مشخص شده فراتر رود، حتی اگر به جواب درست برسد به عنوان پاسخ غلط در نظر گرفته می‌شود.

 

با تشکر

تیم داوری مسابقه برنامه نویسی

دانشگاه حکیم سبزواری

 

رحمت انصاری

اطلاعیه تیم اجرایی

با توجه به تصمیم تیم اجرایی مسابقه، مسابقه مقدماتی برگزار نمیگردد و تمامی تیم‌های ثبت نام شده موظف هستند در تاریخ پنجشنبه ۱۴ دی ۱۴۰۲ ساعت ۸:۳۰ صبح در مرکز کارآفرینی و نوآوری دانشگاه حکیم سبزواری حضور داشته باشند. حضور در این زمان به منظور استقرار تیم هاست و مسابقه بدون هیچگونه تاخیری راس ساعت ۹ صبح برگزار خواهد شد. در صورت تاخیر تخلف در نظر گرفته می‌شود و حضور تیم در مسابقه منوط به تصمیم تیم اجرایی خواهد بود.

تمامی تیم‌ها قبل از مسابقه یک لیبل دریافت خواهند کرد. این لیبل یک عدد بین ۰۱ تا ۹۹ خواهد بود. این لیبل در فرمت کدهای ارسالی موثر خواهد بود. در هنگام مسابقه هرگونه تغییری در ترکیب تیم‌ها غیرمجاز است و در صورت گرفتن هرگونه ارتباط بین دو تیم هر دو تیم متخلف محسوب شده و از مسابقه حذف خواهند شد.

تمامی تیم‌ها موظف‌اند آخرین نسخه از فایل قوانین مسابقه را مطالعه کنند. همچنین برای شرکت‌کنندگان کم تجربه توصیه میگردد دیگر مقالات مربوط به نحوه ارسال صحیح کد و ورودی و خروجی استاندارد را هم مطالعه کنند. تمامی فایل‌ها از طریق وبلاگ مسابقه قابل دسترسی اند. جواب‌هایی که فرمت استاندارد را رعایت نکرده باشند در فرایند داوری و امتیازدهی وارد نخواند شد.

 

با تشکر

تیم اجرایی مسابقه برنامه نویسی

دانشگاه حکیم سبزواری

 

رحمت انصاری

نمونه مسابقه

تیم ما سعی کرده تا هر چه بیشتر سوالات نزدیک به سوالات استاندارد icpc باشند. با این وجود ترجیها سوالات را به زبان فارسی ایجاد کردیم تا تنها دانش الگوریتمی شرکت کنندگان تعیین کننده جایگاه آنان در مسابقه باشد و نداشتن سطح خوبی از زبان انگلیسی شرایط ناعادلانه‌ای را به وجود نیاورد.

 

شما میتوانید از این لینک + سوالات مسابقه بهار سال ‍۱۴۰۱ را که از طرف انجمن مهندسی کامپیوتر و مرکز کارآفرینی و نوآوری دانشگاه برگزار شد دانلود کنید و به حل آن بپردازید. همچنین من حل سوالات را در این لینک + قرار دادم.

 

در لیست زیر هم سوالات ۴ سال از مسابقات رسمی icpc غرب آسیا که در دانشگاه صنعتی شریف برگزار شد را قرار دادیم:

 

همچنین پیشنهاد من به شما حل سوالات مسابقه الگوریتمی پردیس کد است. این مسابقه به زبان فارسی است و شما می‌توانید جواب‌های خود را در لحظه در سایت کوئرا تست کنید. برای حل سوالات به ترتیب به سختی (و ترتیب خود مسابقه) به ترتیب پایین حل کنید:

رحمت انصاری