الأحد، 14 يوليو 2013

الدرس(5): المصفوفات الدوت نت


دورة الدوت نت
الدرس(5): المصفوفات
درسنا لليوم ان شاء الله سيتحدث عن المصفوفات(من الموضوعات ذات الأهمية الكبرى في عالم البرمجة)

 ______________
 بداية اعلم عزيزي أن المصفوفة عبارة عن مجموعة من المتغيرات التي تحمل عدة قيم تحت مسمى واحد بطريقة مفهرسة

 سوف نقوم بشرح هذا الفصل تحت مشروع الConsole
 قم بفتح مشروع Console جديد وسوف نوضح تعريفنا السابق...
كود:
Sub Main()
        Dim Days(6) As String
        Dim i As Integer
        Days(0) = "Saturday"
        Days(1) = "Sunday"
        Days(2) = "Monday"
        Days(3) = "Tuesday"
        Days(4) = "Wednesday"
        Days(5) = "Thursday"
        Days(6) = "Friday"
        For i = 0 To 6 Step 1
            Console.Write(Days(i))
            Console.WriteLine()
        Next
        Console.ReadKey()
    End Sub


مداخلة: بالنسبة لبعض الأكواد
 الامر
كود:
Console.Write(String)
يقوم بقنص النص المدخل وعرضه على الشاشة
 الأمر
كود:
Console.WriteLine()
يقوم بطباعة سطر جديد
 الأمر
كود:
Console.ReadKey()
يقوم بقنص مفاتيح الكيبورد لتنفيذ ما بعده

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

 الآن كما نرى فاننا قمنا بحجز مصفوفة كنص باسم Days و وجعلنا عناصرها 7
 عناصر...كيف؟؟
 في فيجوال بيسك دوت نت نعلن عن المصفوفة بالشكل التالي:
 Dim Array(n) As Type
 بحيث أن عدد عناصر المصفوفة يساوي n+1
 والآن هل لاحظت أن أول عنصر تبدأ فهرسته
 من صفر
 لعلك عرفت أن n ترمز إلى فهرس المصفوفة
 فإذا أردنا استخراج أو اسناد
 قيمة للعنصر(النوني n ) في المصفوفة فنرمز له باسم المصفوفة وبداخل القوسين العدد
 n-1
 باختصار: كما رأينا المصفوفة عبارة عن (متغير أو ثابت) يحمل عدة قيم بسحب
 المحجوز من البداية...


 الآن فلنتعمق أكثر(لكن لن نغرق باذن
 الله)
 المصفوفات لا تقتصر على ما شرحناه فهي اكبر من ذلك ... والآن سندخل في
أنواع المصفوفات
الآن تقسم المصفوفات الى أكثر من نوع:


مصفوفات أحادية الرتبة
مصفوفات ثنائية الرتبة
مصفوفات متعددة الرتبة

 أولا: المصفوفات أحادية الرتبة..
 اعلم
 عزيزي أن المثال بالأعلى هو عبارة عن مصفوفة أحادية الرتبة
 المصفوفة أحادية
 الرتبة تتكون من صف واحد وعدة أعمدة أو عمود واحد وعدة صفوف
 طريقة الإعلان:

كود:
Dim Array(n) As Type

مثال:
كود:
Dim MyLovers(3) As String
MyLovers(0) ="MOHAMMED"
MyLovers(1) = "Lo2i"
MyLovers(2) = "ALI"
MyLovers(3) = "The Rest"
الآن كما رأينا قمنا بحجز مصفوفة من 4 عناصر(3+1)
 وقمنا باسناد قيمة لكل عنصر
 حسب فهرسته في المصفوفة( مش قلنالك هينة..!)

 ثانيا: المصفوفات ثنائية
 الرتبة..
 الآن دعنا نرتفع بالسلم درجة للأعلى...
 المصفوفة ثنائية الرتبة :هي
 المصفوفة التي تكون رتبتها مقيدة برقمين (كتشبيه ثنائية الأبعاد)
 وعدد عناصر
 المصفوفة تساوي عدد الصفوف مضروبا بعدد الأعمدة

 طريقة الإعلان:
كود:
Dim Array(m,n) As Type
مثال:
كود:
Dim ages(2, 2) As Integer
        ages(0, 0) = 1
        ages(0, 1) = 2
        ages(0, 2) = 3
        ages(1, 0) = 4
        ages(1, 1) = 5
        ages(1, 2) = 6
        ages(2, 0) = 7
        ages(2, 1) = 8
       ages(2, 2) = 9
لكن ما الذي حدث؟
 اقتباس:
 _______________
 عدد عناصر المصفوفة تساوي عدد
 الصفوف مضروبا بعدد الأعمدة
 _______________
 لكن عدد عناصر المصفوفة 9
 والمفروض 2*2 =4
 احذر عزيزي من الوقوع في هذا الخطأ الفادح....كما قلنا بالأعلى
 فان رتبة المصفوفة (فهرستها) تبدأ من الصفر أي أن عدد عناصر المصفوفة أعلاه لا
 يساوي 2*2 بل يساوي (2+1)*(2+1) = 3*3 =9(مش قلنا هونها
 بتهون.!)

 ثالثا:المصفوفة متعددة الرتبة وتكون ثلاثية الأبعاد وطريقة الحجز
 كالتالي:
كود:
Dim Array(x,y,z) As Type
ولكن لا أظنك تحتاج اليها في حياتك البرمجية لذلك حبذت عدم الحديث
 عنها..
طرق حجز المصفوفات في
 الذاكرة

الطريقة الأولى:طريقة الحجز باعطاء الرتبة ثم إسناد القيم....كما
 جميع الأمثلة السابقة..
 الطريقة الثانية: الحجز بدون اعطاء الرتبة مع الاسناد
 المباشر للقيم
 مثال:

كود:
Dim *****() as string ={“mohammed”,”7hoooda”,hitmaker”,”lo2i”}
وبالتالي يقوم المترجم تلقائيا بحجز مصفوفة
 بعدد عناصر المصفوفة المعطاة
بهذا نكون انتهينا ان شاء الله من درسنا
 ...يا اخي هونها بتهون!

انتظروا الدرس
 القادم

حصريا .. أغلب مشاكل الشاشه الزرقاء شيوعا + الأسباب + الحلول .. شرح بالصـور

حصريا .. أغلب مشاكل الشاشه الزرقاء شيوعا + الأسباب + الحلول .. شرح بالصـور
بسم الله الرحمن الرحيم

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

فى إطار دعم حلول مشاكل الشاشه الزرقاء ( شاشة الموت )
فى الموضوع التالى

تعلم كيف تقوم بحل مشكله الشاشه الزرقاء والريسيت خلال دقائق ..شرح نادر وتفصيلي بالصور

وتسهيلا على الاعضاء فى حل هذه المشكله ومعرفة السبب

أقدم لكم اليوم أغلب مشاكل الشاشه الزرقاء شيوعا والمنتشره عند الكثير + معرفة السبب + الحل .. بإذن الله .


بــــســــم الــــلــــه نـــبــــدأ


(1)
STOP: 0x0000000A
IRQL_NOT_LESS_OR_EQUAL












السبب : تظهر هذه الرساله اذا كان احد التعريفات Drivers غير متوافق مع نظام التشغيل اكس بى أو أن هناك فيروسا قد أصاب ملفات النظام .


العلاج : 1.تأكد من خلو جهازك من الفيروسات وذلك عن طريق الفحص الشامل للجهاز .
2.كما يمكنك أن تزيل أخر تعريف قمت بتعريفه على الجهاز وتثبيته
وقم بالبحث عن تعريف اخر يكون متوافق مع ويندوز XP وذلك بعد أن تدخل الى الويندوز عن طريق الوضع الامن Safe Mode .
اضغط F8 عند بداية التشغيل .


(2)
STOP: 0x0000001E
KMODE_EXCEPTION_NOT_HANDLED








السبب : هذه الرساله تفيد بأن أحد التطبيقات قد وصل الى الذاكره بطريقه خاطئه
وقد يرجع السبب أيضا الى تثبيت تعريف Driver غير متوافق مع ويندوز XP .

العلاج : يجب عليك ازالة أخر تعريف Driver قمت بتثبيته على الجهاز , وابحث عن مشغل اخر متوافق مع ويندوز Xp .


(3)
STOP: 0x00000050
PAGE_FAULT_IN_NONPAGED_AREA




أو



السبب : أحد البرامج أو التعريفات غير متوافقه مع ويندوز Xp .

العلاج : قم بازالة أخر برنامج أو تعريف قمت بتثبيته .


(4)
STOP: 0x0000007B
INACCESSIBLE_BOOT_DEVICE



السبب : تظهر هذه الرساله عندما لا يتمكن نظام التشغيل من التعرف على أقسام الهارد ديسك (الأسطوانه الصلبه ) وذلك أثناء عملية الاقلاع .

العلاج : عليك عمل اصلاح للويندوز باستخدام خاصية Recovery Console
ونفذ هذا الأمر
Fixboot
ويمكنك الاستعانة بهذه المواضيع لشرح هذه الخاصيه ...
عند فشل ويندوز اكس بي عن الاقلاع ..كيف تدخل على Recovry Console وتقوم ببعض الاصلاحات
تعلم أصلاح الويندوز (Windows Repair) ...شرح نادر وتفصيلي بالصور


(5)
STOP: 0x0000007F
UNEXPECTED_KERNEL_MODE_TRAP








السبب : تظهر هذه الرساله عندما يكون هناك مشكله فى المكونات الماديه Hardware , وغالبا ما يكون السبب بسبب عطب فى الذاكره RAM
أو نتيجه لارتفاع درجه حرارة المعالج Processor

العلاج : تأكد من أن مروحة المعالج تعمل بشكل جيد وغير متوقفه عن العمل , ثم جرب شرائح ذاكره أخرى .
أو قم بعمل فحص للرام تابع هذا الموضوع لأخى العزيزالنسر الكاسح ..
برنامج MemTest86 لفحص الرام .. برنامج ممتاز .. أنصحك باقتنائه



(6)
STOP: 0x0000009F
DRIVER_POWER_STATE_FAILURE





السبب : تظهر هذه الرساله عندما يكون هناك مشكله قد حدثت فى اخر عملية ايقاف تشغيل الجهاز السابقه , ويكون سببها تعريف أو برنامج غير متوافق مع XP وغالبا ما يظهر بالرساله اسم البرنامج أو التعريف المسبب للمشكله .

العلاج : قم بإزالة أخر تعريف أو برنامج قمت بتثبيته , وقم بالبحث عن أخر متوافق مع XP .


(7)
STOP: 0x000000D1
DRIVER_IRQL_NOT_LESS_OR_EQUAL






السبب : تظهر هذه الرساله أثناء القيام بتثبيت ويندوز Xp ويكون سببها مشغل Driver غير متوافق مع اكس بى .

العلاج : قم بالبحث عن جميع تعريفات جهازك والمتوافقه مع ويندوز XP .
ويمكنك الاستعانه بهذا الموضوع
اجعل جهازك متوافق مع ويندوز xp قبل تنصيب الويندوز(شرح+ صور)


(8)
STOP: 0x000000EA
THREAD_STUCK_IN_DEVICE_DRIVER




السبب : تظهر هذه الرساله اذا قمت بتركيب كارت شاشة جديد غير متوافق مع ويندوز XP , أو قمت بتثبيت تعريف للكارت الذى لديك وغير متوافق مع إكس بى .

العلاج : قم بتعريف كارت الشاشه من جديد بأخر متوافق مع إكس بى , وأذا لم تنحل المشكله فقم بإزالة كارت الشاشه واشترى اخر متوافق مع جهازك .


(9)
STOP: 0x00000024
NTFS_FILE_SYSTEM




السبب : يرجع السبب فى ظهور هذه الرساله الى وجود عيب فى نظام الملفات NTFS .

العلاج : تأكد من توصيل الكابلات الخاصه بالهارديسك بطريقه صحيحه
وقم باستخدام الامر Chkdsk /r من محث الدوس بواسطة Recovery Console
وذلك لاستبدال الملفات المعطوبه بأخرى جديده .



(10)

STOP: 0xC0000218
UNKNOWN_HARD_ERROR





السبب : هناك مشاكل فى الهارد مثل الباد سكتورز أو تعرضه لصدمه قويه .


العلاج : قم بفحص الهارد من الـ Badsetors .
ويمكنك الاستعانه بهذه المواضيع ..
- الشرح المفصل لعملاق تصليح الباد سيكتورHDD Regenerator 1.51, و روابط تحميل البرنامـج
> مشكلة الــ Bad sectors وكيفية التغلب عليها <



(11)
STOP: 0xC0000221
STATUS_IMAGE_CHECKSUM_MISMATCH



السبب : تظهر هذه الرساله نتيجة لعطب فى أحد ملفات النظام , ويظهر بالرساله اسم الملف المعطوب .

العلاج : ادخل الى خيارات بدء التشغيل بالضغط على مفتاح F8 عند بداية التشغيل
قم باختيار Last Known Good Configuration وذلك لتشغيل الجهاز وفقا لأخر إعداد جيد معروف لدى النظام .
أو قم بالبحث عن الملف المعطوب وقم بتحميله واستبدل القديم بالجديد .



...............

تم الانتهاء من الموضوع بحمد الله

أرجو ان ينال إعجابكم ...



والله ولى التوفيق ...

لا تنسونا من صالح الدعاء

أخوكم
 عبدالقادر البعداني

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

السبت، 13 يوليو 2013


دورة الدوت نت
الدرس(4): التركيبات أنواعها واستخداماتها
السلام عليكم ورحمة الله وبركاته
 بسم الله الرحمن الرحيم
 درسنا اليوم دسم بعض الشيء ويحتاج لشيء من التركيز.
 بداية علينا أن نتيقن أن الأنواع في فيجوال بسيك دوت نت لا تقتصر على ما قد طور مع اللغة مثل short int16 int32 single short integer string date point .......إلخ
 فربما احتاج أنواع جديدة من المتغيرات والثوابت التي لا تتواجد في فيجوال بيسك دوت نت....لا مشكلة.....اصنعها بنفسك!

 سيحتوي الدرس باذن الله على التالي:

التركيبات من نوع Enums
التركيبات من نوع Structure

أولا: التركيبات من نوع Enums
 بالنسبة للتركيبات من نوع Enums فهي تستخدم لتعريف أنواع جديدة من التركيبات على وجه الحصر أو التعميم ....كيف ذلك؟؟!
 كما نعرف في السنة 12 شهرًا وبما ان عددها ثابت فيمكننا اختصار جهد تكرارها في الشيفرة كالتالي:

كود:
Enum Month
          Jan
          Feb
          Mar
          Apr
          May
          Jun
          Jul
          Aug
          Sep
          Oct
          Nov
          Dec
End Enum
لكن ما الذي حدث وما استفيد؟؟
 انظر أخي الكريم:
 لقد قمنا بصنع تركيبة جديدة واسميناها بالشهر ووضعنا كل شهر داخل التركيبة كجزء منها....
 وماذا بعد...؟
 الآن علينا معرفة بعض الأمور:

.عند الاستعلام عن عنصر من عناصر الEnum فاننا نستعلم بالشكل التالي:

كود:
TextBox1.Text =Month.Jan
                       وبما أن الثابت Month.Jan لم يتم اسناد قيمة له فسيتم اسناد القيمة الافتراشية له وهي صفر ..لماذا؟
العنصر الأول من عناصر تركيبة الEnum تبدأ من الصفر والعنصر الثاني يساوي السابق+1 والثالث يساوي السابق+1 وهكذا إلى أن نصل إلى العنصر Month.Dec فسنراه يحمل القيمة 11 ولك التجربة
.يمكن اسناد قيم وقت صنع التركيبة كالتالي:
كود:
Enum Month
          Jan = 22
          Feb = 5
          Mar = 23
          Apr
          May
          Jun
          Jul
          Aug
          Sep
          Oct
          Nov
          Dec
 End Enum
كود:
      TextBox1.Text =Month.Mar
وكما نرى فان العنصر Month.Mar يحمل القيمة 23 والعنصر التالي سيحمل القيمة السابقة + 1 حسب ما ذكرنا في الأعلى .
كود:
 TextBox1.Text =Month.Apr
ملاحظة: يمكننا الجزم بأن التركيبات من نوع Enum تعادل بوظيفتها الثوابت فعناصرها عبارة عن ثوابت ولهذا عند محاولة اسناد قيم للعنصر خارج سطره في التركيبة فان ذلك سيتوج بالرفض من قبل المترجم......
ونص رسالة الخطأ يقول:Constant cannot be the target of an assignment أي أنه الثابت لا يمكن أن يكون هدفا لعملية تعيين.(أي اسناد قيمة)
اذن يمكن استخدام الEnum في استخدامات الثوابت
ملاحظة : جميع قيم الEnum في المثالين السابقة من النوع Integer كما يمكن تغيير نوعها لLong او Short او ما الى ذلك(أقصد المتغيرات العددية الصحيحة)
مثال:
كود:
Enum Month As Long
Jan
Feb
....
....
 End Enum


والآن دعونا نتطرق قليلا الى موضوع مرتبط بالمتغيرات والثوابت ألا وهو محدودية المتغيرات والثوابت (بمعني آخر أين يمكنني استخدامها) .... يمكنك تحديد محدودية الEnum كالتالي:
عندما تريد الEnum عامة ومستخدمة من جميع وحدات المشروع عليك سبقها ب Public أو بلا شيء
مثال:
كود:
Public Enum Month As Long
Jan
Feb
....
....
 End Enum
أو

كود:
  Enum Month As Long
Jan
Feb
....
....
 End Enum
وإن كنت حصرها داخل الوحدة البرمجية المعلنة بها فعليك سبقها ب Private
مثال:
كود:
Private Enum Month As Long
Jan
Feb
....
....
End Enum
ملاحظة أخيرة: علينا وضع التركيبة خارج أي حدث لان ذلك سوف يحدث خطأ برمجي:
مثال:

كود:
 Public Class Form1
 'لا مشكلة
     Enum Month
        Jan
        Feb
        Mar
        Apr
....
....
End Enum
كود:
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 'هنا المشكلة
Enum Month
        Jan
        Feb
        Mar
        Apr
....
....
End Enum
 End Sub


ثانيا: التركيبات من نوع Structure
يعرف هذا النوع من التركيبات بالانواع المعرفة من قبل المستخدم(User Defined Type-UDT)
ويمكن دمج العديد من المتغيرات والتركيبات داخل التركيبة الأم باستخدام الكلمة المحجوزة Structure
نعرف انه لدينا متغيرات من النوع String و Integer وDate وما الى ذلك.
لكن هل يمكنني صياغة متغير بالكيفية التي اريدها....لم لا؟
هذا النوع من المتغيرات يسمى Structure والتي دعمت ببيئة الدوت نت اكثر من ذي قبل
الآن نريد صنع متغير من نوع سيارة اي صنع خاص لا يعرفه فيجوال بيسك دوت نت...لكن قبل ذلك علينا تحديد العناصر التي تدخل في مكونات السيارة وهي الاسم والموديل والسعر والسعة وتاريخ الصناعة وتاريخ التصدير..... وما الى ذلك

مثال:

كود:
  Structure Car
        Dim Name As String
        Dim cost As Integer
        Dim Model As String
End Structure

استخدام المتغير الجديد بالضبط كاستخدام المتغير العادي
مثال:

كود:
Dim NewCar As Car
        NewCar.Name = "Mercedes"
        NewCar.cost = 15
         'طبعا انا ما بعرف ايش موديلاتها بس للتوضيح مش اكثر
        NewCar.Model = "Gaosdh/#25"


        MsgBox("Name: " & NewCar.Name & vbCrLf & "Cost: " & (NewCar.cost).ToString & vbCrLf & "Model: " & NewCar.Model)
لعلك لاحظت شيئا: عندما قمنا بربط المعطيات داخل الرسالة فان الجزء NewCar.Cost الحقناه بالدالة .ToString ......ما وظيفتها...؟!
 عندما قمنا بربط نصوص في محتوى الرسالة رأينا أن هناك معطى يلزم ربطه لكنه خارج عن الجماعة(جماعة النصوص) ولكي يتم التلاءم قمنا بتطبيق الدالة ToString عليه والتي تقوم بتحويل المعطى من قيمة عددية الي نصية ليتم الربط بسلام (يمكن تشبيهها بالدالة Str()) في لغة الفيجوال بيسك 6




الآن دعونا نتعمق أكثر
يمكن للتركيبة من Structure أن تحتوي على تراكيب داخلية الأمر الذي يطلق عليه تراكيب متداخلة
Nested Structures
كيف ذلك ولماذا..؟
الآن دعنا نرجع قليلا الى السيارة ...نريد ألحاق مكون آخر للسيارة وهو تاريخ الانتاج وتاريخ التصدير..هل يتوجب علينا جعل كل مكون منفصلا عن الآخر؟
ليس تماما .. كما نعلم فان كلا المكونين من النوع Date والذي يمكن اجماله بالشكل التالي:

كود:
Structure Car

        Dim Name As String
        Dim cost As Integer
        Dim Model As String
 
      Structure DateOfx
            Dim Produce As Date
            Dim Export As Date
        End Structure


Dim DateOf As DateOfx
ما الذي حدث؟
الآن قمنا بادخال تركيبة التواريخ داخل تركيبة مكونات السيارة والذي يمكن استخدامه بالصورة التالية:

كود:
                    Dim NewCar As Car
        NewCar.Name = "Mercedes"
        NewCar.cost = 15
        NewCar.Model = "Gaosdh/#25"
        NewCar.Dateof.Produce = #11/29/2003#
        NewCar.Dateof.Export = #11/29/2005#


        MsgBox("Name: " & NewCar.Name & vbCrLf & "Cost: " & (NewCar.cost).ToString & vbCrLf & "Model: " & NewCar.Model & vbCrLf & "DateOf Produce: " & NewCar.Dateof.Produce & vbCrLf & "DateOf Export: " & NewCar.Dateof.Export
والناتج:
كما يمكننا تضمين أحداث داخل التركيبة والتي ساوجزها وساخصص للاحداث فصل كامل ان شاء الله
مثال بسيط:
كود:
Structure Car
     
        Structure DateOfx
            Dim Produce As Date
            Dim Export As Date
        End Structure
  
     Dim Name As String
        Dim cost As Integer
        Dim Model As String
        Dim Dateof As DateOfx
       
Sub CloseForm(ByVal frm As Form)
        frm.Close()
End Sub


End Structure
ويستخدم كالتالي:

كود:
NewCar.CloseForm(Me)

لذي حصل اننا صنعنا حدث أو اجراء يقوم باغلاق النموذج الذي تم تمريره وهنا مررنا للاجراء النموذج Me وهو النموذج قيد التطوير

بهذا نكون قد انهينا درسنا لهذا اليوم ان شاء الله
دعواتكم لي بشفاء
بانتظار القادم باذن الله