מערך מונה (Counter Array)

מערך מונה סופר כמה פעמים כל ערך מופיע. האינדקס מייצג את הערך (או קטגוריה), והתוכן הוא מספר ההופעות.

דוגמה: ספירת ציונים

נניח שיש מערך ציונים בין 0 ל-100, ואנחנו רוצים לספור כמה תלמידים קיבלו כל ציון:

public static int[] countGrades(int[] grades) {
    int[] counter = new int[101]; // אינדקסים 0-100
    for (int i = 0; i < grades.length; i++) {
        counter[grades[i]]++;
    }
    return counter;
}

אחרי הריצה, counter[90] יכיל את מספר התלמידים שקיבלו 90.

דוגמה: ספירת ספרות

// כמה פעמים כל ספרה מופיעה במספר
public static int[] countDigits(int num) {
    int[] counter = new int[10]; // ספרות 0-9
    while (num > 0) {
        counter[num % 10]++;
        num /= 10;
    }
    return counter;
}

מערך צובר (Accumulator Array)

מערך צובר צובר סכומים (או ערכים אחרים) לפי קטגוריות. במקום לספור הופעות, מצטברים ערכים.

דוגמה: סכום ציונים לפי כיתה

// students[i][0] = מספר כיתה (0-5), students[i][1] = ציון
public static int[] sumByClass(int[][] students) {
    int[] sums = new int[6]; // 6 כיתות
    for (int i = 0; i < students.length; i++) {
        int classNum = students[i][0];
        int grade = students[i][1];
        sums[classNum] += grade;
    }
    return sums;
}

דוגמה: הכנסות לפי חודש

// month: 1-12, amount: סכום
public static double[] revenueByMonth(int[] months, double[] amounts) {
    double[] revenue = new double[13]; // אינדקסים 1-12
    for (int i = 0; i < months.length; i++) {
        revenue[months[i]] += amounts[i];
    }
    return revenue;
}

השוואה – מונה מול צובר

מערך מונהמערך צובר
מה עושיםסופרים הופעותצוברים סכומים
פעולהcounter[x]++sums[x] += value
גודל מערךטווח הערכים + 1מספר הקטגוריות
דוגמהכמה תלמידים קיבלו 90סכום ציונים בכיתה א'

שימוש בשילוב – ממוצע לפי קטגוריה

לפעמים צריך גם מונה וגם צובר כדי לחשב ממוצע:

public static double[] averageByClass(int[] classes, int[] grades) {
    int[] sums = new int[6];
    int[] counts = new int[6];
    for (int i = 0; i < classes.length; i++) {
        sums[classes[i]] += grades[i];
        counts[classes[i]]++;
    }
    double[] avgs = new double[6];
    for (int i = 0; i < 6; i++) {
        if (counts[i] > 0)
            avgs[i] = (double) sums[i] / counts[i];
    }
    return avgs;
}

שאלות נפוצות

באיזה גודל ליצור את מערך המונה?

גודל מערך המונה = טווח הערכים האפשריים + 1. למשל, אם ציונים בין 0 ל-100, צריך מערך בגודל 101.

מה קורה אם שוכחים לאתחל את מערך המונה?

ב-Java מערך int חדש מאותחל אוטומטית ל-0, אז אין בעיה. אבל חשוב לזכור את זה כעיקרון.

האם מערך מונה עובד רק עם int?

האינדקסים חייבים להיות int. אם הערכים שסופרים הם תווים, אפשר להשתמש בערך ה-ASCII כאינדקס, למשל counter['A'].

צריכים עזרה במערכים?

מורים פרטיים ילמדו אתכם מערכים, דפוסי עבודה ותרגילי בגרות.

מצאו מורה פרטי