يعد تقسيم المصفوفة إلى جزأين أحد أكثر العمليات شيوعا في البرمجة. يمكن أن تكون هذه العملية مفيدة في كثير من الحالات ، على سبيل المثال ، لفرز مصفوفة أو البحث عن عنصر معين أو إجراء عمليات أخرى على البيانات.
تقدم اللغة ج عدة طرق لتقسيم صفيف إلى قسمين. واحدة من أبسط الطرق هي استخدام حلقة بسيطة لعرض عناصر الصفيف وتحديد وقت تقسيم الصفيف إلى جزأين.
مثال:
# تشمل
باطلة سبليتارا (الباحث آر [] ، حجم كثافة العمليات) {
كثافة العمليات منتصف = حجم / 2 ؛ / / العثور على مؤشر منتصف الصفيف
printf("Первая половина массива: ");
for (int i = 0; i < mid; i++) {
printf("%d ", arr[i]);
}
printf("
Вторая половина массива: ");
for (int i = mid; i < size; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
splitArray(arr, n);
return 0;
}
في هذا المثال ، وظيفة سبليتاراي() يأخذ مجموعة أر وحجمه ، ومن ثم تقسيمه إلى قسمين ، وإخراج كل جزء على حدة. أولا ، يتم حساب منتصف المصفوفة باستخدام عملية القسمة على اثنين بدون الباقي. ثم يتم إخراج النصف الأول من المصفوفة باستخدام حلقة تمتد من 0 إلى منتصف حجم المصفوفة ، ويتم إخراج النصف الثاني باستخدام ثانية للحلقة التي تمتد من منتصف حجم المصفوفة إلى نهايتها.
ستكون نتيجة تنفيذ هذا البرنامج كما يلي:
النصف الأول من المصفوفة: 1 2 3 4 5
النصف الثاني من المصفوفة: 6 7 8 9 10
وهكذا ، وذلك باستخدام عمليات بسيطة والحلقات في اللغة ج ، يمكنك بسهولة تقسيم مجموعة إلى قسمين. يمكن استخدام هذه الطريقة في العديد من المواقف عندما تحتاج إلى إجراء عمليات بنصفين من صفيف أو عناصر موجودة قبل وبعد فهرس معين.
- التحضير لتقسيم الصفيف
- إعلان وتهيئة صفيف
- حساب مجموع عناصر المصفوفة
- حساب نصف مجموع عناصر المصفوفة
- كرر من خلال المصفوفة وابحث عن نقطة الانقسام
- الحصول على جزأين من مجموعة
- سؤال وجواب
- كيف يمكنني تقسيم مجموعة في النصف باستخدام اللغة ج?
- كيفية تقسيم مجموعة إلى قسمين متساويين في لغة البرمجة ج?
- كيف يمكنني تقسيم مجموعة إلى قسمين باستخدام الفهارس في ج?
- هل من الممكن تقسيم مجموعة إلى قسمين باستخدام البحث الثنائي في ج?
التحضير لتقسيم الصفيف
قبل البدء في تقسيم المصفوفة إلى جزأين ، تحتاج إلى تنفيذ عدة خطوات إعداد. ستساعدنا هذه الخطوات في تحديد معايير التقسيم والتحقق من شروط تقسيم المصفوفة بنجاح.
- تعريف معايير الفصل:
- التحقق من شروط الانفصال:
- يجب أن تحتوي المصفوفة على عنصرين على الأقل-وهذا هو الحد الأدنى من المتطلبات للتقسيم إلى قسمين.
- يجب أن يكون تقسيم المصفوفة ممكنا وفقا للمعايير المحددة-قد تجعل بعض الشروط من المستحيل تقسيم المصفوفة.
- إعداد المتغيرات:
- تهيئة صفيف:
قبل البدء في تقسيم المصفوفة ، عليك أن تتذكر أن التقسيم يجب أن يكون معقولا وله معاييره الخاصة. على سبيل المثال ، يمكنك تقسيم صفيف إلى جزأين بقيمة أو موضع معين لعنصر ما ، أو استخدام شروط رياضية لتقسيمه. يتم اختيار هذا المعيار وفقا لأهداف ومتطلبات المهمة.
في هذه المرحلة ، من الضروري التحقق من أنه يمكن تقسيم المصفوفة إلى قسمين. الشروط التالية ممكنة:
للعمل مع مصفوفة وتقسيمها ، من الضروري إعداد المتغيرات التي ستخزن معلومات حول المصفوفة وسيتم استخدامها أثناء تنفيذ خوارزمية الفصل. على سبيل المثال ، المتغيرات المصممة لتخزين مواضع البداية والنهاية للقسم ، وكذلك لتخزين قيم عناصر الصفيف مؤقتا.
إذا لم يتم تهيئة المصفوفة بعد ، فيجب تهيئتها. يمكن القيام بذلك عن طريق إدخال القيم من قبل المستخدم أو تعيين القيم في رمز البرنامج.
بعد الانتهاء من هذه الخطوات ، يمكنك المتابعة مباشرة لتقسيم المصفوفة إلى جزأين باستخدام المعيار والخوارزمية المحددين.
إعلان وتهيئة صفيف
المصفوفة هي بنية بيانات تسمح لك بتخزين نفس النوع من العناصر تحت نفس الاسم. في ال لغة البرمجة ج ، يتم تنفيذ إعلان وتهيئة مصفوفة باستخدام بناء الجملة التالي:
| نوع العنصر_اسم المصفوفة [الحجم]; |
| نوع العنصر_اسم المصفوفة [الحجم] ={العنصر 1, العنصر 2,...، العنصر}; |
أين:
- نوع العنصر-نوع البيانات التي سيتم تضمينها في المصفوفة. على سبيل المثال ، كثافة العمليات ، تعويم، شار,
- الخ. اسم المصفوفة هو اسم تعسفي تختاره للمصفوفة.
- الحجم هو عدد العناصر التي يمكن احتواؤها في المصفوفة. يجب أن يكون الحجم عددا صحيحا غير سالب.
- العنصر 1, العنصر 2,...، إليمينتن هي قيم العناصر التي تريد وضعها في المصفوفة. يجب أن يكون عدد العناصر مساويا لحجم المصفوفة.
أمثلة على إعلان الصفيف والتهيئة:
إعلان وتهيئة مصفوفة دون تحديد الحجم (سيتم تحديد الحجم تلقائيا من خلال عدد العناصر):
أرقام كثافة العمليات[] = {1, 2, 3, 4, 5};
- يمكن الإعلان عن المصفوفات وتهيئتها بعناصر من أي نوع بيانات ، بما في ذلك أنواع البيانات والمؤشرات المخصصة.
- حساب مجموع عناصر المصفوفة
لحساب مجموع عناصر صفيف في ج ، تحتاج إلى الذهاب من خلال جميع عناصرها وإضافة قيمها.
تتضمن خوارزمية حساب مجموع عناصر المصفوفة الخطوات التالية:
أعلن متغير لتخزين مجموع وتهيئة ذلك مع صفر;
تذهب من خلال جميع عناصر المصفوفة باستخدام حلقة;
في كل تكرار ، قم بزيادة قيمة المجموع المتغير بواسطة العنصر الحالي للمصفوفة;
في نهاية الحلقة ، ستحتوي قيمة المجموع المتغير على مجموع جميع عناصر المصفوفة.
مثال على رمز ج الذي يحسب مجموع عناصر المصفوفة:
# تشمل
كثافة العمليات الرئيسية () {
صفيف كثافة العمليات[] = {1, 2, 3, 4, 5};
حجم كثافة العمليات = حجم (صفيف) / حجم (كثافة العمليات);
مجموع كثافة العمليات = 0;
ل (إنت أنا = 0 ؛ أنا < الحجم; أنا {) {
مجموع + = صفيف [أنا];
}
برينتف ("مجموع عناصر المصفوفة: ٪ د
"،مجموع);
- العودة 0;
- }
- في هذا المثال ، نعلن وتهيئة صفيف "صفيف" مع خمسة عناصر. ثم نحسب حجمه بقسمة الحجم الإجمالي للمصفوفة على حجم عنصر واحد. أعلن المتغير "مجموع" لتخزين مجموع العناصر وتهيئته مع صفر. ثم نحن حلقة من خلال جميع عناصر المصفوفة ، وزيادة قيمة متغير "مجموع" من قيمة العنصر الحالي في كل تكرار. في نهاية الدورة ، نعرض النتيجة-مجموع عناصر المصفوفة على الشاشة.
حساب نصف مجموع عناصر المصفوفة
لتقسيم مصفوفة إلى جزأين متساويين ، يمكنك استخدام طريقة حساب نصف مجموع عناصر المصفوفة. تعتمد هذه الطريقة على حقيقة أن نصف مجموع عناصر المصفوفة سيكون مساويا لمجموع عناصر الجزء الأول من المصفوفة.
خطوات لحساب نصف مجموع عناصر المصفوفة:
إنشاء متغير لتخزين مجموع عناصر الصفيف وتهيئته مع القيمة 0.
تذهب من خلال جميع عناصر المصفوفة وإضافتها إلى المتغير الذي يحسب المبلغ.
احسب نصف مجموع عناصر المصفوفة بقسمتها على 2.
مثال على رمز ج الذي يحسب نصف مجموع عناصر المصفوفة:
# تشمل
كثافة العمليات الرئيسية () {
صفيف كثافة العمليات[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
حجم كثافة العمليات = حجم (صفيف) / حجم (صفيف [0]);
مجموع كثافة العمليات = 0;
ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {
مجموع + = صفيف [أنا];
}
هالفسوم = مجموع / 2;
برينتف ("نصف مجموع عناصر المصفوفة: ٪ د
"،هالفسوم);
العودة 0;
}
- في هذا المثال ، نعلن وتهيئة مجموعة من الأرقام. ثم نحسب حجمها. بعد ذلك ، نقوم بتهيئة متغير المجموع مع صفر واستخدام حلقة للذهاب من خلال جميع عناصر المصفوفة وإضافتها إلى المجموع. ثم نحسب نصف مجموع عناصر المصفوفة بقسمة المجموع على 2. أخيرا ، نعرض نصف مجموع عناصر المصفوفة على الشاشة.
- يمكن أن يكون وجود نصف مجموع عناصر المصفوفة مفيدا ، على سبيل المثال ، لتقسيم مصفوفة إلى جزأين متساويين أو لحل مشكلة موازنة الحمل.
- كرر من خلال المصفوفة وابحث عن نقطة الانقسام
- عند تقسيم مصفوفة إلى جزأين ، تتمثل المهمة الرئيسية في العثور على نقطة يكون فيها مجموع العناصر في الجزء الأيسر من المصفوفة مساويا لمجموع العناصر في الجزء الأيمن. وهذا ما يسمى نقطة الفصل.
احسب مجموع عناصر المصفوفة بأكملها وقم بتعيينها إلى المتغير "عام_سوما".
تهيئة المتغير "الصيف الأيسر" بالقيمة 0.
كرر من خلال المصفوفة وقم بتنفيذ الإجراءات التالية لكل عنصر:
| اطرح العنصر الحالي من" المجموع العام "وقم بتعيينه للمتغير"المجموع الأيمن". |
| إضافة العنصر الحالي إلى "اليسار_الصيف". |
| إذا كان" المجموع الأيسر "يساوي" المجموع الأيمن "، فقم بتعيين قيمة الفهرس الحالي للمتغير" القسم " والخروج من الحلقة. |
| بعد تنفيذ الخوارزمية ، سيحتوي متغير" القسم " على فهرس نقطة تقسيم الصفيف. |
| الخوارزمية أعلاه لها تعقيد زمني لـ ا (ن) ، أين ن هو طول المصفوفة. |
| يوجد أدناه مثال على رمز ج الذي ينفذ هذه الخوارزمية: |
| # تشمل |
| إنت فيند بارتيتيون (إنت أر [] ، إنت ن) { |
| المجموع الكلي = 0; |
| إنت ليفتسوم = 0; |
| قسم كثافة العمليات = -1; |
| إلى عن على (كثافة العمليات أنا = 0 ؛ أنا < ن ؛ أنا i) { |
| المجموع + = أر[أنا]; |
| } |
| إلى عن على (كثافة العمليات أنا = 0 ؛ أنا < ن ؛ أنا i) { |
| المجموع - = أر[أنا]; |
| إذا (ليفتسوم = = توتالسوم) { |
| التقسيم = أنا; |
| break; |
| } |
| leftSum += arr[i]; |
| } |
| return partition; |
| } |
| int main() { |
| int arr[] = {1, 2, 3, 4, 5, 5}; |
| int n = sizeof(arr) / sizeof(arr[0]); |
| int partition = findPartition(arr, n); |
| if (partition == -1) { |
printf(«Точка разделения не найдена»);
} else {
printf(«Точка разделения: %d», partition);
}
return 0;
}
Выполнив данный код, мы получим ответ «Точка разделения: 4». هذا يعني أن نقطة الانقسام موجودة في العنصر الخامس من المصفوفة.
الحصول على جزأين من مجموعة
في ال لغة ج ، هناك عدة طرق لتقسيم المصفوفة إلى قسمين. دعونا ننظر إلى بعض منهم.
1. باستخدام المؤشرات:
باستخدام المؤشرات ، يمكنك الحصول على جزأين من المصفوفة ، مع تحديد عناوين البداية والنهاية لهذه الأجزاء. على سبيل المثال ، لتقسيم صفيف إلى جزأين بعد عنصر به فهرس 3 ، يمكنك القيام بما يلي:
صفيف كثافة العمليات[] = {1, 2, 3, 4, 5};
كثافة العمليات * الجزء الأول = صفيف;
كثافة العمليات * الجزء الثاني = والمصفوفة [4];
في هذا المثال ، سيشير المتغير "الجزء الأول" إلى العنصر الأول من المصفوفة ، وسيشير المتغير "الجزء الثاني" إلى عنصر به فهرس 4. وبالتالي ، سيحتوي الجزء الأول من المصفوفة على عناصر [1 ، 2 ، 3] ، وسيحتوي الجزء الثاني من المصفوفة على عناصر [5].
2. باستخدام الدورة:
هناك طريقة أخرى لتقسيم صفيف إلى جزأين وهي استخدام حلقة لنسخ العناصر إلى صفائف جديدة. على سبيل المثال ، يمكنك استخدام التعليمات البرمجية التالية:
صفيف كثافة العمليات[] = {1, 2, 3, 4, 5};
الجزء الأول [3];
الجزء الثاني [2];
الباحث الأول;
إلى عن على (أنا = 0 ؛ أنا < 3 ؛ أنا i) {
الجزء الأول [أنا] = صفيف [أنا];
}
إلى عن على (أنا = 3 ؛ أنا < 5 ؛ أنا i) {
الجزء الثاني [أنا-3] = صفيف [أنا];
}
في هذا المثال ، تقوم الحلقة الأولى بنسخ العناصر الثلاثة الأولى من صفيف "الصفيف" إلى صفيف "الجزء الأول" ، وتقوم الحلقة الثانية بنسخ آخر عنصرين من "الصفيف" إلى صفيف "الجزء الثاني". وبالتالي ، سيحتوي الجزء الأول من المصفوفة على عناصر [1 ، 2 ، 3] ، وسيحتوي الجزء الثاني من المصفوفة على عناصر [4 ، 5].
3. استخدام المؤشرات والذاكرة الديناميكية:
يمكنك أيضا تقسيم صفيف إلى قسمين باستخدام المؤشرات والذاكرة الديناميكية. على سبيل المثال ، يمكنك استخدام التعليمات البرمجية التالية:
صفيف كثافة العمليات[] = {1, 2, 3, 4, 5};
كثافة العمليات * الجزء الأول = (كثافة العمليات*)مالوك (3 * حجم (كثافة العمليات));
كثافة العمليات * الجزء الثاني = (كثافة العمليات*)مالوك (2 * حجم (كثافة العمليات));
الباحث الأول;
إلى عن على (أنا = 0 ؛ أنا < 3 ؛ أنا i) {
الجزء الأول [أنا] = صفيف [أنا];
}
إلى عن على (أنا = 3 ؛ أنا < 5 ؛ أنا i) {
الجزء الثاني [أنا-3] = صفيف [أنا];
}
في هذا المثال ، نستخدم وظيفة "مالوك" لتخصيص الذاكرة لصفيفتين جديدتين. ثم نقوم بنسخ العناصر من المصفوفة الأصلية إلى المصفوفات الجديدة. سيحتوي الصفيف الأول "الجزء الأول" على عناصر [1 ، 2 ، 3] ، وسيحتوي الصفيف الثاني "الجزء الثاني" على عناصر [4 ، 5]. بعد استخدام هذه المصفوفات ، تحتاج إلى تحرير الذاكرة المخصصة باستخدام وظيفة" الحرة".
وأخيرا ، باستخدام المؤشرات والحلقات في ج ، يمكنك تقسيم صفيف إلى قسمين باستخدام أساليب مختلفة. كل من هذه الأساليب لها خصائصها الخاصة ويمكن تطبيقها اعتمادا على الوضع المحدد ومتطلبات البرنامج.
سؤال وجواب
كيف يمكنني تقسيم مجموعة في النصف باستخدام اللغة ج?
الفهارس والحلقات يمكن استخدامها في ج لتقسيم صفيف إلى قسمين في النصف. تحتاج أولا إلى تحديد طول المصفوفة ، ثم إنشاء صفيفتين جديدتين بنصف العناصر. للقيام بذلك ، يمكنك استخدام الحلقات وتعيين قيم العناصر من المصفوفة الأصلية إلى المصفوفات الجديدة. ونتيجة لذلك ، سوف تحصل على اثنين من المصفوفات ، كل منها سوف تحتوي على نصف عناصر المصفوفة الأصلية.