Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

1. Рассмотрим пример расчета метрик исходного кода, программы реализующий задачу «Счастливый билет» на языке программирования С#. Сделаем замечания о программной реализации задачи. После ввода значения входной переменной (в программе ее имя iNumber), оно проверяется на принадлежность интервалу от 1001 до 999999. Первое условие следует из того факта, что минимальное шестизначное число, которое соответствует условию задачи – это 1001, а второе – максимальному из искомых чисел – 999999. Далее в цикле из исходного числа последовательно выделяются цифры, начиная со старшего разряда. Номер самой правой выделенной цифры помещается в элемент массива с номером 5, затем 4, и так далее до нулевого элемента. Заполнив все шесть элементов массива, проверяем на равенство сумму первых и последних трех чисел. Отметим, что нумерация элементов массива начинается с 0.

Текст программы. Далее приводится реализация программы, решающая задачу «Счастливый билет». Отладка программы выполнялась в среде разработки Microsoft Visual С# Express Edition, 2013. Был выбран проект типа Консольное Приложение (Console Application). Некоторые строки, имеющиеся в шаблоне такого проекта, могут быть исключены и не используются (закомментированы). Конструкция

using System;

присутствует в программе, но ее компоненты не учитываются при подсчете количества операторов и операций, а также операндов. Все операторы программы пронумерованы.

Текст программы.

using System; // 1

// using System. Collections. Generic; // 2

НЕ нашли? Не то? Что вы ищете?

// using System. Linq; // 3

// using System. Text; // 4

// using System. Threading. Tasks; // 5

// namespace ConsoleApplication_Счастливый_билет // 6

// { // 7

class Program // 8

{ // 9

static void Main(string[] args) // 10

{ // 11

// Исходное число iNumber (а)

// Рабочие переменные iWork (c), iCell or iVar(k)

// Счетчик – iCounter (k)

// Результат деления на 10 - iQuotient (the result of dividing - d)

// Результирующий массив – iArray (r)

int iNumber, iWork, iCounter, iTimeValue; // 12

int[] iArray = new int[6]; // 13

Console. WriteLine("Input iNumber"); // 14

iNumber = int. Parse(Console. ReadLine()); // 15

// Проверяем принадлежность исходного числа допустимому диапазону

if ((iNumber < 1000000) && (iNumber > 1000)) // 16

{ // 17

// Задаем начальные значения рабочим переменным

iWork = iNumber; // 18

iCounter = 5; // 19

// Начинаем основной цикл, выделяющий цифры исходного числа

while (iWork >= 1) // 20

{ // 21

// Делим очередное значение числа на 10

iTimeValue = iWork / 10; // 22

// Определяем очередную цифру и заносим ее в массив

iArray[iCounter] = (iWork - iTimeValue * 10); // 23

// Готовим очередное число (без уже выделенных цифр)

iWork = iTimeValue; // 24

// Изменяем счетчик элементов массива

iCounter = iCounter - 1; // 25

} // end (while) // 26

// Проверяем совпадение троек цифр (первых и последних)

if (iArray[0] + iArray[1] + iArray[2] ==

iArray[3] + iArray[4] + iArray[5]) // 27

Console. WriteLine("Happy"); // 28

else // 29

Console. WriteLine("No happy"); // 30

} // (if) // 31

else // 32

Console. WriteLine("Bad data"); // 33

Console. ReadKey(); // 34

} // 35

} // 36

// } // 37

Таблица 1. Словарь операторов и операций программы написанной на C#.

№ п/п

 Операторы и операции

Номера строк

Количество повторений

using

1

0

1

class

8

1

2

{}

9(36); 11(35); 17(31); 21(26)

4

3

static

10

1

4

void

10

1

5

()

10; 14; 15; 15; 28; 30; 33; 34

8

6

string

10

1

7

[]

10 13; 13; 23; 27; 27; 27; 27; 27; 27

10

8

int

12, 13, 13

3

9

;

12; 13; 14; 15; 18; 19; 22; 23; 24; 25; 28; 30; 33; 34

14

10

' =

13; 15; 18; 19; 22; 23; 24; 25

8

11

new

13

1

12

.

14; 15; 15; 28; 30; 33; 34

7

13

if

16; 27

2

14

16

1

15

&&

16

1

16

>

16

1

17

while

20

1

18

>=

20

1

19

/

22

1

20

-

23, 25

2

21

*

23

1

22

+

27, 27, 27, 28

4

23

==

26

1

75

Таблица 2. Словарь операндов программы написанной на C#.

№ п/п

Операнды

Номера строк

Количество повторений

System

1

0

1

Program

8

1

2

Main

10

1

3

args

10

1

4

iNumber

12; 15; 16; 16; 18

5

5

iWork

12; 18; 20; 22; 23; 24

6

6

iCounter

12; 19; 23; 25; 25

5

7

iTimeValue

12; 22; 23; 24

4

8

iArray

13; 23; 27; 27; 27; 27; 27; 27

8

9

6

13

1

10

Console

14; 15; 28; 30; 33; 34

6

11

WriteLine

14; 28; 30; 33

4

12

"Input iNumber"

14

1

13

int

15

1

14

Parse

15

1

15

ReadLine

15

1

16

1000000

16

1

17

1000

16

1

18

5

19, 27

2

19

1

20; 25; 27

3

20

10

22, 23

2

21

0

27

1

22

2

27

1

23

3

27

1

24

4

27

1

25

"Happy"

28

1

26

"No happy "

30

1

27

"Bad data"

33

1

28

ReadKey

34

1

63

Таблица 3. Значения метрик Холстеда программы написанной на C#

Обозначение и формула для вычисления

Наименование характеристики

Значение

1

h1

Число простых (уникальных) операторов и операций

23

 

2

h2

Число простых (уникальных) операндов

28

 

3

N1

Общее число всех операторов и операций

75

 

4

N2

Общее число всех операндов

63

 

5

h2*

Число входных и выходных переменных (параметров)

4

 

6

h=h1+h2

Словарь программы

51

 

7

N=N1+N2

Длина реализации программы

138

 

8

Ñ = (h1×log2h1)+(h2×log2h2)

Длина программы

238,6

 

9

V =(N1+N2)×log2(h1+h2) )

Объем программы (в битах)

782,8

 

10

V* = (h2+2) ×log2(h2+2)

Потенциальный объем программы

44,3

 

11

L = V*/V

Уровень реализации программы

0,057

 

12

E=V/L

Работа программирования

13828,0

 

13

T=E/S (S=18)

Квалификационное время программирования

768,2

 

14

B=E(2/3)/3000

Число переданных ошибок в программе

0,1920

 

В другом варианте подсчета характеристик программы на основе исходного кода не принимаются в расчет операторы описания, к которым отнесем следующие:

using; namespace; class;’ static; void; string; int; new.

Так же не будут учитываться один раз фигурные и круглые скобки, связанные с методом (функцией) Main.

При таком варианте учета значения характеристик (приближенном к тому, как рассчитывал качество кода Холстед) получим следующие значения:

количество операторов и операций (уникальных) - 17;

количество операторов и операций (всего) — 59;

количество операндов (уникальных) - 24;

количество операндов (всего) — 54.

2. Приведем расчет характеристик исходного кода, реализующий на С# алгоритм «Счастливый билет» без использования массива.

Текст программы.

using System; // 1

// using System. Collections. Generic; // 2

// using System. Linq; // 3

// using System. Text; // 4

// using System. Threading. Tasks; // 5

// namespace ConsoleApplication_Счастливый_билет(2) // 6

// { // 7

class Program // 8

{ // 9

static void Main(string[] args) // 10

{ // 11

// Исходное число iNumber

// Результат деления на 10 - iTimeValue

// Рабочая переменная iWork

// Результирующие значения цифр в числе – iNumChar0, iNumChar1,

// iNumChar2, iNumChar3, iNumChar4, iNumChar5

int iNumber, iTimeValue, iWork; // 12

int iNumChar0, iNumChar1, iNumChar2, iNumChar3,

iNumChar4, iNumChar5; // 13

Console. WriteLine("Input iNumber"); // 14

iNumber = int. Parse(Console. ReadLine()); // 15

// Проверяем принадлежность исходного числа допустимому диапазону

if ((iNumber < 1000000) && (iNumber > 1000)) // 16

{ // 17

// Задаем начальные значения рабочим переменным

iTimeValue = iNumber; // 18

iWork = iTimeValue/10; iNumChar0 = iTimeValue - iWork*10; // 19

iTimeValue = iWork; // 20

iWork = iTimeValue/10; iNumChar1 = iTimeValue - iWork*10; // 21

iTimeValue = iWork; // 22

iWork = iTimeValue/10; iNumChar2 = iTimeValue - iWork*10; // 23

iTimeValue = iWork; // 24

iWork = iTimeValue/10; iNumChar3 = iTimeValue - iWork*10; // 25

iTimeValue = iWork; // 26

iWork = iTimeValue/10; iNumChar4 = iTimeValue - iWork*10; // 27

iTimeValue = iWork; // 28

iWork = iTimeValue/10; iNumChar5 = iTimeValue - iWork*10; // 29

if (iNumChar0 + iNumChar1 + iNumChar2 ==

iNumChar3 + iNumChar4 + iNumChar5) // 30

Console. WriteLine("Happy"); // 31

else // 32

Console. WriteLine("No happy"); // 33

} // 34

else // 35

Console. WriteLine("Bad data"); // 36

Console. ReadKey(); // 37

} // 38

} // 39

// } // 40

Таблица 4. Словарь операторов и операций программы написанной на C# без использования массивов.

№ п/п

 Операторы и операции

Номера строк

Количество повторений

using

1

0

namespace

6

0

1

{}

9(39); 11(38); 17(34)

3

2

class

8

1

3

static

10

1

4

void

10

1

5

string

10

1

6

()

10; 14; 15; 15; 31; 33; 36, 37

8

7

[]

10

1

8

int

12,13

2

9

;

12; 13; 14; 15; 18; 19; 19; 20; 21; 21; 22; 23; 23; 24; 25; 25; 26; 27; 27; 28; 29; 29; 31; 33; 36; 37

26

10

.

14; 15; 31; 33; 36; 37

6

11

=

15; 18; 19; 19; 20; 21; 21; 22; 23; 23; 24; 25; 25; 26; 27; 27; 28; 29; 29

19

12

if

16; 30

2

13

16

1

14

&&

16

1

15

>

16

1

16

/

19; 21; 23; 25; 27; 29

6

17

-

19; 21; 23; 25; 27; 29

6

18

*

19; 21; 23; 25; 27; 29

6

19

+

30; 30; 30; 30;

4

20

==

30

1

98

Таблица 5. Словарь операндов программы написанной на C# без использования массивов.

№ п/п

Операнды

Номера строк

Количество повторений

system

1

0

ConsoleApplication_Счастливый_билет(2)

6

0

1

Program

8

1

2

Main

10

1

3

args

10

1

4

iNumber

12; 15; 16; 16; 18

5

5

iTimeValue

12; 18; 19; 19; 20; 21; 21; 22; 23; 23; 24; 25; 25; 26; 27; 27; 28; 29; 29

19

6

iWork

12; 19; 19; 20; 21; 21; 22; 23; 23; 24; 25; 25; 26; 27; 27; 28; 29; 29

18

7

iNumChar0

13; 19; 30

3

8

iNumChar1

13; 21; 30

3

9

iNumChar2

13; 23; 30

3

10

iNumChar3

13; 25; 30

3

11

iNumChar4

13; 27; 30

3

12

iNumChar5

13; 29; 30

3

13

Console

14; 15; 31; 33; 36; 37

6

14

WriteLine

14; 31; 23; 36

4

15

"Input iNumber"

14

1

16

int

15

1

17

д

15

1

18

ReadLine

15

1

19

1000000

16

1

20

1000

16

1

21

10

19; 19; 21; 21; 23; 23; 25; 25; 27; 27; 29; 29

12

22

"Happy"

31

1

23

"No happy "

33

1

24

"Bad data"

36

1

25

ReadKey

37

1

96

Второй вариант расчета исходных характеристик кода не учитывает все операторы описания, к которым отнесем следующие:

using; namespace; class; static; void; string; int

и используемые в них операнды.

Для такого варианта учета будут получены такие значения характеристик:

количество операторов и операций (уникальных) – 14;

количество операторов и операций (всего) — 85;

количество операндов (уникальных) - 22;

количество операндов (всего) — 83.

3. Теперь приведем все необходимое для расчета характеристик исходного кода программы, реализующий на С++ алгоритм «Счастливый билет».

Текст программы.

#include <iostream. h> // 1

#include <stdlib. h> // 2

void main() // 3

{ // 4

long iN, iW, iQ; int iC; int iA[6]={0,0,0,0,0,0}; // 5

// clrscr();

cout<<" Input Number "; // 6

cin>>iN; // 7

if ( (iN<1000000L) && (iN>1000L) ) // 8

{ // 9

iW=iN; // 10

iC=5; // 11

while (iW>1L) // 12

{ // 13

iQ=iW/10L; // 14

iA[iC]=(int)(iW-iQ*10L); // 15

iW=iQ; // 16

iC=iC-1; // 17

} // 18

if (iA[0]+iA[1]+iA[2] == iA[3]+iA[4]+iA[5]) // 19

cout<<" Yes\n"; // 20

else // 21

cout<<" No\n"; // 22

} // 23

else // 24

cout<<" Bad data\n"; // 25

system("pause"); // 26

} // 27

Таблица 7. Словарь операторов и операций программы написанной на C++.

№ п/п

Операторы и операции

Номера строк

Количество повторений

#include

1; 2

0

1

void

3

1

2

()

3; 26

2

3

{}

4 (27); 9(23); 13(18)

3

4

long

5

1

5

int

5; 5

2

6

;

5; 5; 5; 6; 7; 10; 11; 14; 15; 16; 17; 20; 22; 25; 26

15

7

[]

5; 15; 19; 19; 19; 19; 19; 19

8

8

'=

5, 10; 11; 14; 15; 16; 17

7

9

<< 

6; 20; 22; 25

4

10

>> 

7

1

11

if

8; 19

2

12

8

1

13

&&

8

1

14

8

1

15

while

12

1

16

>=

12

1

17

/

14

1

18

(int)

15

1

19

*

15

1

20

-

15; 17

2

21

+

19; 19; 19; 19

4

22

++

19

1

61

Таблица 8. Словарь операндов программы написанной на C++.

№ п/п

Операнды

Номера строк

Количество повторений

stdio. h

1

0

stdio. h

1

0

1

main

3

1

2

iN

5; 7; 8; 8; 10

5

3

iW

5; 10; 12; 14; 15; 16

6

4

iQ

5; 14; 15; 16

4

5

iC

5; 11; 15; 17; 17

5

6

iA

5; 15; 19; 19; 19; 19; 19; 19

8

7

6

5

1

8

0

5; 5; 5; 5; 5; 5; 19

7

9

cout

6; 20; 22; 25

4

10

" Input Number "

6

1

11

cin

7

1

12

1000000L

8

1

13

1000L

8

1

14

5

11; 19

2

15

1L

12

1

16

10L

14; 15

2

17

1

17; 19

2

18

2

19

1

19

3

19

1

20

4

19

1

21

"Happy"

20

1

22

"No happy"

22

1

23

"Bad data"

25

1

24

getch

26

1

61

Как и в предыдущих программах не будем учитывать такие операторы описания:

#include; void; long; int.

Как и ранее не учитываются операнды, используемые в операторах описания. Для такого варианта учета будут получены такие значения характеристик:

количество операторов и операций (уникальных) - 19;

количество операторов и операций (всего) — 50;

количество операндов (уникальных) - 22;

количество операндов (всего) — 46.

4. И последняя программа, реализующая алгоритм «Счастливый билет» написана на языке Си.

Текст программы.

#include <stdio. h> // 1

main() // NO void or int -> K&R // 2

{ // 3

long iN, iW, iQ; int iC; int iA[6]={0,0,0,0,0,0}; // 4

// clrscr(); // 5

printf("Input Number "); // 6

scanf("%ld",&iN); // 7

if ( (iN<1000000L) && (iN>1000L) ) // 8

{ // 9

iW=iN; // 10

iC=5; // 11

while (iW>=1L) // 12

{ // 13

iQ=iW/10L; // 14

iA[iC]=(int)(iW-iQ*10L); // 15

iW=iQ; // 16

iC=iC-1; // 17

} // 18

if (iA[0]+iA[1]+iA[2] == iA[3]+iA[4]+iA[5]) // 19

printf("Happy"); // 20

еlse // 21

printf("No happy"); // 22

} // 23

еlse // 24

printf("Bad data"); // 25

getch(); // 26

} // 27

Таблица 10. Словарь операторов и операций программы написанной на Cи.

№ п/п

Операторы и операции

Номера строк

Количество повторений

#include

1

0

1

()

2; 6; 7; 20; 22; 25; 26

7

2

{}

3 (27); 9(23); 13(18)

3

3

long

4

1

4

int

4; 4

2

5

;

4; 4; 4; 6; 7; 10; 11; 14; 15; 16; 17; 20; 22; 25; 26

15

6

[]

4; 15; 19; 19; 19; 19; 19; 19

8

7

=

4; 10; 11; 14; 15; 16; 17

7

8

&

7

1

9

if

8; 19

2

10

8

1

11

&&

8

1

12

8

1

13

while

12

1

14

>=

12

1

15

/

14

1

16

(int)

15

1

17

-

15; 17

2

18

*

15

1

19

+

19; 19; 19; 19

4

20

==

19

1

61

Таблица 11. Словарь операндов программы написанной на Cи.

№ п/п

Операнды

Номера строк

Количество повторений

1

stdio. h

1

0

2

main

2

1

3

iN

4; 7; 8; 8; 10

5

4

iW

4; 10; 12; 14; 15; 16

6

5

iQ

4; 14; 15; 16

4

6

iC

4; 11; 15; 17; 17

5

7

iA

4; 15; 19; 19; 19; 19; 19; 19

8

8

6

4

1

9

0

4; 4; 4; 4; 4; 4; 19

7

10

printf

6; 20; 22; 25

4

11

" Input Number "

6

1

12

scanf

7

1

13

"%ld"

7

1

14

1000000L

8

1

15

1000L

8

1

16

5

11; 19

2

17

1L

12

1

18

10L

14; 15

2

19

1

17; 19

2

20

2

19

1

21

3

19

1

22

4

19

1

23

"Happy"

20

1

24

"No happy"

22

1

25

"Bad data"

25

1

26

getch

26

1

61

Как и в предыдущих программах не будем учитывать такие операторы описания:

#include; long; int.

Так же не учитываются операнды, используемые в операторах описания. Для такого варианта учета будут получены такие значения характеристик:

количество операторов и операций (уникальных) - 18;

количество операторов и операций (всего) — 51;

количество операндов (уникальных) - 23;

количество операндов (всего) — 47.

Входные и выходные характеристики программы у всех вариантов одинаковы. Их количество – 4 (заданное число и три сообщения).