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

مسابقه

مغلق
بدأه Super_emad55 في 13 أبريل 2006 · 19 رد · 1,510 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا السؤال وضعته لكن بعد تعديل المنتدى راح, فاعيده

من يستطيع كشف المشكله بهذا البرنامج و حلها.

من يستطيع كشف المشكله و لم يستطع حلها, فليذكر ماهي المشكله.

هدفي خلق روح المنافسه بين الشباب, و سوف اضع الحل.

شباب اروني العقول العربيه الاصيله :D

#include <iostream>

using namespace std;

class dyn

{

public:

dyn();

int* arr;

};

dyn::dyn()

{

arr=new int[10];

}

void f(dyn B)

{

b.arr[0]=9;

}

void main()

{

dyn a;

f(a);

cout<<a.arr[0]<<endl;

}

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#2

هذا هو الكود مرة اخرى

#include <iostream>
using namespace std;
class dyn
{
public:
dyn();
int* arr;
};
dyn::dyn()
{
arr=new int[10];
}
void f(dyn 
{
b.arr[0]=9;

}
void main()
{
dyn a;
f(a);
cout<<a.arr[0]<<endl;
}

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#3

اسف شباب, هذا هو الكود كامل

اقتباس
#include <iostream>

using namespace std;

class dyn

{

public:

dyn();

int* arr;

};

dyn::dyn()

{

arr=new int[10];

}

void f(dyn d)

{

b.arr[0]=9;

}

void main()

{

dyn a;

f(a);

cout<<a.arr[0]<<endl;

}

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#4

شباب , بس حسسوني انكم على الاقل عم تقرأ الموضوع ... :(

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#5

the name of (dyn)object in f functhion must be b not d

تم تعديل هذه المشاركة بواسطة The Cpp في 16 أبريل 2006 في 04:02

abofahad5515@hotmail.com

#6

سوبر الفكره حلوه بس ياليت تحط برامج اقل مستوى يعني بدون كلاس وبوينتر

لان انا مبنتدئه ولم اخذها بعد لنتنافس نحن المبتدئين ايضا نحن نحتاج برامج وافكار غريبه

لاننا في البدايه ..شكرا لموضوعك الرائع..

#7

the cpp اخي هذا خطأ مطبعي اسف, و لكن هذا لا يحل المشكله الي نحنا فيها ;)

اختي دلوعة الدلع هذه الاسئله تنشط العقل لدى الشباب :D

و على ايت حال غدا اذا لم يوضع الحال سوف اضعه

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#8

"اختي دلوعة الدلع هذه الاسئله تنشط العقل لدى الشباب "

اقصد عقول المبرجين و المبرمجات

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#9

يجب ان تضع علامة & قبل b أو تستخدم ال copy constructer

ملاحظة : البرنامج يشتغل بدون هذه التعديلات

abofahad5515@hotmail.com

#10

يجب ان تضع علامة & قبل b أو تستخدم ال copy constructer

ملاحظة : البرنامج يشتغل بدون هذه التعديلات

#include <iostream>
using namespace std;
class dyn
{
public:
dyn();
int* arr;
};
dyn::dyn()
{
arr=new int[10];
}
void f(dyn &b)    // &
{
b.arr[0]=9;

}
void main()
{
dyn a;
f(a);
cout<<a.arr[0]<<endl;
}

تم تعديل هذه المشاركة بواسطة The Cpp في 16 أبريل 2006 في 18:42

abofahad5515@hotmail.com

#11

يا اخ سوبر عماد انت راجل نشيط و لك مجهود مشكور جداً.

اطيب التمنيات بالتوفيق و التقدم. لكن فى بعض الاوقات اشعر بان الالفاظ التى تستعملها مبالغ فيها. ده شعور و جايز انا اكون غلط

مثلا ما هى المشكلة فى البرنامج الذى ارسلته؟ سؤالك غير واضح

ده مثال على استعمال ال class لكن مش برنامج.... انما عايز مشاكل... ماشى

- من وجه نظر الذاكرة

1- البرنامج يحدد عدد ثابت من المتغيرات و مع ذلك اسمه dyn

2- كمان اين اخلاء الذاكرة فى دالة الهدم ناهيك عن عدم وجود داالة الهدم.

-من وجهة نظر البرمجة الشيئية

1- فين دوال البناء الافتراضية حتى تستطيع عمل مصفوفات من dyn والآخرى الخاصة بالنسخ

2- فين العمليات حتى تحقق اعادة الاستخدام

.........

المقصود ان عمل المسابقات فكرة جيدة جداً و وجود الدافع للمبادرة شئ رائع

لكن ارجو ان تتذكر ان المنتدى ده فيه اعضاء كثير على مستويات متفاوته فالرجاء الوضوح.

رجاء آخر هذا ليس خلاف شخصى انما من باب التبادل البناء

مع الشكر لحسن التفهم

#12

اخي The Cpp انا ذكرت ان المشكله تكمن في اني لم اضع علامة & ومع هذا اشتغل البرنامج. هنا تكمن المشكله. فسؤالي هو لمذا تتغير قيمة a مع اني لم اضع علامة &.

اخي PointerVC انا اعلم ان هذع مثال بسيط جدا للclasses و استخدام ال داينمك ميموري فيه. فانت لو شغلت البرنامج لو جت فيه المشكله التي ذكرتها لل اخ The cpp و هي مشكله قليل الذين يستطيعون كشفها و اعيد:

لماذا تغيرت قيمة المتغير a مع اني لم استخدم & ولم استخدم return , اظن سؤالي صار واضح الان.

اخي PointerVC , انا احترم رايك, (لا تعليق) ولكن سؤالي كان غير واضح لاني كتبته على عجله(هذا ليس عذر :( ), فتوقعت ان الشباب يجربوا البرنامج و يكتشفوا المشكله لحالهم. على اي حال. انا واصل الى مرحله متقدمه في السي بلس بلس, فانا اعلم ما اعمل.

و شكرا على المشاركه اخ PointerVC, فانا احترم رايك ;)

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#13

شباب اريد الحل, لا اريد شرح, فمن حلها يعني فهمها,

ولكم مني الشرح المفصل

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#14

اخي the cpp تعقيبا على كلامك

"البرنامج يحدد عدد ثابت من المتغيرات و مع ذلك اسمه dyn"

ما معنى داينمك و ماهي وظيفتها, هل الي انا اعملته في المثال هو ليس داينمك؟

اعتبرها مسابقه اخرى :D

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#15

ماذا ؟؟؟

لست انا من قال هذا الكلام ركز وشوف من الذي تكلم

وبالنسبة للداينمك لأنك حجزت بواسط new

أتمنى انك تنتبه للردود وأصحابها

abofahad5515@hotmail.com

#16

المشكلة في دالة النسخ Default Copy Constructor

لأنها بعد انشاء كائن جديد تقوم بتمرير بيانات الكائن المنسوخ له - لاحظ أنك ستنسخ مؤشر للمصفوفة الأصلية - لهذا ستكون المصفوفة مشتركة بين الكائن الأصلي والكائن الجديد

لحل المشكلة :

#include <iostream.h>
class dyn {
public:
  dyn();
  dyn(dyn&);
  ~dyn();
  int* arr;
};
dyn::dyn(dyn &a) {
  arr = new int[10];
  memcpy(arr, a.arr, 10*sizeof(int));
}
dyn::dyn() {
  arr = new int[10];
}
dyn::~dyn() {
  delete [] arr;
}
void f(dyn b) {
  cout << b.arr[0] << " from the function before modification" << endl;
  b.arr[0] = 9;
  cout << b.arr[0] << " from the function after modification" << endl;
}
void main() {
  dyn a;
  a.arr[0] =15;
  f(a);
  cout << a.arr[0] << " from main" << endl;
}

أضفت دالة الهدم كي يكون برنامج محترم :P

#17
#include <iostream>
using namespace std;
class dyn
{
public:
dyn();
int* arr;
}b; // creat the b here 
dyn::dyn()
{
arr=new int[10];
}
void f(dyn 
{
b.arr[0]=9;

}
void main()
{
dyn a;
f(a);
cout<<a.arr[0]<<endl;
}

the result = 9 coz the index of arr[0] = 9

but if but the d.arr[0]=9; the result not 9 it will take the number in memory

#18

اسف اخي the cpp انا اقصد الاخ PointerVC.

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#19

اخي Asm4all قراتك عاليه مشاء الله عليك, طبعا جوابك صحيح. فقط اخي اسمحلي ان اضع التعديل على برنامجي اللي وضعتع انا من الاول عشان الشباب يقارنوا

اعذروني فهذه نسخه كنت اجرب عليها التمبلت, فالحل.

#include <iostream>
using namespace std;
template <class T>
class dyn
{
public:
	dyn();
	~dyn();
	dyn(const dyn & ars);
	T* arr;
};
template <class T>
dyn<T>::~dyn()
{
	delete [] arr;
}
template <class T>
dyn<T>::dyn()
{
	arr=new T[10];
}
template <class T>
dyn<T>::dyn(const dyn & ars)
{
	arr=new T [10];
	for (int i=0;i<10;i++)
	{
  arr=ars.arr;
	}
}
void f(dyn<char> & B)
{
	b.arr[0]='a';

}
void main()
{
	dyn<char> a;
	f(a);
	cout<<a.arr[0]<<endl;
}

تم تعديل هذه المشاركة بواسطة Asm4all في 17 أبريل 2006 في 20:09

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#20

الشرح, كما قال اخي Asm4all, المشكله هي في ال Copy Constructor , فعندما نرسل by value يتم استخدام ال Copy Constructor, فيتم نسخ a الى b.و لكن المشكله ان a and b يسخدموا heap واحد.

لذا الحل هو ان نعمل over wright for the copy constructor بحيث يتم حجز خانه اخرى في ال heap ل b.

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

اذا في اي سؤال عن هذا الحل, او اذا كان شرحي مش واضح اخبروني.

و جزاكم الله خير على المشاركه في هذا السؤال و اتمنى اني اكون قدمت شئ جيد لهذا المنتدى العريق ;)

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

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

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