• 0
رجاء مصطفى

[ تمت الإجابة ]فئة لحفظ الأرقام الزوجية والفردية

سؤال

 اكتب برنامج بلغة c++ يعرف مجموعةلألعداد الفرديةOddNumbers ومجموع اإلعدادالزوجية
EvenMumbers ما بين 0 الى 9 ، بحيث يقومالبرنامج بإدخال مجموعةمن االرقام ويطبع مجموعةاالرقامالزوجية واالرقامالفرديةالتي
يتكون منھا العدد المدخل .
 
هاد كان السؤال  و المرفق هو حلي يشتغل ولكن فيه خطأ مو واضح معي 
 
هل استطيع انزال حل اخر لسؤال قمت بحله و تساعدوني بحل اخطائه؟؟
#include <iostream.h>#include <conio.h>char firstValue = '0', lastValue = '9';const universe = 10;class setType {private:    bool set [universe];public:    void SetCreate(setType& S);    bool IsElementOf(setType S, int E);    void SetAssign(setType S, setType& T);    bool SetEmpty(setType s);    bool SetEqual(setType s);    bool SubSetOf(setType S, setType T);    void Union(setType S, setType R, setType& T);    void Intersection(setType S, setType R, setType& T);    void Difference(setType S, setType R, setType& T);    void AddElement(setType& S, int U);    void RemoveElement(setType& S, int U);    void SetDisplay(setType S);};void setType::SetCreate(setType& S) {    for (int i = firstValue; i <= lastValue; i++)        S.set[i] = false;}bool setType::IsElementOf(setType S, int E) {    return S.set[E];}void setType::SetAssign(setType S, setType& T) {    for (int i = firstValue; i <= lastValue; i++)        T.set[i] = S.set[i];}bool setType::SetEmpty(setType S) {    for (int i = firstValue; i <= lastValue; i++)        if (S.set[i] == true) return false;}bool setType::SubSetOf(setType S, setType T) {    for (int i = firstValue; i <= lastValue; i++)        if (S.set[i] && !T.set[i]) return false;}void setType::Union(setType S, setType R, setType& T) {    for (int i = firstValue; i <= lastValue; i++)        T.set[i] = R.set[i] || S.set[i];}void setType::AddElement(setType& S, int U) {    S.set[U] = true;}void setType::SetDisplay(setType S) {    for (int i = firstValue; i <= lastValue; i++) cout << S.set[i] << " ";}main() {    setType OddNumbers, EvenNumbers, Numbers, InLineNumbers;    char ch;    //Create a Set to represent Even Numbers    EvenNumbers.SetCreate(EvenNumbers);    EvenNumbers.AddElement(EvenNumbers, '0');    EvenNumbers.AddElement(EvenNumbers, '2');    EvenNumbers.AddElement(EvenNumbers, '4');    EvenNumbers.AddElement(EvenNumbers, '6');    EvenNumbers.AddElement(EvenNumbers, '8');    //Create a set to represent Odd Numbers    OddNumbers.SetCreate(OddNumbers);    OddNumbers.AddElement(OddNumbers, '1');    OddNumbers.AddElement(OddNumbers, '3');    OddNumbers.AddElement(OddNumbers, '5');    OddNumbers.AddElement(OddNumbers, '7');    OddNumbers.AddElement(OddNumbers, '9');    //Create a set of Even and Odd Numbers    Numbers.Union(OddNumbers, EvenNumbers, Numbers);    Numbers.SetDisplay(Numbers);    cout << endl << endl;    cout << "\n";    //Create a set InLineNumbers which will be used to store any   Numbers that we find in the  //line of text    InLineNumbers. SetCreate(InLineNumbers);    while (ch != '0') {        cin >> ch;        if (InLineNumbers.IsElementOf(Numbers, ch))            InLineNumbers.AddElement(InLineNumbers, ch);    }    //Display the Set InLineNumbers that appeared in the line    InLineNumbers.SetDisplay(InLineNumbers);}

 

تم تعديل بواسطه [email protected]
تنسيق الكود
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

8 إجابة على هذا السؤال .

  • 0

اهلين اخوي ...

 

ممكن انك تكتب الكود بشكل منسق ..لاني لا استطيع قرائته :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

 

ما دمت تتعامل مع أرقام صحيحة .. لماذا تستخدم char ؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وعليكم  السلام 

 

صححتها و استخدمت int   و بالخطأ نسخت لكم  الحل السابق 

اعذرني على ارفاق الكود كل ما اعمله يطلع شكله مو صح 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هل المطلوب هو التأكد من زوجية أو فردية العدد أم الأرقام المكونة للعدد ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

المطلوب هو عند ادخال رقم من عدة خانات ان يطبع بدل الرقم الزوجي 1 و الرقم الفردي 0

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعني مثلا, إذا كانت المدخلات هي 2914 ستكون المخرجات 1001 ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الدوال المستخدمه هي Instance Functions و بالتالي لا داعي لتمرير الـ setType، فقط قم بإستخدام this داخل الـ function او قم بإستخدام العناصر الـ private مباشرة.

 

أيضا استخدامك لـ firstValue و lastValue كـ indexes للمصفوفة خاطئ و ذلك لأن قيمة firstValue ليست صفر و إنما القيمة المقابلة للحرف صفر و هي 48 و هذا سيسبب Overflow وقت التشغيل.

 

الدالة IsElementOf ستسبب Overflow إذا كانت القيمة المدخلة ليست بين صفر و 9.

 

الدالة SetAssign لا تقوم بشي جديد و بالتالي لا داعي منها حيث ان المترجم سيقوم بإنشاء copy constructor سيتكفل بهذا الأمر، فقط قم بإستخدام = لعملية الـ assignment.

 

عندما تقوم بتمرير كائن لدالة إستخدم التمرير بالمرجع حتى لا يتم نسخ الكائن.

 

#include <iostream>using namespace std;const int universe = 10;class setType {    bool set [universe];public:	setType() {		for (int i = 0; i < universe; i++)			set[i] = false;	}    bool IsElementOf(char E) {		E -= '0';		if (E < 0 || E >= universe) return false;		return set[E];	}    bool SetEmpty() {		for (int i = 0; i < universe; i++)			if (set[i] == true) return false;	}    bool SubSetOf(setType& T) {		for (int i = 0; i < universe; i++)			if (set[i] && !T.set[i]) return false;	}    void Union(setType& S, setType& R) {		for (int i = 0; i < universe; i++)			set[i] = (R.set[i] || S.set[i]);	}    void AddElement(char U) {		U -= '0';		if (U < 0 || U >= universe) return; // failed should do something		set[U] = true;	}    void SetDisplay() {		for (int i = 0; i < universe; i++)			cout << set[i] << " ";	}};int main() {    //Create a Set to represent Even Numbers	setType EvenNumbers;    EvenNumbers.AddElement('0');    EvenNumbers.AddElement('2');    EvenNumbers.AddElement('4');    EvenNumbers.AddElement('6');    EvenNumbers.AddElement('8');    //Create a set to represent Odd Numbers	setType OddNumbers;    OddNumbers.AddElement('1');    OddNumbers.AddElement('3');    OddNumbers.AddElement('5');    OddNumbers.AddElement('7');    OddNumbers.AddElement('9');    //Create a set of Even and Odd Numbers	setType Numbers;    Numbers.Union(OddNumbers, EvenNumbers);    Numbers.SetDisplay(Numbers);    cout << endl << endl << endl;    //Create a set InLineNumbers which will be used to store any   Numbers that we find in the  //line of text	setType InLineNumbers;    char ch = 0;    while (ch != '0') {        cin >> ch;        if (Numbers.IsElementOf(ch)) InLineNumbers.AddElement(ch);    }    //Display the Set InLineNumbers that appeared in the line    InLineNumbers.SetDisplay();}

قارن الكود الجديد بالخاص بك حتى تعرف ما الأخطاء الأخرى التى وقعت بها.

 

 

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

تم تعديل بواسطه C++er
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا جزيلا لك ..

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .