PDA

View Full Version : سوال: تشخیص تعداد پرانتزهای باز و بسته



parva-88
پنج شنبه 02 دی 1389, 13:45 عصر
یه برنامه نوشتم گه بوسیله stack میاد و متوازن بودن پارانتز ها رو مشخص میکنه و جوا ب هم میده ولی برای عبارت هایی که پارانتز بسته شون بیشتره جواب نمیدن!!!!علت چیه؟


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Specialized;
using System.Collections;
namespace paranthesis
{
public class Program
{
static void Main(string[] args)
{
string sentence;
Console.WriteLine("enter a sentence:");
sentence = Console.ReadLine();
equal(sentence);
Console.ReadKey();
}
///////////////////////////////////////////////////////////////////////////
static public void equal(string s)
{
Stack stk1 = new Stack();
Stack stk2 = new Stack();

string symbol;
for (int i = 0; i < s.Length; i++)
{
symbol = s.Substring(i, 1);
if (!np(symbol))
{
stk2.Push(symbol);
}
if (np(symbol))
{
if (symbol == "(")
stk1.Push("(");
if (stk1.Count != 0)
{
if (symbol == ")")
stk1.Pop();
}


}

}//end of if


if(stk1.Count==0)
Console.WriteLine("eq");
if(stk1.Count!=0)
Console.WriteLine("not equ");
}//end of method equal
///////////////////////////////////////////////////////////////////////////
static public bool np(string n)
{
if (n == ")")
return true;
if (n == "(")
return true;
else
return false;
}//end of np method

taghi.km
پنج شنبه 02 دی 1389, 14:37 عصر
شما روال کارت اشتباه هست موقع برخورد با پرانتز بسته باید استک رو چک کنی اگه پرانتز باز بود پاپ کنی در غیر این صورت با خطا مواجه شدی

parva-88
پنج شنبه 02 دی 1389, 14:50 عصر
متوجه نمیشم؟خب همین کارو کردو بازو گذاشتم تو استک وقتی که به پارانتز بسته میرسم یکی از استک پاپ میکنم خب تا اینکه استک خالی شه!!این چرا اشتباس؟

taghi.km
پنج شنبه 02 دی 1389, 18:40 عصر
وقتی تعداد پرانتز های بسته بیشتر باشه تو این شرط

if (stk1.Count != 0)

پرانتز های اضافه وارد نمیشن شما باید یه شرط بذاری اگه پرانتز بسته بود حتما از استک یه پرانتز باز بکشی بیرون در غیر اینصورت پیغام خطا رو نشون بدی

parva-88
پنج شنبه 02 دی 1389, 18:47 عصر
خب مسله همونه وقتی تعداد پارانتزهای سمت چپ بیشتره دیگه پارانتزه بازی تو اسنک وجود نداره من نمیدونم چطور بیاد بگم که وقتی که استک خالیه ولی باز هم پارانتز بسته دارم باز هم پارانتز ها برابر نیستن!!شما میدونین؟

taghi.km
جمعه 03 دی 1389, 13:10 عصر
کافی یه شرط اضافه کنی در صورتی که symbole اگه مساوی پرانتز بسته بود و استک خالی بود پیغام خطا بدهیه چیزی شبیه این
if (symbol == ")" && stk1.Count == 0)

tooraj_azizi_1035
جمعه 03 دی 1389, 17:00 عصر
سلام،
وقتی Stack1.Count با ورود یک پرانتز باز ++ میشه باید با ورود پرانتز بسته -- بشه. در نهایت اگه Stack1.Count=0 بشه عبارت متوازن است در غیر این صورت نامتوازن.
شما بعد از Push عمل ++Stack1.Count رو انجام نمی دی.