PDA

View Full Version : سوال: توضیح درباره قطعه کد ، درخواست



mehran20
چهارشنبه 02 دی 1388, 12:44 عصر
ببخشید می شه این قسمت کد رو توضیح بدید که چطوری عمل می کنه و منظورش چیه

while (!Isunder())
l
من فقط با این شرط مشکل دارم
یا بازم همین شرط که برای if هم گذاشته شده در بک قطعه برنامه

تابعی هم که فراخوانی می شه اینه

//// underflow

int Isunder()
{

if (top == -1)
return 1;
else
return 0;

}
/////////////////////////////

ممنون می شم راهنمایی بفرماید

Hamid.Kad
چهارشنبه 02 دی 1388, 14:04 عصر
یه کم خوب توضیح ندادی مهندس !
این یه تابعه که اگه top مساوی -1 بشه 1 برمیگردونه در غیر اینصورت 0. تا اینجاش که مطمئنم مشکلی نداشتی.
توی حلقه while هم که میاد اون رو احضار میکنه. یعنی حلقه while معادل این دستوره:

while (top!=(-1))
اینو هم که میدونم مشکل نداشتی.
پس لابد مشکل منم ! :چشمک:

mortezamsp
چهارشنبه 02 دی 1388, 14:14 عصر
به احتمال زیاد مربوط به پشته هست ، در پشته میک متغیر top داریم که در آغاز تعریف پشته ، مقدار -1 دارد، و با هربار push یک واحد اظافه و با هر بارpop یک بار کاهش میابد.وقتی مقدار آن -1 باشد یعنی پشته خالی است .
دراینصورت ،این شرط هم میخواهد مشخص کند که آیا پشته خالی است یا نه.

mehran20
چهارشنبه 02 دی 1388, 15:04 عصر
درسته حق با شماست و برنامه ی کار با پشتست ، تبدیل infix به postfix

پس با توضیحاتی که شما دوستان دادید دستور توی حلقه while همونی هست که دوستمون توی پست دوم گفتن دیگه ، درسته؟؟
یعنی

این شرط while (!Isunder())
lبا این شرط فرقی نداره و همینو می گه while (top!=(-1))
l
درست متوجه شدم؟؟؟

اون چیزی که از تابع بر می گرده یا 1 هست یا 0
ابا ابن عددی که بر می گرده با top اصلی که همون -1 هست مقایسه می شه؟

اگه اینجوری چرا دوستموت در پست دوم درون پرانتز -1 رو نوشتن ف چون تابع امکان برگشت همچین عددی رو نداره؟

البته می دونم تمام مشکلات از گیرایی خودمه ، ههههههه

mehran20
پنج شنبه 03 دی 1388, 08:00 صبح
این کد رو شما نوشتی دوست من و توی برنامه اصلی وجود نداره ، تنها خواهش من فقط دونستن شرط درون while هست

مگه نمی گیم که تابع 0 و 1 رو بر می گردونه؟


int Isunder()
{

if (top == -1)
return 1;
else
return 0;

}
پس چطوری امکانش هست چیزی که شما می گین؟

اگه شماره ای هست ، تماس بگیرم فک کنم بهتر باشه ، تو پیام خصوصی اگه لطف کنید ممنون می شم

mehran20
پنج شنبه 03 دی 1388, 08:08 صبح
این جواب رو توی فروم ایران ویچ بهم دادن که فک می کنم کامل تر از این نمشه گفت

س . دستور while در چه شرایطی به کار خودش ادامه میده ؟؟
ج . در شرایطی که شرط داخل پرانتز هاش ، مقدار درستی رو برگردونند ،

یعنی مقدار true ؛ توجه : مقدار 1 هم true محاسبه میشه ،
حالا اینجا یکم تودرتو هستش ،

س . تو این خط :
کد:
while (!Isunder())
اول چی خونده میشه ؟؟
ج . ()Isunder
-------------
س . ()Isunder چی بر میگردونه ؟؟
ج . یا 1 ؛ یا 0
------------
فرض که 0 بر میگردونه
پس عبارتمون هست :
کد:
while(! 0)
------------
س . این علامت (!) یعنی چی ؟؟
ج . یعنی مخالف هرچی که بعدش میاد
------------
س . با توجه به اینکه 0 ، false ارزیابی میشه ، مخالفش چی میشه ؟؟
ج . ture
یعنی :
کد:
while( ! false)
که میشه نوست :
کد:
while(true)
------------
پس شرط حلقه درسته ، و حلقه آنقدر تکرار میشه ، تا شرطش غلط بشه .
------------
حالا فرض که 1 برمیگردونه ،
پس عبارت ما میشه :
کد:
while(! 1)
------------
س . این علامت (!) یعنی چی ؟؟
ج . یعنی مخالف هرچی که بعدش میاد
-----------
س . با توجه به اینکه 1 ، ture ازیابی میشه ، مخالفش چی مشه ؟؟ یعنی 1! ??
ج . یعنی غلط ؛ یا بعبارتی false .
----------
پس عبارت ما میشه :
کد:
while(! 1)
یا :
کد:
while( ! true)
یا :
کد:
while(false)
l
در نتیجه اینجا دیگه حلقه ادامه پیدا نمیکنه.