منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : Nested Control Structures او التراكيب المتداخلة
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : جهاد العريقي


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


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


اولا ما معنى تراكيب متداخلة ...?

لناخذ مثال اولا على هذا النوع ..
يمكن عمل تركيب تحكم متداخلة كا الاتي :

كا استخدام جملة If ….. Then ….. End If For …… Loop أي استخدام جمل تحكم مختلفة في لالمهام ومتداخلة مع بعضها البعض .. كما اسلفنا عبارة IF , FOR .. اذن هذا ا نقصد به التراكيب المتداخلة ..

في vb يمكن عمل تراكيب على عدة مستويات او حسب حاجة المبرمج لها ..

ما هي الفائدة من التراكيب المتداخلة ?
جعل البرنامج سهل القراءة .. وذلك ليسهل معرفة الاخطاء ..

ملاحظة هامة :


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

ما ذا اعني بهذه الملاحظة ..

المعنى هو لايمكن مثلا ان استخدم For … Next أي الدوران بــ For وانا بداخل جملة If الشرطية . .. وان اقوم باغلاق الدوران (أي كتابة العبارة Next ) بعد End If أي بعد ان انهي جملة الشرط فهذا خطاء ويجب التأكد من اغلاق For … قبل End If ...


لناخذ مثال بشكل عام على التراكيب المتداخلة :



كود :
[color=#000000][COLOR=#007700]For [/color][color=#0000bb]a [/color][color=#007700]= [/color][COLOR=#0000bb]1 To 100
      [/COLOR][color=#007700]{ [/color][color=#0000bb]statements [/color][COLOR=#007700]}
      
    If [/COLOR][color=#0000bb]a [/color][color=#007700]= [/color][COLOR=#0000bb]99 Then
          [/COLOR][color=#007700]{ [/color][color=#0000bb]statements [/color][COLOR=#007700]}
    [/COLOR][color=#0000bb]End [/color][COLOR=#007700]If

     While [/COLOR][color=#0000bb]b [/color][color=#007700]< [/color][COLOR=#0000bb]a
[/COLOR][color=#007700]{ [/color][color=#0000bb]statements [/color][COLOR=#007700]}

If [/COLOR][color=#0000bb]total [/color][color=#007700]<= [/color][COLOR=#0000bb]0 Then
    [/COLOR][color=#007700]{ [/color][color=#0000bb]statements [/color][COLOR=#007700]}
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]If

     [/COLOR][color=#0000bb]End [/color][COLOR=#007700]While
      
      For [/COLOR][color=#0000bb]c [/color][color=#007700]= [/color][COLOR=#0000bb]1 to a
           [/COLOR][color=#007700]{ [/color][color=#0000bb]statements [/color][COLOR=#007700]}
       [/COLOR][COLOR=#0000bb]Next

Next  
[/COLOR][/COLOR]



اذا هذا مثال للتراكيب وانظر الى الجمل المستخدمة في الكود السابق.... لكل جملة نهاية ولكن ضمن نفس التركيب For ….. Next وليس بعده .. ايضا انظر الى كل جملة بشكل مستقل لها نهايتها..



لناخذ مثال عملي على التراكيب وليكن على المصفوفات ...

انشاء مشروع جديد ومن ثم اختار Consol Application

ومن ثم نكتي الكود الاتي:



كود :
[COLOR=#000000][COLOR=#0000bb]Module Module1

    Sub Main[/COLOR][COLOR=#007700]()

        [/COLOR][color=#0000bb]Dim Array2D[/color][color=#007700]([/color][color=#0000bb]6[/color][color=#007700], [/color][color=#0000bb]4[/color][color=#007700]) As [/color][COLOR=#0000bb]Integer
        Dim iRow[/COLOR][color=#007700], [/color][color=#0000bb]iCol [/color][color=#007700]As [/color][COLOR=#0000bb]Integer
        
        [/COLOR][color=#007700]For [/color][color=#0000bb]iRow [/color][color=#007700]= [/color][color=#0000bb]0 To Array2D[/color][color=#007700].[/color][color=#0000bb]GetUpperBound[/color][color=#007700]([/color][color=#0000bb]0[/color][COLOR=#007700])

            For [/COLOR][color=#0000bb]iCol [/color][color=#007700]= [/color][color=#0000bb]0 To Array2D[/color][color=#007700].[/color][color=#0000bb]GetUpperBound[/color][color=#007700]([/color][color=#0000bb]1[/color][COLOR=#007700])
  
              [/COLOR][color=#0000bb]Array2D[/color][color=#007700]([/color][color=#0000bb]iRow[/color][color=#007700], [/color][color=#0000bb]iCol[/color][color=#007700]) = [/color][color=#0000bb]iRow [/color][color=#007700]* [/color][color=#0000bb]100 [/color][color=#007700]+ [/color][COLOR=#0000bb]iCol
  
               Console[/COLOR][color=#007700].[/color][color=#0000bb]Write[/color][color=#007700]([/color][color=#0000bb]iRow [/color][color=#007700]& [/color][color=#dd0000]", " [/color][color=#007700]& [/color][color=#0000bb]iCol [/color][color=#007700]& [/color][color=#dd0000]" = " [/color][color=#007700]& [/color][color=#0000bb]Array2D[/color][color=#007700]([/color][color=#0000bb]iRow[/color][color=#007700], [/color][color=#0000bb]iCol[/color][color=#007700]) & [/color][color=#dd0000]" "[/color][COLOR=#007700])
  
           [/COLOR][COLOR=#0000bb]Next iCol
  
           Console[/COLOR][color=#007700].[/color][color=#0000bb]WriteLine[/color][COLOR=#007700]()

    
     [/COLOR][COLOR=#0000bb]Next iRow
  
       Console[/COLOR][color=#007700].[/color][color=#0000bb]Read[/color][COLOR=#007700]()
  
   [/COLOR][COLOR=#0000bb]End Sub

End Module  
[/COLOR][/COLOR]

الدوران الخارجي (iRow العداد ) يقوم بفحص كل صفوف المصفوفة ..
اما الدوران الداخلى (iCol) فيقوم بفحص كل عمود في الصف الحالي..

في كل تكرار التكرار الداخلي يقوم بفحص كل عنصر في الصف المحدد بواسطة العداد في التكرار الخارجي (iRow) بعد الانتها من العداد الداخلي أي عندما يصل الى نهايتة عداد الدوران الخارجي يزيد بمقدار واحد ومن ثم ينفذ الدوران الداخلي وهكذا ...

وويكون شكل العنصر الحالي في كل تكرار هو Array2D(iRow,iCol) ....

فيصبح الناتج كما في الشكل الاتي:


0, 0 = 0 0, 1 = 1 0, 2 = 2 0, 3 = 3 0, 4 = 4

1, 0 = 100 1, 1 = 101 1, 2 = 102 1, 3 = 103 1, 4 = 104
2, 0 = 200 2, 1 = 201 2, 2 = 202 2, 3 = 203 2, 4 = 204
3, 0 = 300 3, 1 = 301 3, 2 = 302 3, 3 = 303 3, 4 = 304
4, 0 = 400 4, 1 = 401 4, 2 = 402 4, 3 = 403 4, 4 = 404
5, 0 = 500 5, 1 = 501 5, 2 = 502 5, 3 = 503 5, 4 = 504
6, 0 = 600 6, 1 = 601 6, 2 = 602 6, 3 = 603 6, 4 = 604


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