السسلام عليكم ورحمة الله وبركاته ..
عندي كويز بكرا فياليت لو حد يشرح لي بشي من الاختصار :)
هل يمكن لي طباعه الstack من الأسفل للأعلى .. كيف ؟
لان مثل مانعرف الستاك no random access
ارجو مسساعدتكم جزاكم الله خير ,
السسلام عليكم ورحمة الله وبركاته ..
عندي كويز بكرا فياليت لو حد يشرح لي بشي من الاختصار :)
هل يمكن لي طباعه الstack من الأسفل للأعلى .. كيف ؟
لان مثل مانعرف الستاك no random access
ارجو مسساعدتكم جزاكم الله خير ,
بالتاكيد يمكن طباعة الاستاك من اسفل الى اعلى اسهل طريقة هي نسخ الاستاك الى استاك اخر وطباعة الاستاك الثاني لانه سوف يكون عكس الاول
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

كيف ؟ يعني
تقصد ندخل بالستاك الأولى ,
ونسوي حذف لستاك ثانية ؟
أو بإمكاننا الوصول لها باستخدام single linkedlist
طيب انت بتستخدمي الstack حق الcollections ولا هذا stack تبع data structure?
الاجابه بتختلف حسب نوع الاستاك
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

stack as data structure ..
مو تبع الcollections
كيف تشتي تستخدمي الlinked list?
الطريقه الاسهل هي انك تعملي pop للاستاك الاول وتعملي push داخل الاستاك الثاني ، بعد ما تكملي ترجعي تنسخي الاستاك الثاني داخل الاول
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

كيف . بديت اتلخبط ؟
انت تقصد باستخدام المصفوفات والا بالينكد ليست
يعني طريقة التمثيل كيف بالمصفوفة والا كلسته ..
ممكن توضح جزاك الله الف خير
والمعذرة على عدم فهمي ,
عندي بكرا هذا الاختبار واختبار آخر , ضايعه ايهم اذاكر :( راسي والله بينفجر
تم تعديل هذه المشاركة بواسطة طــآلبة حآسب آلي . في 17 مايو 2011 في 22:06
يا اختي كذا اثنين ستاك من دون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!

باستخدام المصفوفات
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!

ي اخوان كيف يمكنني عمل كود للتحويل من infix to postfix ...
؟
باستخدام الاستاك ولا باستخدام الtree?
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

لا بالستاك ..
التري لسا مادرستها راح ادرسها الاسبوع هذا ..:(
انتي قصدك لما تسوي كذا
مثلا
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!

يب هذا قصدي ..
لكن برموز ,, انا اقصد بالضبط :.
A+B=AB+
وهكذا اضافة لحالات يكون فيها اقواس ..
(A+B)*(C+D) = AB+CD+* ----\ A+B*(C+D) =ABCD+*+
هذه بعض امثلة .. :)
اعرف احله ,, لكن مو عارفة كيف اسويه ككود
تم تعديل هذه المشاركة بواسطة طــآلبة حآسب آلي . في 21 مايو 2011 في 22:02
حطي الرموز داخل الاستاك مثلا :
+5*23
راح تعملي
push ('+')
push('5')
push('*')
push('3')
push('2')ببيصير الاستاك شكله كذا
3
2
*
5
+
بعدين خرجيهم ، لما تخرجيهم افحصي اللي خرجتيه هل هو عدد؟ ام هو اشارة؟
الان لما تخرجي ، اول شي خرجي 3 بعدين خرجي الاثنين بعدين طبقي عليهم عملية الضرب ، خرجي الخمسة وبعدي طبقي عملية جمع مع الناتج الاول
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

المستخدم يدخل الجملة مو انا ,,
يعني يعطيني infix
A+B
انا اعطيه البوستفيكس
عادي كل ما المستخدم يدخل رقم حطيه داخل الاستاك بس هذه تعتبر من المشاكل الكلاسيكية يعني لو دورتي شويه في النت بتحصلي عليها امثله كثيره جدا
بس المثال اللي مذكور هنا طويل ويمكن ما يعجبك علشان كذا شوفي
كل اللي بتسويه انك تقلبي الاستاك وبكذه تغيري من in الى post او العكس
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

أنا بحثت كثيير لكنها ماتخدم ابد ..
وصدقت ماراح يعجبني الطويل ,, بس مو مني ..
الدكتورة , تقول " المبرمج الحقيقي , بيكتب برنامج بأقل أسطر وخالي من كل الأخطاء "
مشكلتي مو متخيلة كيف اسويه . يجي برنامج صغير ..
استخدمي الافكار اللي مكتوبه ، صدقيني مافي حد راح يجيب لك برنامج اقصر او افضل من موقع ويكيبيديا
لما تجي لل data structure قصير تعني 30 - 40 سطر على الاقل ههههههههههههههه
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

#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;
}}}هههه المفروض حسب كلامها اني اكتبه بطريقتها هي مو طريقتي ابدا .. وهذا نفس برنامج الستاك اللي مسويته من قبل ,,
فقط اضفت السويتش وقالت اكتبيه برنامج كامل : (
احاول افهم حالات السويتش واكتبها حبة حبة ,,
صلحت الكود
#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!

طيب شكرا .. لكن مو هذا موضوعي ,,
key اختيار المستخدم لو يبغى يحول من infix to postfix
او بين الحالات الثاينة ,,
البرنامج كتبته من قبل ,, لكن اضافت عليه الدكتورة السويتش ,, وقالت كملوا ..
اللي هي التعليقات اللي كتبتها بالcase
عملت كذا عشان محدش يجيب لها برنامج كبير . او طريقة ثانية ..
ايش النقاط المفروض اسويها بنفس الكود اللي عندي عشان اقدر احول ..
في الحالة الاولي تستدعي الدوال حق push , pop بحيث تعملي التحويل بس يفضل تعملي داله خاصة بالتحويل واستدعي الداله هذه من داخل السويتش
infixToPostFix();
في الحالة الثانيه طبقي تطبيق عادي يعني مش المستخدم اللي بيدخل القيم ، انتي اللي تدخلي القيم للاستاك وتحسبي القيمه
الحالة الثالثة عكس الاولى يعني تعملي دالة تحويل وتستدعيها
postfixToInfix();
طبعا البارامترز انت تحديدها ، زي ماقلت لك مش ضروري تعملي داله بس بيكون احسن
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

وكيف اتعامل مع الأولوية؟ ,, يعني الضرب والجمع مثلا لو دخلهم المستخدم في العبارة ,,
او عملييتين الجمع . لو نسوي push لعملية الجمع ونسوي push برضوا لعملية الجمع
راح نسوي بوب لعملية الجمع الأخيرة ونكمل ..
الضرب والقسمة قبل الطرح والجمع
ايه عملية حسابية تتالف من عددين وناتج واشارة
خرج العنصر الاول في المتغير الاول والعنصر الثاني في المتغير الثاني بعدين افحصي العملية وطبقيها عليهم وحطي الناتج في المتغير الثالث
بس خلي بالك قد يكون باقي بس عنصر واحد في الاستاك في هذه الحالة تطبقي العملية مع اخر ناتج
انا عارف اني اربكتك هههههههههه :) خلاص لما تجي نكمل إن شاء الله
تم تعديل هذه المشاركة بواسطة 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!
