
#include <stdio.h>

void saidai_num(int kosuu, int data[], int *max, int *max_num) {
    int current_max = data[0]; // 初期最大値 (GR0)
    int count = 1;             // 初期の個数 (GR5)
    int counter = 0;           // ループカウンタ (GR6)

    while (counter < kosuu) {
        data = data + 1;       // 配列ポインタを次へ (LAD GR2, 1, GR2)
        counter = counter + 1; // カウンタ + 1 (LAD GR6, 1, GR6)

        if (*data > current_max) {
            // これまでより大きい値が見つかった場合
            current_max = *data; // 最大値を更新 (LD GR0, GR7)
            count = 1;          // 個数を 1 にリセット (LAD GR5, 1)
        } else if (*data == current_max) {
            // 現在の最大値と同値が見つかった場合
            count = count + 1;  // 個数をインクリメント (LAD GR5, 1, GR5)
        }
        // *data < current_max の場合は何もせず次の要素へ
    }

    *max = current_max;         // 結果を変数へ書き込み (ST GR0, 0, GR3)
    *max_num = count;           // 個数を変数へ書き込み (ST GR5, 0, GR4)
    return;
}

int main(void) {
    /* 配列1: 要素数 7 (kosuu = 6) - 30が3個存在 */
    int array1[] = {10, 15, 30, 15, 30, 30, 7};
    int max1, num1;

    /* 配列2: 要素数 6 (kosuu = 5) - 全て同値 10が6個存在 */
    int array2[] = {10, 10, 10, 10, 10, 10};
    int max2, num2;

    /* サブルーチン呼び出し (GR1〜GR4 に引数をセット) */
    saidai_num(6, array1, &max1, &num1);
    saidai_num(5, array2, &max2, &num2);

    /* 結果確認（CASL2000メモリーダンプ画面で確認） */
    printf("配列1: 最大値 MAX1 = %d, 個数 NUM1 = %d\n", max1, num1); // 30, 3
    printf("配列2: 最大値 MAX2 = %d, 個数 NUM2 = %d\n", max2, num2); // 10, 6

    return 0;
}
