لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 03/16/24 في كل الموقع
-
السلام عليكم ورحمة الله. رمضان كريم. انا اعمل كمرمج Full-stack ولكن لا استطيع تسعير شغلي حيث اني عندما سعرت العمل يقول العميل انه باهظ الثمن طلبات-بسيطه-Blue-Wings.pdf2 نقاط
-
2 نقاط
-
هل باستطعتى ان استفيد من خصائص جانغو و لارافيل معا فى موقع واحد او فى تطبيق واحد1 نقطة
-
السلام عليكم هو البايت واحد في 0 و 1 والا قيمه واحد فقط الاهي 0 او 11 نقطة
-
السلام عليكم هل يمكن ان تعطونى بعض النصائح لحماية العينين من الكمبيوتر او لاب توب والمعروف اننا مبرمجين يعنى قضاء وقت كثير على الاجهزة1 نقطة
-
1 نقطة
-
ليس نفس الأمر في 0 و 1 فقط، بل يتمثل في 256 قيمة مختلفة، حيث يتكون البايت من 8 بت، ولكل بت قيمتان: 0 أو 1. أي نستطيع تمثيل تلك القيم الثماني على شكل ثنائي: 00000000 00000001 00000010 11111111 أو تحويل القيم الثنائية إلى أرقام عشرية من 0 إلى 255. 00000000 = 0 (عشري) 00000001 = 1 (عشري) 00000010 = 2 (عشري) 11111111 = 255 (عشري) بالتالي، بإمكان البايت تمثيل مجموعة واسعة من البيانات، مثل الحروف، الأرقام، الرموز، الصور ومقاطع الفيديو. فالحرف "A" يتم تمثيله بالرمز الثنائي 01000001، أي 65 (عشري) في نظام ASCII.1 نقطة
-
السلام عليكم هو ازي اعارف اني مبتداي في المستوي البعد كده انا بتكلم في البرمجه بشكل عام مش بتكلم انا مبتدي في مجال معين انا لسه هتعلم مجال تعلم الاله بس دبوقتي بتعلم الرياضيات انا افصد مش في المستوي الابعد كده1 نقطة
-
بالإضافة أيضاً للنصائح الجميلة بواسطة ياسر إليك بعض النصائح التالية لتصبح لديك فرصة كبيرة في الحصول على المشروع أهم خطوة هي بناء موقع شخصي و معرض أعمال جذاب حيث يعتبر ال portfolio هو الذي يجعل العميل يثق في المستقل وجودة الأعمال لديه . وثانياً حاول اختيار المشروع الذى يناسب مهاراتك وتثق أنك تستطيع تنفيذه شكل جيد حيث أنكمن خلال الخبرة في بناء موقع مماثل تستطيع تقديم عرض يطمئن العميل ويثق بك أخيراً من الأخطاء التي يقع فيها البعض هو كتابة المهارات التي تجيدها لكن العميل لا يهتم بما تجيد بل يهتم بما تستطيع أن تقدم له مثال على ذلك بدلاً من تقديم قائمة بالتقنيات التي تجيدها حاول التركيز القيمة التي يمكنك تقديمها للعميل . فبدلاً من ذكر التقنيات مثل React.js و CSS Grid أ و Flexbox يمكنك التوضيح أنه يمكنك تنفيذ واجهة متجاوبة وتعمل على الأجهزة المختلفة بشكل ممتاز وحاول توضيح تأثير ذلك على النشاط الخاص بالعميل1 نقطة
-
مرحبا أعمل على مشروع التخرج حاليا و كان المطلوب مني إنشاء خوارزمية البرنامج و المخططات التدفقية له ثم إنشاء تطبيق يتعامل مع قاعدة بيانات تحمل جدول طلاب و جدول حصص أو دروس يمكن للطلاب الإشتراك بها. لدي تساؤل كبير عن كيف أستطيع بناء واجهة موقع بسيطة لأخذ المدخلات من المستخدم و إظهار المخرجات المطلوبة له من ملاحظات أو أخطاء أو نتائج فنحن لم نتعلم الHTML و الCSS، قمنا ببناء مواقع ببعض الشفرات الجاهزة أو كان المدرب أو كانت المدربة تقوم بالنسخ و اللصق و المرور السريع على الأسطر البرمجية و قد تم إرفاق شفرة مصدرية من أجل تلك المشاريع. أريد أيضا أن ترشدوني إلى مصدر مناسب يساعدني في إستخدام بايثون أو جافا سكريبت في التعامل مع إستعلامات SQL، أتذكر أننا قمنا بشيء كذلك في الدورة و أنا أحاول البحث عن تلك الجزئية من أجل مراجعتها و الإعتماد عليها في بناء الشفرة المسؤولة عن التعامل مع البيانات. أرجو إخباري إن أردتم أن أرفق وصف المشروع.1 نقطة
-
@حمزة عباد أعتقد أني أخطأت فهم كل شيء، دعني أحاول شرح ما أحاول القيام به لعلك تساعدني و تخبرني كيف أقوم به لأني حتى اللحظة لا أدري ما هي الأدوات التي علي إستخدامها أو لغة البرمجة: أولا لقد درست دورة علوم الحاسوب تحديدا و ليس دورة تصميم الواجهات أو غيرها من الدورات، هذا يعني أنني تعلمت الكثير من المواضيع لكن دون تعمق، سواء صفحات الويب، لغتي البرمجة بايثون و جافا سكريب و هذا يعني أن قدراتي متواضعة تمام في التعامل مع الأمر. التالي هو وصف المشروع الذي حصلت عليه: __________________________________________________________ مشروع مدرسة المطلوب إنشاء نظام لإحدى المدارس، وربطه مع قاعدة بيانات. يجب أن تحتوي قاعدة البيانات على جدولين وهما students و lessons. عند تشغيل البرنامج يجب أن تظهر قائمة على الشكل التالي: الرجاء اختيار العملية التي تريد إجرائها: * لإضافة طالب إضغط على حرف a * لحذف طالب إضغط على حرف d * لتعديل معلومات طالب إضغط على حرف u * لعرض معلومات طالب إضغط على حرف s - لو اختار المستخدم الحرف a لإضافة طالب، يجب أن نأخذ معلومات الطالب من المستخدم (رقم الطالب، الاسم، الكنية، العمر، الصف، تاريخ التسجيل) ونضيفها لجدول students في قاعدة البيانات، أيضًا يجب أن نأخذ الدروس المشترك فيها الطالب ونضيفها لجدول lessons، ونُظهر رسالة للمستخدم بنجاح العملية. - لو اختار المستخدم الحرف d لحذف طالب، يجب أن نأخذ معلومات الطالب التي نريد حذفه من قاعدة البيانات، نأخذ (رقم الطالب) ونتحقق إن كان موجود في قاعدة البيانات نحذفه ونُظهر رسالة للمستخدم بنجاح العملية. - لو اختار المستخدم الحرف u لتعديل معلومات طالب، يجب أن نأخذ معلومات الطالب التي نريد تعديل معلوماته في قاعدة البيانات من المستخدم، نأخذ (رقم الطالب) ونتحقق إن كان موجود في قاعدة البيانات نعدل معلوماته ونُظهر رسالة للمستخدم بنجاح العملية. - لو اختار المستخدم الحرف s لعرض معلومات الطالب، يجب أن نأخذ معلومات الطالب التي نريد عرض معلوماته من المستخدم، نأخذ (رقم الطالب) ونتحقق إن كان موجود في قاعدة البيانات نجلب معلوماته (رقم الطالب، الاسم، الكنية، العمر، الصف، تاريخ التسجيل، والدروس المشترك فيها) ونعرضها للمستخدم. - ملاحظة: الطالب يستطيع أن يسجل في أكثر من درس وليس في درس واحد - كذلك الدرس الواحد يستطيع أن يسجل فيه أكثر من طالب (علاقة متعدد لمتعدد) معلومات مساعدة: - قبل تنفيذ المشروع يجب وضع الخطة التي ستتبعها لإنشاء المشروع، كإنشاء الخوارزمية Algorithm ومخطط التدفق Flow charts والكود الزائف Pseudo code - يجب إرسال المخطط الذي اتبعته لإنشاء المشروع بملف منفصل من نوع pdf - يمكن اختيار لغة البرمجة المناسبة لتنفيذ المشروع - مدة تنفيذ المشروع 15 يومًا __________________________________________________________ حسنا إذن بالطبع سوف أنشأ قاعدة بيانات على برنامج SQLite و أنشأ جدولين أحدهما للطلاب و الآخر للدروس و أملأ كلاهما ببعض البيانات لدروس و طلاب و هذه البيانات يمكن إستخدامها في تجريب التطبيق. تاليا كنت أفكر في بناء واجهة غاية في البساطة من أجل المدخلات الخاصة بالمستخدم و من المفترض أن يكون أول شيء يظهر عند فتح الموقع هو حقل إدخال لإدخال الحرف المطلوب، الواجهة التالية بعد إدخال الحرف تكون على حسب الحرف المدخل كخانات إدخال المعلومات في حال أراد المستخدم إضافة طالب جديد أو خانة إدخال رقم الطالب إذا أراد المستخدم تعديل معلومات طالب و في حال قام المستخدم مثلا بإدخال حرف لا علاقات له بالأحرف المتاحة "A, D, U, S" أي إذا قام بإدخال حرف N مثلا تظهر له رسالة خطأ من قبيل "الحرف الذي أدخلته غير صحيح" أو "الحرف الذي أدخلته لا ينفذ أي إجراء" و يكون ذلك بالتأكد من ما إذا كان الحرف المدخل يساوي أحد الأحرف المتاحة لإتخاذ إجراء بالتحقق من مطابقة الحرف المدخل لتلك الأحرف واحدا تلو الآخر و إن لم يطابق أحدها الحرف المدخل تظهر رسالة للمستخدم بدل إتخاذ إجراء، في الخلف سيكون هناك كود برمجي ينفذ مجموعتا من الأكواد البرمجية التي تقوم بما يجب بناءا على الحرف المدخل و فيها يتم تنفيذ تعليمات SQLite المطلوبة لجلب، حذف، تعديل البيانات و أعتقد أن هناك دوال في بايثون تسمح بالتعامل مع إستعلامات SQL و التواصل مع قاعدة البيانات، لست أدري كيف أفعل ذلك أو كيف أنشأ الموقع مع تلك السلوكيات من إظهار لحقول إدخال و عرض نتائج و تنبيهات و أخطاء مثل تنبيه المستخدم لعدم إدخال رقم طالب مكرر و إظهار خطأ في حال إدخار رقم مكرر لأن هذا الرقم سيكون هو المفتاح الأولي في قاعدة البيانات و لست أدري كيف أستطيع جلب البيانات و أخذ مدخلات المستخدم لإتخاذ الإجرءات المناسبة على صفحة الويب هذه. ربما أخطأت في الفكرة التي أريد إنشاء المشروع بها، أنا لا أدري صراحتا كيف أفعل ذلك بالضبط، أخبرني كيف أقوم بتنفيذ الفكرة السابقة؟ بأي لغة؟ لم أكن أفكر أبدا في إستخدام Node.js. كيف يتوقع المدرب الذي كلفني بالمشروع أن تبدو أو تكون الواجهة التي سيتعامل معها و أين كان يتوقع أن يقوم بإدخال المدخلات المطلوبة، هل كان يتوقع مني برنامجا يتعامل معه من خلال الشفرة بحيث يتعامل مع البرنامج من خلال المحرر و يستدعي الدوال المسؤولة عن القيام بالإجراء المطلوب كدالة إجراء تستدعى و يمرر لها الحرف المطلوب؟ هل يتوقع النتائج أن تظهر في شاشة محرر الكود أم الكونسول في الويب؟ أم يتوقع مني إنشاء واجهة موقع بسيطة من أجل المدخلات و المخرجات؟ @حمزة عباد أتذكر أننا إستخدمنا أسطر برمجية في الكورس من قبيل: import sqlite3 sqlite3.connect() .close() لكنني لا أستطيع إيجاد أين بالضبط في الدورة تعاملنا مع مثل هذه الأكواد في بايثون، أحاول البحث عن ذلك الدرس أو تلك الدروس لكني لم أستطع إيجادها.1 نقطة
-
بعد دراسة الأساسيات، من المفترض أن تكون قد استوعبتها بشكل جيد ومتفهم لما تم شرحه وليس مجرد أنك شاهدته فقط، وفي البرمجة المشاهدة بدون التطبيق العلمي يعني أن لم تتعلم شيء للأسف، فعند التطبيق العملي ستجد أنك لست قادر على ذلك، لذا هل تشعر بأريحية عند التطبيق بمفردك؟ أيضًا هل تشعر بأنك مستوعب لكيفية استخدام ما قمت بتعلمه في المكان المناسب، أي وظيفة كل دالة مثلاً ولماذا نستخدمها وهكذا، أو ما الفائدة من مفهوم برمجي معين. هل قمت بتنفيذ نماذج بسيطة ثم تنفيذ مشاريع كاملة؟ بعد الشعور بأريحية فيما سبق تستطيع الإنتقال للمستوى التالي.1 نقطة
-
توجد سلسلة دروس ضمن الدورة لربط Node.js مع SQLite، أليس هذا ما تبحث عنه؟ يمكنك دائما إيجاد مقالات مجانية على أكاديمية حسوب تتناول هذه الأمور. لكن قاعدة SQLite مستخدمة أكثر مع Python وليس في بيئة Node.js، لذلك إذا بحثت عن SQLite في مقالات الأكاديمية فستجد أنها تتحدث عن أطر العمل الخاصة بـPython والتي أبرزها Flask و Django. بينما مبرمجو Node.js غالبا ما يستخدمون MongoDB كما تم تدريسه في قسم التعامل مع قواعد البيانات غير العلاقية NoSQL. إليك بعض المقالات التي يمكن أن تفيدك:1 نقطة
-
انا اقصدي ازي اعارف الا انا مبتداي او خالص عادي المراحله ده بقيت في مستو افضل1 نقطة
-
1 نقطة
-
بالطبع، فهي تُستخدم في العديد من مجالات الذكاء الاصطناعي، وكأمثلة: معالجة اللغة الطبيعية (NLP)، مثل تحديد المكونات المترابطة في النص، مثل الجمل والعبارات، والكيانات المسمّاة في النص، مثل الأشخاص والأماكن والمنظمات. أيضًا الرؤية الحاسوبية كتقسيم الصورة إلى مناطق مترابطة وتحديد الكائنات في الصورة، ومعالجة البيانات لاستخراج البيانات من مصادر مختلفة وتنظيفها من الأخطاء والتناقضات. وغيرهم من المجالات.1 نقطة
-
@Mustafa Suleiman إذن سيكون علي تعلم أساسية HTML و CSS لبناء الواجهة البسيطة التي أحتاجها، حسنا إذن سأبذل جهدي. أعتقد أنك أسأت فهمي بشأن جافاسكريبت و بايثون فأنا أجيد هاتين اللغتين فقد تعلمناهما خلال الدورة التي درستها و هي دورة علوم الحاسوب و أنا الآن علي تقديم المشروع و لدي 15 يوما لتقديمها و قد مضت بضعت أيام بالفعل. كنت أسأل عن التعامل مع إستعلامات SQL و قاعدة البيانات من خلال بايثون أو جافاسكريبت و هما لغتان كما ذكرت سابقا أجيدهما، قلت أننا تعاملنا في الدورة مع إستعلامات SQL من خلال لغة بايثون في مسار إلى عالم الويب على ما أعتقدد و أحاول إيجاد ذلك الدرس الذي قمنا فيه بذلك ربما ترشدني لمكانه، أيضا كنت أسأل عن مصدر آخر يساعدني في ذلك، إذ إننا كنا نتكلم هناك عن الحماية لذا فلم يكن مفصلا في كيفية التعامل مع الإستعلامات من خلال اللغة...على ما أعتقد...لذا أجل سيكون من المفيد إن ساعدتني في إيجاد ذلك الدرس من الكورس أيضا لو أعطيتني مصدر أو مصادر أخرى تساعدني كما قلنا في التعامل مع إستعلامات SQL و قاعدة البيانات التي سأنشأها من خلال بايثون أو جافاسكريبت "مازلت لا أعلم هل سأستخدم كليهما أو أحدهما و أيهما أستخدم"، بالنسبة للدرس في الكورس فأنا لست حقا وثقا أين هو الدرس أو في أي مسار، ما زلت أحاول البحث عنه بين دروس الدورة.1 نقطة
-
اضغطي على Ctrl + Shift + P ولكن اضغطي على زر CTRL الأيمن وليس الأيسر، ثم ابحثي عن Terminal:Clear واضغطي علي ذلك الخيار ثم أعيدي تشغيل vscode. إن استمرت المشكلة، من الأفضل تحميل تطبيق الـ terminal التالي في الويندوز: https://apps.microsoft.com/detail/9n0dx20hk701?rtc=1&hl=en-eg&gl=EG ثم أعيدي تشغيل vscode وحاولي تشغيل التيرمنال، إن استمرت المشكلة اضغطي على Ctrl + Shift + P ثم ابحثي عن select default terminal واضغي عليه ثم اختاري powershell. إن استمرت المشكلة من الأفضل حذف vscode ثم تثبيته من خلال الرابط التالي: https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-user1 نقطة
-
الأمر بسيط لا تقلق، انت بحاجة فقط إلى دراسة أساسيات HTML و CSS و جافاسكريبت، وذلك متاح في المسار الأول من دورة تطوير واجهات المستخدم، فالمسار الأول من جميع الدورات متاح لك بشكل مجاني، وأهم نقطة هو عنصر النموذج form فمن خلاله نقوم بتضمين الحقول لملء البيانات من قبل المستخدم ثم إرسالها ومعالجتها من قبل جافاسكريبت. وفي دورة علوم الحاسوب تم شرح التعامل مع قواعد البيانات بواسطة Node.js في مسار قواعد البيانات حيث استخدمنا SQLite. ويمكنك تعلم أساسيات بايثون في المسار الأول لدورة بايثون ونفس الأمر بالنسبة لدورة جافاسكريبت. ما هي قاعدة البيانات التي ستستخدمها لمساعدتك، في حال كان المشروع بسيط استخدم SQLite كما تم التوضيح بالدورة.1 نقطة
-
انا اريد تكبير حجم خط داخل رسالة واريد تكبير طول لا يتغير بعد عمل ارتفاع له1 نقطة
-
1 نقطة
-
1 نقطة
-
عبارة مجموعة من الخوارزميات المستخدمة في نظرية الرسم البياني لحلّ مشكلتين رئيسيتين. الأولى هي إيجاد المكونات المتصلة بقوة (SCC)، وذلك لتحديد جميع المجموعات الفرعية من العقد في الرسم البياني الموجه بحيث يكون هناك مسار من أي عقدة إلى أي عقدة أخرى داخل المجموعة، وتُعرف تلك المجموعات باسم "المكونات المتصلة بقوة". الثانية إيجاد أدنى مسار موجه (DAG) من أي عقدة إلى أي عقدة أخرى في الرسم البياني الموجه. وتُستخدم خوارزميات Tarjans في العديد من التطبيقات العملية، بما في ذلك: تحديد المجموعات الفرعية من الأشخاص الذين يتفاعلون مع بعضهم البعض بشكل متكرر في شبكة اجتماعية. التحقق من صحة تصميمات الدوائر الإلكترونية. تحديد المكونات المترابطة في الكود البرمجي. تحديد مجموعات البيانات المترابطة في مجموعة بيانات كبيرة. أي نستخدمها لحلّ العديد من المشكلات المختلفة في نظرية الرسم البياني، لكنها غير مستقرة في بعض الحالات، مما يعني أن نتائجها قد تتغير اعتمادًا على ترتيب معالجة العقد، أيضًا صعبة الفهم، خاصة للمبتدئين.1 نقطة
-
هي خوارزمية مهمة في مجال الحوسبة وخصوصاً في علم الرسوم البيانية و تستخدم هذه الخوارزمية لحل مشاكل مختلفة في الرسوم البيانية اما بالنسبة لاهميتها فهي قدرتها على حل مشاكل الرسوم البيانية بكفاءة عالية وفعالية. واحدة من الاستخدامات الشائعة لها هي في إيجاد التجمعات القوية في الرسوم البيانية، وهو أمر مهم في تحليل الشبكات والتطبيقات الأخرى التي تعتمد على هيكل الرسوم البيانية باختصار هي واحدة من الأدوات الرئيسية التي يعتمد عليها المهندسون والباحثون في مجالات متعددة من الحوسبة وعلم الرسوم البيانية لحل مشاكل تتعلق بالرسوم البيانية بكفاءة عالية بالتوفيق لك1 نقطة
-
طريقة اضافة ميزة تسجيل مستهدم جديد على الموقع عن طريق ربط خدمة نفاذ api وجلب بياناته من مركز المعلومات الوطني مثل الاسم ورقم جوال الموثق بابشر وهنوانه الوطني ؟ موقع تجاري وورد برس1 نقطة
-
السلام عليكم ورحمه الله وبركاته عند محاولة فتح التوثيق الرسمي الخاص ب React الاصدار الجديد لا يتم فتح الموقع بل يظهر خطا يقول This site can’t be reached react.dev took too long to respond. Try: Checking the connection Checking the proxy and the firewall Running Windows Network Diagnostics ERR_CONNECTION_TIMED_OUT مع العلم الانترنت لدي جيد وكل شي على ما يرام فهل هناك حل لكي استطيع قراءة التوثيق بالاصدار الجديد beta وشكرا1 نقطة
-
1 نقطة
-
1 نقطة
-
1 نقطة
-
هدف الدورة هو التركيز على فهم الأساسيات وطريقة رفع التطبيقات إلى أي متجر حيث بنسبة كبيرة جدًا تكون جميع المنصات متشابهة تمامًا في الطريقة التي يتم بها الرفع. على سبيل المثال، إذا كنت تتعامل مع متجر Google Play وتعلمت رفع تطبيقك هناك، ستحتاج إلى: إرفاق صور للتطبيق. إضافة فيديو توضيحي للتطبيق. كتابة سياسة الخصوصية. تقديم طريقة لحذف الحساب إن وجد، بالإضافة إلى بعض الأسئلة الأخرى مثل البلدان المستهدفة والفئة العمرية المستهدفة. تقديم نسخة من التطبيق. وعند رفع التطبيق على منصات أخرى، فإنك ستجد أن 90% من هذه الطلبات متشابهة تقريبًا. وإذا كنت ترغب في معرفة كيفية رفع أي تطبيق على أي متجر، يمكنك طرح السؤال في التعليقات أو الاستفسارات المرفقة بالدرس، وسيتم توفير الخطوات بتفصيل شامل للمساعدتك في الاجابه علي سؤالك.1 نقطة
-
النشر يتم على منصة جوجل بلاي لكونها الأكثر استخدامًا والأسهل في النشر. وعملية إطلاق التطبيق ونشره تتم بواسطة الفريق التقني، لذا يكفي الإطلاع على سير العملية على منصة واحدة لفهم ما يحدث، وذلك ما تم بالدورة.1 نقطة
-
تستخدم `auto-fit` عندما نريد تناسب أي عدد من الأعمدة في المساحة المتاحة. هنا، ستتمدد الأعمدة لتملأ المساحة. تذكر، ستتناسب الأعمدة التي قمنا بتعريفها فقط في المساحة المتاحة. .container { grid-template-columns: repeat(auto-fit, minmax(100px, auto)); } أما عند استخدام `auto-fill`، فإننا نريد تناسب أكبر عدد ممكن من الأعمدة في الصف. ولا يهم إذا كانت الأعمدة فارغة أو لا. وهذا يعني أن `auto-fill` سيستمر في إضافة عمود جديد (أعمدة ضمنية)، حتى إذا لم يكن هناك محتوى كافٍ لملء الأعمدة الجديدة. .container { grid-template-columns: repeat(auto-fill, minmax(100px, auto)); } الفرق بين auto-fit و auto-fill إلى حد ما، تعمل auto-fit و auto-fill بنفس الطريقة، ويتم الاختلاف الرئيسي فيما يتعلق بزيادة عرض المتصفح وكيفية توزيع عناصر الشبكة الجديدة في المساحة المتاحة. نعلم أن auto-fill سيواصل ملء المساحة بأعمدة جديدة. ينشئ أعمدة ضمنية فارغة لملء المساحة المتاحة. بينما يتعامل auto-fit فقط مع المحتوى المتاح. ولن يقوم بإنشاء أعمدة جديدة. بمجرد وجود مساحة كافية لاحتواء عنصر شبكة آخر ، ستنشئ ال auto-fill عمودًا ضمنيًا وتناسب ذلك في المساحة المتاحة. ولكن كما ترى ، لا تفعل ميزة ال auto-fit شيئًا من هذا القبيل. ماذا لو قمنا بزيادة المساحة أكثر؟ الصورة المرفقة بواسطة sushmita_singh1 نقطة
-
"Auto-fill" و"Auto-fit" هما خاصيتان تستخدمان في تصميم واجهات الويب لتنسيق عناصر الشبكة (Grid) أو العناصر المرنة (Flexbox) تلقائيًا. وإليك الفرق بينهما: Auto-fill خاصية "auto-fill" تستخدم عادة في الشبكات (Grids) لتعبئة المساحة المتاحة بعناصر الشبكة بالحد الأقصى الممكن. عندما يتم تعيين خاصية "grid-template-columns" أو "grid-template-rows" إلى "auto-fill"، ستقوم العناصر بملء الشبكة أفقيًا أو عموديًا بشكل تلقائي، ويتم تكرار العناصر الموجودة لتناسب المساحة المتاحة. Auto-fit خاصية "auto-fit" تعمل بطريقة مشابهة لـ "auto-fill"، حيث تعبئة المساحة المتاحة بعناصر الشبكة أو العناصر المرنة. ولكن الفرق الرئيسي هو أن "auto-fit" يعمل على ضبط حجم العناصر لتناسب المساحة المتاحة دون إضافة عناصر إضافية. إذا كان هناك مساحة زائدة، فإن العناصر ستتقلص لتناسب المساحة، بينما إذا كان هناك نقص في المساحة، فإن العناصر ستتمدد لملء المساحة المتاحة. "auto-fill" يستخدم لتكرار العناصر الموجودة لتعبئة المساحة المتاحة، بينما "auto-fit" يعتمد على تحجيم العناصر الموجودة لتناسب المساحة المتاحة دون إضافة عناصر إضافية.1 نقطة
-
النظام الثنائي هو نظام عددي يكون أساس العدد فيه 2، ويمثل المعلومات بحالتين متنافيتين لا ثالث لهما، ويتكون العدد الثنائي من عناصر تسمى بِتات bits بحيث يمكن أن يكون كل بت بإحدى الحالتين المحتمَلتَين، واللتين نمثلهما عمومًا بالرقمين 1 و 0. نظرية النظام الثنائي النظام الثنائي هو نظام يكون فيه الأساس هو العدد 2 ليمثل المعلومات بحالتين متنافيتين، ويتكون العدد الثنائي من عناصر تسمى بِتّات، إذ يمكن أن يكون كل بِتّ بإحدى الحالتين المحتمَلتين واللتين نمثِّلهما عمومًا بالرقمين 1 و 0، ويمكننا القول أنهما تمثِّلان القيمتَين الصحيحة والخاطئة؛ أما من الناحية الكهربائية، فقد تمثَّل الحالتين بجهد كهربائي مرتفع ومنخفض أو مثل زر التشغيل والإيقاف. نبني الأعداد الثنائية بالطريقة نفسها التي نبني بها الأعداد في نظامنا التقليدي العشري الذي يكون فيه الأساس هو العدد 10، لكن بدلاً من منزلة الآحاد ومنزلة العشرات ومنزلة المئات، …إلخ، لدينا منزلة الواحد ومنزلة الاثنين ومنزلة الأربعة ومنزلة الثمانية، …إلخ، أي كما هو موضح في الجدول التالي: table { width: 100%; } thead { vertical-align: middle; text-align: center; } td, th { border: 1px solid #dddddd; text-align: right; padding: 8px; text-align: inherit; } tr:nth-child(even) { background-color: #dddddd; } 20 21 22 23 24 25 26 2... 1 2 4 8 16 32 64 … لنمثِّل العدد 203 على سبيل المثال في الأساس العشري، إذ نعلم أننا نضع الرقم 3 في منزلة الآحاد، والرقم 0 في منزلة العشرات والرقم 2 في منزلة المئات، ويمثَّل هذا من خلال الأُسس exponents كما في الجدول التالي: 100 101 102 3 0 2 أو نمثلها بطريقة أخرى: 2x 102 + 3 x 100 = 200 + 3 = 203 لنمثِّل العدد نفسه بالنظام الثنائي، إذ سيكون لدينا الجدول التالي: 20 21 22 23 24 25 26 27 1 1 0 1 0 0 1 1 ويكافئ هذا: 27 + 26 + 23 + 21 + 20 = 128 + 64 + 8 + 2 + 1 = 203 دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن أسس الحوسبة قد تتساءل كيف لعدد بسيط أن يكون الأساس الذي بنيَت عليه كل الأمور المذهلة التي يستطيع الحاسوب تنفيذها، ورغم صعوبة تصديق ذلك إلا أنها الحقيقة، إذ يحتوي المعالج الموجود في حاسوبك على مجموعة معقدة -لكنها محدودة في النهاية- من التعليمات instructions التي يمكن تنفيذها على قيم مثل الجمع والضرب، …إلخ، إذ يُسنَد عدد إلى كل تعليمة من هذه التعليمات بصورة أساسية، حتى يمثَّل برنامج كامل بسلسلة من الأعداد فقط، أي أضف هذا إلى ذاك، اضرب بذاك، قسّم عليه، وهكذا، فإذا كان المعالج مثلًا يعلم أنّ العملية 2 هي الجمع، فإنّ العدد 252 قد يعني "اجمع 5 و 2 وخزِّن الناتج في مكان ما"، وتُعَدّ العمليات في الواقع أعقد بكثير طبعًا، إذ سنتناولها في فصل معمارية الحاسوب لاحقًا، لكن باختصار هذا هو الحاسوب. كان بمقدور المرء في عهد البطاقات المثقَّبة punch-cards أن يرى بعينه الواحدات والأصفار التي تكوِّن مسار البرنامج من خلال النظر إلى الثقوب الموجودة على البطاقة، طبعًا تحوّل ذلك اليوم إلى آلية التخزين السريع والدقيق بواسطة قطبية الجزيئات الممغنطة الصغيرة مثل الأشرطة tapes أو الأقراص disks، والذي أتاح لنا حمل كميات هائلة تفوق التصور من البيانات في جيوبنا. إنّ ترجمة هذه الأعداد إلى خدمات تنفع البشرية هي ما يجعل الحاسوب نافعًا لهذه الدرجة، وتتكوّن الشاشات مثلًا من ملايين البكسلات pixels المنفصلة، وكل منها صغير لدرجة لا تميّزه عين الإنسان، لكنها تكوِّن صورةً مكتملةً عندما تكون مجتمعةً، إذ يحتوي كل بكسل عمومًا على عناصر محدَّدة من الأحمر والأخضر والأزرق التي تكوِّن اللون الذي يعرضه، وبالتأكيد يمكن تمثيل هذه القيم بالأعداد التي بالطبع يمكن تمثيلها بالنظام الثنائي، وبالتالي يمكن تقسيم أيّ صورة إلى ملايين النقاط الفردية، وتُمثَّل كل نقطة بمجموعة من ثلاث قيم تمثِّل قيم الأحمر والأخضر والأزرق للبكسل، وبالتالي عندما يكون لدينا سلسلة طويلة من هذه الأعداد وتكون مُصاغةً بصورة صحيحة، فستتمكن أجهزة الفيديو في حاسوبك من تحويل هذه الأعداد إلى إشارات كهربائية لتشغيل وإيقاف البكسلات الفردية لعرض صورة. سنبني بيئة الحوسبة الحديثة بأكملها في الكتاب بدءًا من اللبنة الأساسية هذه، أي من القاعدة إلى القمة إذا صح التعبير. البتات bits والبايتات byts يمكننا بصورة أساسية تمثيل أيّ شيء بعدد كما تحدثنا في الفقرات السابقة، ويمكن تحويله إلى النظام الثنائي وإجراء عمليات عليه بواسطة الحاسوب، إذ سنحتاج على الأقل لتمثيل جميع أحرف الأبجدية مثلًا إلى توليفات مختلفة وكافية لتمثيل جميع المحارف الصغيرة lower case والمحارف الكبيرة upper case والأعداد وعلامات الترقيم إلى جانب بعض الأمور الإضافية، ويعني هذا أننا ربما سنحتاج إلى حوالي 80 توليفة مختلفة. إذا كان لدينا بِتّان، فيمكننا تمثيل 4 توليفات فريدة محتملة وهي 00 01 10 11؛ أما إذا كان لدينا ثلاث بِتّات، فيمكننا تمثيل 8 توليفات مختلفة، وبصورة عامة، إذا كان لدينا عدد n من البِتّات يمكننا تمثيل 2n توليفة فريدة. تمنحنا 8 بِتّات 28 = 256 تمثيلًا فريدًا، وهذا عدد أكثر من كاف للتوليفات الأبجدية التي نحتاجها، كما أننا ندعو كل 8 بِتّات ببايت، كما أنّ حجم المتغير من نوع char هو بايت واحد في لغة C. أسكي ASCII يستطيع أيّ شخص اختلاق رابط بين الأحرف والأعداد عشوائيًا بما أنّ البايت يمكنه تمثيل أيّ قيمة بين 0 و 255، فقد تقرِّر الشركة المصنعة لبطاقات الفيديو مثلًا أنّ رقم 1 يمثل المحرف 'A'، لذا عندما ترسَل القيمة 1 إلى بطاقة الفيديو، ستعرض المحرف 'A' بحالته الكبيرة على الشاشة، وقد تقرِّر الشركة المصنعة للطابعة لسبب ما أن الرقم 1 يمثل 'z' بالحالة الصغيرة، وبالتالي سيتطلب عرض وطباعة الشيء نفسه تحويلات معقدة، ولتجنب حدوث ذلك ابتُكِرت الشيفرة المعيارية الأميركية لتبادل المعلومات American Standard Code for Information Interchange -أو ASCII اختصارًا-، وهذه الشيفرة مبنية على 7 بتات 7-bit code، أي توجد 27 أو 128 شيفرةً متاحةً. ينقسم مجال الشيفرات إلى جزأين رئيسيين هما الشيفرات الغير قابلة للطباعة والشيفرات القابلة للطباعة، إذ تكون المحارف القابلة للطباعة مثل الأحرف الكبيرة والصغيرة والأعداد وعلامات الترقيم، في حين تكون المحارف الغير قابلة للطباعة مخصصةً للتحكم وتنفيذ عمليات مثل محارف الإرجاع carriage-return، أي العودة إلى بداية السطر الحالي دون النزول إلى السطر التالي، أو رن جرس الطرفية عند ورود المحرف Bell أو شيفرة القيمة الفارغة NULL الخاصة التي لا تمثل شيئًا على الإطلاق. تكفي المحارف 127 الفريدة للغة الإنجليزية الأميركية، لكنها تصبح محدودةً جدًا عندما يريد المرء تمثيل المحارف السائدة في اللغات الأخرى وخاصةً اللغات الآسيوية التي قد تحتوي على عدة آلاف من المحارف الفريدة، وللحد من ذلك، تنتقل الأنظمة الحديثة من شيفرة أسكي إلى يونيكود Unicode التي تستخدِم ما يصل إلى 4 بايتات لتمثل محرفًا، وهذا يفسح مجالًا أكبر بكثير. التكافؤ Parity يبقى بت واحد من البايت فائضًا بما أنّ شيفرة الأسكي مبنية على 7 بتات فقط، ويمكن الاستفادة منه في تحقيق التكافؤ parity، إذ يُعَدّ شكلًا بسيطًا من أشكال التحقق من الأخطاء، فتخيّل حاسوبًا يستخدِم بطاقات مثقبة في عملية الإدخال، بحيث يمثِّل وجود الثقب البِتّ 1 وغيابه يمثل البِتّ 0، وستؤدي أية تغطية غير مقصودة لثقب ما إلى قراءة قيمة غير صحيحة وستتسبب في سلوك غير معرَّف. يتيح التكافؤ إجراء فحص بسيط للبِتّات المؤلِّفة للبايت للتأكد من أنها قُرِئت بصورة صحيحة، ويمكننا تنفيذ التكافؤ الفردي أو الزوجي باستخدام البِتّ الفائض الذي نَعدّه بِتّ التكافؤ، فإذا كان عدد الواحدات في المعلومات المخزَّنة على البِتّات السبعة فرديًا، فسيضبط بت التكافؤ ويكون حينها التكافؤ فرديًا odd parity، وإذا كان عددها زوجيًا، فلا يضبط بِتّ التكافؤ؛ أما التكافؤ الزوجي Even parity، فهو عكس ذلك، فإذا كان عدد الواحدات زوجي، فسيُضبط بِتّ التكافؤ على الرقم 1، وبهذه الطريقة سينتج عن تغيّر بِتّ واحد خطأ تكافؤ يمكن اكتشافه. الحواسيب ذات أنظمة 16 و 32 و 64 بت لا تتسع جميع الأعداد في بايت أو مجموعة محددة من البايتات، فبفرض أن كان رصيدك المصرفي كبيرًا مثلًا فهو يحتاج إلى مجال أوسع مما يمكن أن يتسع في بايت واحد لتمثيله، وتتألف المعماريات الحديثة في الحواسيب حاليًا من أنظمة 32 بت على الأقل، وهذا يعني أنها تعمل مع 4 بايتات في وقت واحد عند المعالجة والقراءة أو الكتابة على الذاكرة، ونشير آنذاك إلى كل 4 بايتات بالكلمة word، وهذا مشابه للغة حيث تكوِّن الأحرف -أو البتات- الكلمات في جملة ما، والفارق في الحاسوب عن اللغة أنه تكون كل الكلمات بالحجم نفسه، وهو حجم المتغير من نوع int في اللغة C الذي يساوي 32 بِتّ، أما معماريات 64 بت الحديثة، يضاعف حجم عمل المعالج إلى 8 بايت بدلًا من 4 في معماريات 32 بت. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن كيلوبايت وميغابايت وغيغابايت تتعامل الحواسيب مع عدد كبير من البايتات وهذا ما يجعلها شديدة القوة، وبالتالي نحتاج إلى وسيلة للتحدث عن أعداد ضخمة من البايتات، والوسيلة البديهية لذلك هي استخدام بادئات نظام الوحدات الدولي International System of Units -أو SI اختصارًا- كما هو متّبع في معظم المجالات العلمية الأخرى، إذ يشير الكيلو مثلًا إلى 103 أو 1000 وحدة، بحيث يكون الكيلوغرام الواحد هو 1000 غرام. يُعَدّ 1000 عددًا تقريبيًا round جيدًا في الأساس العشري، لكنه يمثَّل في النظام الثنائي بـ 1111101000 وهو ليس عددًا تقريبيًا، لكن 1024 أو 210 هو عدد تقريبي والذي يمثَّل في النظام الثنائي بـ 10000000000، وهو قريب جدًا من الكيلو في النظام العشري، أي العدد 1000 قريب من العدد 1024، وبالتالي أصبح 1024 بايت بطبيعة الحال يُعرَف بالكيلوبايت؛ أما الوحدة التالية في نظام الوحدات الدولي، فهي ميغا mega المقابلة لقيمة 106، كما تستمر البادئات بالازدياد بمقدار 103 المقابلة للتجميع المعتاد المكون من ثلاثة أرقام عند كتابة أعداد كبيرة، كما يصادف مجددًا أن تكون 220 قريبةً من تحديد نظام الواحدات الدولي للميغا في النظام العشري، أي 1048576 بدلًا من 1000000، فعند زيادة واحدات النظام الثنائي بالقوى من مضاعفات 10 تبقى قريبةً وظيفيًا من قيمة النظام العشري في نظام الواحدات الدولي، مع أنه يحيد قليلًا كل عامل متزايد عن دلالة أساس نظام الواحدات الدولي، وبالتالي فإنّ وحدات النظام العشري في نظام الواحدات الدولي قريبة بما يكفي على قيم النظام الثنائي، وقد شاع استخدامها لتلك القيم. الاسم معامل النظام الثنائي بايت معامل النظام العشري القريب بايت في النظام العشري 1 كيلوبايت 210 1024 103 1000 1 ميغابايت 220 1.048.576 106 1.000.000 1 غيغابايت 230 1.073.741.824 109 1.000.000.000 1 تيرابايت 240 1.099.511.627.776 1012 1.000.000.000.000 1 بيتابايت 250 1.125.899.906.842.624 1015 1.000.000.000.000.000 1 إكسابايت 260 1.152.921.504.606.846.976 1018 1.000.000.000.000.000.000 قد يفيدك ترسيخ معامِلات النظام الثنائي في ذاكرتك كثيرًا في الربط السريع للعلاقة بين عدد البِتّات والأحجام التي يفهمها الإنسان، إذ يمكننا بسرعة مثلًا حساب إمكانية حاسوب بنظام 32 بِتّ أن يعالج ما يصل إلى 4 غيغابايت من الذاكرة من خلال ملاحظة إعادة التركيب (4) 22 + 230، وبالمثل يمكن أن تعالِج قيمة 64 بِتّ ما يصل إلى 16 إكسابايت، أي 260 + 24، كما يمكنك حساب ضخامة هذا العدد، ولتأخذ فكرةً عن مدى ضخامته، فيمكنك حساب المدة التي ستستغرقها في العد إلى 264 إذا عددت رقمًا واحدًا كل ثانية. كيلوبت وميغابت وغيغابت سيشار إلى السعات غالبًا بالبِتّات بدلًا من البايتات إلى جانب الارتباك الذي يحدث نتيجة العبء المفرط لتحويل واحدات نظام الواحدات الدولي SI بين النظامَين الثنائي والعشري، ويحدث هذا عمومًا عند التحدث في مجال الشبكات أو أجهزة التخزين، فربما لاحظت أنّ اتصال ADSL لديك يشار إليه بقيمة مثل 1500 كيلوبِت في الثانية، إن العملية الحسابية بسيطة، إذ نضرب بالعدد 1000 للكيلو ثم نقسِّم على 8 لنحوِّله إلى بايت ثم نقسِّمه على العدد 1024 لنحوله إلى كيلوبايت، وبالتالي تكون 1500 كيلوبِت في ثانية = 183 كيلوبايت في الثانية. أقرَّت هيئة نظام الواحدات الدولي هذه الاستخدامات المزدوجة وحددت بادئات فريدةً للاستخدام الثنائي، إذ تقابل 1024 بايت بموجب المعيار كيبي بايت kibibyte، وهو اختصار للكيلوبايت الثنائي kilo binary byte وتُختصر بـ KiB؛ أما البادئات الأخرى، فلها بادئة مماثلة مثل ميبي بايتس MiB، ويمنع العرف المتَّبع إلى حد كبير استخدام هذه المصطلحات، لكنك قد تراها في بعض المؤلَّفات. التحويل يُعّدّ استخدام الحاسوب الطريقة الأسهل للتحويل بين الأنظمة، فبعد كل شيء هذا ما يبرع فيه. ومع ذلك، فمن المفيد معرفة كيفية إجراء التحويلات يدويًا. تُعَدّ القسمة المتكررة الطريقة الأسهل للتحويل بين الأنظمة، بحيث نقسِّم ناتج القسمة بصورة متكررة على الأساس إلى أن يصبح ناتج القسمة صفرًا مع تدوين الباقي في كل خطوة، ثم ندوِّن الباقي بالعكس، أي نبدأ من الأسفل ونلحق العدد بالجهة اليمين في كل مرة، وسنذكر مثالًا للتوضيح، كما سيكون الأساس 2 نظرًا لأننا نحوِّل إلى النظام الثنائي. عملية القسمة النتيجة الباقي اتجاه قراءة الباقي 2 ÷ 20310 101 1 2 ÷ 10110 50 1 ↑ 2 ÷ 5010 25 0 ↑ 2 ÷ 2510 12 1 ↑ 2 ÷ 1210 6 0 ↑ 2 ÷ 610 3 0 ↑ 2 ÷ 310 1 1 ↑ 2 ÷ 110 0 1 ↑ ابدأ بقراءة الباقي من الأسفل وأضف كل عدد منه إلى اليمين لتحصل على النتيجة 11001011، وقد وجدنا فعلًا أنّ هذه القيمة في النظام الثنائي هي 203 في النظام العشري. العمليات البوليانية Boolean Operations اكتشف جورج بول عالم الرياضيات مجالًا كاملًا في الرياضيات يسمى جبر بُول Boolean Algebra، وعلى الرغم من أنّ اكتشافاته كانت في منتصف القرن التاسع عشر، إلا أنها أصبحت لاحقًا أساسيات علوم الحاسوب، ويُعَدّ جبر بول هو موضوع واسع النطاق، لذا سنتناول في هذا الكتاب بعض مبادئه الأساسية فقط حتى تستطيع بدء رحلة التعلم. تأخذ العمليات البوليانية ببساطة دخلًا معينًا وتنتج خرجًا معينًا حسب قاعدة معينة، وأبسط عملية بوليانية مثلًا هي not، وهي تعكس قيمة معامِل operand الدخل؛ أما المعامِلات الأخرى، فتأخذ عادةً دخلين وتنتج خرجًا واحدًا. يسهل تذكر العمليات البوليانية الأساسية المستخدَمة في علوم الحاسوب وقد أدرجناها في هذا الفصل، ومثلناها بجداول الحقيقة truth tables التي تبيِّن بمظهر بسيط جميع المدخلات والمخرجات المحتمَلة، ويقابل مصطلح حقيقي true القيمة 1 في النظام الثنائي. معامل Not تمثَّل عادةً بالرمز !، وهي تعكس قيمة الدخل فتحول 0 إلى 1 و 1 إلى 0. الدخل الخرج 1 0 0 1 معامل And تذكَّر العبارة التالية: "تكون النتيجة حقيقيةً إذا كان الدخل الأول حقيقيًا و الدخل الثاني حقيقيًا" لكي يسهل عليك تذكُّر آلية عمل معامل and. الدخل الأول الدخل الثاني الخرج 0 0 0 1 0 0 0 1 0 1 1 1 معامل Or تذكَّر العبارة التالية: "تكون النتيجة حقيقيةً إذا كان الدخل الأول حقيقيًا أو الدخل الثاني حقيقيًا" لكي يسهل عليك تذكُّر آلية عمل معامل or . الدخل الأول الدخل الثاني الخرج 0 0 0 1 0 1 0 1 1 1 1 1 معامل أو الحصرية Exclusive Or تختصَر عبارة معامل أو الحصرية Exclusive Or بـ xor وهي حالة خاصة من معامِل or، بحيث يكون الخرج حقيقيًا عندما يكون أحد المدخَلين فقط حقيقيًا، وستدهشك الحيل المميزة التي يستطيع هذا المعامِل تنفيذها، لكنها ليست مستخدَمةً كثيرًا في النواة. الدخل الأول الدخل الثاني الخرج 0 0 0 1 0 1 0 1 1 1 1 0 استخدام العمليات البوليانية في الحواسيب قد يصعب عليك تصديق أنّ أساس كل ما ينفِّذه حاسوبك هو تلك المعامِلات التي تحدثنا عنها، فالجامع النصفي half adder مثلًا هو أحد أنواع الدارات التي تتكون من العمليات البوليانية التي تجمع البِتّات، وقد سُمّي الجامع النصفي لأنه لا يعالج البتات الفائضة، وستبدأ في بناء كيان يجمع أعداد ثنائية طويلة من خلال وضع أكثر من جامع نصفي معًا، ثم أضف إليه بعض الذواكر الخارجية وستكون قد بنيت حاسوبًا. تنفَّذ العمليات البوليانية من الناحية الإلكترونية في بوابات gates مصنوعة من الترانزستورات transistors، لذا لا بد أنك سمعت عن عدد الترانزستورات transistor counts وقانون مور وغيرها، وكلما زاد عدد الترانزستورات زاد عدد البوابات وزاد عدد الأشياء التي يمكنك جمعها، كما ستحتاج لبناء الحاسوب الحديث إلى عدد هائل من البوابات وعدد هائل من الترانزستورات، إذ تحتوي بعض معالِجات إيتانيوم Itanium الحديثة على حوالي 460 مليون ترانزستور. العمل بالنظام الثنائي في اللغة C توجد واجهة مباشرة لجميع المعامِلات التي ذكرناها في اللغة C، ويشرح الجدول التالي هذه المعامِلات: المعامل اصطلاحه في اللغة C not ! and & or \ xor ^ نطبّق هذه المعامِلات على المتغيرات لتعديل البِتّات ضمن المتغير، ولكن يجب علينا أولًا أن نتناول شرحًا للترميز الست العشري قبل أن نستعرض أمثلةً عن ذلك. طور أعمالك مع حلول الذكاء الاصطناعي المبتكرة اسبق منافسيك نحو المستقبل وحقق أهدافك بالاستعانة بقوة الذكاء الاصطناعي اطلب خدمات الذكاء الاصطناعي الآن النظام الست عشري Hexadecimal يشير النظام الست عشري إلى نظام أساسه العدد 16، والسبب الوحيد لاستخدامنا هذا النظام في علوم الحاسوب هو أنه يسهِّل على الإنسان التفكير في الأرقام الثنائية، إذ يسهِّل عدم تعامل الحواسيب إلا مع النظامَين الثنائي والست عشري على الإنسان محاولته التعامل مع الحاسوب. لكن لماذا اختير الأساس 16؟ إن الخيار الطبيعي هو الأساس 10 لأننا معتادون على التفكير في الأساس 10 حسب نظامنا العددي اليومي، لكن الأساس 10 لا يتوافق كثيرًا مع النظام الثنائي؛ إذ نحتاج إلى أربع بتات لتمثيل 10 عناصر مختلفة في النظام الثنائي، لكن تلك الأربع بتات توفر لنا ست عشرة توليفة محتمَلة، لذا نحن أمام احتمالين؛ إما أن نختار الطريقة شديدة التعقيد المتمثلة في محاولة التحويل بين النظام العشري والثنائي، أو أن نختار الطريقة السهلة وننشئ نظامًا عدديًا أساسه العدد 16 وهو النظام الست عشري. يستخدِم النظام الست عشري الأعداد القياسية في النظام العشري مع إضافة الأحرف A B C D E F التي تشير إلى الأعداد 10 11 12 13 14 15، مع الانتباه إلى بدء العدّ من الصفر، فمتى ما رأيت عددًا مسبوقًا بـ 0x، فاعلم أنه يدل على عدد ست عشري، وكما ذكرنا أنه سنحتاج إلى أربع بتات بالضبط لتمثيل 16 نمط مختلف في النظام الثنائي، لذا يمثِّل كل عدد ست عشري أربع بتات بالضبط، ويجب أن تعدّه تمرينًا لتتعلم الجدول التالي عن ظهر قلب. النظام الست عشري النظام الثنائي النظام العشري 0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 A 1010 10 B 1011 11 C 1100 12 D 1101 13 E 1110 14 F 1111 15 بالطبع لا يوجد سبب للتوقف عن متابعة النمط (مثل تحديد G للقيمة 16)، ولكن القيم الستة عشرة هي موازنة ممتازة بين تقلبات الذاكرة البشرية وعدد البتات التي يستخدمها الحاسوب، كما ستجد أيضًا الأساس 8 مستخدَمًا أحيانًا في سماحيات الملفات في أنظمة يونكس مثلًا، ونمثِّل ببساطة أعدادًا أكبر من البتات بأعداد أكثر، إذ يمكن مثلًا تمثيل متغير يتألف من ستة عشر بت بالقيمة 0xAB12، وما عليك سوى تحويل كل رقم على حدى وفقًا للجدول السابق ثم جمع القيم معًا لتجد مقابلها في النظام الثنائي، أي لتكون القيمة المقابلة للقيمة 0xAB12 هي العدد الذي يتألف من 16 بت في النظام الثنائي 1010101100010010، كما نستطيع التحويل من النظام الثنائي إلى النظام الست عشري بعكس تلك العملية، كما نستطيع الاستعانة بنهج القسمة المتكررة ذاته لتغيير أساس أي عدد، فلإيجاد قيمة العدد 203 بالنظام الست عشري مثلًا: عملية القسمة النتيجة الباقي اتجاه قراءة الباقي 16 ÷ 20310 12 11 (0xB) 16 ÷ 1210 0 12 (0xC) ↑ لذا تكون قيمة 203 في النظام الست عشري هي 0xCB الاستخدام العملي للأنظمة العددية سنطلع فيما يلي على الاستخدام العملي للأنظمة العددية وما النتائج العملية التي ممكن أن نحصل عليها. استخدام النظام الثنائي في الشيفرات البرمجية تُعَدّ برمجة حاسوب بلغات عالية المستوى high level دون معرفة أيّ شيء عنه هو أمر عملي بحت على الرغم من أنّ النظام الثنائي هو اللغة الأساسية لكل حاسوب، وعلى أية حال نهتم ببعض مبادئ النظام الثنائي الأساسية والمستخدَمة بصورة متكررة بالنسبة شيفرة البرمجية منخفضة المستوى low level code التي سنتناولها. التقنع والرايات سنشرح مفهوم عمليتي التقنع والرايات وكيفية تطبيقهما عمليًا على الأنظمة العددية. التقنع Masking من المهم غالبًا جعل البنى والمتغيرات تحجز مساحةً بأكثر طريقة فعالة ممكنة في الشيفرة البرمجية منخفضة المستوى، وقد يتضمن هذا في بعض الحالات تعبئة packing متغيرين -يكونان مرتبطين ببعضهما عمومًا- بمتغير واحد بطريقة فعالة. تذكَّر أنّ كل بِتّ يمثل حالتين، فإذا علمنا مثلًا أنّ للمتغير 16 حالة محتمَلة فقط، فيمكن تمثيله بـ 4 بِتّات، أي 24 = 16 قيمةً فريدةً، لكن أصغر نوع يمكننا التصريح عنه في اللغة C هو 8 بتات وهو نوع char أي محرف، فإما نهدر أربع بتات، أو نجد طريقةً نستخدِم فيها تلك البتات الفائضة، ويمكننا تحقيق ذلك بسهولة من خلال عملية التقنُّع التي تتبع قواعد العمليات المنطقية لاستخراج القيم وهي موضَّحة في الصورة التالية. نحتفظ بقيمتَين منفصلتين تتألفان من 4 بِتّات داخل محرف واحد يتألف من 8 بِتّات، إذ نُعِدّ البِتّات الأربعة الأولى (الزرقاء) قيمةً واحدةً والبِتَات الأربعة الأخيرة (الحمراء) قيمةً أخرى، وقد ضبطنا القناع على تعيين قيمة البتات الأربعة الأخيرة 1 (0x0F) لاستخراج البِتّات الأربعة السفلية، وبما أنّ المعامِل and المنطقي سيضبط البت إلى 1 فقط إذا كانت قيمة كلا البتّين 1، فستخفي البِتّات التي ضبطنا قيمتها على 0 في القناع وهي البتات التي لا تهمنا بصورة فعالة. (التقنُّع) نقلب القناع للحصول على البِتّات الأربعة الأولى (الزرقاء)، أي نضبط البِتّات الأربعة الأولى على القيمة 1 والبتات الأربعة الأخيرة على القيمة 0، وستلاحظ أنّ نتيجة هذا ستكون 0000 1010 أو 0xA0 في النظام الست عشري، على حين أننا نريد فعلًا أن نعتبر هذه القيمة الفريدة المؤلفة من 4 بتات 1010 أي 0x0A، ولوَضع هذه البتات في الموضع الصحيح نستخدِم المعامِل right shift أربع مرات، والذي سيمنحنا القيمة النهائية 1010 0000. 1 #include <stdio.h> #define LOWER_MASK 0x0F #define UPPER_MASK 0xF0 5 int main(int argc, char* argv[]) { /* قيمتان بحجم 4 بتات مخزنتان في متغير بحجم 8 بتات */ 10 char value = 0xA5; char lower = value & LOWER_MASK; char upper = (value & UPPER_MASK) >> 4; printf("Lower: %x\n", lower); 15 printf("Upper: %x\n", upper); } يتطلب ضبط البِتّات المعامِل or المنطقي، لكن سنستخدم الأصفار 0 بدلًا من استخدام الواحدات 1 على أساس قناع، كما ننصحك برسم مخطط مشابه للصورة السابقة والعمل على ضبط البِتّات بواسطة المعامِل or المنطقي. الرايات flags يتضمن البرنامج غالبًا عددًا كبيرًا من المتغيرات التي توجد فقط بصيغة رايات flags في شروط معينة، فآلة الحالات state machine مثلًا هي خوارزمية تتنقل عبر عدد من الحالات المختلفة، لكنها لا تتواجد إلا في حالة واحدة فقط في المرة الواحدة، ولنقل أنه لديها 8 حالات مختلفة، إذ نستطيع بسهولة التصريح عن 8 متغيرات مختلفة، بحيث يكون هناك متغير واحد لكل حالة، لكن في كثير من الحالات يفضَّل التصريح عن متغير واحد مؤلف من 8 بتات وتعيين راية لكل بِتّ للإشارة إلى حالة معينة. تُعَدّ الرايات حالةً خاصةً من التقنُّع، لكن يمثِّل كل بِتّ حالةً بوليانيةً معينةً، أي تشغيل أو إيقاف، كما يمكن لمتغير مؤلَّف من عدد n من البتات أن يحمل العدد n من الرايات المختلفة، ويُعَدّ نموذج الشيفرة البرمجية التالي هو مثال نموذجي على استخدام الرايات، وستلحظ اختلافات في هذه الشيفرة البرمجية الأساسية في معظم الأحيان. 1 #include <stdio.h> /* * تعريف كافة الرايات الثمانية المحتمَلة لمتغير بحجم 8 بتات 5 * الاسم النظام الست عشري النظام الثنائي */ #define FLAG1 0x01 /* 00000001 */ #define FLAG2 0x02 /* 00000010 */ #define FLAG3 0x04 /* 00000100 */ 10 #define FLAG4 0x08 /* 00001000 */ /* ... وهكذا */ #define FLAG8 0x80 /* 10000000 */ int main(int argc, char *argv[]) 15 { char flags = 0; /* متغير بحجم 8 بتات */ /* ضبط الرايات بمعامل orالمنطقي */ flags = flags | FLAG1; /* ضبط الراية الأولى */ 20 flags = flags | FLAG3; /* ضبط الراية الثالثة /* تحقق من الرايات بالمعامل and المنطقي. إذا كانت الراية مضبوطة بالقيمة 1 * سيرجع المعامل and قيمة 1 * if مما سيحقق الشرط الوارد في */ 25 if (flags & FLAG1) printf("FLAG1 set!\n"); /* سيكون هذا بالطبع غير صحيح */ if (flags & FLAG8) 30 printf("FLAG8 set!\n"); /* تحقق من عدة رايات بواسطة or المنطقي * سيمرر هذا لأن الراية الأولى مضبوطة */ if (flags & (FLAG1|FLAG4)) 35 printf("FLAG1 or FLAG4 set!\n"); return 0; } ترجمة -وبتصرف- للقسم Binary — the basis of computing من الفصل Chapter 2. Binary and Number Representation من كتاب Computer Science from the Bottom Up. اقرأ أيضًا المقال التالي: تمثيل الأنواع والأعداد في الأنظمة الحاسوبية المقال السابق: مفهوم واصفات الملفات File Descriptors وارتباطها بعملية التجريد في أنظمة التشغيل أساسيات نظام العد الثنائي في الشبكات1 نقطة