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

طلب مساعدة في كود برنامج calculator مرررة ضروري

مغلق
بدأه Mrs.Questions في 12 أبريل 2004 · 15 رد · 2,385 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مساء الخيــــر للجميــــع .....

لو سمحتو يا مبرمجين ساعدوني في هذا الواجب هو assignment بس أنا مني عارفة أسويه عشان مني فاهمة ال stack وأنا أرفقت مع الموضوع ملفين ( سويت فيهم scanللورقة اللي فيها السؤال ) إذا ممكن تشوفوها وتقولولي كيف طريقة الحل بس أبغا أفهم أهم شي يعني إذا في أحد يقدر يشرح لي فكرة البرنامج والخطوات حقت الحل أكون ليه مشكــــــــــــــــــورة

ملاحظة : الورقة مكتوب عليها ملاحظات كثير بخط يدي كتبتها مع الأستاذة ماعليكم منها يعني أهم شي شوفوا السؤال الأساسي

Assignment__2_1.pdf

#2

وهذا هو الملف اللي فيه تكملة السؤال ....

Assignment__2_2.pdf

#3

السلام عليكم ,,

أنا آسف أختي سيدة الأسئلة لأن من قوانين المنتدى عدم الاجابة المباشرة على الأسئلة والواجبات ,, وكل المنتديات التي في العالم لاتفعل ذلك ,,

الأمر الآخر البرنامج المطلوب يأخذ وقتا ليس بالهين ,,

فلو بسطتي الاسئلة وحاولتي فربما نساعدك أكثر ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#4

السلام عليكم :

آنستي العزيزة ..... بامكاننا المساعدة و لكن بشرط أن نلاحظ أنك تساهمي بحل السؤال و لا تتركي حل مجمل السؤال على عاتقنا .... ابدأي بالحل و من ناحيتي سأساعدك ..... ان شاء المولى

مدونتي

http://mbnoimi.net

#5

مررة شكرا HGB و C&DEL

أنا قاعدة بدأت أحله وحأنزل اللي حليته والأفكار حقتي عشان تشوفوها إذا صح ولا غلط بس في عندي سؤال إذا ممكن .....

بالنسبة لل class .. أيش الفرق لمن أعرف ال function في ال private ولا في ال public ؟؟؟

لأنه أنا عادة أعرف الfunctions في ال public بس هيا طالبة إنه بعضها أعرفها في ال private ????!!!!!!

تم تعديل هذه المشاركة بواسطة Mrs.Questions في 13 أبريل 2004 في 14:16

#6

عندما تعرفين الfunction في ال public يستطيع اي object أو دالة خارج ال class الوصول إليها، ولكن عندما تعرفينها في ال private لاتستطيع أن تنادي الدالة إلا الدوال الموجودة تبع الclass فقط.

مثال:

class Tree{
public:
	Tree();
	void insertNode(const int &);
private:
	TreeNode *rootptr;
	void insertNodeHelper(TreeNode **, const int &);
};

لا حظي، هذا هو كل عملها مع أنها معرفة في الpublic

void Tree::insertNode(const int &value){
	insertNodeHelper(&rootptr,value);
}

وللاستعمال:

itree.insertNode(ival);

فكر بطريقة أخرى

#7

الله يجزيك خيـــــر يا walcom ماقصرت ...

كان قاعد يطلع لي error وماني فاهمة أيش المشكلة ودحين عرفت الخطأ حقي فين ( طلعت مستخدمة الفنكشن اللي في private في class ثاني يعني مو نفس ال class حقها )

عموما الله يعطيك العافية

#8

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

سوف ابداء بشرح ال Assignment بدون مقدمات

ال Stack

ال Stack هو عباره عن جزء من الذاكره نحدد له حجم و نريد ان نستخدمه بطريقه منظمه (Abstruct data structure) بعكس الطريقة العشوائيه (Random access) والتي بموجبها نستطيع الحصول على معلومه بدون ترتيب معين..

هناك انواع كثيره من ال (Abstruct data structure) , مثل ال Queue و الاشجار( Trees) و ال( Linked list) إلخ.

نظام ال Stack يدعى (LIFO) وتعنى (Last in First Out) اى ان اخر معلومه تدخل الذاكره هى التى نستطيع الحصول عليها اولاُ ثم المعلومه ماقبل الاخيره وهاكذا..

ال Stack فيه عمليتان Push و Pop و تستخدم على النحو التالى :

push(5)
push(6)
pop(x)
pop(y)

الان المتغير x قيمته 6 فى حين ان المتغير y قيمته 5.

ال Queue هى تماماُ عكس ال Stack و نظام ال Queue يدعى (FIFO) وتعنى (First in First Out) .

ال Queue فيه عمليتان Put و Get و تستخدم على النحو التالى :

put(5)
put(6)
get(x)
get(y)

الان المتغير x قيمته 5 فى حين ان المتغير y قيمته 6.

ارجو ان تكون الفكرا واضحه

Postfix و infix

الطريقه التى نكتب بها المعادلات الحسابيه تدعى infix مثال على ذالك:

1-2*3-4+5

كما نلاحظ العمليه الحسابته توضع بين الارقام.

طريقة ال postfix كانت تستخدم فى الالات الحاسبه القديمه مثل ال HP. مثال على ذالك

Postfix
12+5-
in infix this will be
2+1-5

نستطيع ان نحصل على postfix من infix بالإستعانه بال Binary tree مثال على ذالك نفترض المعادله التاليه

((7-a)/5)*((a+b)*3

tree.gif

(يارب تكون الصوره ظهرة)

الان نبداء ببناء ما بداخل الاقواس, وهى على التوالى a+7 و a+b كما هو موضح فى الصورتين 1 و 2 . الصوره 1 تصبح فرع فى الصوره 3 و كذالك الصوره 2 تصبح فرع فى الصوره 4. فى الصوره 5 يصبح 3و4 فروع و عالامة الضرب هى اساس الشجرة.

للحصول على ال postfix نقوم بالتالى :

نقوم بمتابعة الخط x فى الصوره رقم 6, فى كل اخر مره نمر على فرع , نقوم بتدوين ذالك الفرع و بذالك يتكون لدينا ال opstfix expression .

7a-5/ab+3**

معذرة على ضعفى فى التعبير بالعربيه

هذا و السلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#9

مشكور يا أحمد الله يعطيك العافية ....

بس في سؤال إذا معليش : عشان إنت قلت الطريقة اللي نحول فيها ال infix إلى postfix باستخدام ال binary tree بس أنا مني فاهمة فكرة ال tree عشان بصراحة ماأخذناه في الجامعة وماقد قرأت عنه

إذا ممكن توضح لي الفكرة أكثر أو إذا كان ممكن أسويه بطريقة ثانية من غير ماأستخدم ال binary tree ؟!!

my regards

#10

السلام عليكم

ال Binary tree عباره شجره كل اصل له فرعين على اعلى تقدير, على سبيل المثال لو اردنا بناء شجره من المعادله 1+2 تصبح عالامة ال + هيا الاساس و 1 و 2 الفروع.

كذالك المعادله (3+4)*(1+2) الاساس هو علامة الضرب ولها فرعان و هما عالامتى الزائد,

وكل علامة زائد لها فرعين و هما 1و2 لالؤلى و 3و4 للثانيه..

بعد الإنتهاء من الشجره تستطيعين تحويل المعادله ال postfix على النحو التالى:

لكل شجره (او فرع شجره) تقومين بتدوين الفرع الذى هو على الشمال ثم الذى على اليمين و اخيراُ الفرع الاساسى.

بعد القيام برسم الشجره للمعادله (3+4)*(1+2) نجد ان * لها فرعين و هما (1+2) من ناحية الشمال و (3+4) من ناحية اليمين.

نبداء بالشمال سنجد (1+2) اى ان اساس هذا الفرع هو علامة ال + و الفروع 1و2.

بما ان 1و 2 ليس لهم فروع اذاً نبدا بتدوين 1 وهو الذى على الشمال ثم ندون 2 .

الان انتهينا من فروع ال + التى على الشمال فندونها.

الان لدينا +12.

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

و اخيراً بعد ان انهينا جميع الفروع ندون علامة الضرب.

الحاصل النهائ يصبح.

*+34+12

ارفق الان صوره للمسئله التى كنت قد شرحتها فى الرد السابق.

والسلام

post-14-1082057942_thumb.gif

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#11
#include <iostream>

using std::cout;
using std::endl;
using std::cin;

class stack {
private:
	int top; //location of the top element
	char stackarr[20];
	bool isempty(char []); //func. to check if stack is empty 
	bool isfull(char []); //func. to check if stack is full
public:
	stack(); //zero argument constructor
	void push (stack &); //func. to add an element to the stack, if possible
	void pob (stack &); //func. to delete an element from stack, if possible
};


class calculator {
private:
	char expression[30]; //for infix and postfix
	stack operator;
	stack operand;
public:
	calculator(char); //one argument constructor for initializing expression
	void checkexpression(char expression);
	void convertpostfix(char expression);
	long calculate();
};



stack::stack()
{
	for (int i=0;i<20;i++)
  stackarr=0;  
}


bool stack::isempty()
{
	int count=0;
	for (int i=0;i<20;i++)
	{
  if (stackarr==0)
 	 count++;
	}
	if (count>0)
	{
  top=-1; 
  return true;
	}
	else
  return false;
}


bool stack::isfull()
{
	int count1=0;
	for (int i=0;i<20;i++)
	{
  if (stackarr==0)
 	 count1++;
	}
	if (count1==0)
  return true; 
	else
  return false; 
}


void push(stack &t)
{
	if (isempty)
	{
  stackarr[++top]=t; //t is the value that we want to push in the stack
	}
}


void pob(stack &t1)
{
	if (isfull)
	{
  t1=stackarr[top--]; //t1 is the value we want to pop
	}
}

هذه بدايتي في الحل بس ماأدري إذا صح ولا غلط ؟؟!!!!!

وكمان مني عارفة أسوي constructor with one argument for intializing the expression in the calculator class

#12

السلام عليكم

البروجرام به اخطاء وللاسف غير منسق, لنبداء بال stack و الباقى على الله ثم عليكى.

class Stack{
  char* a;
   int top;
   int size;
   public:
   class Underflow{};
     class Overflow{};
    class Largesize{};

   Stack(int size);
   ~Stack();

   void Push(char c);
   char Pop();
};


Stack::Stack(int s){
   top=0;
   if(s < 0 || s > 500)throw Largesize();
   size=s;
   a=new char;
}

Stack::~Stack(){
   delete[]a;
}

void Stack::Push(char c){
   if(top == size)throw Overflow();
   a[top]==c;
   top++;
}

char Stack::Pop(){
   if(top == 0)throw Underflow();
   top--;
   return a[top];
}

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#13

الله يجزيك خيــــــــر على مساعدتك

بس في سؤال ..

class Underflow{};

class Overflow{};

class Largesize{};

هذه يعني كلاسات جاهزة للإستخدام فقط ؟؟؟؟؟

وفي مشكلة إنه في اثنين function في ال private طالبتهم مننا إجباري نسويهم

#14

السلام عليكم

بالنسبه ل

class Underflow{}; 
class Overflow{};
class Largesize{};

فهذه تسمى Exeption Handling وهى لمعالجة الخلل فى البرنامج. مثال على ذالك :

void MyFunction()
{
   try{
      Stack::Push('c'); // Push functions tries to push a value into the stack
      cout<<"Value has been added to the stack";
   }
   catch(Stack::Overflow) // Push function didn't find space on the stack so it throws an exception
{
      cout<<"Sorry the stack is full! Try to pop some items before pushing any new values"; // here we handle the exception
}

اما بالنسبة لسؤال ال Private function إن شاء الله سوف اجيب عليه لاحقاً لضيق الوقت لدى الان, ولو تطوع احد الاخوه نكون له من الشاكرين.

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#15

السلام عليكم ,,

بارك الله فيك أخي أحمد غريب على حب المساعدة ,,

وبالنسبة للدوال ال Private يمكن اضافة الدالتين IsFull و IsEmpty ,, للكلاس حيث تكون ,,

class Stack{
 char* a;
  int top;
  int size;

bool IsFull();
bool IsEmpty();

  public:
  class Underflow{};
    class Overflow{};
   class Largesize{};

  Stack(int size);
  ~Stack();

  void Push(char c);
  char Pop();
};
bool Stack::IsFull()
{
if (top==size)
return true;
else return false;
}

Stack::IsEmpty()
{
if(top==0)
return true;
else return false;
}

حيث يمكن استخدام الدالتين IsFull و IsEmpty من داخل دوال Push و Pop بحيث ستكون أفضل من شرطي الاختبار الموضحين في دوال Push و Pop الاعتيادية ,,

وفقك الله ,,

تم تعديل هذه المشاركة بواسطة HGB في 19 أبريل 2004 في 01:16

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#16

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

آسفة لتأخري في الرد بس ظروف الإمتحانات في الأيام اللي راحت ...

مشكـــورين كلكم وماقصرتوا والله

بس كنت أبغا أسأل عن شي لو سمحتو ........ دحين أنا قاعدة بأسوي class calculator بس مني عارفة كيف أقدر أخليه يفرق بين الأرقام والعمليات يعني في الexpression عشان أحولها ل postfix مني عارفة كيف أقوله إنه إذا لقيت رقم حطه في ال stack حقت ال operand وإذا لقيت عملية حطها في ال stack حقت ال operator

الله يخليــــــكم أحد يساعدني لأنه البرنامج لازم أسلمه بعد بكرة

وجزاكم الله خير

أختكم .. mrs.questions

1

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…