الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حل معادله بالسي

مغلق
بدأه هتوفه في 2 مايو 2003 · 14 رد · 1,049 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مساء الخير اخواني واخواتي الاعضاء

عندي مسأله بالسي وهي كيف احل معادله بالسي النقطه الي ماني فاهمتها ان اليوزر يدخل اكثر منcharacter وبعدين يسوي لها ربط كل مجموعه مع بعض بحيث اذا دخل '5' '1' يلصقهم مع بعض وتصير '15' ؟؟؟؟؟؟؟؟

انا اعرف داله strcat بس لازم تكون كلها من نوع string وايضا '15' لاتعتبر string ولا character ...............

المعادله مثال عليها مع العلم اني لا اطللب حل المساله كامله

15+90-100/7*2

مثال فقط اما اليوزر يقدر يدخل اي معادله .............

:eek::eek::eek::eek::eek::eek::eek::eek:

#2

الطريقة لحل المعادلات من هذا النوع ( حسب ما فهمت من سؤالك ) تتم بإستخدام دوال مثل isnum للتحقق من هل الـ Character المدخل رقم او لا

وبعد ان يتم التأكد يتم تخزين الأرقام في مصفوفة ... و العمليات في مصفوفة أخرى بالترتيب المطلوب ....و يتم دمج الأرقام بالمرور على عناصر مصفوفة الأرقام بالترتيب و إستخدام دالة مثل atoi لتحويل العناصر الى ارقام

هذا الحل بطريقة نظرية وعليك تطبيقة حسب فهمك للسؤال الى كود بلغة الـ c

تمنياتي لكي بالتوفيق

#3

مشكور اخ استديو

فهمت قصدك بس عادي اخزن كاراكتر في سترينج ؟؟؟؟؟؟؟؟

#4

على فكره عندي سؤال لاخ ستديو ؟

كيف اخزنها بالمصفوفه عن طريق strcpy اة الاسناد ؟

#5

عزيزتى

اذا كنتي عرفه اكبر رقم ممكن ال user يدخله اعملي array وضعي

كل digit 1 ,5 في ال array ثم قومي بتحويله الى ارقام.

اذا كنتي تكتبين code لحل معادله من الدرجه الاوله فهده الفكره محدوده

هذه فكره:

سوف تقومى باخذ المعادله كلها كا string

ثم تقومى بالفصل بين الحدود عن طريق ال operator ثم تحوليه الحدود التى هى ارقام منغير ال operator الى ارقام ثم تقومى بتجميع الحدود

الموضوع كبير شويه معلش

و شكرا :cool:

#6

يا اخت نونو المطلوب اننا نقراه وندخلبها على اساس انها char ثم لصقها مع بعض عشان تكون string وبعدين نحولها من string الى int >>>>>>>

#7

أختي هيوفه ... افضل ان يتم النسخ عنصر - عنصر .. لأن المعادلة الأولية اصلا ستخزن في مصفوفة واحدة ثم يتم المرور على كل عنصر فيها و التأكد هل هو رقم isnum فإذا كان كذلك يتم تحويله تخزينة في مصفوفة اخرى حتى لا يبقى في هذه المصفوفة سوى العمليات ... بعد تمرين على مصفوفة الأرقام وتحوليها الى ارقام حقيقية بإستخدام atoi ... مع مراعاة كون ان اي الأرقام قد تتكون من اكثر من digit (خانة) مثلا 115 ستخزن في المصفوفة على شكل :

|5 | 1 | 1 |

فيجب التأكد من ذلك ... تمنياتي لك بالتوفيق

#8

بس المطلوب في السؤال ندخلها على انها كاراكتر

وسأورد نص السؤال للفهم ولايزعلون الاخوان المشرفين فانا لا اطلب الحل كاملا بس ابغى فكره اني احط كل الارقام الي ما بينهم operators في مصفوفه لو حدهم

write aprogram that will read and evaluate an expression like this

2*7/100-90+15

the expression is a sequence of integer separated by operators

it is terminated by the EOF.there may be one or more space in between the integer or operators........

the number should be read character by character . the program will have to compute the integer equivalent of the list of number , i.e will read 123 as'1','2','3'.

it should then evaluate the expression as an arithmatic expression......

#9

وفكرتي كذا بس ما ادري صح واذا كانت صح ما اعرف اكملها

c=getchar();

for(i=0;c!='n' ;i++)

if(c==' ' ||isdigit©)

st=c;

يعني هنا راح يكرر لين يضغط اليوزر انتر وكل ماشاف رقم او سبيس يحطهم في st

انا ابغى اول ما يوصل لoperators ما يحطها والي بعده يخزنه في مصفوفه ثانيه ما ابغاه كلها تتخزن بنفس المصفوفه ابغى اي شئ بينهم operators يحطهم بمصفوفه لوحدهم مثلا 72*7/100-90+15

ابغى 15 في مصفوفه

و90 في مصفوفه ثانيه

100 في مصفوفه اخرى

و7 في مصفوفه

و72 في مصفوفه

ما ابغى اط الارقام كلهم في مصفوفه وحده لاني ما راح اعرف افصلهم الا اذا كان عند الاخوان شئ اتمنى يفيدني (clock)(clock)(clock)

#10

الي يعرف ما يبخل علي :'(:'(:'(:'(:'(:'(:'(:'(:'(:'(

#11

أعتقد أنك يجب أن تستخدمي الـمكدس من أجل تخزين السلسلة ومن ثم تقومين بتقييمها, وفكرة الإدخال محرف وراء آخر فكرة سيئة فلماذا لا يتم إدخال السلسلة كـ string ومن ثم يتم تقييمها , وعلى فكرة يجب التأكد من أن السلسلة التي يتم إدخالها سليمة أي يمكن إجراء العمليات عليها أم لا مثلاً :

1+2*(3 هذه سلسلة خاطئة لأن القوس الأخير غير موجود وهناك أخطاء أخرى يمكن معالجتها

#12

طيب لما اخزن الارقام بمصفوفه والعمليات بمصفوفه اخرى كيف احل المعادله يعني كيف احط العمليه مع الارقام؟:'(:'(:'(

#13

يمكنك ذلك باستخدام مفهوم Stack وباستخدام خوارزمية Postfix أو Prefix

#14

بلس احنا ما اخذنا هالاشياء :(:(:(:(:(:(:(:(:(:(؟؟؟؟؟؟؟؟؟؟؟؟

#15
#include
#include
#include

const int MaxOperators=10;
/* in this method is the String saved in tow Arrays 
 the first array for values and the second array for opertors
 */

int parsen(char* resurce,float *floatArr,char* Operators)
{
	int opCount=0;
	char ch;
	if(!resurce||strlen(resurce)==0)
		return 0;
	int charCounter=strlen(resurce);

	int i=0;//index for resurce
	int k=0;//index for Operators
	int j=0;//index for flooatArr
	char str[10];
	strcpy(str,"");
	int num;//value from string
	int len;//length for a Word

	for (i=0;i	{
		ch=resurce;
		if(ch==' ')
			continue;

		if(ch>='0'&&ch<='9')//if ch nummer
		{

			strncat(str,&ch,1);

		}
		else
		{
			if(ch=='*'||ch=='/'||ch=='+'||ch=='-')
			{
				Operators[k++]=ch;
				opCount++;
				len=strlen(str);
				if(len>0)
				{
				    num=atoi(str);//change the string in integer
					floatArr[j++]=(float)num;//castimming
					strcpy(str,"");
					len=0;

				}

			}


			}

	}

        if(j)//for the last item
		{
	    num=atoi(str);//change the string in integer 
		floatArr[j]=(float)num;//castimming
		strcpy(str,"");
		len=0;
		}

	return   opCount;
}

/*his method is for the operators '*' and '/' for one item*/

void set_Mult_Div_Operator(float* floatArr ,char op,int pos, char* Operators)
{
	if(op!='*'&& op!='/')
		return;
	if(pos<0 || pos>MaxOperators-1)
		return;
	if(op=='*')
	{
		floatArr[pos]*=floatArr[pos+1];
		floatArr[pos+1]=0;
	}
	else if(op=='/')
	{
		floatArr[pos]/=floatArr[pos+1];
		floatArr[pos+1]=0;
	}
	Operators[pos]=' ';

}


	void setMutDivForAll(float *floatArr ,char* Operators,int OpCount)
{
	if (!floatArr||!Operators)
		return;
	int i;
	char ch;
	for (i=0;i	{
		ch=Operators;

		set_Mult_Div_Operator(floatArr,ch,i,Operators);
	}

}


/*his method is for the operators '+' and '-' for all items*/


float getResult(float *floatArr,char* Operators,int OpCount)
{
	int i=0;
	char op;
	float sum=floatArr[0];
	for(i=0;i	{
       op=Operators;
	   if(op!='+'&& op!='-')
		   continue;
	   if(op=='+')
		   sum+=floatArr[i+1];
	   else
			if(op=='-')
		       sum-=floatArr[i+1];

	}
	return sum;

}



int main()
{
	float Arr[MaxOperators+1];
	char oper[MaxOperators];
	for(int i=0;i	{
	Arr=0;
	oper=' ';
	}
	char *str="40+30/5-25*2";

	int operatCount= parsen(str,Arr,oper);

	cout<<"Opertorcounter= "<	cout<<"nvalues:";
	for(i=0;i<=operatCount;i++)
		cout<<" "<
	cout<<"nOperators are: ";
	for(i=0;i	  cout<<" "<
	setMutDivForAll(Arr ,oper,operatCount);
	float result=getResult(Arr ,oper,operatCount);

	cout<<"n result for "<



	return 0;
}

Homework

1: please correct the Code for output in C

2 :devlop the program for excepted '(' and ')'

for Example

Y=5*9+(6*9-6/(4*5))-20

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء

هذا الموضوع مغلق.

مواضيع مشابهة