Составить словарь операторов и операндов 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 шт):
По метрике Холстеда:
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 - операнд
Аналогично и для остальных участков кода.