چرا وقتی یه رشته مثلن12*+رو توی یه استک میریزیم بد میخوایم از استک پاپ کنیم به جای هرکدوم از اینا کد اسکیشونو میده
چرا وقتی یه رشته مثلن12*+رو توی یه استک میریزیم بد میخوایم از استک پاپ کنیم به جای هرکدوم از اینا کد اسکیشونو میده
فکر کنم شما باید از Generic Stack استفاده کنید. با این حال اگه کدتون را ببینم می توانم کمکتون کنم.
نخوندیم.تو یه برنامه ماشین حساب این طوری استفاده شده که:
user یه عبارت رو وارد میکنه اونو به postfixتبدیل می کنم مثلن* 23 بد اونو به تابعcalculate میدم و تو این تابع اول 2و3
رو تو استک پوش میکنه بد که میخاد پاپ کنه تا ضرب کنه کد اسکیشونو بر می گردونه!!
مجبور شدم از switch استفاده کنم:
کد شما را دیدم دوست عزیز. stack شما مقادیر را به صورت double ذخیره می کند و پس می دهد . ولی شما مقادیری که به stack می دهید از نوع char هستند. پس اگر کلاس stack را به شکل زیر تغییر دهید مشکل حل می شود.
به نظرم بهتره z , top به صورت private تعریف کنید.
class stack
{
public int top;
public char[] z;
public stack(int n)
{
z = new char[n];
top = 0;
}
public void Push(char x)
{
z[top] = x;
top++;
}
public char Pop()
{
top--;
return z[top];
}
}
و اما اینکه شما با C# کار کردید یا با C++ . چون سوال را در قسمت C# مطرح کردید ولی کد پسوند فایل شما cpp بود !
الیته یک نکته دیگه هم که باید گوش زد بشم اینه که در دات نت کلاسی به نام Stack وجود دارد که عملیات Push و Pop را به راحتی برای شما فراهم می کند و نیازی به نوشتن کلاس جدید نبود.
Eival
مرسی
مشکل قبلی حل شد.
ولی تو این برنامه قرار روی اون چه که پاپ می شه عملیات ریاضی انجاو شه روی کاراکتر که نمی شه
اینو چی کار کنم؟
اون چیزی که pop میشه یه char است. پس یا یک علامت است یا یک عدد . شما در ابتدا باید ببینید که این کاراکتر قابل تبدیل به عدد است یا نه برای این کار می توان از روش زیر استفاده کرد.
char c = myStack.Pop();
int number;
if (char.TryPars(c, out number))
{
//operand
}
else
{
//operator
}
حالا اگر این یک عدد باشد مقدار آن در متغیر number قرار می گیرد.
این کد را از حفظ نوشتم امیدوارم که مشکل نداشته باشه!
بازم
Eival
ولی یه کم مشکل داشت خودم حلش می کنم.
من از استک فقط pushو pop او می شناسم کسی می تونه یه Ebook معرفی کنه؟؟
استک دقیقا همین است که شما می شناسید. منتهی کاربر های بسیار است . که مهم ترین کاربرد آن فراخوانی توابع تو در تو در کامپیوتر است . (Call Stack)
E
حالا اگه یه Ebook بخام که توش C# او یاد بگیرم چی؟؟
من از کجا باید بدونم یه چیزی مث char.TryParse برای تشخیص operator و operand هست و ... ؟؟؟؟