📘 شرح الدرس الوحدة 4: الدوال والمصفوفات واستراتيجيات الحل · الدرس 10 من 17
الدرس 10
📋 في الخطة: إضافة تحتاجها الوحدتان 3 و 5 · ⏱ 1 نظري + 4 عملي

المصفوفات

متغيّر واحد يخزّن مجموعة قيم من النوع نفسه، تحت اسم واحد، ونصل لكل قيمة برقمها.

int[] grades 90[0]85[1]70[2]100[3] length = 4 · آخر فهرس = 3
بعد هذا الدرس ستستطيع أن:
  • تعرّف المصفوفة، وتُنشئها بقيم أو بحجم محدّد.
  • تصل إلى عناصر المصفوفة بالفهرس، وتحدّد فهرس أول عنصر وآخر عنصر.
  • تمرّ على عناصر المصفوفة بحلقة for و for-each.
  • تحسب المجموع والمتوسط وأكبر قيمة في مصفوفة.

١الفكرة

تريد تخزين درجات 30 طالبًا؟ لن تنشئ 30 متغيّرًا. المصفوفة صفّ من الصناديق المرقّمة بجانب بعضها؛ كل صندوق يحمل قيمة، ونصل إليه برقمه.

المصفوفة grades

اضغط صندوقًا، أو اكتب فهرسًا (جرّب 4 أو -1).

snippet
int[] grades = {90, 85, 70, 100};
الناتج

ومصفوفة نصوص بالمنطق نفسه:

snippet
String[] names = {"أحمد", "سارة", "خالد"};
"أحمد"[0]
"سارة"[1]
"خالد"[2]

٢إنشاء مصفوفة

بقيم جاهزة
snippet
int[] grades = {90, 85, 70, 100};
بحجم محدّد ثم نملؤها
snippet
int[] grades = new int[4];   // 4 صناديقgrades[0] = 90;grades[1] = 85;

int[] مصفوفة أعداد صحيحة، و String[] للنصوص، و double[] للأعداد العشرية.

٣القراءة والتعديل و length

snippet
System.out.println(grades[0]);   // 90  (أول عنصر)System.out.println(grades[3]);   // 100 (آخر عنصر)grades[1] = 88;                  // تعديل العنصر رقم 1System.out.println(grades.length);   // 4  (عدد العناصر)

٤المصفوفات مع الحلقات

بدل طباعة كل عنصر يدويًّا نمرّ عليها بـ for. لاحظ الشرط i < grades.length وليس <=.

🔎 المجموع والمتوسط
Main.java
int[] grades = {90, 85, 70, 100};int sum = 0; for (int i = 0; i < grades.length; i++){    sum = sum + grades[i];}double average = sum / grades.length;System.out.println("المجموع = " + sum);System.out.println("المتوسط = " + average);
Variables · المتغيّرات في الذاكرة
Output×

٥for-each: أسهل طريقة للقراءة

Main.java
int[] grades = {90, 85, 70, 100}; // لكل عنصر g في gradesfor (int g : grades){    System.out.println(g);}
Output – JavaApplication (run)×
run:
90
85
70
100
BUILD SUCCESSFUL (total time: 0 seconds)

تُقرأ: «لكل g من نوع int في grades، افعل…». والرمز : يعني «في».

for-eachfor العادية
الاستخدامقراءة أو عرض كل العناصرحين تحتاج رقم الفهرس، أو جزءًا من المصفوفة، أو تعديل القيم
الميزةكود أبسط وأقلّ خطأًتحكّم كامل
حدودهالا تعطي الفهرس، و g نسخة لا تعدّل المصفوفة—

٦نقاط مهمة

توقّع وتحقّق

تأمل الكود التالي،

snippet
String[] c = {"Red", "Green", "Blue"};System.out.println(c[1]);

ماذا سيكون الناتج عند تنفيذه؟

مصفوفة فيها 10 عناصر. ما فهرس آخر عنصر؟

length - 1.

تأمل الكود التالي،

snippet
int[] grades = {90, 85, 70, 100};for (int i = 0; i <= grades.length; i++)    System.out.println(grades[i]);

ما الخطأ في هذه الحلقة؟

عند i = 4 نصل إلى grades[4] غير الموجود.

تريد مضاعفة كل قيمة داخل المصفوفة. أي حلقة تستخدم؟

for-each لا تعدّل عناصر المصفوفة.

الخلاصة

تحدٍّ برمجي: تحليل درجات الحرارة

متقدّم

لديك درجات حرارة أسبوع في مصفوفة. أوجد الأعلى والأدنى والمتوسط، وعدد الأيام الأعلى من 38.

المطلوب:
  • int[] temps = {32, 35, 41, 38, 29, 44, 40};
  • حلقة واحدة تكفي للأربعة.
  • المتوسط عدد عشري (انتبه لفخ القسمة الصحيحة).

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

Temps.java
public class Temps{    public static void main(String[] args)    {        int[] temps = {32, 35, 41, 38, 29, 44, 40};         // max, min, sum, count     }}
Output – المطلوب×
الأعلى = 44
الأدنى = 29
المتوسط = 37.0
أيام فوق 38: 3
💡 تلميح 1
ابدأ max و min بأول عنصر temps[0].
💡 تلميح 2
داخل الحلقة: if (temps[i] > max) max = temps[i];
💡 تلميح 3
المتوسط: (double) sum / temps.length

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

Temps.java
public class Temps{    public static void main(String[] args)    {        int[] temps = {32, 35, 41, 38, 29, 44, 40};        int max = temps[0], min = temps[0], sum = 0, count = 0;         for (int i = 0; i < temps.length; i++)        {            if (temps[i] > max) max = temps[i];            if (temps[i] < min) min = temps[i];            if (temps[i] > 38) count++;            sum = sum + temps[i];        }         System.out.println("الأعلى = " + max);        System.out.println("الأدنى = " + min);        System.out.println("المتوسط = " + (double) sum / temps.length);        System.out.println("أيام فوق 38: " + count);    }}

🧪 تدريبات المذكرة العملية

التدريب العملي 43: حفظ نواتج n × 2.5 في مصفوفةمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 44: جدول ضرب العدد 5 في مصفوفةمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 45: الدرجات التي تساوي 60 فأكثرمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 46: عدد الأرقام الزوجية والفرديةمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 47: أسماء الأرقام بجملة switch داخل حلقةمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 48: نتائج الطلاب ومتوسط الدرجاتمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 49: طباعة المصفوفة بالترتيب وبالعكسمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 50: عمولة الموظفين وإجمالي الراتبمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←انتقل إلى تقييم الدرسأسئلة الاختيار، وصح وخطأ، وأكمل الفراغات، والأسئلة العملية.ابدأ التقييم ←