النتائج 1 إلى 3 من 3

الموضوع: سلسلة دروس المصفوفات والمؤشرات

  1. #1
    التسجيل
    28-08-2008
    المشاركات
    10

    سلسلة دروس المصفوفات والمؤشرات

    هذي الدروس منقولة من النادي البرمجي بجامعة الامام محمد بن سعود الاسلامية

    للكاتب هتلرر

    بسم الله الرحمن الرحيم

    المصفوفات ARRAYS
    الجزء الاول
    المصفوفة:هي عبارة عن مجموعة من خانات الذاكرة المتتالية التي لها نفس الاسم ونفس النمط (عدد صحيح او عدد عشري او حرفي).
    ___________________________________________
    نرجع للدروسي القديمة شوي عند التعريف عن متغير نقوم بحجز مكان لة بالذاكرة وتحديد نوعة(النمط)...
    int num
    قومنا بحجز 4 byte لانة عدد صحيح طبعا هي قليلا ما تختلف من جهاز الى جهاز
    الحجز لا يكون مرتب يعني بجميع الذاكرة ..
    يمكن يكون متغير في اليسار والثاني باليمين....في الذاكرة طبعا ....يعني نادرا ما يكونا جنب بعض
    ولمعرفة حجم الانماك الاخرى قم بتجربة هذا الكود

    كود:
    cout << "sizeof(int): " << sizeof(int) << endl
           << "sizeof(float): " << sizeof(float) << endl
           << "sizeof(double): " << sizeof(double) << endl
           << "sizeof(char): " << sizeof(char) << endl
    _______________________________________________________

    نقدر نقول ان المصفوفة عبارة عن مجموعة من المتغيرات متلاصقة مع بعض تحمل نفس الاسم ونفس النوع.

    #التصريح عن المصفوفة:
    نستخدم العبارة التالية
    كود:
    int Matrix [50];
    هنا تم التعريف عن مصفوفة من النوع int واسمها Matrix وحجمها 50 اي تحمل 50 عدد من النوع int .
    ملاحظات:
    نسمي الرقم الموضع بين القوسين بالدليل sub****** .
    يجب الدليل ان يكون عدد صحيح او اي متغير يعطي قيمة صحيحة.

    طيب نشوف المثال التالي وهو عبار عن تعريف مصفوفة في الذاكرة
    كود:
    int c[8];
    وقمنا بأدخال اعداد عشوائية ...للمثال فقط.. نشووف الصوورة التالية وهي تمثيلة داخل الذاكرة (طبعا ميزة السي ++ تخليك تتحكم في الذاكرة على راحتك )
    طيب نرججع ونشووف الصوورة

    وعند الرغبة في الوصول الى احد الاعداد نختار اسم المصفوفة والدليل الذي يوجد به العدد الذي نريدة...
    مثلا نريد طباعة العدد 65 يتم الوصول الية
    كود:
    cout<<c[6];
    ملاحظات:
    يبدا حجز المصفوفة من الدليل صفر وليس واحد
    ويبقى الدليل الاخير دون استخدام وعند اسناد اي قيمة الى الدليل الاخير يعطينا المترجم خطاء(راح نتطرق لها مستقبلا)
    ونستفيد من ذالك انة اذا تم التعريف عن مصفوفة حجمها 10 فان الدليل يبدأ من صفر الى 9
    ننتقل الى الجزء العملي ..وناخذ كم مثال
    في المثال التالي راح نكتب مصفوفة حجمها 10 ونمطها int ونقوم بأعطها القيمة صفر الى العناصر العشرة للمصفوفة
    كود:
    #include <iostream>
    #include <iomanip>
    using namespace std;
    void main()
    {
    int n[10];
    for (int i=0 ; i<10 ;i++)
    {
    n[i] = 0 ;
    }//end of for
    for (int j =0;j<10 ;j++)//to Print the Matrix n
    {
    cout<<setw(70)<<j<<setw(13)<<n[j]<<endl;
    }
    system("pause");
    }
    ومثل ما انت شايفين استخدام اللوب لعطاء قيم للمصفوفة واستخدام اللوب للطباعة
    ملاحظة:
    الجزء هذا ينوب عنة
    كود:
    for (int i=0 ; i<10 ;i++)
    {
    n[i] = 0 ;
    }//end of for
    ينوب عن هذا الكود
    كود:
    n[10] ={0};
    ويمكن تخزين عناصر في المصفوفة عند تعريفها والمثال التالي يوضح الطريقة
    كود:
    #include <iostream>
    #include <iomanip>
    using namespace std;
    void main()
    {
    int n[10]={88, 65,5555,4545,4345,354,454,344,3334};
     
    for (int j =0;j<10 ;j++)//to Print the Matrix n
    {
    cout<<setw(7)<<j<<setw(10)<<n[j]<<endl;
    }
    system("pause");
    }
    ارجو من الجميع كتابة الاكواد داخل المترجم وتجربتها وتغيرها والعب فيها ....
    اي استفسار لا يردك الاكيبورد.

  2. #2
    التسجيل
    28-08-2008
    المشاركات
    10

    رد: سلسلة دروس المصفوفات والمؤشرات

    بسم الله الرحمن الرحيم
    Arrays
    ][®][^][®][The Part II][®][^][®][


    مثل ما حنا عارفين ان المصفوفات يمكن ان تكون من اي نمط
    راح نتكلم عن سلاسل الحروف مع النمط char
    اي سلسلة من سلاسل الحروف مثل hello هي بالواقع عبارة عن مصفوفة حروف .
    لذالك يمكن اعطاء قيم ابدائية لمصفوفة حروف باستخدام سلاسل الحروف على سبيل المثال يقوم التصريح التالي
    كود:
    char string1[] = "first";
    باعطاء قيم ابتدائية لكل عنصر من عناصر المصفوفة string1 يقابل حرف من السلسلة "first"
    ويتخدد عدد عناصر المصفوفة بواسطة المترجم .طبعا اكيد المترجم يعطي العدد على حسب طول السلسلة .
    مهم:
    لو نلاحظ ان السلسة "first " تحتوي على خمسة حروف بالاضافة الى حرف خاص يحدد نهاية هذة السلسلة وهو الحرف الصفري null character
    لذالك تتألف المصفوفة من ستة عناصر يتم تمثيل الحرف الصفري على شكل
    كود:
     '\0'

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

    وعلى اعتبار ان السلاسل هي مصفوفات فيمكن الوصل الى كل حرف من حروفها (عن طريق الدليل)
    مثلا لوصول الى الحرف f من المصفوفة string1 نستخدم التعبير التالي
    كود:
    cout<<string1[0];
    يمكن انشاء مصفوفة والطلب من المستخدم ادخال سلسلة ويكون بااستخدام التابع cin
    التعرف عن مصفوفة
    كود:
    char string2[20];
    هنا قمنا بانشاء مصفوفة حروف قادرة على تخزين 19 حرف مع الحرف الصفري...
    والعملية التالية تقوم
    كود:
    cin>>string2;
    لتخزين المدخلات في المصفوفة .
    لاحظة انا كتبنا اسم المصفوفة فقط ولم نعطي اي تعليمة خاصة بالحجم.
    وبالتالي تقع المهمة على المبرمج ان يصرح عن مصفوفة تفي بالغرض المطلوب من ناحية الحجم .
    ويمكن طبعتها بالكود التالي
    كود:
    cout<<string2;
    نشووف مثاال عملي على الي تكلمنا عنة
    كود:
    #include <iostream>
    using namespace std;
    int  main()
    {
         char string1[20],string2[]="the string 2";
         cout<<"Enter the string\n";
         cin>>string1;
         cout<<"the string 1\t"<<string1<<endl;
         cout<<"the string 2\t"<<string2<<endl
         <<"string whithe space\n ";
     
         for (int i=0;string1[i] !='\0';i++)
         cout<<string1[i]<<"  ";
         cout<<endl;
         system("pause");
         return 0;
     
    }
    الشرح
    كود:
    char string1[20],string2[]="the string 2";
    أولا :عرفنا مصفوفتين من نوع char الأولى عطيناها حجم وهو 20 والثانيه ماعطيناها حجم لكننا حددنا لها
    جمله فالكومبايلر مباشره راح يحسب الحجم اللي هو13 فهو يحسب أيضا السبيس بين الكلمات
    ثانيا:طلبنا من المستخدم ادخال الجمله في المصفوفه الأولى لأننا ماعبيناها فهي فارغه (مع ملاحظة الألتزام بالحجم حق المصفوفه)
    كود:
    cout<<"Enter the string\n";
         cin>>string1;
    ثالثا:عملنا عملية اخراج بسيطه لعناصر المصفوفتين
    كود:
    cout<<"the string 1\t"<<string1<<endl;
         cout<<"the string 2\t"<<string2<<endl
    رابعا : وهنا الفكره أننا راح نخرج عناصر المصفوفه الأولى اللي دخلناها مفرقه (أي مسافه بين كل حرف وحرف في الجمله المدخله)
    كود:
    <<"string whithe space\n ";
     
         for (int i=0;string1[i] !='\0';i++)
         cout<<string1[i]<<"  ";
         cout<<endl;
    مع ملاحظة أنه وضعنا شرط التوقف في الفور لوب هو الوصول للحرف الصفري أو النل
    فمثلا :لو أنا دخلت الجمله في المصفوفه الأولى IMAMفراح تخرج كالأتي:
    كود:
    I  M  A  M
    واتمنى ان الدرس يكون واضح

  3. #3
    التسجيل
    28-08-2008
    المشاركات
    10

    رد: سلسلة دروس المصفوفات والمؤشرات

    بسم الله الرحمن الرحيم
    ARRAY
    «®°·.¸.•°°·.¸¸.•°°·.¸.•°®»THE PART III«®°·.¸.•°°·.¸¸.•°°·.¸.•°®»

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

    موضوع المصفوفات من المواضيع المهمة لفهم اساس لغة السي ++ لان معظم البرامج تعتمد عليها
    وماراح تفهم المؤشرات حتى تتقن المصفوفات .(وهذا راي شخصي)
    ][®][^][®][Multiple Subscripts Arrays][®][^][®][
    المصفوفات متعددة الابعاد
    ومثل ماشفتو ان المصفوفات يمكن ان تأخذ عدة ابعاد .ومن اشهر استخدامتها الجداول Tables الي هي عبارة عن مجموعة من القيم المرتبة ضمن مجموعة من الاسطر rows والاعمدة columns.
    واذا بغينا نصل الى اي قيمة ضمن المصفوفة نحدد الدليلين : رقم السطر ورقم العمود للوصول الى العنصر..
    نشوف المثال التالي
    كود:
    int a[3][4];
    تحتوى هذي المصفوفة على بعدين وهي تتضمن 3 اسطر واربع اعمدة اي 3*4=12 .
    خلونا نأخذكم في رحلة داخل المترجم عشان نعرف كيف يتم حجزها في الذاكرة ....>>هي بنا كوميسان هيا بنا لنعرف الحقيقة
    (طبعا هو تخيلي)



    مثل ما شفتم الصورة .....واعتقد وضحة عملية الوصول الى اي عنصر من عناصر المصفوفة .

    ونقدر نعطي المصفوفة قيم ابتدائية عند التصريح عنها
    نشوف المثال التالي وهي عملية اعطاء المصفوفة قيم ابتدائي :
    كود:
    int b[2][2] ={{1,2} , {3, 4}};
    انتبة لعملية اعطاء القيم حيث انة تم تجميع قيم كل سطر ضمن قوسين كبيرين والقيمة 1 و 2 هي عبارة عن القيم الابتدائية للعنصرين
    كود:
     b[0][0]
    And
    كود:
    b[0][1]
    والقيم 3 و 4 هي قيم للعنصرين b[1][0] , b[1][1] f
    واذا لم يوجد قيم كافية لسطر فانة يتم اعطاء القيم صفر نشووف المثال التالي :
    كود:
    int m[2][2] = {{1}, {3, 4}};
    طيب نأخذ مثال
    كود:
    #include <iostream>
    using namespace std;
    void printArray(int [][3]);
    void main()
    {
    int array1[2][3] = { {1,2,3} ,{4,5,6} };
    int array2 [2][3] = {1,2,3,4,5};
    int array3[2][3] = { {1,2} ,{4} };
    cout<<"Valuse in array1 are :\n";
    printArray(array1);
    cout<<"Valuse in array2 are :\n";
    printArray(array2);
    cout<<"Valuse in array3 are :\n";
    printArray(array3);
    system("pause");
    }
    void printArray(int a[][3])
    {
    for (int i =0;i<=1; i++)
    {
    for (int j =0;j <= 2; j++)
    cout<<a[i][j]<<"  ";
    cout<<endl;
    }
    }
    المصفوفة الاولى مثل ما حنى عارفين ( وهي عملية ترتيب)
    اما المصفوفة الثانية array2 احتوى تصريها على خمسة قيم والتي يتم اسنادها الى عناصر السطر الاولى ثم عناصر السطر التالي على التسلسل.والعنصر الي مالة قيمة يتم اعطائة صفر
    يتم استدعاء دالة printArray لتقم بطباعة المصفوفات ومثل ما انتم شايفين عملية التكرار (loop) كيف تم استخدامها
    ملاحظات :
    يمكن للمصفوفة في لغة السي ++ تأخذ 12 بُعد .
    من الاخطاء الشائعة تحديد عنصر من عناصر المصفوفة ثنائية البعد بهذي الطريقة
    كود:
    a[x,y]

    الى هنا وصلنا الى نهاية المصفوفات ...
    وبقى نأخذ أسئلة ............
    ودمتم سالمين

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •