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

استخدام المكدس في حساب التعابير الحسابيه

مغلق
بدأه الساحر 89 في 27 يوليو 2010 · 3 رد · 3,141 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم .................................

ارجو منكم مساعدتي في حل السؤال ..........

س\ استخدم المكدس لتنفيذ postfix للتعبير التالي ((6*5)*(4+3))+2) ؟

وكانت فكره محاولتي في حل السؤال هي كالاتي

الارقام توضع على الجهه اليمنى والاشارات توضع على الجهه اليسرى ؟؟؟ لكن كيف نحل هذا النوع من الاسئله؟؟؟ وكتابته الكود البرمجي؟؟؟ واذا كان عندكم اسئله من هذا النوع فلا تبخلو علي لان عندي دور ثاني .هياكل

بيانات..................

وكل الشكر والتقدير لكل اعضاء المنتدى .......

#2

السلام عليكم

في البداية وحتى تفهم الموضوع وتتضح لك الصورة أنصحك بهذه العروض التقديمية :

http://www.just.edu.jo/~eyas/Index%20Files/postfix.ppt

http://www.google.jo/url?sa=t&source=web&cd=1&ved=0CAYQFjAA&url=http%3A%2F%2Fcsci.biola.edu%2Fcsci230%2FinfixToPostfixConversion.ppt&rct=j&q=infix%20to%20postfix%20ppt&ei=oPtPTOiDKomK4QbGgeWfCA&usg=AFQjCNGwDtIrnIj-VTnXX4qn00JUpH5qaw

سترى فيها الطريقة الصحيحة للتحويل إلى postfix وكيفية حساب المقدار بعد التحويل

أو PDF

http://people.eecs.ku.edu/~jvalland/lectures/268-L9a-PrefixPostfixNotes-S09.pdf

وهو رائع جداً ، الذي ستجد فيه كل ما يلزمك ، وصف للكود اللازم للتحويل ، بالإضافة إلى أمثلة مفصلة :

كتبت لك الكود التالي ، جزء من الحل ، ولو كان معي المزيد من الوقت لكتبته لك كاملاً لكن عليك الاستعانة بملفات الـ power point و PDF وفهم الفكرة ثم تطبيق ذلك على ++C

هذا الكود الخاص بالمكدس Stack والباقي عليك ، سيكون الباقي كود ++C عادياً لكن بعد فهمك لطريقة التحويل . .

// Stack.cpp

#include "Stack.h"

int  main()
{
	static Stack S;

	char Infix[50];

	cin >> Infix; // insert your infix expression

	/*********

	Put here the code that converts from Infix to Postfix

	use S.push(Infix) in a loop but due to the method u see
	in the PDF file

	// also you may need S.pop() in calculating the value of the expression
	// and S.view() in debugging and finally showing the result

	********/

	return 0;
}

// Stack.h

#include <iostream>
using namespace std;

struct node
{
	char ch;

	node* next;

	node(char n = '0')
	{
		next = NULL;
		ch = n;
	}

	~node()
	{
		delete next;
	}
};

class Stack
{

public:

	node* head;

	Stack()
	{
		head = NULL;
	}

	void push(char n)
	{
		node* NN = new node(n);

		if(head == NULL)
		{
			head = NN;
			return;
		}

		node* c = head;

		while(c -> next != NULL)
			c = c -> next;

		c -> next = NN;
	}

	void pop()
	{
		if(head == NULL)
			cout << "\nThe queue is empty\n";

		else if(head -> next == NULL)
			head = NULL;

		else
		{
			node* c=head;

			while(c -> next -> next != NULL)
				c = c -> next;

			c -> next = c -> next -> next;
		}
	}

	void view()
	{
		if(head == NULL)
			cout << "\nThe list is empty";

		cout << '\n';

		node* c = head;

		while(c != NULL)
		{
			cout << c -> ch << " ";
			c = c -> next;
		}

		cout << '\n';
	}

	~Stack()
	{
		delete head;
	}
};

تم تعديل هذه المشاركة بواسطة namespace في 28 يوليو 2010 في 13:11

البرمجة = الرياضيات

#3

يمكنك مراجعة عروض الـ power point في المشاركه السابقه لمعرفة كيف تستخدم الـ stack للحصول على ناتج هذه العمليه، ايضا يمكنك مراجعة كتاب Ivor Horton الخاص بـ Visual C++ 2008 و ستجد فى فصل الدوال شرح لكيفية الحصول على ناتج عملية حسابيه مثل التى عرضتها.

الحل الأخير و هو الذى افضله استخدا الـ Binary Tree فهو حل عام و سريع و ينفع فى العديد من الأمور الأخرى بخلاف الحصول على القيمه الخاصه بالمعادله (مثل تحويلها لصيغه معينه ليتم تنفيذها بإستخدام VM :wink: )

و الله ولي التوفيق

مدونتي: C++ Tips and Tricks

#4

شكري وتقديري الى الاخ namespace على المجهود والاخ محمد علاء الدين كل الشكر والتقدير لكم في مساعدتي

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

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