PDA

View Full Version : سوال: الگوریتم تشخیص صحت پرانتزگذاری



hercool
پنج شنبه 09 دی 1389, 08:15 صبح
سلام خدمت دوستان
در اینجا من کدی رو قرار میدم که در رابطه با الگوریتم تشخیص صحت پرانتزگذاری هست
اما فکر می کنم ایراد داره این کد رو میزارم و در جایی که فکر می کنم اشکال داره رنگیش می کنم



valid=true;
s=the empty stack;
while(we have not read the entire string)
{
read the next symbol of the string;
if((symb=="(" ) || (symb=="[" ) || (symb=="{" ))
push(s,symb);
if((symb==")" ) || (symb=="]" ) || (symb=="}" ) )
if(empty(s))
valid=false;

else
I=pop(s);
if(i is not the matching operator of symb)
valid=false;
if (! empty(s))
valid=false;
if(valid)
print the string is valid;
else print the string is invalid
}


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

در رابطه با خطوط قرمز
اینجا بیان کرده که اگر پشته ما خالی نبود از پشته یه عنصر بردار و بریز تو متغییر I حالا

بعدش اومده گفته اگر I عملگر نبود مقدار رو فالس کن اگر هم پشته خالی نبود باز متغییر valid رو فالس کن
اگر متغییر valid بود چاپ کن رشته معتبر است در غیر اینصورت رشته نامعتبر است

ممنون میشم راهنمایی کنید
مفهوم نیست

سعیدسعید
جمعه 10 دی 1389, 16:05 عصر
سلام دوست خوبم

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

اما در مورد قسمتهای قرمز:

وقتی که یک عنصر pop کرده و گذاشته داخل I اون عنصر عملگر نیست و منظورش همون علامت بالای پشته است که یکی از علائم ) یا ] یا } است. حالا در سطر پایینش گفته if not matching یعنی اگر چیزی رو که داری pop میکنی با چیزی که الان در ورودی می بینی همخوانی نداشته باشد انگاه false بکن. مثلا اگر شما از بالای پشته } رو pop کنید و در ورودی هم ( ببینید معنی این است که صحت نداره چون شما باید { رو ملاقات می کردید

در اون قسمتی که نوشته if(!empty( به این معنی است که وقتی که کلا رشته ورودی تمام شد پشته هم باید خالی باشد اگر رشته ورودی تمام شده و پشته هنوز خالی نیست به این معنی است که چیزهایی در پشته قبلا push شده که معادل نداره پس باز هم صحت نداره و valid باید false بشه.


در نهایت اگر valid مقدار true داشته باشد پیغام مناسب رو چاپ میکنه


باز اگز توضیح بیشتری خواستی حتما بهم خبر بده :لبخندساده: