الوحدة 5: تجميع البيانات · الموضوع 13 من 13
الموضوع 13

المصفوفات

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

int[] grades 90[0]85[1]70[2]100[3] length = 4 · آخر فهرس = 3
بعد هذا الدرس ستستطيع أن:
  • إنشاء مصفوفة بقيم جاهزة أو بحجم محدّد.
  • الوصول إلى عنصر وتعديله عبر الفهرس الذي يبدأ من 0.
  • استخدام length والمرور على المصفوفة بحلقة 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 نسخة لا تعدّل المصفوفة—

٦نقاط مهمة

توقّع وتحقّق

أجب قبل أن تنظر إلى الشرح. التصحيح فوري، وإجاباتك تُحفظ.

في String[] c = {"Red", "Green", "Blue"}; ما قيمة c[1]؟

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

length - 1.

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

snippet
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);    }}

أسئلة التقييم

ورقة العمل: المصفوفات. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».

1السؤال الأول: اختر الإجابة الصحيحة

1) المصفوفة هي:

2) فهرس أوّل عنصر في المصفوفة هو:

3) grades.length لمصفوفة من 4 عناصر تعطي:

4) للمرور على كل العناصر نستخدم غالبًا:

2السؤال الثاني: صح أم خطأ

1) فهرس عناصر المصفوفة يبدأ من 0.
الصواب: صح
2) عناصر المصفوفة من أنواع مختلفة.
الصواب: خطأ
3) حجم المصفوفة ثابت بعد إنشائها.
الصواب: صح
4) آخر فهرس يساوي length - 1.
الصواب: صح
5) for-each تصلح لتعديل عناصر المصفوفة.
الصواب: خطأ

3السؤال الثالث: أكمل الفراغات

1) نصل للعنصر عبر اسم المصفوفة و بين [ ].

💡 رقم الخانة، ويبدأ من 0.

الإجابة: الفهرس

2) عدد عناصر المصفوفة نحصل عليه بـ .

💡 خاصيّة تُكتب بعد اسم المصفوفة.

الإجابة: length

3) آخر فهرس في المصفوفة = length .

💡 آخر فهرس أقل من length بواحد.

الإجابة: - 1

4) نمرّ على العناصر بأمان باستخدام for مع .

💡 الخاصيّة التي تعطي عدد العناصر.

الإجابة: length

5) صيغة for-each: for(int g grades)

💡 رمز واحد يعني «في».

الإجابة: :

4السؤال الرابع: التوصيل

طابِق كل عنصر في العمود (أ) بما يناسبه في العمود (ب):

  1. 1) grades[0]
  2. 2) grades.length
  3. 3) new int[4]
  4. 4) for(int g : grades)
  5. 5) grades[1] = 88
  1. أ. عدد العناصر.
  2. ب. أوّل عنصر.
  3. ج. المرور المبسّط (for-each).
  4. د. إنشاء مصفوفة بحجم 4.
  5. هـ. تعديل عنصر.
المفتاح: (1) ب (2) أ (3) د (4) ج (5) هـ

5السؤال الخامس: أسئلة عملية

1) تتبّع الناتج:

snippet
int[] a = {10, 20, 30};System.out.println(a[0] + a[2]);
الناتج الصحيح:
Output×
40

2) تتبّع الناتج:

snippet
int[] a = {5, 5, 5};System.out.println(a.length);
الناتج الصحيح:
Output×
3

3) اكتب حلقة for تطبع كل عناصر المصفوفة grades:

الحل النموذجي:
Main.java
int[] grades = {90, 85, 70, 100}; for (int i = 0; i < grades.length; i++){    System.out.println(grades[i]);}
Output – JavaApplication (run)×
run:
90
85
70
100
BUILD SUCCESSFUL (total time: 0 seconds)
قارن إجابتك بالحل:
أجب عن الأسئلة ثم اضغط «صحّح ورقتي».
أنهيت المقرر كاملًا!اختبر نفسك في الاختبار النهائي الشامل.ابدأ الاختبار ←