View Full Version : سوال: حل معادله
hafez1
شنبه 22 مهر 1391, 23:51 عصر
یه برنامه هس که کاربریه معادله دلخواه بهش می ده مثلا 4x^2+6x+5 برنامه باید جملات این معادله رو جدا کنه و هر کدوم رو توی یه نود بریزه.مثلا توی نود اول داریم یه قسمت برای ضریب و یه قسمت برای توان.ینی توی نود اول 4رو داریم و 2روهم داریم و یه اشاره گر به نود بدی هم داریم.
حالا به ازای هر x که کاربر وارد می کنه باید جواب معادله رو محاسبه کنه.
می خاسم ببینم تابعی هس که این کارو انجام بده؟
gorg313
یک شنبه 23 مهر 1391, 00:30 صبح
این برنامه که قرار دادم یک برنامه تحلیلگر عبارت هست که تو تصویر زیر میتونید کارش رو ببینید. خب همون طور که از تصویر پیداست این برنامه برای به جواب رسوندنه یک عبارت به کار میره. در واقع اگه شما عبارت رو به صورت جمع و تفریق و کلا به صورت عملگر بنویسید، این برنامه اون رو به جواب میرسونه. همون برنامه Prefix و Postfix در درس ساختمان داده که تو دانشگاه میخونیم.
دانلود (http://v-basic.persiangig.com/VB6/Source/Sentence_Analizer.rar) (حجم : 11 کیلوبایت)
موفق و پیروز باشید.
http://v-basic.persiangig.com/image/Learning/Other/Sentence_Analizer.gif
اين بودش داش ببين به کارت اومد ازش استفاده کن:چشمک:
mahak006
یک شنبه 23 مهر 1391, 15:54 عصر
یه برنامه هس که کاربریه معادله دلخواه بهش می ده مثلا 4x^2+6x+5 برنامه باید جملات این معادله رو جدا کنه و هر کدوم رو توی یه نود بریزه.مثلا توی نود اول داریم یه قسمت برای ضریب و یه قسمت برای توان.ینی توی نود اول 4رو داریم و 2روهم داریم و یه اشاره گر به نود بدی هم داریم.
حالا به ازای هر x که کاربر وارد می کنه باید جواب معادله رو محاسبه کنه.
می خاسم ببینم تابعی هس که این کارو انجام بده؟
چنین تابعی نیست که کار شما رو انجام بده . ولی بره حل معادله ، روش های ریاضی نیاز هست که من توش یه مقدار ضعف دارم . البته معادله هر چقدر درجش بیش تر باشه ، حلش هم سخت تر می شه و تعداد جواب ها بسته به درجه ی معادله داره ( که احتمالا می دونید ) همین طور به نظرم بهتره از یه آرایه استفاده کنید و بر اساس اون ، مقادیر رو وارد نود کنید تا معادله رو اول از همه استانداردش کنید .
hafez1
یک شنبه 23 مهر 1391, 16:36 عصر
فکرمی کنم دوستان درست منظورم رو نفهمیدید.
قرار نیست ما جوابای معادله وارد شده رو به دست بیاریم بلکه بایدبه ازای هرx که کاربر وارد می کنه مقدار عبارتو بدست بیاریم.
مثلا به ازای x=1 مقدار عبارت 4x^2+2x می شه6.
می خاسم ببینم تابع strtok می تونه این کارو انجام بده؟به چه صورت؟
hafez1
چهارشنبه 26 مهر 1391, 20:15 عصر
یه سری اطلاعات درباره strtok به دست آوردم به این صورت یه مثاله با توضیحاش.
#include <iostream.h>
#include<conio.h>
#include <string.h> // prototype for strtok
int main()
{ clrscr();
char sentence[] = "This is a sentence with 7 tokens";
char *tokenPtr;
cout << "The string to be tokenized is:\n" << sentence
<< "\n\nThe tokens are:\n\n";
// begin tokenization of sentence
tokenPtr = strtok( sentence, " " );
// continue tokenizing sentence until tokenPtr becomes NULL
while ( tokenPtr != NULL )
{
cout << tokenPtr<<”\n”;
tokenPtr = strtok( NULL, “ ” ); // get next token
} // end while
cout << "\nAfter strtok, sentence = " << sentence << endl;
getch();
return 0; // indicates successful termination
} // end main
() چیست؟
تابع strtok() برای تکه تکه کردن یک رشته به کار می رود،که در کتاب به این تکه ها با نام قطعات منطقی یا Token اشاره شده است.
چگونه تابع strtok() رشته را تکه تکه می کند؟
ابتدا باید مشخص کنیم که چه چیزی در رشته باید این قطعات را ایجاد کند،یا به عبارت دیگر جدا کننده چیست.جداکننده یک کاراکتر است که می تواند کاراکتر فضای خالی یا کاراکتر نقطه یا هر کاراکتر دیگری هم باشد.
برای مثال،در رشته ی همین مثال کتاب که در بالا آمده است،کاراکتر جداکننده می تواند فضای خالی(" ") یا کاراکتر یک حرف باشد.
توجه داشته باشید که کاراکتر جداکننده با دابل کوتیشن ("") اعلان میشد.(در پایان در این مورد توضیح خواهم داد)
مانند مثال کتاب،کاراکتر جدا کننده را فضای خالی انتخاب می کنیم.
tokenPtr = strtok( sentence, " " );
در این دستور تابع strtok() رشته ی sentence را با رسیدن به اولین کاراکتر جداکننده قطع می کند و تکه اول را در اشاره گر tokenPtr که از نوع رشته کاراکتری است به طور موقت ذخیره می کند.نحوه ی قطع کردن این تابع به این صورت است که با رسیدن به کاراکتر جداکننده،به جای آن کاراکتر پوچ (‘\0’) قرار می دهد.
"This\0is a sentence with 7 tokens"
“This”
“is a sentence with 7 tokens”
تابع strtok() یک اشاره گر به اولین کاراکتر بعد از کاراکتر جداکننده اختصاص می دهد،یعنی این اشاره گر به باقی مانده جمله اشاره می کند که در جداکردن های بعدی مورد استفاده قرار می گیرد.این اشاره گر داخل تابع strtok() بوده و برای ما قابل رؤیت نیست.(من اسمشو میذارم اشاره گر نهانی)
برای جداکردن تکه های بعدی نیاز به یک حلقه داریم.شرط پایان دهنده حلقه موقعی است که اشاره گر tokenPtr با NULL (پوچ) برابر شود،یعنی موقعی که هیچ قطعه ی منطقی ای (tokenای) باقی نمانده باشد و همه ی قطعات جدا شده باشند.
درون حلقه چه انتفاقی می افتد؟
در مثال کتاب ،درون حلقه، دستوری برای نمایش قطعه ی جداشده وجود دارد و سپس به دستور جداکردن قطعه منطقی (token) بعدی میرسیم.
tokenPtr = strtok( NULL, “ ” );
در این دستور NULL به عنوان آرگومان اول آورده شده است.تابع strtok() با دیدن این آرگومان به اشاره گر نهانی خود رجوع می کند.قبلا گفته شد که این اشاره گر نهانی به ادامه ی رشته ی sentence از محل جدا شدن اشاره می کند.که تا اکنون یعنی این قسمت:
“is a sentence with 7 tokens”
آرگومان دوم هم همان کاراکتر جداکننده (" ") است.
تابع strtok() همانند مرحله ی اول یک قطعه ی دیگر جدا کرده و داخل tokenPtr می ریزد و اشاره گر نهانی خود را روی کاراکتر اولِ باقی مانده جمله می گذارد.
با ادامه روند در حلقه ،تمام قطعات جدا شده و طبق دستور چاپ می شوند و موقعی که دیگر قطعه ای باقی نمانده باشد شرط خاتمه حلقه برقرار شده و برنامه از حلقه خارج می شود.
cout << "\nAfter strtok, sentence = " << sentence << endl;
دستور بالا می خواهد نشان دهد که هم اکنون،یعنی بعد از فراخوانی تابع strtok() چه تغییری در آرایه ی کاراکتری sentence به وجود آمده است.
همان طور که در خروجی برنامه مشاهده می کنید،از sentence چیزی جز اولین قطعه باقی نمانده است،زیرا همان طور که گفته شد تابع strtok() هنگام رسیدن به کاراکتر جداکننده به جای آن کاراکتر پوچ ('\0') را قرار می دهد،به همین دلیل هنگام نمایش با دستور cout، تا کاراکتر پوچ نمایش داه می شود.
نکته:همون طور که گفتم کاراکتر جداکننده رو با دابل کوتیشن اعلان می کنیم،در صورتی که ما حرف از کاراکتر می زنیم و کاراکتر با ‘ ‘ اعلان میشه.در حقیقت این تابع با توجه به تست های مختلفی که روش انجام دادم، می تونه یک رشته رو به عنوان جداکننده بگیره ،ولی اینو بدونین که این تابع، دقیقا همون رشته رو به عنوان جداکننده در نظر نمی گیره،بلکه کاراکتر های اون رشته رو به عنوان کاراکتر های جداکننده می گیره.به این صورت که اگر رشته ی “with” رو به عنوان جداکننده وارد کنید،تابع کاراکتر های ‘w’ , ‘I’ , ‘t’, ‘h’ رو به عنوان کاراکتر های جداکننده میگیره و موقع بررسی جمله به هر کدوم از این کاراکتر ها که برسه،کار جداسازی رو انجام میده
این اطلاعاتو از سایت بچای بیرجند گرفتم.
حالا سوالم اینه که من چی جوری وقتی جدا کردم +و -رو نگه دارم؟
hafez1
شنبه 29 مهر 1391, 08:07 صبح
می تونم بیام چک کنم که وقتی به منفی رسید کلا ضریبو منفی در نظر بگیره؟؟؟؟؟؟؟
one hacker alone
چهارشنبه 03 آبان 1391, 16:18 عصر
بله درستش همینه قبلا هم گفتم شما باید با علامت ها کارتون رو پیش ببرید اگه خواستین اولویت بندی رو هم انجام بدین مثلا توی معادله () هم وجود داشت پس قبل از شروع عملیات شما باید یک بار رشته رو برای یافتن اولویت ها چک کنید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.