Составить словарь операторов и операндов C++ для оценки сложности программы по Метрике Холстеда

Предложен код:

using namespace std;

int main(int argc, char* argv[]) {
    srand(time(0));
    const int array_size = 200000; // 1

    int a[array_size]; 
  
    for (int counter = 0; counter < array_size; counter++) { // 2
        a[counter] = rand() % 50 - rand() % 50; // 3
        cout << a[counter] << " "; 
    }

    int min = a[0]; // 4
    for (int counter = 1; counter < array_size; counter++) { // 5
        if (min > a[counter]) {
            min = a[counter]; // 6
        }
    }

    cout << "\nmin = " << min << endl; 
    cout << "runtime = " << clock() / 1000.0 << endl; 

    system("pause"); 
    return 0; 
}

У меня получилось следующее:

введите сюда описание изображения

Однако я не совсем уверен, т.к. с точки зрения метрики Холстеда Имена процедур и функций являются операторами, а Функции являются операндами, и я не могу понять, что является функцией, а что именем функции в данной программе.


Ответы (1 шт):

Автор решения: Silver

По метрике Холстеда:

n1 — число уникальных операторов программы, включая символы-разделители, имена процедур и знаки операций (словарь операторов);

n2 — число уникальных операндов программы (словарь операндов).

Определимся также с терминологией:

Операнд - аргумент операции.

Как пример: операнды a и b в операции сложения: a + b.

Оператор - действие (команда) над операндами.

Как пример: оператор sum(a,b)

Например:

sum(int a, int b) { return a + b; }

Здесь

sum(...) — оператор

{...} - оператор

a и b — операнды

, — оператор

a + b — выражение

+ — оператор

return — оператор

; — оператор

Еще пример:

int sum1(int a, int b) { return a+b; }
int sum2(int c, int d) { return c+d; }
int sum3 = sum1(1, 2) + sum2(3, 4)

Здесь:

sum1(...) и sum2(...) - операторы
sum1 и sum2 - операнды для sum3

Пример для вашего случая:

srand(time(0))

Здесь:

srand(...) - оператор
time(0) - оператор

Но поскольку time(0) находится внутри srand(...), для него он является операндом. Поэтому:

srand(...) - оператор
time - операнд

Аналогично и для остальных участков кода.

→ Ссылка