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

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

بدأه رجاء مصطفى في 29 مايو 2013 · 8 رد · 860 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
 اكتب برنامج بلغة 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 = 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 = S.set;}bool setType::SetEmpty(setType S) {    for (int i = firstValue; i <= lastValue; i++)        if (S.set == true) return false;}bool setType::SubSetOf(setType S, setType T) {    for (int i = firstValue; i <= lastValue; i++)        if (S.set && !T.set) return false;}void setType::Union(setType S, setType R, setType& T) {    for (int i = firstValue; i <= lastValue; i++)        T.set = R.set || S.set;}void setType::AddElement(setType& S, int U) {    S.set = true;}void setType::SetDisplay(setType S) {    for (int i = firstValue; i <= lastValue; i++) cout << S.set << " ";}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);}

 

تم تعديل هذه المشاركة بواسطة Sn@CkeR في 29 مايو 2013 في 14:41 — السبب: تنسيق الكود

#2

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

 

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

#3

السلام عليكم

 

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

#4

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

 

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

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

#5

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

#6

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

#7

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

#8

الدوال المستخدمه هي 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 = 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 == true) return false;	}    bool SubSetOf(setType& T) {		for (int i = 0; i < universe; i++)			if (set && !T.set) return false;	}    void Union(setType& S, setType& R) {		for (int i = 0; i < universe; i++)			set = (R.set || S.set);	}    void AddElement(char U) {		U -= '0';		if (U < 0 || U >= universe) return; // failed should do something		set = true;	}    void SetDisplay() {		for (int i = 0; i < universe; i++)			cout << set << " ";	}};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 في 30 مايو 2013 في 14:15

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

#9

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

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

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

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

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

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

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