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

مساعدة في stack

بدأه طــآلبة حآسب آلي . في 17 مايو 2011 · 30 رد · 1,637 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السسلام عليكم ورحمة الله وبركاته ..

عندي كويز بكرا فياليت لو حد يشرح لي بشي من الاختصار :)

هل يمكن لي طباعه الstack من الأسفل للأعلى .. كيف ؟

لان مثل مانعرف الستاك no random access

ارجو مسساعدتكم جزاكم الله خير ,

#2

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

1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3

كيف ؟ يعني

تقصد ندخل بالستاك الأولى ,

ونسوي حذف لستاك ثانية ؟

أو بإمكاننا الوصول لها باستخدام single linkedlist

#4

طيب انت بتستخدمي الstack حق الcollections ولا هذا stack تبع data structure?

الاجابه بتختلف حسب نوع الاستاك

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#5

stack as data structure ..

مو تبع الcollections

#6

كيف تشتي تستخدمي الlinked list?

الطريقه الاسهل هي انك تعملي pop للاستاك الاول وتعملي push داخل الاستاك الثاني ، بعد ما تكملي ترجعي تنسخي الاستاك الثاني داخل الاول

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#7

كيف . بديت اتلخبط ؟

انت تقصد باستخدام المصفوفات والا بالينكد ليست

يعني طريقة التمثيل كيف بالمصفوفة والا كلسته ..

ممكن توضح جزاك الله الف خير

والمعذرة على عدم فهمي ,

عندي بكرا هذا الاختبار واختبار آخر , ضايعه ايهم اذاكر :( راسي والله بينفجر

تم تعديل هذه المشاركة بواسطة طــآلبة حآسب آلي . في 17 مايو 2011 في 22:06

#8

يا اختي كذا اثنين ستاك من دونlinked list ولا اي حاجه

Stack s1,s2;
.
.
.
.

s2.push(s1.pop());

بعدين دخلي الاستاك الثاني في لووب حق الطباعه

ممكن كمان تحطيه داخل مصفوفه

ممكن كمان تحطيهم في StringBuffer بعدين تعكسي بس كله يعتمد على اللي انتي درستيه

تم تعديل هذه المشاركة بواسطة mental-driller في 17 مايو 2011 في 22:15

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#9

باستخدام المصفوفات

for loop
array = s.pop()

.
.
.
for loop
print array
s.push(array)

هذه الخوارزميه

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#10

ي اخوان كيف يمكنني عمل كود للتحويل من infix to postfix ...

؟

#11

باستخدام الاستاك ولا باستخدام الtree?

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#12

لا بالستاك ..

التري لسا مادرستها راح ادرسها الاسبوع هذا ..:(

#13

انتي قصدك لما تسوي كذا

مثلا

3* (4 + 5)
*(3, +(4,5))

هذا مثلا بطريقة الانفكس تقدمي الاشارة قبل العملية الرياضية

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#14

يب هذا قصدي ..

لكن برموز ,, انا اقصد بالضبط :.

A+B=AB+

وهكذا اضافة لحالات يكون فيها اقواس ..

(A+B)*(C+D)
=
AB+CD+*


----\
A+B*(C+D)
=ABCD+*+

هذه بعض امثلة .. :)

اعرف احله ,, لكن مو عارفة كيف اسويه ككود

تم تعديل هذه المشاركة بواسطة طــآلبة حآسب آلي . في 21 مايو 2011 في 22:02

#15

حطي الرموز داخل الاستاك مثلا :

+5*23

راح تعملي

push ('+')
push('5')
push('*')
push('3')
push('2')

ببيصير الاستاك شكله كذا

3

2

*

5

+

بعدين خرجيهم ، لما تخرجيهم افحصي اللي خرجتيه هل هو عدد؟ ام هو اشارة؟

الان لما تخرجي ، اول شي خرجي 3 بعدين خرجي الاثنين بعدين طبقي عليهم عملية الضرب ، خرجي الخمسة وبعدي طبقي عملية جمع مع الناتج الاول

1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#16

المستخدم يدخل الجملة مو انا ,,

يعني يعطيني infix

A+B

انا اعطيه البوستفيكس

#17

عادي كل ما المستخدم يدخل رقم حطيه داخل الاستاك بس هذه تعتبر من المشاكل الكلاسيكية يعني لو دورتي شويه في النت بتحصلي عليها امثله كثيره جدا

The method from Wikipedia

بس المثال اللي مذكور هنا طويل ويمكن ما يعجبك علشان كذا شوفي

cpluslplus website

كل اللي بتسويه انك تقلبي الاستاك وبكذه تغيري من in الى post او العكس

1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#18

أنا بحثت كثيير لكنها ماتخدم ابد ..

وصدقت ماراح يعجبني الطويل ,, بس مو مني ..

الدكتورة , تقول " المبرمج الحقيقي , بيكتب برنامج بأقل أسطر وخالي من كل الأخطاء "

مشكلتي مو متخيلة كيف اسويه . يجي برنامج صغير ..

#19

استخدمي الافكار اللي مكتوبه ، صدقيني مافي حد راح يجيب لك برنامج اقصر او افضل من موقع ويكيبيديا

لما تجي لل data structure قصير تعني 30 - 40 سطر على الاقل ههههههههههههههه

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#20
#include<iostream.h>
int const MAX=20;
class stack {
private:
	int top;
	int arr[MAX];
public:
	stack();
	bool isempty();
	bool isfull();
	void push(int item);
	int pop();
	void print();
	int pick();
};
stack::stack()
{
	top=-1;}
bool stack::isempty(){
	if(top==-1)
		return 1;
	else return 0;
}
bool stack ::isfull(){
	int i=MAX-1;
	if(top==i)
		return 1;
	else return 0;
}

void stack::push(int item)
{
	if(isfull()){cout<<"full";
	else
		arr[++top]=item;}
}
int stack::pop()
{
	int item;
	if(isempty()){
		cout<<"empty";
	retirn -1;}
	else {
		item==arr[top];
		--top;
		return item;}
}
int stack::pick(){
	return arr[top];}
void stack::print(){
	if(isempty())
		cout<<empty";
		else{
		cout<<list==";
			for(int i=top;i>=0;i--){
				cout<<arr<<" ";
}}}
char infix[20],postfix[20],prefix[20];
void main(){
	stack list;
	while(key!=4)
		cin>>key;
	switch(key)
	case 1:
//convert from infix to postfix
		break; 
	case 2:
		//evaluate infix exxpression 3+5
		break;
	case 3:
		// cpnvert from infix to prefix 
		break;

}}}

هههه المفروض حسب كلامها اني اكتبه بطريقتها هي مو طريقتي ابدا .. وهذا نفس برنامج الستاك اللي مسويته من قبل ,,

فقط اضفت السويتش وقالت اكتبيه برنامج كامل : (

احاول افهم حالات السويتش واكتبها حبة حبة ,,

#21

صلحت الكود

#include<iostream>
using namespace std;
int const MAX=20;
class stack {
private:
        int top;
        int arr[MAX];
public:
        stack();
        bool isempty();
        bool isfull();
        void push(int item);
        int pop();
        void print();
        int pick();
};
stack::stack()
{
        top=-1;}
bool stack::isempty(){
        if(top==-1)
                return 1;
        else return 0;
}
bool stack ::isfull(){
        int i=MAX-1;
        if(top==i)
                return 1;
        else return 0;
}

void stack::push(int item)
{
	if(isfull())
	{cout<<"full"; }
        else
                arr[++top]=item;
}
int stack::pop()
{
        int item;
        if(isempty()){
                cout<<"empty";
        return -1;}
        else {
                item==arr[top];
                --top;
                return item;}
}
int stack::pick(){
        return arr[top];}
void stack::print(){
        if(isempty())
                cout<<"empty";
                else{
                cout<<"list==";
                        for(int i=top;i>=0;i--){
                                cout<<arr<<" ";
}}}
char infix[20],postfix[20],prefix[20];
void main(){
        stack list;
        while(key!=4)
                cin>>key;
        switch(key)
        case 1:
//convert from infix to postfix
                break; 
        case 2:
                //evaluate infix exxpression 3+5
                break;
        case 3:
                // cpnvert from infix to prefix 
                break;

}}}

بس مش عارف لحد الان من وين جبتي :

stack list;
        while(key!=4)
                cin>>key;

عرفي المتغير key

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#22

طيب شكرا .. لكن مو هذا موضوعي ,,

key اختيار المستخدم لو يبغى يحول من infix to postfix

او بين الحالات الثاينة ,,

البرنامج كتبته من قبل ,, لكن اضافت عليه الدكتورة السويتش ,, وقالت كملوا ..

اللي هي التعليقات اللي كتبتها بالcase

عملت كذا عشان محدش يجيب لها برنامج كبير . او طريقة ثانية ..

ايش النقاط المفروض اسويها بنفس الكود اللي عندي عشان اقدر احول ..

#23

في الحالة الاولي تستدعي الدوال حق push , pop بحيث تعملي التحويل بس يفضل تعملي داله خاصة بالتحويل واستدعي الداله هذه من داخل السويتش

infixToPostFix();

في الحالة الثانيه طبقي تطبيق عادي يعني مش المستخدم اللي بيدخل القيم ، انتي اللي تدخلي القيم للاستاك وتحسبي القيمه

الحالة الثالثة عكس الاولى يعني تعملي دالة تحويل وتستدعيها

postfixToInfix();

طبعا البارامترز انت تحديدها ، زي ماقلت لك مش ضروري تعملي داله بس بيكون احسن

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#24

وكيف اتعامل مع الأولوية؟ ,, يعني الضرب والجمع مثلا لو دخلهم المستخدم في العبارة ,,

او عملييتين الجمع . لو نسوي push لعملية الجمع ونسوي push برضوا لعملية الجمع

راح نسوي بوب لعملية الجمع الأخيرة ونكمل ..

#25

الضرب والقسمة قبل الطرح والجمع

ايه عملية حسابية تتالف من عددين وناتج واشارة

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

بس خلي بالك قد يكون باقي بس عنصر واحد في الاستاك في هذه الحالة تطبقي العملية مع اخر ناتج

انا عارف اني اربكتك هههههههههه :) خلاص لما تجي نكمل إن شاء الله

تم تعديل هذه المشاركة بواسطة mental-driller في 22 مايو 2011 في 05:17

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

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