PDA

View Full Version : یک سوال سخت(گرفتن تابع با رشته و جدا کردن ضریب و ...)



aminnaseri
سه شنبه 28 بهمن 1393, 11:11 صبح
یک چند جمله ای داریم(مثلا22.2x^5-3x+29-6.2x) و می خواهیم بجای x مقدار بدیم(مثلا 2) و نتیجه رو اعلام کنیم... و نکته اینجاست که اون چند جمله ای رو باید از کاربر بصورت رشته بگیریم... حالا بنظرتون چی کار کنیم؟ چطوری ضریب ها رو جدا کنیم؟ خیلی ممنون میشم راجع به این هم یک توضیحی بدید اگه ممکنه...
من خودم یک کاهایی کردم ولی نتونستم کاملش کنم... ایده ای دارید؟

ehsan_faal
سه شنبه 28 بهمن 1393, 11:52 صبح
مجبور نیستی که حتما x رو هم بعنوان یه کاراکتر وارد کنی. بردار ضرایب رو از ورودی بگیر بریز تو یه آرایه، بعد بسته به طول آرایه بزرگترین توان مشخص میشه و حالا میتونی با گرفتن مقدار عددی x از کاربر حاصل عبارت رو بدست بیاری

aminnaseri
سه شنبه 28 بهمن 1393, 12:02 عصر
ممنون دوست عزیز...
اون چند جمله ای رو کاربر هرچی دلش بخواد وارد می کنه و باید بصورت رشته گرفته بشه... اونجوری که دیگه مشکلی نیست ... مشکل همینه که چجوری اعداد رو از رشته بسازیم و جدا کنیم...

ehsan_faal
سه شنبه 28 بهمن 1393, 13:20 عصر
به نظرم اگه بری سراغ regular expression ها میتونی به نتیجه برسی.

aminnaseri
سه شنبه 28 بهمن 1393, 13:49 عصر
اصلا ذهنیتی ندارم:قهقهه:
تازه ترم اول مبانی رو پاس کردیم... جلسه اول پیشرفته که رفتیم این تمرین رو استاد گفت حل کنیم.... یک ایده واسه حلش اینه که یک آرایه تعریف کنیم و ضرایب رو بترتیب توان x ذخیره کنیم... اما اینکه چجوری ضرایب رو از string جدا کنیم رو موندم... اول اگه تعداد "+"و"-" ها رو بشماریم می تونیم تعداد جمله ها رو تشخیص بدیم... حالا باید بتونیم جملاتی که x دارند رو تشخیص بدیم و بعد دوباره همون جملات رو بنا به درجه توانشون جدا کنیم... بعد تازه بریم سراغ تبدیل اون کارکترهای عددی به ضرائب...
ایده دوم هم اینه که یک متغیر سراسری تعریف کنیم و اون مقدار(مثلا2) رو تو هر جمله وارد کنیم و همینجوری بریم جلو که این بهتره چون دیگه آرایه تعریف نمی کنیم... یک قطعه کد واسه این روش نوشتم ولی نمی دونم کامل باشه یا نه و یجورایی اینقدر این سوال تو ذهنم بزرگ شده که می ترسم بزنم به دلش :متفکر:... اگه نوشتمش میام اینجا میذارمش
راجع به اون regular expression هم یک سرچی کردم ولی مطلب جامعی پیدا نکردم اگه لطف کنی و لینک یا مرجع بدی که برم بخونمش خیلی لطف می کنی... بازم ممنون

ehsan_faal
سه شنبه 28 بهمن 1393, 14:29 عصر
واسه کلیات فکر میکنم این لینک خوب باشه:

http://amib.ir/weblog/?p=439

حالا این که syntax اش توی Cpp چه جوریه و چه جوری باید پیاده سازیش کرد رو میتونی تو stackoverflow سرچ کنی.

ehsan_faal
سه شنبه 28 بهمن 1393, 14:55 عصر
من Cpp بلد نیستم ولی اگه دنبال ایده میگردی شاید این بتونه کمکت کنه(البته به زبان جاوا):

public List<BigInteger> Coefficients(){
List<BigInteger> Coeffs=new ArrayList<>();
String[] SA=Str.split("[a-z|A-Z|*|^|+|-]");
for(String S:SA){
if(!S.isEmpty())
Coeffs.add(new BigInteger(S));
}
return Coeffs;
}

rm classic
سه شنبه 28 بهمن 1393, 18:23 عصر
یه کار کن:
اول یه تابع بنویس که اگه یه - یا + دید اون عبارتو بزاره تو یه رشته جدا
بعد یکی دیگه بنویس که تو هر کدوم از رشته ها اگه x رو دید کاراکترای قبلیش رو ازش جدا کنه و به عدد تبدیل کنه(فک کنم با itoa یا atoi) بعد X رو با عدد بعد از
^ به توان برسونه بعد با ضریب ضرب کنه
در آخر تمام اعداد بدست اومده از رشته ها رو با هم جمع کنه
بعد...
Enjoy It