یک سوال خیلی خیلی مهم>>>>
مدیر انجمن: rosa_127
-
- پست: 5
- تاریخ عضویت: پنجشنبه 10 شهریور 1390, 10:43 am
یک سوال خیلی خیلی مهم>>>>
سلام . من دانشجوی ترم دوم مهندسی برق قدرت هستم.در حال حاضر روی زبان برنامه نویسی c++کار میکنم . که به یک سوال برخوردم اون اینه که "چطور میشه یک معادله ی خطی که هر درجه ای میتونه باشه رو بنویسیم بعد مشتقش رو برای ما چاپ کنه"..........
تقریبا" هم حلش کردم اما یه جاهاییش هنوز مشکل داره.تو رو خدا هر کدوم از مهندسین کامپیوتر که میتونند کمکم کنند. ممنون
تقریبا" هم حلش کردم اما یه جاهاییش هنوز مشکل داره.تو رو خدا هر کدوم از مهندسین کامپیوتر که میتونند کمکم کنند. ممنون
-
- كاربر عالي
- پست: 905
- تاریخ عضویت: دوشنبه 16 فروردین 1389, 11:53 am
- محل اقامت: On the Earth ...
Re: یک سوال خیلی خیلی مهم>>>>
چجور معادله خطی؟معادله ی خطی
فقط توش متغیر و ضریب و توان باشه !؟
// یعنی sin و cos و log اینا توش نباشه!؟
مثلا :
کد: انتخاب همه
2x^2+3x^5
یا خیلی پیچیده تر؟
اگر در حد همین بالایی باشه .. میتونم راهنماییت کنم.
-
- پست: 5
- تاریخ عضویت: پنجشنبه 10 شهریور 1390, 10:43 am
Re: یک سوال خیلی خیلی مهم>>>>
بله در همین حد ساده باشه یعنی معادلاتی که ضرایب ثابت داشته باشند . خودم تقریبا نوشتم اما دوتا مشکل دارم یکی اینکه عدد ثابت اخر رو چطور صفر قرار بدیم در مشتقش و دومی اینه که به جای اینکه ضرایب مشتق عدد باشه حروف چاپ میکنه . منتظر جوابتون هستم خیلی ممنون
-
- كاربر عالي
- پست: 905
- تاریخ عضویت: دوشنبه 16 فروردین 1389, 11:53 am
- محل اقامت: On the Earth ...
Re: یک سوال خیلی خیلی مهم>>>>
یعنی چی عدد ثابت آخر رو 0 قرار بدیدم؟
-
- پست: 5
- تاریخ عضویت: پنجشنبه 10 شهریور 1390, 10:43 am
Re: یک سوال خیلی خیلی مهم>>>>
یعنی اینکه مشتق یک عدد ثابت مثل 2 و 3 و..... صفر میشه. حالا من نمیتونم این صفر رو نشون بدم.
جان من هر چه زودتر برنامه رو برام بفرستید اگه میتونید. ممنون.
مثل مثال زیر مشتق رو برات چاپ کنه.
2x^2+3x^1+3
moashtagh=4x^1+3x^0+0
جان من هر چه زودتر برنامه رو برام بفرستید اگه میتونید. ممنون.
مثل مثال زیر مشتق رو برات چاپ کنه.
2x^2+3x^1+3
moashtagh=4x^1+3x^0+0
-
- كاربر عالي
- پست: 905
- تاریخ عضویت: دوشنبه 16 فروردین 1389, 11:53 am
- محل اقامت: On the Earth ...
Re: یک سوال خیلی خیلی مهم>>>>
سلام،
اول از همه واقعا عذر میخوام که یکم دیر جواب میدم.
خوب گرفتم چی شد ، این مسئله ، میشه گفت یکم سخته ... سخت از چه نظر؟ الان میگم !
شما هر رشته ورودی که به عنوان معادله خطی دریافت میکنید رو باید بررسی کنید ، اینطوری :
مثلا ، ورودی ما این هست :
اول باید عبارتهایی که بین علامت «+» یا «-» هستن یکی یکی از هم جدا کنید.
خیلی راحت میشه با یه حلقه نوشت.
بعد چک کنید که آیا داخل اون عبارت جداشده ، علامت ^ هست؟
اگر بود ، یکی از عدد بعد از ^ کم بشه ، و اصل عدد ضرب در عدد قبل از ^ بشه.
اگر هم نبود ، مقدار 1 یا 0 رو چاپ کنه ( برای متغیر 1 ، برای عدد 0 !)
یه نمونه مثال میزنم :
در مرحله اول 277x^4 جدا میشه.
آیا داخلش ^ داریم؟ بله !
پس 4 را ضربدر 277 کن و یکی از 4 کم ! ( 1108x^3 )
قسمت بعدی : 2 جدا میشه.
آیا داخلش ^ داریم؟ خیر ...
عدد است یا حرف (متغیر ) ، عدد ... پس عدد صفر را چاپ کن !
قسمت بعدی ، x^6
آیا ^ دارد؟ بله ...
یکی کم کن ، ضرب در عدد قبل کن ...
// البته یه شرط دیگه هم لازم هست که چک کنه ، پشت متغیر عدد هست یا نه !
// که خیلی راحت میشه ، اگه حرف ( کارکتر ) اول قسمت جدا شده ، عدد باشه ، میشه عدد در غیر اینصورت یعنی اینکه عدد نداره ...
یه نکته دیگه ، وقتی اینطوری جدا می کنید ، نیاز به یه تابع تبدیل رشته به عدد دارید.
برای مثال 277 اینجا دویست و هفتاد و هفت نبود ، بلکه دو ، هفت ، هفت بود ...
یا حتی رقم توان ، اون هم عدد نبود ، کارکتر بود ...
هر دوی اینها باید تبدیل به عدد بشن بعد ...
متاسفانه یکم بیحوصلم ، وگرنه حتما برای تفریح هم که شده ، مینوشتم.
اگر باز راهنمایی نیاز بود ، در خدمتم.
اول از همه واقعا عذر میخوام که یکم دیر جواب میدم.
خوب گرفتم چی شد ، این مسئله ، میشه گفت یکم سخته ... سخت از چه نظر؟ الان میگم !
شما هر رشته ورودی که به عنوان معادله خطی دریافت میکنید رو باید بررسی کنید ، اینطوری :
مثلا ، ورودی ما این هست :
کد: انتخاب همه
277x^4+2+x^6
خیلی راحت میشه با یه حلقه نوشت.
بعد چک کنید که آیا داخل اون عبارت جداشده ، علامت ^ هست؟
اگر بود ، یکی از عدد بعد از ^ کم بشه ، و اصل عدد ضرب در عدد قبل از ^ بشه.
اگر هم نبود ، مقدار 1 یا 0 رو چاپ کنه ( برای متغیر 1 ، برای عدد 0 !)
یه نمونه مثال میزنم :
کد: انتخاب همه
277x^4+2+x^6
آیا داخلش ^ داریم؟ بله !
پس 4 را ضربدر 277 کن و یکی از 4 کم ! ( 1108x^3 )
قسمت بعدی : 2 جدا میشه.
آیا داخلش ^ داریم؟ خیر ...
عدد است یا حرف (متغیر ) ، عدد ... پس عدد صفر را چاپ کن !
قسمت بعدی ، x^6
آیا ^ دارد؟ بله ...
یکی کم کن ، ضرب در عدد قبل کن ...
// البته یه شرط دیگه هم لازم هست که چک کنه ، پشت متغیر عدد هست یا نه !
// که خیلی راحت میشه ، اگه حرف ( کارکتر ) اول قسمت جدا شده ، عدد باشه ، میشه عدد در غیر اینصورت یعنی اینکه عدد نداره ...
یه نکته دیگه ، وقتی اینطوری جدا می کنید ، نیاز به یه تابع تبدیل رشته به عدد دارید.
برای مثال 277 اینجا دویست و هفتاد و هفت نبود ، بلکه دو ، هفت ، هفت بود ...
یا حتی رقم توان ، اون هم عدد نبود ، کارکتر بود ...
هر دوی اینها باید تبدیل به عدد بشن بعد ...
متاسفانه یکم بیحوصلم ، وگرنه حتما برای تفریح هم که شده ، مینوشتم.
اگر باز راهنمایی نیاز بود ، در خدمتم.
آخرین ویرایش توسط PrinceOfPersia در سهشنبه 15 شهریور 1390, 1:00 am، در مجموع 1 بار ویرایش شده است.
-
- كاربر عالي
- پست: 905
- تاریخ عضویت: دوشنبه 16 فروردین 1389, 11:53 am
- محل اقامت: On the Earth ...
Re: یک سوال خیلی خیلی مهم>>>>
خوب ، شما خوش شانس بودید ، بعد از زدن پست قبلی ، حس رو پیدا کردم و این مسئله رو حل کردم.
این کدی که نوشتم همه حالتهایی رو که گفتم رو شامل میشه ، اکثر اشکالهاش رو گرفتم ، احتمالا باید توش حالت خاص پیش بیاد و اشتباه حساب کنه !
ویژگی ها :
عدد و متغیر رو به راحتی تشخیص میده ...
توان 0 رو چاپ نمیکنه ( هم صفر و هم متغیری که توانش صفر باشه چاپ نمیشه ! )
اگر ورودی به این شکل باشه x^2 ، یعنی ضریب رو ندیم ، به راحتی میفهمه که منظور همون ضریب 1 بوده و ....
همه حالات رو به نظرم توش فرض کردم .
// همون هایی که تو پست قبلی گفتم !
نمونه ورودی :
خروجی :
ورودی :
خروجی :
اینم عکس :
نکته ، کد زیر چند تا تابع داره :
1- string_to_integer :
یه رشته رو تبدیل به عدد می کنه !
2- search_string :
یه کارکتر رو داخل یه رشته جستجو می کنه !
___________________
3- خط به خطش رو خودم نوشتم ...
4- امیدوارم به کارتون بیاد ...
5- سوالی داشتید ، بپرسید که توضیح بدم.
اینم کد :
برای کامپایلر Mingw :
http://s2.picofile.com/file/7132078488/main.cpp.html
برای Turbo C : ( تست نکردم ، دستی از Mingw به Turbo تبدیل کردم !!! )
http://s2.picofile.com/file/7132081391/main2.cpp.html
این هم کل کد ( Mingw ) :
این کدی که نوشتم همه حالتهایی رو که گفتم رو شامل میشه ، اکثر اشکالهاش رو گرفتم ، احتمالا باید توش حالت خاص پیش بیاد و اشتباه حساب کنه !
ویژگی ها :
عدد و متغیر رو به راحتی تشخیص میده ...
توان 0 رو چاپ نمیکنه ( هم صفر و هم متغیری که توانش صفر باشه چاپ نمیشه ! )
اگر ورودی به این شکل باشه x^2 ، یعنی ضریب رو ندیم ، به راحتی میفهمه که منظور همون ضریب 1 بوده و ....
همه حالات رو به نظرم توش فرض کردم .
// همون هایی که تو پست قبلی گفتم !
نمونه ورودی :
کد: انتخاب همه
2+3+1
کد: انتخاب همه
0+0+0
کد: انتخاب همه
3x^2+45z^7+2x^1+0+1+y
کد: انتخاب همه
Derivative: 6x^1+315z^6+2+0+0+1
نکته ، کد زیر چند تا تابع داره :
1- string_to_integer :
یه رشته رو تبدیل به عدد می کنه !
2- search_string :
یه کارکتر رو داخل یه رشته جستجو می کنه !
___________________
3- خط به خطش رو خودم نوشتم ...
4- امیدوارم به کارتون بیاد ...
5- سوالی داشتید ، بپرسید که توضیح بدم.
اینم کد :
برای کامپایلر Mingw :
http://s2.picofile.com/file/7132078488/main.cpp.html
برای Turbo C : ( تست نکردم ، دستی از Mingw به Turbo تبدیل کردم !!! )
http://s2.picofile.com/file/7132081391/main2.cpp.html
این هم کل کد ( Mingw ) :
کد: انتخاب همه
/*
# Author : Ali Bahrami Nezhad
# EMail : ali.bhz[at]gmail.com
# Created : 1390/06/14 , 8:30 P.M
# Updated : 1390/06/15 , 00:34 A.M
# Compiler : Mingw
# IDE : CodeBlocks
# Language : C/C++
*/
#include <iostream>
using namespace std;
int string_to_integer(char * str , int start=0,int end=100000)
{
str = str + start;
int number = 0;
while(*str <='9' && *str >= '0' && start <= end)
{
number = number * 10;
number = number + (*str - '0');
str++;
}
return number;
}
int string_search(char needle,char*str,int start=0,int end=100000)
{
int not_found = 1;
while(*(str + start) != '\0' && start <= end)
{
if(*(str + start) == '^')
{
not_found = 0;
break;
}
start++;
}
if (not_found == 1)
return 0;
return start;
}
int main()
{
char equlation[100];
cout << "Enter your liner equalation:\r\n";
// get a liner equaltion from user keyboard
cin >> equlation;
cout << endl << "Derivative: ";
char*eq = equlation;
int index = 0;
int last_index = 0;
int found = 0;
char sign = '\0';
while(*(eq + index) != '\0')
{
if(*(eq + index) == '+' || *(eq + index) == '-' || *(eq+index+1) == '\0' || *(eq+index) == '\0')
{
found = 1;
sign = '\0';
if(*(eq+index+1) != '\0')
sign = *(eq+index);
}else
index++;
if (found == 1)
{
// we have found a part ...
// let's look for a ^ sign
// Does it have that !?
int pos = string_search('^',eq,last_index,index);
if(pos == 0) // No !
{
// Checks if it's a number or a char ...
if(*(eq + last_index) >= '0' && *(eq + last_index) <= '9')
cout << "0"; // it was a number ...
else
cout << "1"; // it was a variable
index++;
}else{ // Yes :(
// Horray ... there is a "^" there ...
// Let's convert those strings to numbers ...
int number = string_to_integer(eq,last_index,index);
if (number == 0 && !(*(eq+last_index) == '0'))
number = 1;
int power = string_to_integer(eq,pos+1,index);
// print the Derivative
cout << number * power;
// print the variable And Power
if (((power-1) != 0) && pos !=0)
{
// print the variable
cout << *(eq+pos-1);
// print the power
cout << "^";
cout << power-1;
}
index++;
}
// print the sign
cout << sign;
sign = '\0';
last_index = index;
found = 0;
}
//index++;
}
return 0;
}
-
- پست: 5
- تاریخ عضویت: پنجشنبه 10 شهریور 1390, 10:43 am
Re: یک سوال خیلی خیلی مهم>>>>
سلام دستتون درد نکنه. خیلی جالب حلش کردید . اما خودم هم با یک روش دیگه حلش کردم بدون استفاده از حلقه ها . فقط مشکلی که داره یه کم طولانیه . حدودا" 300 خط برنامه شده.
اما در هر حال بازم ممنون
اما در هر حال بازم ممنون
-
- كاربر عالي
- پست: 905
- تاریخ عضویت: دوشنبه 16 فروردین 1389, 11:53 am
- محل اقامت: On the Earth ...
Re: یک سوال خیلی خیلی مهم>>>>
سلام،sanan esmaili نوشته شده:سلام دستتون درد نکنه. خیلی جالب حلش کردید . اما خودم هم با یک روش دیگه حلش کردم بدون استفاده از حلقه ها . فقط مشکلی که داره یه کم طولانیه . حدودا" 300 خط برنامه شده.
اما در هر حال بازم ممنون
ممنون.
جالب که نیست ، دقیقا همون چیزی رو که توضیح دادم پیاده کردم.
خوب ببینید ، ویژگی که این کد من داره ، اینه که کل یه معادله رو میگیره ، در آخر همه رو حساب میکنه.
300 خط یعنی زیاده!؟
کجاش زیاده ...
راستی خوشحال میشدم روش شما رو هم میدیدم.
//----------------
Re: یک سوال خیلی خیلی مهم>>>>
آفرين اين وسط منم با كد شما 2نمره گرفتم.PrinceOfPersia نوشته شده:سلام،sanan esmaili نوشته شده:سلام دستتون درد نکنه. خیلی جالب حلش کردید . اما خودم هم با یک روش دیگه حلش کردم بدون استفاده از حلقه ها . فقط مشکلی که داره یه کم طولانیه . حدودا" 300 خط برنامه شده.
اما در هر حال بازم ممنون
ممنون.
جالب که نیست ، دقیقا همون چیزی رو که توضیح دادم پیاده کردم.
خوب ببینید ، ویژگی که این کد من داره ، اینه که کل یه معادله رو میگیره ، در آخر همه رو حساب میکنه.
300 خط یعنی زیاده!؟
کجاش زیاده ...
راستی خوشحال میشدم روش شما رو هم میدیدم.
//----------------
حلال كنيد
هرگز به رنج فردا نيانديش رنج هر روز براي آن روز كافيست...
-
- پست: 5
- تاریخ عضویت: پنجشنبه 10 شهریور 1390, 10:43 am
Re: یک سوال خیلی خیلی مهم>>>>
این موفقیت بزرگ رو بهتون تبریک میگم موفق باشید."مهندس"
-
- كاربر عالي
- پست: 905
- تاریخ عضویت: دوشنبه 16 فروردین 1389, 11:53 am
- محل اقامت: On the Earth ...
Re: یک سوال خیلی خیلی مهم>>>>
مبارک باشه !!!آفرين اين وسط منم با كد شما 2نمره گرفتم.