PDA

View Full Version : stack (برگرداندن کد اسکی به جای کاراکتر)



ف تیموری
جمعه 09 مرداد 1388, 00:36 صبح
چرا وقتی یه رشته مثلن12*+رو توی یه استک میریزیم بد میخوایم از استک پاپ کنیم به جای هرکدوم از اینا کد اسکیشونو میده:عصبانی++::عصبانی++::عصبا ی++::عصبانی++::عصبانی++:

samirdev
جمعه 09 مرداد 1388, 10:45 صبح
فکر کنم شما باید از Generic Stack استفاده کنید. با این حال اگه کدتون را ببینم می توانم کمکتون کنم.

ف تیموری
جمعه 09 مرداد 1388, 15:00 عصر
نخوندیم.تو یه برنامه ماشین حساب این طوری استفاده شده که:
user یه عبارت رو وارد میکنه اونو به postfixتبدیل می کنم مثلن* 23 بد اونو به تابعcalculate میدم و تو این تابع اول 2و3
رو تو استک پوش میکنه بد که میخاد پاپ کنه تا ضرب کنه کد اسکیشونو بر می گردونه!!
مجبور شدم از switch استفاده کنم:

samirdev
جمعه 09 مرداد 1388, 15:26 عصر
کد شما را دیدم دوست عزیز. 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 را به راحتی برای شما فراهم می کند و نیازی به نوشتن کلاس جدید نبود.

ف تیموری
جمعه 09 مرداد 1388, 23:38 عصر
Eival
مرسی
مشکل قبلی حل شد.
ولی تو این برنامه قرار روی اون چه که پاپ می شه عملیات ریاضی انجاو شه روی کاراکتر که نمی شه
اینو چی کار کنم؟

samirdev
شنبه 10 مرداد 1388, 08:55 صبح
اون چیزی که pop میشه یه char است. پس یا یک علامت است یا یک عدد . شما در ابتدا باید ببینید که این کاراکتر قابل تبدیل به عدد است یا نه برای این کار می توان از روش زیر استفاده کرد.


char c = myStack.Pop();
int number;
if (char.TryPars(c, out number))
{
//operand
}
else
{
//operator
}


حالا اگر این یک عدد باشد مقدار آن در متغیر number قرار می گیرد.
این کد را از حفظ نوشتم امیدوارم که مشکل نداشته باشه!

ف تیموری
شنبه 10 مرداد 1388, 11:32 صبح
بازم
Eival :تشویق:
ولی یه کم مشکل داشت خودم حلش می کنم.


من از استک فقط pushو pop او می شناسم کسی می تونه یه Ebook معرفی کنه؟؟

samirdev
شنبه 10 مرداد 1388, 23:05 عصر
استک دقیقا همین است که شما می شناسید. منتهی کاربر های بسیار است . که مهم ترین کاربرد آن فراخوانی توابع تو در تو در کامپیوتر است . (Call Stack)

ف تیموری
یک شنبه 11 مرداد 1388, 01:47 صبح
E :متفکر:
حالا اگه یه Ebook بخام که توش C# او یاد بگیرم چی؟؟
من از کجا باید بدونم یه چیزی مث char.TryParse برای تشخیص operator و operand هست و ... ؟؟؟؟

samirdev
یک شنبه 11 مرداد 1388, 07:18 صبح
http://www.farsiebook.com/ebook/7359.htm