You are on page 1of 7

‫تاريخ التسجيل‪Sep 2004 :‬‬

‫المشاركات‪153 :‬‬

‫تكملة شابتر ‪6‬‬

‫‪Two-Dimensional Arrays .6.10‬‬


‫احنا فى الجزء اللى قبل كدة استخدمنا ال ‪ array‬العادية ‪ D array-1‬لتمثيل صف من االرقام او‬
‫الحروف او اي نوع فى الجزء دة هنشوف نوع تانى من ال ‪ arrays‬ميختلفش كتير عن القديم‬
‫الفرق ان النوع الجديد ‪ array‬ثنائية االبعاد ‪ dimensional array-2‬او ممكن نقول عنها انها‬
‫‪ array of arrays‬و هي ممكن تمثل ارقام فى شكل المصفوفة (مكونة من صفوف و اعمدة)‬
‫‪Declaring Variables of Two-Dimensional .6.10.1‬‬
‫‪Arrays and Creating Two-Dimensional Arrays‬‬
‫و دى الطريقة عشان نعرف للكومبايلر ‪ array‬ثنائية االبعاد‬
‫كود ‪:PHP‬‬
‫;‪dataType[][] arrayRefVar‬‬
‫‪or‬‬
‫‪dataType arrayRefVar[][]; // This style is allowed, but not preferred ‬‬

‫و زي ما قولنا قبل كدة ان استخدام الطريقة االولى افضل لتعريف ال ‪arrays‬‬


‫و دة مثال لتعريف ‪ D array-2‬من النوع ‪integer‬‬
‫كود ‪:PHP‬‬
‫‪int[][] matrix; ‬‬

‫و الخطوة التانية خجز مكان فى الميمورى للـ ‪ reference‬اللى عملناه بالطريقة دى‬
‫كود ‪:PHP‬‬
‫‪matrix = new int[5][5]; ‬‬

‫قبل كدة كان علشان اتعامل مع عناصر ال ‪ array‬كنت باستخدم رقم لل ‪ index‬علشان احدد‬
‫العنصر اللى هاتعامل معاه انما فى ال ‪ D array-2‬باستخدم رقمين رقم يرمز للصف و رقم يرمز‬
‫للعامود و الرسمة دى هتوضح الكالم دة‬

‫علشان نحدد العنصر اللى فية القيمة ‪ 7‬فى الشكل ‪ b‬استخدمنا رقم يرمز للصف و هو الـ ‪ 2‬و رقم‬
‫يرمز للعامود و هو الـ ‪1‬‬
‫كود ‪:PHP‬‬
‫‪matrix[2][1] = 7; ‬‬

‫و ممكن نستخدم طريقة نقدر بيها نعرف ال ‪ D array-2‬و نحطلها قيم ابتدائية الكود اللى جي هو‬
‫كود النشاء ال ‪ D array-2‬اللى فى الرسمة اللى فاتت (‪)c‬‬

‫الكود اللى فى الشكل ‪ a‬يكافئ الكود اللى فى الشكل ‪b‬‬


‫‪Obtaining the Lengths of Two-Dimensional .6.10.2‬‬
‫‪Arrays‬‬
‫ال ‪ D array-2‬هي فى الحقيقة ‪ array‬عادية والكن كل عنصر مكون من ‪ array‬تانية علشان‬
‫كدة ممكن نقول على ال ‪ D array-2‬انها ‪ array of arrays‬طول ال ‪ array‬هو عبارة عن‬
‫عدد العناصر اللى موجودة فيها‬
‫و هنقول مثال عشان نوضح الكالم دة بفرض اننا عرفنا ‪ D array-2‬بالشكل دة‬
‫كود ‪:PHP‬‬
‫‪x = new int[3][4]; ‬‬

‫من الجملة اللى فاتت ممكن نقول ان ]‪ x[0], x[1], x[2‬هما ‪ D arrays-1‬عاديين خالص والكن‬
‫]‪ x[0‬مثال هي نفسها ‪ D array-1‬تانية مكونة من ]‪ x[0][0], x[0][1], x[0][2], x[0][3‬و‬
‫بكدة يبقى‬
‫‪x.length = 3‬‬
‫‪x[0].length = x[1].length = x[2].length = 4‬‬
‫و الصورة دى توضح المثال دة اكتر‬

‫‪Ragged Arrays .6.10.3‬‬


‫زي ما قولنا ان كل صف فى ال ‪ D array-2‬هو نفسة ‪ D array-1‬و اللى هنقولة جديدة فى‬
‫الجزء دة ان ال ‪ D array-2‬ممكن يبقى لكل صف فيها طول مختلف يعنى مش لكل الصفوف‬
‫طول ثابت و فى الحالة دى يبقى اسمها ‪ ragged array‬و دة مثال على الجزء دة‬

‫و لو مش عارفين القيمة االبتدائية للعناصر دى ممكن نحجز مكان لها بس و بعد كدة نحط القيم‬
‫بالطريقة دى‬
‫كود ‪:PHP‬‬
‫;][]‪int[][] triangleArray = new int[5‬‬
‫;]‪triangleArray[0] = new int[5‬‬
‫;]‪triangleArray[1] = new int[4‬‬
‫;]‪triangleArray[2] = new int[3‬‬
triangleArray[3] = new int[2];
triangleArray[4] = new int[1]; 

‫و نضيف القيم بالطريقة دى‬


:PHP ‫كود‬
triangleArray[0][3] = 50;
triangleArray[4][0] = 45; 

‫ و عدد االعمدة تتعرف فى جملة لوحدها و‬D array-2 ‫ ممكن نعرف عدد الصفوف لل‬:‫ملحوظة‬
][new int[5] ‫طريقة تعريف عدد الصفوف بس باستخدام‬
Processing Two-Dimensional Arrays .6.10.4
‫ دى‬array ‫بفرض اننا عرفنا ال‬
:PHP ‫كود‬
int[][] matrix = new int[10][10]; 

D arrays-2 ‫ دى توضحلنا ازاي ممكن نتعامل مع ال‬array ‫هنقول شوية امثلة على ال‬
‫ باستخدام الكود دة‬99 ‫ الى‬1 ‫هنحط فيها قيم ابتدائية من‬.1
:PHP ‫كود‬
for (int row = 0; row < matrix.length; row++) {
  for (int column = 0; column < matrix[row].length; column++) {
    matrix[row][column] = (int)(Math.random() * 100);
  }

‫هنطبع عناصرها بالكود دة‬.2


:PHP ‫كود‬
for (int row = 0; row < matrix.length; row++) {
  for (int column = 0; column < matrix[row].length; column++) {
    System.out.print(matrix[row][column] + " ");
  }

  System.out.println();

total ‫ و تسجيلها فى متغير اسمة‬array ‫جمع كل عناصر ال‬.3


:PHP ‫كود‬
int total = 0;
for (int row = 0; row < matrix.length; row++) {
  for (int column = 0; column < matrix[row].length; column++) {
    total += matrix[row][column];
  }

‫ مثال) بالكود دة‬0 ‫جمع كل العناصر فى عامود محدد (العامود رقم‬.4


:PHP ‫كود‬
for (int column = 0; column < matrix[0].length; column++) {
  int total = 0;
  for (int row = 0; row < matrix.length; row++)
    total += matrix[row][column];
  System.out.println("Sum for column " + column + " is " + total);

‫حساب مجموع كل صف و ايجاد اكبر مجموع مابينهم‬.5


:PHP ‫كود‬
int maxRow = 0;
int indexOfMaxRow = 0;

// Get sum of the first row in maxRow
for (int column = 0; column < matrix[0].length; column++) {
  maxRow += matrix[0][column];
}

for (int row = 1; row < matrix.length; row++) {
  int totalOfThisRow = 0;
  for (int column = 0; column < matrix[row].length; column++) {
    totalOfThisRow += matrix[row][column];
    if (totalOfThisRow > maxRow) {
      maxRow = totalOfThisRow;
      indexOfMaxRow = row;
    }
  }
}

System.out.println("Row " + indexOfMaxRow 
   + " has the maximum sum" + " of " + maxRow); 

Example: Grading a Multiple-Choice Test .6.10.5


‫ طالب و‬8 ‫ اسئلة (اختيارات متعددة) و‬10 ‫دة مثال هنفهم منة حاجات كتير فى المثال دة عندنا‬
‫ متسجل فيها اجابات الطالب على السئلة و عندنا االجابة الصحيحة لالسئلة‬D array-2 ‫عندنا‬
‫المفروض ان الكود يقارن اجابة كل طالب باالجابة الصحيحة و فى االخر يقولنا كل طالب جاوب‬
‫كام سؤال صح‬
‫الصورة دى تبين اجابات الطالب‬

‫و الصورة دى تبين االجابة الصحيحة‬


‫و دة الكود للبرنامج‬
:PHP ‫كود‬
 1 public class GradeExam {
 2   /** Main method */
 3   public static void main(String args[]) {
 4     // Students' answers to the questions
 5     char[][] answers = {
 6       {'A', 'B', 'A', 'C', 'C', 'D', 'E', 'E', 'A', 'D'},
 7       {'D', 'B', 'A', 'B', 'C', 'A', 'E', 'E', 'A', 'D'},
 8       {'E', 'D', 'D', 'A', 'C', 'B', 'E', 'E', 'A', 'D'},
 9       {'C', 'B', 'A', 'E', 'D', 'C', 'E', 'E', 'A', 'D'},
10       {'A', 'B', 'D', 'C', 'C', 'D', 'E', 'E', 'A', 'D'},
11       {'B', 'B', 'E', 'C', 'C', 'D', 'E', 'E', 'A', 'D'},
12       {'B', 'B', 'A', 'C', 'C', 'D', 'E', 'E', 'A', 'D'},
13       {'E', 'B', 'E', 'C', 'C', 'D', 'E', 'E', 'A', 'D'}};
14
15     // Key to the questions
16     char[] keys = {'D', 'B', 'D', 'C', 'C', 'D', 'A', 'E', 'A', 'D
'};
17
18     // Grade all answers
19     for (int i = 0; i < answers.length ; i++) {
20       // Grade one student
21       int correctCount = 0;
22       for (int j = 0; j < answers[i].length ; j++) {
23         if (answers[i][j] == keys[j])
24           correctCount++;
25       }
26
27       System.out.println("Student " + i + "'s correct count is " +

28         correctCount);
29     }
30   }
31 } 

‫و دة شكل الناتج من البرنامج‬

Example: Computing Taxes .6.10.6


‫ نسب لحساب الضرائب لكل نسبة‬6 ‫ فى‬arrays ‫دة مثال تانى لحساب الضرائب باستخدام ال‬
‫شريحة معينة على حسب دخل الفرد بتتحسب نسبة الضرائب‬
‫الكود دة ممكن نقراة و نشوف افكار جديدة لحساب الضرائب‬
:PHP ‫كود‬
 1 import javax.swing.JOptionPane;
 2 
 3 public class ComputeTax {
 4   public static void main(String[] args) {
 5     // Prompt the user to enter filing status
 6     String statusString = JOptionPane.showInputDialog(
 7       "Enter the filing status:\n" +
 8       "(0-single filer, 1-married jointly,\n" +
 9       "2-married separately, 3-head of household)");
10     int status = Integer.parseInt(statusString);
11
12     // Prompt the user to enter taxable income
13     String incomeString = JOptionPane.showInputDialog(
14       "Enter the taxable income:");
15     double income = Double.parseDouble(incomeString);
16
17     // Compute and display the result
18     JOptionPane.showMessageDialog(null, "Tax is " +
19       (int)(computeTax(status, income)  * 100) / 100.0);
20   }
21
22   public static double computeTax(int status, double income) {
23     double[] rates = {0.10, 0.15, 0.27, 0.30, 0.35, 0.386};
24
25     int[][] brackets = {
26       {6000, 27950, 67700, 141250, 307050}, // Single filer
27       {12000, 46700, 112850, 171950, 307050}, // Married jointly
28       {6000, 23350, 56425, 85975, 153525}, // Married separately
29       {10000, 37450, 96700, 156600, 307050} // Head of household
30     };
31
32     double tax = 0; // Tax to be computed
33
34     // Compute tax in the first bracket
35     if (income <= brackets[status][0])
36       return tax = income * rates[0]; //Done
37     else
38       tax = brackets[status][0] * rates[0];
39
40     // Compute tax in the 2nd, 3rd, 4th, and 5th brackets, if need
ed
41     for (int i = 1; i < brackets[0].length; i++) {
42       if (income > brackets[status][i])
43         tax += (brackets[status][i] - brackets[status][i - 1]) *
44           rates[i];
45       else {
46         tax += (income - brackets[status][i - 1]) * rates[i];
47         return tax; // Done
48       }
49     }
50
51     // Compute tax in the last (i.e., 6th) bracket
52     return tax += (income - brackets[status][4]) * rates[5];
53   }
54 } 

Multidimensional Arrays .6.11


n- ‫ فى الجزء دة هنتكلم عن ال‬dimensional array-2 ‫فى الجزء اللى فات اتكلمنا عن ال‬
‫ و‬n=>3 ‫ مع فرق ان‬D arrays-2 ‫ التعامل معاها زي التعامل مع ال‬dimensional arrays
‫دة مثال لتعريف ‪D array-3‬‬
‫كود ‪:PHP‬‬
‫‪double[][][] scores = new double[10][5][2]; ‬‬

‫ال ‪ multidimensional array‬هي عبارة عن ‪ array‬عادية كل عنصر ‪ array‬تانية‬


‫‪Example: Computing Student Scores .6.11.1‬‬
‫المثال دة هيوضحلنا ال ‪ multidimensional arrays‬فية درجات عدد من الطالب فى ‪5‬‬
‫امتحانات كل امتحان مكون من جزئين هنسجل الدرجة فى ال ‪ arrays‬بحيث ان الرقم االول بيدل‬
‫عل الطالب و الرقم التانى بيدل على رقم االمتحان و الرقم التالت بيدل على الجزء االول او الجزء‬
‫التانى و البرنامج يحسب مجموع كل طالب فى كل االمتحانات‪.‬‬

‫و هيكون دة الناتج‬

‫و بكدة نكون خلصنا ‪Chapter 6 Arrays‬‬

You might also like