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

مساعده في برنامج rotating rings في لغة c++

بدأه هدوء المطر في 13 مايو 2012 · 28 رد · 6,253 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#26

لقد فهمت جزاك الله خير

#27

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

طيب الله وقتكم .

نستكمل باقى مشروعنا ونضيف علية الخطوة قبل اﻻخيرة وهى تخزين كل حلقة فى مصفوفة ديناميكية على حدا. تمهيدا للخطة اﻻخيرة.

1. اﻻعلان عن مصفوفة مؤشرات الى مؤشرات بعدد الحلقات المتوقعة.

2. اﻻعلان عن مؤشر لحجز المصفوفة ديناميكيا.

3. حجز المساحة ديناميكيا لكل حلقة بداخل دوارة for .

4. ادخال العناصر الى المصفوفة.

وأخيرا ﻻختبار عملية اﻻدخال نقوم بطباعة المصفوفة ثنائية البعد صفا صفا ...

الكود:

/* 
 * File:   main.cpp
 * Author: Mohammed Abu Zayed
 * Created on May 31, 2012, 06:51 AM
 */

#include <cstdlib>
#include <iostream>
using namespace std;

int main(void)
{
    int Rows = 0, Cols = 0, i = 0, x = 0;
    int GirdSize = 0;
    cout << "Enter Size Of gird: ";
    cin >> GirdSize;
    Rows = GirdSize;
    Cols = GirdSize;
    int *pnewrow = 0;
    int **Gird = new int * [Rows];
    // Allocating memroy for Gird ....    
    int xx = 10;
    for (i = 0; i < Rows; i++)
    {
        pnewrow = new int[Cols];
        *(Gird + i) = pnewrow;
        for (x = 0; x < Cols; x++)
        {
            // cout << "Row: " << i + 1 << " Col: " << x + 1 << ": ";
            *(*(Gird + i) + x) = xx++;
        }
    }
    for (i = 0; i < Rows; i++)
    {
        cout << endl;
        for (x = 0; x < Cols; x++)
        {
            cout << Gird[x] << " ";
        }
    }
    cout << endl << "------" << endl;

    int ring = 0, nRingsPerGird = 0;
    nRingsPerGird = GirdSize / 2;

    int *p_newRing = 0;
    int newRingIndex = 0;
    int **p_girdRings = new int * [nRingsPerGird];

    for (ring = 0; ring < nRingsPerGird; ring++)
    {

        p_newRing = new int[(GirdSize - 1 - ring)*4];
        *(p_girdRings + ring) = p_newRing;
        newRingIndex= 0;
        // from left to right
        for (i = ring; i < (Cols - ring); i++, newRingIndex++)
            *(p_newRing + newRingIndex) = *(*(Gird + ring) + i);

        // form top to down
        for (i = ring + 1; i < (Cols - ring - 1); i++, newRingIndex++)
            *(p_newRing + newRingIndex) = *(*(Gird + i) + Cols - ring - 1);
        // from left to right

        for (i = ring; i < (Cols - ring); i++, newRingIndex++)
            *(p_newRing + newRingIndex) = *(*(Gird + Rows - ring - 1) + Cols - 1 - i);

        // from Down to top
        for (i = ring + 1; i < (Cols - ring - 1); i++, newRingIndex++)
            *(p_newRing + newRingIndex) = *(*(Gird + Rows - i - 1) + ring);
    }

    for (ring = 0; ring < nRingsPerGird; ring++)
    {
        for ( i=0; i < ((GirdSize - 1 - ring)*4); i++)
            cout << *(*(p_girdRings+ring)+i) << ", ";
        cout << endl;
    }

    return 0;
} // end of main

المخرجات:

Enter Size Of gird: 5

10 11 12 13 14 
15 16 17 18 19 
20 21 22 23 24 
25 26 27 28 29 
30 31 32 33 34 
------
10, 11, 12, 13, 14, 19, 24, 29, 34, 33, 32, 31, 30, 25, 20, 15, 
16, 17, 18, 23, 28, 27, 26, 21, 0, 0, 0, 0, 

RUN SUCCESSFUL (total time: 1s)

ونلاحظ ان هناك خطا بالزيادة فى طباعة عدد عناصر المصفوفة اﻻخيرة ساحاول اصلاح المشكلة فى وقت ﻻحق.

باقى لنا الخطوة اﻻخيرة وهى اختبار وجود البينات متجاورة ومرتبة تصاعديا بشرط ان يساوى عددهم عدد عناصر الصف.

والله من وراء القصد ...

تم تعديل هذه المشاركة بواسطة محمد عودة في 5 يونيو 2012 في 15:54

1

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#28
اقتباس
ونلاحظ ان هناك خطا بالزيادة فى طباعة عدد عناصر المصفوفة اﻻخيرة ساحاول اصلاح المشكلة فى وقت ﻻحق.

هذة المشكلة فكرنا لها فى حل فوجدناه بأن نضع عدد عناصر كل حلقة كعنصر فى مصفوفة تحمل حجم كل الحلقات بالترتيب.

ودائما حجم كل حلقة يكون فى المتغير newRingIndex .

الكود:

#include <cstdlib>
#include <iostream>
using namespace std;

int main(void)
{
    int Rows = 0, Cols = 0, i = 0, x = 0;
    int GirdSize = 0;
    cout << "Enter Size Of gird: ";
    cin >> GirdSize;
    Rows = GirdSize;
    Cols = GirdSize;
    int *pnewrow = 0;
    int **Gird = new int * [Rows];
    // Allocating memroy for Gird ....    
    int xx = 10;
    for (i = 0; i < Rows; i++)
    {
        pnewrow = new int[Cols];
        *(Gird + i) = pnewrow;
        for (x = 0; x < Cols; x++)            
            *(*(Gird + i) + x) = xx++;        
    }
    for (i = 0; i < Rows; i++)
    {
        cout << endl;
        for (x = 0; x < Cols; x++)
            cout << Gird[x] << " ";
    }
    cout << endl << "------" << endl;

    int ring = 0, nRingsPerGird = 0;
    nRingsPerGird = GirdSize / 2;

    int *p_newRing = 0;
    int newRingIndex = 0;
    int **p_girdRings = new int * [nRingsPerGird];
    int *nItemPerRing = new int[nRingsPerGird];

    for (ring = 0; ring < nRingsPerGird; ring++)
    {

        p_newRing = new int[(GirdSize - 1 - ring)*4];
        *(p_girdRings + ring) = p_newRing;
        newRingIndex = 0;
        // from left to right
        for (i = ring; i < (Cols - ring); i++, newRingIndex++)
            *(p_newRing + newRingIndex) = *(*(Gird + ring) + i);

        // form top to down
        for (i = ring + 1; i < (Cols - ring - 1); i++, newRingIndex++)
            *(p_newRing + newRingIndex) = *(*(Gird + i) + Cols - ring - 1);
        // from left to right

        for (i = ring; i < (Cols - ring); i++, newRingIndex++)
            *(p_newRing + newRingIndex) = *(*(Gird + Rows - ring - 1) + Cols - 1 - i);

        // from Down to top
        for (i = ring + 1; i < (Cols - ring - 1); i++, newRingIndex++)
            *(p_newRing + newRingIndex) = *(*(Gird + Rows - i - 1) + ring);
        *(nItemPerRing + ring) = newRingIndex;
    }

    for (ring = 0; ring < nRingsPerGird; ring++)
    {
        for (i = 0; i < *(nItemPerRing + ring); i++)
            cout << *(*(p_girdRings + ring) + i) << ", ";
        cout << endl;
    }

    return 0;
} // end of main

المخرجات:

Enter Size Of gird: 8

10 11 12 13 14 15 16 17 
18 19 20 21 22 23 24 25 
26 27 28 29 30 31 32 33 
34 35 36 37 38 39 40 41 
42 43 44 45 46 47 48 49 
50 51 52 53 54 55 56 57 
58 59 60 61 62 63 64 65 
66 67 68 69 70 71 72 73 
------
10, 11, 12, 13, 14, 15, 16, 17, 25, 33, 41, 49, 57, 65, 73, 72, 71, 70, 69, 68, 67, 66, 58, 50, 42, 34, 26, 18, 
19, 20, 21, 22, 23, 24, 32, 40, 48, 56, 64, 63, 62, 61, 60, 59, 51, 43, 35, 27, 
28, 29, 30, 31, 39, 47, 55, 54, 53, 52, 44, 36, 
37, 38, 46, 45, 

RUN SUCCESSFUL (total time: 1s)
1

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#29

جزاك الله خير .. استفدت كثيرا

بانتظار الخطوه الاخيره..

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