• 0
أبو هاشم المصري

اريد عمل مصفوفة ذات حجم متغير ماذا أفعل

سؤال

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

أريد أن أعرف مصفوفة يكون حجمها متغير كما هو في الدوت نت فكيف السبيل الي ذلك

dynamic array using standard c++

0

شارك هذا الرد


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

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

  • 0

أخوي هذي تسويها بحاجه اسمها اللينكد ليست

linked list

وبالعربي اسمها القوائم المترابطة .. او اللوائح المترابطه

وهي ليست مصفوفه .. انما شبيهه بعمل المصفوفه

تحياتي لك وان شاء الله اكون أفدتك

0

شارك هذا الرد


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

شكراً علي الرد

أخي الكريم لقد لخصت الأمر بدرجة جعلتني غير مستفيد

هلا وضحت الأمر

0

شارك هذا الرد


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

بإمكانك استخدام ال pointers :

مثلاً :

int size;
cin>>size;
int *array=new int[size];

اصبح عندك مصفوفة المستخدم يحدد حجمها وتعاملها كالمصفوفة مباشرة

باستخدام الـ index مثل

array[2];

0

شارك هذا الرد


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

تحياتي لك

أخي ماتريكس اظن ان الاخ ابو هاشم يريد من المستخدم ان يحدد حجم المصفوفه اليس كذلك ؟

اذا كان كذلك

فيجب عليك استخدام اسلوب برمجي يسمى اللينكد ليست .. linked list .. او بما يسمى القوائم المترابطة

هذي وظيفتها ان المستخدم يقوم بادخال ما يرد الى ان تمتليء ذاكره جهازه .. تخيل معي ذلك

ولكي تشاهد برنامج مكتوب بهذا الاسلوب حمل المرفقات

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

هذه الطريقتين هي SNGLNK linked list duoble linked list

تحياتي لك

0

شارك هذا الرد


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

تحياتي لك

أخي ماتريكس اظن ان الاخ ابو هاشم يريد من المستخدم ان يحدد حجم المصفوفه اليس كذلك ؟

اذا كان كذلك

فيجب عليك استخدام اسلوب برمجي يسمى اللينكد ليست .. linked list .. او بما يسمى القوائم المترابطة

هذي وظيفتها ان المستخدم يقوم بادخال ما يرد الى ان تمتليء ذاكره جهازه .. تخيل معي ذلك

ولكي تشاهد برنامج مكتوب بهذا الاسلوب حمل المرفقات

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

هذه الطريقتين هي SNGLNK linked list duoble linked list

تحياتي لك

0

شارك هذا الرد


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

تحياتي لك

أخي ماتريكس اظن ان الاخ ابو هاشم يريد من المستخدم ان يحدد حجم المصفوفه اليس كذلك ؟

اذا كان كذلك

فيجب عليك استخدام اسلوب برمجي يسمى اللينكد ليست .. linked list .. او بما يسمى القوائم المترابطة

هذي وظيفتها ان المستخدم يقوم بادخال ما يرد الى ان تمتليء ذاكره جهازه .. تخيل معي ذلك

ولكي تشاهد برنامج مكتوب بهذا الاسلوب حمل المرفقات

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

هذه الطريقتين هي SNGLNK linked list duoble linked list

تحياتي لك

linked_list.zip

0

شارك هذا الرد


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

شكراً إخواني علي الرد

وبالفعل أنا أريد من المستخدم أن يحدد حجم الصفوفة (عدد عناصرها)

لكن الكود بالمرفقات طويل شويه ياحبذا لو تشرح الفكرة

تم تعديل بواسطه أبو هاشم المصري
0

شارك هذا الرد


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

int length;
cout << "please enter length" << endl;
cin >> length;
int* array = new type[length];

قم بتغيير كلمة type بنوع البيانات الذي تريده (int, char الخ)

و بعد ذلك يمكنك ان تستدعي المصفوفة بشكل طبيعي

array[index]

تم تعديل بواسطه Visual Code
0

شارك هذا الرد


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

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

الأخوة ذكروا طريقتين للتعامل مع الذاكرة ,, Pointers , Linked List

طبعاً في Pointers لن تستطيع تغيير حجم المصفوفة بعد تعريفها ,, أي أنه إذا أدخل المستخدم 3 فلن تستطيع تغيير حجم المصفوفة بعد ذلك إلى 4 ,,

على العكس Linked List تعطيك مرونة جيدة في التعامل مع حجم المصفوفة بحيث يكون عدد العناصر غير ثابت و يمكن إضافة و حذف العناصر من القائمة ,,

تحياتي ,,

تم تعديل بواسطه Khaled.Alshaya
0

شارك هذا الرد


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

int arr[]={'0','1'};
int i;
for(i=0;i<10;i++)
{
printf("in");
arr[i]=getch();
}
for(i=0;i<10;i++)
{
printf("\n%i",arr[i]);
}
getch();

ملاحظة:

يجب اسناد علي الاقل قيمة في تعريف المصفوفة مثل

int arr[]={'0'};

يتم زيادة حجم المصفوفة دون تدخل المستخدم

فكرة عملها :

فكرتها بسيطة بحيث يتم جز المصفوفة بحجم معين مثلا 5 خانات ثم بعد ذلك يتم زيادة 5 خانات في كل مرة تحتاج لتوسيع المصفوفة

0

شارك هذا الرد


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

اخي ... بأمكانك استعمال الامر - الداله

Realloc

اذا كنت مصر على استخدام مصفوفه

وشكرا

0

شارك هذا الرد


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

شكراً جزيلاً لكم جميعاً علي الرد ولكن لا أحب أن أري كلمة مثل بأمكانك استعمال الامر - الداله

Realloc

لأنها لا تفيد كثيراً ولا قليلاً وشكراً للجميع علي التجاوب

0

شارك هذا الرد


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

احبائى المبرمجين

السلام عليكم

اخى الكريم - خذ هذا الحل السريع - وارح نفسك من عناء التفكير - مع العلم ان الحل ليس مثالى - حيث ان يستهلك ذاكرة محددة وثابتة

ولكنه حل عملى مع امكانيات العتاد المتوفرة - وصغر حجم الذاكرة المطلوب

قم بانشاء مصفوفةArray ذات عدد كبير من العناصر - الحد الاقصى الذى تتصوره - وليكن 2048 على سبيل المثال

قم بانشاء متغير Variable - يشتمل على رقم اقصى عنصر تم استخدامه من المصفوفة

قم بوضع المصفوفة والمتغير معا فى Struct - ليمثل نوع بيانات جديد New Data Type

وقم بكتابة الدوال الازمة للتعامل مع هذا السيناريو

مميزات هذا الاسلوب

1 - المساحة المطلوبة من الذاكرة يمكن حسابها

2 - سهل التعامل مع عدد العناصر المستخدم

عيوبه

1 - الحد الاقصى اذا لم يحدد بدقة تعتبر مصيبة

مع تحياتى

محمود فايد

0

شارك هذا الرد


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

السلام عليكم

اذا كنت تريد المصفوفة المتغيرة الحجم في لغة C فمثل ما تفضل الاخوان الامثل استخدام القوائم المرتبطة LinkListed

اما اذا كنت تريد البرمجة بلغة ++C فالحل الامثل استخدم المكتبات STL وتحديد المتجهات vector

وصيغة الامر كالتالي

#include <vector>
vector<int> myvector;

عندما تحتاج لاضافة عنصر للمصفوفة استخدم الامر التالي

int i =10;
myvector.push_back( i );

و يمكنك الحذف و الاضافة قدر ماتشاء مميزات مذهله و ديناميكية :)

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

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

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