وضع الامتحان

الشرح مخفي دلوقتي — ركّز في الأسئلة بس. اضغط "إظهار الشرح" فوق في أي وقت للرجوع للدرس الكامل.

JavaScript — الصف الأول الثانوي

أساسيات الجافاسكريبت: for، if، function، array

أربع أدوات هي عصب أغلب أسئلة الامتحان: تتّخذ قرارًا بـ if، تكرّر عملية بـ for، تُغلّف الكود في function، وتخزّن مجموعة قيم في array. كل قسم فيه الشرح، مثالين متدرّجين، ومحرر حقيقي تقدر تعدّل فيه الكود وتشغّله بنفسك.

شرط if = قرار حلقة for = تكرار function = تغليف كود array = تخزين مجموعة
if ( ) { }

الجملة الشرطية — if / else if / else

تُستخدم لاتّخاذ قرار بناءً على شرط منطقي نتيجته true أو false. لو الشرط صحّ يتنفّذ الكود اللي جواه، ولو غلط ينتقل لـ else if التانية أو لـ else الأخيرة.

الصيغة العامةif (الشرط) { // ينفّذ لو الشرط صحيح } else if (شرط آخر) { // ينفّذ لو الشرط الأول غلط والتاني صحيح } else { // ينفّذ لو كل الشروط السابقة غلط }
مثال 1

تصنيف رقم: موجب / سالب / صفر

عندنا رقم واحد، وعايزين نعرف نوعه بثلاث حالات — عدد الشروط دايمًا = عدد الحالات ناقص واحد (لأن else بتغطّي الحالة الأخيرة تلقائيًا).

  • لو number > 0 → موجب
  • لو number < 0 → سالب
  • غير كده (يبقى = 0) → صفر
sign.js
اضغط ▶ شغّل لترى الناتج
مثال 2

تقدير درجة طالب

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

grade.js
اضغط ▶ شغّل لترى الناتج
مثال 3

الشروط المتداخلة — if داخل if

ممكن نكتب if كاملة داخل if أخرى — وده اسمه التداخل (nested if). الشرط الداخلي مش بيتفحص أصلًا إلا لو الشرط الخارجي تحقق الأول.

  • الخارجي age >= 18 غلط → نطبع "العمر غير مناسب" ومنوصلش للداخلي خالص
  • الخارجي صحّ → ساعتها بس نفحص hasId
  • كل else بتتبع أقرب if ليها في نفس المستوى — تابع الأقواس { }

جرّب تغيّر age لـ 15 أو hasId لـ false وشوف أنهي فرع بيتنفّذ.

entry.js
اضغط ▶ شغّل لترى الناتج
تنبيه امتحان

= للتخزين، أما == و=== فللمقارنة. الفرق: == يقارن القيمة فقط، بينما === يقارن القيمة والنوع معًا — استخدم === دائمًا لتفادي أخطاء المقارنة في الامتحان.

for ( ) { }

الحلقة التكرارية — for

تُستخدم لتكرار تنفيذ كود عدد معروف من المرات، بدل كتابة نفس السطر يدويًا. تتكوّن من ثلاثة أجزاء مفصولة بفاصلة منقوطة: البداية، الشرط، والخطوة.

الصيغة العامةfor (let i = البداية; i شرط النهاية; i++ ) { // الكود اللي هيتكرر }
مثال 1

طباعة الأرقام من 1 إلى 5

المتغيّر i يبدأ من 1، ويتكرر الكود طالما i <= 5، وبعد كل تكرار يزيد i بواحد عبر i++.

count.js
اضغط ▶ شغّل لترى الناتج
مثال 2

حساب مجموع درجات مصفوفة

هنا الحلقة بتمشي على عناصر مصفوفة marks بدل أرقام ثابتة، وبنجمّع كل عنصر في متغيّر total خارج الحلقة.

  • marks.length = عدد عناصر المصفوفة (هنا 5)
  • الفهرسة تبدأ من 0، فآخر عنصر فهرسه length - 1
sum.js
اضغط ▶ شغّل لترى الناتج
مثال 3

الحلقات المتداخلة — for داخل for

ممكن نحط حلقة for كاملة داخل حلقة أخرى — وده اسمه التداخل (nested for). القاعدة الذهبية: في كل لفّة واحدة من الحلقة الخارجية، الحلقة الداخلية بتخلّص كل لفّاتها من الأول للآخر.

  • الخارجية 3 لفّات × الداخلية 2 لفّة = السطر الداخلي يتنفّذ 6 مرات
  • لازم اسم عدّاد مختلف لكل حلقة (i للخارجية وj للداخلية)

جرّب تزوّد عدد لفّات الداخلية لـ j <= 3 وشوف العدد النهائي هيبقى كام.

nested.js
اضغط ▶ شغّل لترى الناتج
مثال 4

تطبيق على التداخل — رسم مثلث نجوم

أشهر سؤال امتحان على الحلقات المتداخلة: الخارجية بتحدد رقم السطر، والداخلية بتكرر النجمة بعدد رقم السطر (لاحظ إن شرط الداخلية j <= i بيعتمد على عدّاد الخارجية).

stars.js
اضغط ▶ شغّل لترى الناتج
تنبيه امتحان

أشهر غلطة هي الـ off-by-one: كتابة i <= marks.length بدل i < marks.length، وده بيسبب خطأ "undefined" لأنك بتحاول توصل لعنصر مش موجود.

function () { }

الدوال — function

الدالة كتلة كود لها اسم، تقدر تستدعيها أكتر من مرة بدل تكرار نفس الكود. ممكن تستقبل مدخلات (parameters) وترجّع نتيجة عبر return.

الصيغة العامةfunction اسم_الدالة(معامل1, معامل2) { // الكود return القيمة_الناتجة; } اسم_الدالة(قيمة1, قيمة2); // طريقة الاستدعاء
مثال 1

دالة تجمع رقمين

الدالة addNumbers بتستقبل a وb، وبترجّع ناتج جمعهم عن طريق return — من غير return كانت هترجّع undefined.

add.js
اضغط ▶ شغّل لترى الناتج
مثال 2

دالة تجمع for + if لتقييم الحضور

دالة checkAttendance بتاخد مصفوفة أيام غياب لكل طالب، وبتستخدم for علشان تمرّ على كل طالب، وif علشان تقرر حالته، وترجّع مصفوفة نتائج جديدة بـ push.

attendance.js
اضغط ▶ شغّل لترى الناتج
تنبيه امتحان

return بتوقف تنفيذ الدالة فورًا وترجّع القيمة — أي كود بعدها جوّه نفس الدالة متنفّذش. ومتلخبطش بين console.log (بس بيعرض) وreturn (بترجّع قيمة نقدر نستخدمها).

[ ]

المصفوفات — array

المصفوفة متغيّر واحد بيخزّن مجموعة قيم مرتّبة، وكل قيمة ليها رقم ترتيب (index) يبدأ من 0 مش من 1.

الصيغة العامةlet arr = [قيمة1, قيمة2, قيمة3]; arr[0] // أول عنصر arr.length // عدد العناصر arr.push(x) // إضافة عنصر في الآخر
مثال 1

الوصول لعناصر مصفوفة أسماء

students[0] هو أول اسم، وstudents[2] هو الاسم الثالث — لأن العدّ بيبدأ من صفر.

students.js
اضغط ▶ شغّل لترى الناتج
مثال 2

إضافة وتعديل عناصر

push(20) بتضيف 20 في آخر المصفوفة (تكبر المصفوفة بعنصر)، بينما scores[1] = 19 بتستبدل العنصر التاني الموجود من غير ما تغيّر الطول.

scores.js
اضغط ▶ شغّل لترى الناتج
تنبيه امتحان

لو حاولت توصل لفهرس مش موجود زي students[10] في مصفوفة من 4 عناصر، الناتج undefined مش خطأ — لازم تتأكد إن الفهرس أصغر من length.

foriffn[ ]

تمرين شامل — تقييم درجات فصل كامل

هنا الأربعة مع بعض بالظبط زي أسئلة الامتحان: array لتخزين الدرجات، function لتغليف منطق التقييم، for للمرور على كل درجة، وif لاتخاذ قرار ناجح/راسب. جرّب تغيّر الدرجات في السطر الأخير وشغّل تاني.

خطوة بخطوة:

  • الدالة evaluateGrades بتستقبل مصفوفة درجات كاملة
  • مصفوفة results فاضية بتتجهز لتخزين النتائج
  • الحلقة for بتمر على كل درجة بالترتيب
  • الشرط if بيحدد "ناجح" أو "راسب" لكل طالب
  • return بيرجّع مصفوفة النتائج كاملة
evaluate.js
اضغط ▶ شغّل لترى الناتج
</>

HTML — البنية والعناصر الأساسية

HTML مش لغة برمجة، دي لغة توصيف بتحدد هيكل الصفحة عن طريق وسوم (Tags). كل وسم غالبًا ليه بداية ونهاية، وممكن ياخد صفات (attributes) بتديله معلومات إضافية زي الرابط أو مصدر الصورة.

الصيغة العامة<tagname attribute="value"> المحتوى </tagname>
مثال 1

عناصر أساسية: عنوان، فقرة، رابط، صورة

جرّب غيّر النص جوه الوسوم وشغّل تاني عشان تشوف الفرق فورًا في المعاينة.

  • h1 لأكبر عنوان، والحجم بينزل لحد h6
  • a href="..." بيعمل رابط قابل للضغط
  • img src="..." alt="..." بيعرض صورة، وalt نص بديل لو الصورة متحمّلتش
index.html
المعاينة المباشرة
مثال 2

القوائم والحاويات: ul/li و div/span

القوائم بتنظّم عناصر متتالية، والحاويات بتجمّع أجزاء من الصفحة مع بعض.

  • ul + li = قائمة بنقاط، ol + li = قائمة مرقّمة
  • div عنصر block بياخد عرض السطر بالكامل
  • span عنصر inline بيتماشى جوه نفس السطر
index.html
المعاينة المباشرة
تنبيه امتحان

الفرق بين div وspan: div بياخد عرض السطر بالكامل (block)، أما span فبيتماشى جوه نفس السطر مع باقي المحتوى (inline) — استخدم div للحاويات الكبيرة، وspan لتنسيق جزء بسيط من نص.

{ }

CSS — التصميم والتنسيق

CSS بتحدد شكل عناصر HTML: الألوان، المقاسات، المسافات، الخطوط... المحدد (selector) بيحدد أنهي عنصر هيتنسق، والخصائص (properties) جوه الأقواس بتحدد الشكل نفسه.

الصيغة العامةselector { property: value; }
مثال 1

المحددات: عنصر، class، id

ثلاث طرق لاستهداف العناصر، وكل واحدة ليها "قوة" (specificity) مختلفة في التطبيق.

  • محدد العنصر p بيأثر على كل عناصر النوع ده
  • محدد .class بيأثر بس على العناصر اللي ليها الـclass ده، وممكن يتكرر
  • محدد #id بيأثر على عنصر واحد بس، ولازم يكون فريد في الصفحة
index.html
المعاينة المباشرة
مثال 2

نموذج الصندوق (Box Model)

كل عنصر في الصفحة عبارة عن صندوق مكوّن من طبقات متداخلة.

  • المحتوى (content) هو الأساس
  • حواليه padding (مسافة داخلية) ثم border (الحد)
  • وأخيرًا margin (مسافة خارجية بين العنصر واللي حواليه)
index.html
المعاينة المباشرة
تنبيه امتحان

الترتيب من الداخل للخارج دايمًا: content ← padding ← border ← margin. أشهر غلطة في الامتحان هي الخلط بين padding (جوه الحد) وmargin (برّه الحد).

? × 50

اختبر نفسك — 50 سؤال شامل (JavaScript + HTML/CSS)

أسئلة اختيار من متعدد بنفس أسلوب الامتحان: اختيارات قريبة من بعضها قصدًا عشان تتأكد إنك فاهم مش بس حافظ. اختار إجابة وهيظهر لك فورًا صح ولا غلط مع السبب.

النتيجة: 0 / 50