PDA

View Full Version : سوال در مورد sharecode.ir



sa1378
شنبه 25 مرداد 1393, 07:53 صبح
سلام
این سایت چجوری کد رو بررسی میکنه؟
برای سوال اولش گفته برنامه ای بنویسین که دو تا عدد بگیره جمعشون رو خروجی بده
من اینو نوشتم میگه Wrong Answer
#include <iostream>
using namespace std;
int main() {
int a,b;
cin>>a>>b;
cout<<a+b;
return 0;
}

مسعود اقدسی فام
شنبه 25 مرداد 1393, 09:15 صبح
Input

The input will consist of a series of pairs of integers a and b,separated by a space, one pair of integers per line.


Output

For each pair of input integers a and b you should output the sum of a and b in one line,and with one line of output for each line in input.





نوشته به ازای هر جفت ورودی (یعنی کلی ورودی داره) مجموعشون رو در یه خط (یعنی هر جواب یه خط جدا) چاپ کنه.

sa1378
شنبه 25 مرداد 1393, 09:31 صبح
Input

The input will consist of a series of pairs of integers a and b,separated by a space, one pair of integers per line.


Output

For each pair of input integers a and b you should output the sum of a and b in one line,and with one line of output for each line in input.





نوشته به ازای هر جفت ورودی (یعنی کلی ورودی داره) مجموعشون رو در یه خط (یعنی هر جواب یه خط جدا) چاپ کنه.
خب از کجا بدونم چند جفت ورودی قراره بده؟

مسعود اقدسی فام
شنبه 25 مرداد 1393, 10:54 صبح
مثلا اینطوری:

#include <iostream>
using namespace std;
int main() {
int a,b;
while( true )
{
cin>>a>>b;
if( cin.fail() )
{
break;
}
cout<<a+b << endl;
}
return 0;
}

ورودی مساله از طریق فایل برای برنامه ارسال می‌شه. پس اگه خوندن fail‌ بشه یعنی به انتهای فایل (و انتهای ورودی‌ها) رسیدیم.

ProgramYL
شنبه 25 مرداد 1393, 11:05 صبح
این کد رو به این صورت نوشتم، اما نمی دونم چطور باید بنویسم که اگر هر ورودی برابر با 1- باشه برنامه رو قطع کنم

#include <iostream>
using namespace std;

int main()
{
int c=1,a=0,b=0,a1,b1;
while (c==1)
{
cin >> a1 >> b1;
if (a1==-1 || b==-1)
break;
a=a+a1;
b=b+b1;
};
cout << a+b;
}

نمی دونم قبول کنه یا نه، دو بار اول wrong ansewer داد، 1 بار خطای کامپایل برای قبول نکردن eof و در آخر به پایان رسیدن محدودیت زمانی!
مثل اینکه باید cout << a+b رو در داخل حلقه میذاشتم، که می شد شبیه کد آقا مسعود؛ در هر صورت اجازه درج کد به من نداد.

a.r.khoshghalb
شنبه 25 مرداد 1393, 13:22 عصر
آقای ProgramYL کد شما که اصلا کاری که سوال می خواد رو نمی کنه.

آقای sa1378 شما هم می تونی کدتو اینطوری بزنی :

#include <iostream>
using namespace std;
int main() {
int a,b;
while (cin >> a >> b)
cout<<a+b;
return 0;
}

مسعود اقدسی فام
شنبه 25 مرداد 1393, 13:24 عصر
این کد رو به این صورت نوشتم، اما نمی دونم چطور باید بنویسم که اگر هر ورودی برابر با 1- باشه برنامه رو قطع کنم

#include <iostream>
using namespace std;

int main()
{
int c=1,a=0,b=0,a1,b1;
while (c==1)
{
cin >> a1 >> b1;
if (a1==-1 || b==-1)
break;
a=a+a1;
b=b+b1;
};
cout << a+b;
}

نمی دونم قبول کنه یا نه، دو بار اول wrong ansewer داد، 1 بار خطای کامپایل برای قبول نکردن eof و در آخر به پایان رسیدن محدودیت زمانی!
مثل اینکه باید cout << a+b رو در داخل حلقه میذاشتم، که می شد شبیه کد آقا مسعود؛ در هر صورت اجازه درج کد به من نداد.

صورت سوال رو با دقت بخونید. اگه ورودی برنامه


1 2
4 7
1 1


باشه، باید خروجی



3
11
2


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

ProgramYL
شنبه 25 مرداد 1393, 16:07 عصر
a.r.khoshghalb (http://barnamenevis.org/member.php?277700-a-r-khoshghalb) - آقای ProgramYL کد شما که اصلا کاری که سوال می خواد رو نمی کنه.



مسعود اقدسی فام (http://barnamenevis.org/member.php?87209-%D9%85%D8%B3%D8%B9%D9%88%D8%AF-%D8%A7%D9%82%D8%AF%D8%B3%DB%8C-%D9%81%D8%A7%D9%85) - کد شما مجموع کل اعداد ستون اول و دوم رو به عنوان خروجی چاپ می‌کنه.

متوجه شدم (چون بعدش دقت کردم one line of output for each line in input...) به همین دلیل اضافه کردم:

مثل اینکه باید cout << a+b رو در داخل حلقه میذاشتم، که می شد شبیه کد آقا مسعود؛ در هر صورت اجازه درج کد به من نداد.
یعنی باید کدم رو هم تغییر میدادم و جمع نمی کردم تا بشه مانند کد شما. تنبلی کردم کد رو تغییر ندادم!

اما اشتباه من این بود که شرط پایان حلقه گذاشتم و در سوال به این مورد اشاره نشده بود.

#include <iostream>
using namespace std;

int main()
{
int a,b,c=1;
while (c==1)
{
cin >> a >> b;
cout << a+b << endl;
};
}


من هنوز آشنایی با بعضی از دستوراتی که شما نوشتید ندارم یا تجربه ام کمه، مانند قرار دادن cin و true در شرط while.


این کد رو دوباره در sharecode درج کردم، پیغام Output Limit Exceeded میده، چرا؟

sa1378
شنبه 25 مرداد 1393, 16:27 عصر
متوجه شدم (چون بعدش دقت کردم one line of output for each line in input...) به همین دلیل اضافه کردم:

یعنی باید کدم رو هم تغییر میدادم و جمع نمی کردم تا بشه مانند کد شما. تنبلی کردم کد رو تغییر ندادم!

اما اشتباه من این بود که شرط پایان حلقه گذاشتم و در سوال به این مورد اشاره نشده بود.

#include <iostream>
using namespace std;

int main()
{
int a,b,c=1;
while (c==1)
{
cin >> a >> b;
cout << a+b << endl;
};
}


من هنوز آشنایی با بعضی از دستوراتی که شما نوشتید ندارم یا تجربه ام کمه، مانند قرار دادن cin و true در شرط while.


این کد رو دوباره در sharecode درج کردم، پیغام Output Limit Exceeded میده، چرا؟

True که اونجا هست یه شرط همیشه درسته و تا وقتی که به break برنخوره ادامه داره
Con هم توی حلقه یعنی تا وقتی که خطایی در گرفتن پیش نیاد

ممنون از دوستان که کمک کردند

ProgramYL
شنبه 25 مرداد 1393, 16:31 عصر
دلیل Output Limit Exceeded در sharecode نمی دونید چیه؟

sa1378
شنبه 25 مرداد 1393, 16:52 عصر
دلیل Output Limit Exceeded در sharecode نمی دونید چیه؟

یه سوال..
کد شما چجوری قراره تموم بشه؟؟
این تا بینهایت ورودی میگیره
پس وقتی سایت یه مقداری ورودی رو وارد میکنه منتظر خروجی شماست ولی چیزی نمیبینه
همون کد آقای اقدسی فام یا خوش قلب رو باید بنویسین

ProgramYL
شنبه 25 مرداد 1393, 16:58 عصر
یه سوال..
کد شما چجوری قراره تموم بشه؟؟
این تا بینهایت ورودی میگیره
پس وقتی سایت یه مقداری ورودی رو وارد میکنه منتظر خروجی شماست ولی چیزی نمیبینه
همون کد آقای اقدسی فام یا خوش قلب رو باید بنویسین

کد زیر رو وارد می کنم:

#include <iostream>
using namespace std;

int main()
{
int a,b,c=1;
while (c==1)
{
cin >> a >> b;
cout << a+b << endl;
};
}

ایراد این کد چیه؟
در قسمت گفتگوی سایت نمونه درست کد رو یه کاربری قرار داده به صورت زیر:

#include <iostream>
using namespace std;
int main() {
int a, b;
while(cin>>a>>b)
cout<< a+b <<endl;
return 0;
}




تفاوتی داره با کد من؟

sa1378
شنبه 25 مرداد 1393, 17:01 عصر
کد زیر رو وارد می کنم:

#include <iostream>
using namespace std;

int main()
{
int a,b,c=1;
while (c==1)
{
cin >> a >> b;
cout << a+b << endl;
};
}

ایراد این کد چیه؟

توی این کد
1- C همیشه مساوی با 1 هست(پس باید توی حلقه دستوری باشه که حلقه رو متوقف کنه . واگرنه تا بینهایت ادامه پیدا میکنه)
2- همچین دستوری توی حلقه وجود نداره

ProgramYL
شنبه 25 مرداد 1393, 17:04 عصر
در قسمت گفتگوی سایت نمونه درست کد رو یه کاربری قرار داده به صورت زیر:

#include <iostream>
using namespace std;
int main() {
int a, b;
while(cin>>a>>b)
cout<< a+b <<endl;
return 0;
}


تفاوتی داره با کد من؟

مسعود اقدسی فام
شنبه 25 مرداد 1393, 17:32 عصر
در قسمت گفتگوی سایت نمونه درست کد رو یه کاربری قرار داده به صورت زیر:

#include <iostream>
using namespace std;
int main() {
int a, b;
while(cin>>a>>b)
cout<< a+b <<endl;
return 0;
}


تفاوتی داره با کد من؟

عبارت cin >> a >> b اگه به انتهای ورودی‌ها رسیده باشیم (یعنی نتونه چیز جدیدی بخونه) مقدار صفر بر می‌گردونه. مقدار صفر هم در زبان ++C ارزش نادرست بودن داره. پس حلقه ادامه پیدا نمی‌کنه و برنامه تموم می‌شه. اما شما شرط c == 1 رو بررسی می‌کنید که بر اساس مقداردهی c = 1 همیشه درسته. پس حلقه هیچ وقت تموم نمی‌شه.

خطاهایی مثل Output Limit Exceeded یا Time Limit Exceeded یا Memory Limit Exceeded به این معنی هستن که از منابع زمانی یا حافظه‌ای محدود برنامه بیش از حد مجاز استفاده کردید. مثلا اینجا حلقه‌ی بینهایت دارید که زمانش بیش از زمان قابل قبول برای حل مساله هست.