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

اختبر قدراتك في C/CPP - الحلقة الرابعة, الجزء الخامس

مغلق
بدأه Snack3r في 12 سبتمبر 2012 · 4 رد · 577 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الحلقة الأولى.

الحلقة الثانية - الجزء الأول.

الحلقة الثانية - الجزء الثاني.

الحلقة الثانية - الجزء الثالث.

الحلقة الثانية - الجزء الرابع.

الحلقة الثانية - الجزء الخامس.

الحلقة الثانية - الجزء السادس و الأخير.

الحلقة الثالثة - الجزء الأول.

الحلقة الثالثة - الجزء الثاني.

الحلقة الثالثة - الجزء الثالث.

الحلقة الثالثة - الجزء الرابع.

الحلقة الثالثة - الجزء الخامس و الأخير.

الحلقة الرابعة - الجزء الأول.

الحلقة الرابعة - الجزء الثاني.

الحلقة الرابعة - الجزء الثالث.

الحلقة الرابعة - الجزء الرابع.

مرحبا بكم إخوتي الكرام في الجزء الخامس من الحلقة الرابعة من سلسلة اختبر قدراتك, قمتُ بتقسيم الحلقة الرابعة إلى عدة أجزاء, مُرتبة حسب الصعوبة.

أجزاء هذه الحلقة ستكون خاصة بمسائل الــ OOP.

الإختبار الرابع (الجزء الخامس) :

لتكن لدينا الفئة التالية :

class complexe {
    double x, y;
public:
    complexe(double r = 0, double i = 0);
    complexe(complexe &); // ou complexe (const complexe &)
};

إذا كانت لدينا الإعلانات التالية في البرنامج الرئيسي :

complexe z(1, 3);
void fct(complexe);

كيف ستكون نتائج الأوامر التالية ؟

z = 3.75; // instruction 1
fct(2.8); // instruction 2
z = 2; // instruction 3
fct(4); // instruction 4

علل إجابتك !

سأضع حل السؤال بعد إنتهاء عرض المحاولات.

1
#2

مجرد محاولة رغم أنني أجد السؤال غامضاً بعض الشيء ...!!

اقتباس

  z = 3.75; // instruction 1

سيكون r=3.75 , i=0 وذلك لأن عملية المساواة تكافئ استدعاء الباني ... وفي حالتنا أخذ الباني القيمة الأولى واعتبر الثانية افتراضية

اقتباس
fct(2.8); // instruction 2

سيحدث عملية بناء ضمنية للكائن واسنخدام الباني الأول واعتبار القيمة الثانية الافتراضية i=0 كما حدث في المرة السابقة

اقتباس
z = 2; // instruction 3

مثل السؤال الأول !!

اقتباس
fct(4); // instruction 4

مثل السؤال الثاني !!

لابد أن حلي خاطئ .. فلا يعقل أن تكون إجابات السؤال بهذه السذاجة !!laugh.giflaugh.gif

تحياتي للجميع

بالتوفيق

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 12 سبتمبر 2012 في 18:54

#3

بدون استخدام الكومبايلر, مجرد حدس, محاولة/

z = 3.75;

ربما خطأ, لا يمكن الكاست من float الى complex

fct(2.8);

ايضا ربما خطأ في نوع البارامتر, و ان لم يكن خطأ في نوع البارامتر, اللاينكر ما راح يجد تعريف الدالة fct

z = 2;

نفس الحالة 1

fct(4);

نفس الحالة 2

[سبحان الله و بحمده, سبحان الله العظيم]

#4

instruction 1 : تؤدي إلى عملية Casting من double إلى complexe عن طريق استدعاء دالة البناء بوسيط واحد و بالتالي سيحتفظ الوسيط الثاني يقيمته الإفتراضية (صفر).

instruction 2 : عمليا, هذه الكتابة خاطئة ! لكن لو نظرنا إلى الكتابة من مجرد إرسال وسيط من نوع double إلى دالة كان من المفروض أن تستقبل كائناً من نوع complexe, نجد أن الكتابة تؤدي إلى عملية Casting من double إلى complexe (كما في الأمر السابق), لكن هذه المرة سيتم إنشاء نسخة من complexe عن طريق استدعاء دالة البناء التي تستقبل كائناً من نوع complexe ثم سيتم إرسال النسخة إلى الدالة fct.

instruction 3 و instruction 4 يلعبان نفس الدور كما في الأمرين السابقين, فقط في هذه المرة سيتم تحويل من int إلى complexe عن طريق تحويل int إلى double ثم تحويل double إلى complexe.

#5

تم منح النقاط للمشاركات المفيدة و حذف الردود الغير مفيدة, حفاظا على تنسيق الموضوع.

يُغلق.

أراكم في الجزء السادس من الحلقة الرابعة.

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

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