PDA

View Full Version : معمای ساده کامپیوتری



mohammadkhan
پنج شنبه 01 آذر 1386, 18:49 عصر
بازم سلام. کماکان منتظر لطف جناب ادمین هستیم تا شاید حداقل یه زیرمجموعه درست کنه توی همین تاپیک تا ما فعالیتمون رو منسجمتر دنبال کنیم و معماها پخش و پلا نشن تو طول تاپیک. در ضمن یه مطلبو همین جا مشخص کنم که من اصلا این کارها رو برای گرفتن نمره از استاد نمیکنم. من دانشجوی سال سوم نرم افزارم و احتمالا همه میدونن نمره بابت حل مساله های اینچنینی تو دانشگاه نمیدن. نصف این مساله ها رو خودم هم بلد نیستم و از جوابهای شما میفهمم. این معماها فقط برای اینکه یخورده مغزمون رو به کار بندازیم و چیزهای جدید یاد بگیریم طرح میشن.

معمای امشب یخورده تخصصیه. با زیان سی نوشته شده و یه قطعه کد ساده است. برنامه زیر رو جوری تغییر بدین که 20 تا کاراکترِ دَش(-) چاپ کنه. اما فقط میتونین تغییر توش بدین . یه کاراکتر ازش کم کنین یا یکی بهش اضافه کنین یا یه کاراکترش رو عوض کنین.



;int i,n=20



(--for(i=0;i<n;i


;("-")printf

رضا عربلو
پنج شنبه 01 آذر 1386, 23:05 عصر
کدت را درست کن تا بشود خواند.

PC2st
جمعه 02 آذر 1386, 00:42 صبح
دقیقا متوجه نشدم، فقط یک کاراکتر یا میشه دو کاراکتر رو هم تغییر داد؟! اگر بشه، خب -- رو به ++ تغییر میدیم تا درست بشه.

mohammadkhan
جمعه 02 آذر 1386, 16:58 عصر
شرمنده
نمیدونم چرا کدها این شکلی در اومدن؟؟؟
جواب نبود؟؟؟

mohammadkhan
جمعه 02 آذر 1386, 16:59 عصر
جناب PC2st.ir عزیز. فقط باید یک کارکاتر رو دستکاری کنید
یا حذف یا اضافه و یا تغییر
در ضمن گفته شده که این مساله چند تا راه حل داره

daneshjo IT
جمعه 02 آذر 1386, 17:09 عصر
int i,n=20;
for(i=n;i>0;i--);
printf("-");

البته من صورت سوالتون رو دقیق متوجه نشدم!!
اگر امکان داره واضح تر بیان کنید!!

mohammadkhan
جمعه 02 آذر 1386, 18:37 عصر
سوال خیلی واضحه.
قطعه کد بالا رو تنها با تغییر دادن یک کاراکتر کاری کنید که برنامه به نحو احسن اجرا بشه
فقط یک کاراکتر. یعنی یا کم کردن کاراکتر یا اضافه کردن یک کاراکتر یا پاک کردن یک کاراکتر

PC2st
جمعه 02 آذر 1386, 18:44 عصر
یکی از راهها (جواب) مثل زیر میشه:


int i, n = 20;
for(i = 0; i < n; n--)
{
printf("-");
}


قسمت تغییر یافته رو پر رنگ کردم، سوال جالبی بود :-)

mohammadkhan
شنبه 03 آذر 1386, 00:02 صبح
جناب daneshjo IT کد رو اشتباه نوشتین
کد درست همونیه که من نوشتم
جواب PC2st.ir هم کاملا درست بود. ولی این فقط یه حالت بود
یه حالت دیگه هم داره
یعنی چند حالت دیگه
خوشحال میشم ادامه بدین ببینم بقیه راهها رو هم پیدا میکنین؟

sajjad951
شنبه 03 آذر 1386, 08:38 صبح
سلام مطمئن هستید کد درسته؟ فکر کنم 21 ی چاپ کنه

Exception
شنبه 03 آذر 1386, 10:05 صبح
اینم رو قبلیها

int i, n = 20;
for(i = 0; -i < n; i--)
{
printf("-");
}
int i, n = 20;
for(i = 0; i + n; i--)
{
printf("-");
}

daneshjo IT
شنبه 03 آذر 1386, 10:06 صبح
شرط حلقه که اصلا برقرار نیست(40<20 )پس هیچ وقت وارد حلقه نمی شود.
منظورم کد مربوط به whitehat است.

mohammadkhan
شنبه 03 آذر 1386, 11:44 صبح
نه
دقیقا 20 بار تکرار میشه
شرط حلقه کوچکتر است نه کوچکتر مساوی

whitehat
شنبه 03 آذر 1386, 12:05 عصر
@Exception: (http://barnamenevis.org/forum/member.php?u=44833)
دوست عزیز کد اول حلقه نامتناهی داره ،اما کد دوم راه حل جالبیه :)

mohammadkhan
شنبه 03 آذر 1386, 12:12 عصر
کد جناب whitehat اشتباست ولی کلک جالبی بود

کد جناب Exception بسیار حرفه ای و قشنگ بود اما متاسفانه کد دوم رو اشتباه نوشتن چون برنامه نمیتونه یکی متغیر از نوع int رو به bool تبدیل کنه و i+n اشتباس. برنامه شما در قسمت دوم حلقه هیچ شرطی نداره ؟؟؟؟!!!!!

mohammadkhan
شنبه 03 آذر 1386, 12:15 عصر
و یه درخواست. من از جناب Exception خواهش میکنم منطق کد اولشون رو توضیح بدن
چون اصلا این راه به ذهن من نرسید و الان هم که میبینم کد رو اصلا قانع نمیشم با اینکه توی برنامه کار داد و 20 کاراکتر چاپ کرد؟

whitehat
شنبه 03 آذر 1386, 12:15 عصر
کد جناب Exception بسیار حرفه ای و قشنگ بود اما متاسفانه کد دوم رو اشتباه نوشتن چون برنامه نمیتونه یکی متغیر از نوع int رو به bool تبدیل کنه و i+n اشتباس. برنامه شما در قسمت دوم حلقه هیچ شرطی نداره ؟؟؟؟!!!!!
کد کاملا درسته ،در ++C متغیر بولی نداریم هر عدد مثبت غیر صفر برابر True و عدد صفر برابر False است:)

FatBabe
شنبه 03 آذر 1386, 12:40 عصر
@Exception: (http://barnamenevis.org/forum/member.php?u=44833)
دوست عزیز کد اول حلقه نامتناهی داره ،اما کد دوم راه حل جالبیه :)

نه، کد اول هم درسته. چون i از 0 تا -19 کاهش پیدا میکنه. و در نتیجه -i از 0 تا 19 افزایش پیدا میکنه. وقتی i شد -20 -i میشه 20 و شرط حلقه رد میشه و تمام.

Exception
شنبه 03 آذر 1386, 14:14 عصر
خواستم توضیح بدم کدها رو که دیدم دوستان زحمت هردوشو کشیدن:

کد اول:
چون i از 0 تا -19 کاهش پیدا میکنه. و در نتیجه -i از 0 تا 19 افزایش پیدا میکنه. وقتی i شد -20 -i میشه 20 و شرط حلقه رد میشه و تمام.


کد دوم:
در ++C متغیر بولی نداریم هر عدد مثبت غیر صفر برابر True و عدد صفر برابر False است:)

MM_Mofidi
شنبه 03 آذر 1386, 15:37 عصر
قشنگ بود مخصوصا کد Exception

PC2st
شنبه 03 آذر 1386, 17:53 عصر
سلام مطمئن هستید کد درسته؟ فکر کنم 21 ی چاپ کنه
آره چون هروقت n برابر 0 بشه از حلقه بیرون میاد (n از خود 20 شروع میشه تا 1 ، که روی هم رفته میشه 20 بار).

golbafan
سه شنبه 01 شهریور 1390, 16:45 عصر
(--for(i=20;i<n;i