Качество программных средств во многом зависит от сложности их кодов. Например, чем сложнее программа, тем ниже ее надежность и сопровождаемость. Поэтому при оценке качества программ обычно оценивается и их сложность.
Метрики сложности программ принято подразделять на три основные группы [2]:
— метрики размера программ;
— метрики сложности потока управления программ;
— метрики сложности потока данных программ.
Метрики размера программ
Метрики этой группы основаны на анализе исходных текстов программ.
Существуют различные метрики, с помощью которых может быть оценен размер программы.
К наиболее простым метрикам размера программы относятся количество строк исходного текста программыи количество операторов программы.
Из метрик размера программ широкое распространение получили метрики Холстеда [3].
Основу метрик Холстеда составляют шесть базовых метрик программы:
— h1 – словарь операторов (число уникальных операторов программы);
Операционные системы написанные на Pascal, Delphi, Lazarus IDE, FreePascal, Turbo Pascal, Modula-2
— h2 – словарь операндов (число уникальных операндов программы);
— N1 – общее число операторов в программе;
— N2 – общее число операндов в программе;
— f1j – число вхождений j-го оператора, j = 1, 2, …, h1;
— f2i – число вхождений i-го операнда, i = 1, 2, …, h2.
Справедливы следующие соотношения:
Базовые метрики определяются непосредственно при анализе исходных текстов программ. На основе базовых метрик Холстед предложил рассчитывать ряд производных метрик программы. Среди них рассмотрим следующие:
— словарь программы (общее число уникальных операторов и операндов программы):
— длина программы (общее количество операторов и операндов программы):
— объем программы (число битов, т.е. логических единиц информации, необходимых для записи программы):
Операнды программы представляют собой используемые в ней переменные и константы.
Под операторами программы в метриках Холстеда подразумеваются входящие в ее состав символы операций, символ присваивания, символы-разделители точка и точка с запятой, круглая скобка (пара из открывающей и закрывающей скобок считается одним оператором), управляющие операторы, составной оператор, а также имена процедур и функций.
Несколько служебных слов, входящих в состав одного оператора (например, If…Then…Else), считаются одним оператором.
Метки не относятся ни к операторам, ни к операндам.
Очевидно, что совокупность операторов программы и их количество зависят от языка программирования, на котором написана программа.
Операторы языка Паскаль в интерпретации Холстеда приведены в табл. 1.
При подсчете количества операторов и операндов в программе, написанной на языке Паскаль, следует анализировать только ее раздел операторов, а также разделы операторов процедур и функций пользователя.
Операторы языка Паскаль в интерпретации Холстеда
Обозначение оператора | Назначение оператора |
+ | плюс (сложение, объединение множеств, сцепление строк) |
– | минус (изменение знака, вычитание, разность множеств) |
* | звездочка (умножение, пересечение множеств) |
/ | наклонная черта, слэш (знак деления, результат всегда имеет вещественный тип) |
Меньше | |
> | Больше |
= | Равно |
. | точка (признак конца программы и модуля) |
; | точка с запятой (разделитель операторов программы) |
( ) | левая и правая скобки при выделении подвыражений |
меньше или равно | |
>= | больше или равно |
<> | не равно |
:= | операция присваивания |
^ | знак карата (обращение к динамической переменной) |
And | операция поразрядного логического сложения (И) |
Not | операция поразрядного дополнения (НЕ) |
Or | операция поразрядного логического сложения (ИЛИ) |
Xor | операция поразрядного логического исключающего ИЛИ |
Div | целочисленное деление |
Mod | остаток от целочисленного деления |
Shl | операция сдвига влево |
Shr | операция сдвига вправо |
In | операция проверки вхождения элемента в множество |
Begin… End | составной оператор |
Break | оператор безусловного выхода из цикла |
Continue | оператор передачи управления на конец тела цикла |
Goto | оператор безусловного перехода |
Case… Of… Else… End | оператор варианта |
If… Then… Else | оператор условного перехода |
Repeat… Until | оператор цикла с постусловием |
While… Do | оператор цикла с предусловием |
For… To… Do | оператор цикла с параметром (с увеличением параметра) |
For… Downto… Do | оператор цикла с параметром (с уменьшением параметра) |
With… Do | оператор присоединения |
МОЯ ПЕРВАЯ ИГРА!(и она на языке Pascal ABC) «Hit the Casino».
Пример 1. Расчет метрик Холстеда для программы, вычисляющей значение функции
Y = sin X
через разложение функции в бесконечный ряд
с точностью Eps = 0,0001.
Текст программы, написанной на языке Паскаль, приведен ниже.
Program Sin1;
y, x: real; n: integer; vs: real;
Repeat
vs := – vs * x * x / (2 * n – 1) / (2 * n –2);
Until abs( vs) < eps;
Writeln (x, y, eps);
Расчет базовых метрик Холстеда для данной программы приведены в табл. 2.
Расчет базовых метрик Холстеда для программы, вычисляющей значение функции Y = sin X
j | Оператор | f1j | i | Операнд | f2i |
1. | ; | 7 | 1. | x | 6 |
2. | := | 6 | 2. | n | 5 |
3. | * | 4 | 3. | vs | 5 |
4. | – | 3 | 4. | y | 4 |
5. | / | 2 | 5. | 2 | 4 |
6. | ( ) | 2 | 6. | 1 | 2 |
7. | + | 2 | 7. | eps | 2 |
8. | Begin…End | 1 | |||
9. | Readln ( ) | 1 | |||
10. | Repeat…Until | 1 | |||
11. | abs( ) | 1 | |||
12. | 1 | ||||
13. | Writeln ( ) | 1 | |||
14. | . | 1 | |||
h1 = 14 | N1 = 33 | h2 = 7 | N2 = 28 |
Словарь программы h =14 + 7 = 21.
Длина программы N = 33 + 28 = 61.
Объем программы V =
Дата добавления: 2019-11-16 ; просмотров: 2508 ; Мы поможем в написании вашей работы!
Источник: studopedia.net
1 Программирование на языке Паскаль Сложные условия. — презентация
Презентация на тему: » 1 Программирование на языке Паскаль Сложные условия.» — Транскрипт:
1 1 Программирование на языке Паскаль Сложные условия
2 2 Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ «подходит» или «не подходит»). Особенность: надо проверить, выполняются ли два условия одновременно. Можно ли решить известными методами? ?
3 3 Вариант 1. Алгоритм начало ввод x ‘подходит’ конец да нет x >= 25? да нет x
4 4 Вариант 1. Программа program qq; var x: integer; begin writeln(‘Введите возраст’); read ( x ); if x >= 25 then if x
5 5 Вариант 2. Алгоритм начало ввод x ‘подходит’ да нет x >= 25 и x
6 6 Вариант 2. Программа сложное условие program qq; var x: integer; begin writeln(‘Введите возраст’); read ( x ); if (x >= 25) and (x
7 7 Сложные условия Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций: not – НЕ (отрицание, инверсия) and – И (логическое умножение, конъюнкция, одновременное выполнение условий) or – ИЛИ (логическое сложение, дизъюнкция, выполнение хотя бы одного из условий) xor – исключающее ИЛИ (выполнение только одного из двух условий, но не обоих) Простые условия (отношения) >= = равно не равно
8 8 Сложные условия Порядок выполнения выражения в скобках not and or, xor, >=, =, Особенность – каждое из простых условий обязательно заключать в скобки. Пример if not (a > b) or (c d) and (b a) then begin. end if not (a > b) or (c d) and (b a) then begin. end
9 9 Истинно или ложно при a := 2; b := 3; c := 4; not (a > b) (a = b) or (c = d) (a 6) and (x 6) and (x > 10) (x 6) or (x 6) or (x > 10) Сложные условия True FALSE (-, 6) (6, 10) (10, ) (-, 10) (-, 6) (10, ) (-, ) (6, ) x 10 x 6x > 6 True
10 10 Задания «4»: Ввести номер месяца и вывести название времени года. Пример: Введите номер месяца: 4 весна «5»: Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом «год», «года» или «лет». Пример: Введите возраст: Вам 24 года Вам 57 лет
Источник: www.myshared.ru
Напишите программу, в которой сортировка выполняется методом камня- самый тяжелый элемент опускается в конец массива. в решение в паскаля
//FIXEDvara:array[1..10000] of integer;i,m,n,fl, tmp : integer;BeginWriteln(‘Введите кол-во элементов в массиве’);Readln(n);Writeln(‘Введите элеметы массива: ‘);for i:= 1 to n do Read(a[i]);m:=n;repeat fl:= m; m:= 0; for i:=1 to fl-1 do if a[i+1] < a[i] then begin m:=i; tmp:=a[i]; a[i]:=a[i+1]; a[i+1]:=tmp; end; until m=0;for i:= 1 to n do Write(a[i], ‘ ‘);end.
Ну Вы нашли, где пофиксить свой ответ.
Ответы
//Как учили наших дедов.
var
a:array[1..10000] of integer;
i,j,n, tmp : integer;
Begin
Writeln(‘Введите кол-во элементов в массиве’);
Readln(n);
Writeln(‘Введите элеметы массива: ‘);
for i:= 1 to n do
Read(a[i]);
for i:= 1 to n do
for j:= 1 to n do
if (a[i] < a[j]) then
begin
tmp:=a[i];
a[i]:=a[j];
a[j]:=tmp;
end;
for i:= 1 to n do
Write(a[i], ‘ ‘);
end.
3 комментария:
Сожалею, но это не метод камня, это метод пузырька. Я добавил в Вашу программу промежуточный вывод и вот что получилось:
Введите элеметы массива: 5 7 -2 6 0 9 3 1 4 79 5 -2 6 0 7 3 1 4 7 5 9 -2 6 0 7 3 1 4 7 -2 5 9 6 0 7 3 1 4 7 -2 5 6 9 0 7 3 1 4 7 -2 0 5 6 9 7 3 1 4 7 -2 0 5 6 7 9 3 1 4 7 -2 0 3 5 6 7 9 1 4 7 -2 0 1 3 5 6 7 9 4 7 -2 0 1 3 4 5 6 7 9 7 -2 0 1 3 4 5 6 7 7 9 -2 0 1 3 4 5 6 7 7 9
Хорошо видно, что у Вас более «легкие» элементы «всплывают» в началу массива, вместо того, чтобы более «тяжелые» элементы «опускались на дно» (к концу массива).
Источник: reshimne.ru