Есть такое задание:
1) Составить процедуру подсчета и печати количества групп операторов заключенных в скобки «begin . end» в исходном массиве строк
2) Составить функцию возвращающую количество символов «;» в строке.
Вопрос исключительно по первому, как это возможно реализовать?
Как определить что слово является оператором?
Я в Паскале новичек, и пишу опираясь на знания php =)
На данный момент у меня написано:
uses CRT; var n,i:integer; f:text; s:string; begin clrscr; n:=0; assign(f,’d:1.txt’); reset (f); while not eof(f) do begin readln(f,s); for i:=1 to length(s) do if s[i]=’;’ then n:=n+1; writeln(s); end; writeln(n); close (f); readln end.
Регистрация: 09.01.2008
Сообщений: 26,238
по хорошему надо писать синтаксический аналазатор (разбирать текст на лексемы, потом определять, что представляет собой каждая из лексем). Это описано в целом ряде источников.
Но, скорее всего (особенно с учётом задания №2), вам достаточно посчитать, сколько раз встретилась точка с запятой между begin . end. Отдельно учесть наличие точки с запятой после последнего оператора (перед крайним END).
Операторы. Арифметические операции с числами. C++ для начинающих. Урок #8.
и всё решение!
Регистрация: 02.05.2012
Сообщений: 6
Если я правильно понял, то если встречается «;», то можно считать что присутствует оператор, так?
А вот на счет «end;» можно поподробнее?
Регистрация: 09.01.2008
Сообщений: 26,238
Если я правильно понял, то если встречается «;», то можно считать что присутствует оператор, так? |
А вот на счет «end;» можно поподробнее? |
наоборот, речь про случай
begin . оператор end
если посчитать точки с запятой — то получится, что операторов нет.
бороться с этим явлением можно двумя способами.
первый. простейший.
считаем количество ;,
количество операторов := кол_во_точек_с_запятой + 1
в этом случае, если перед END стоит оператор, а после него есть точка с запятой, то эта точка с запятой означает наличие ЕЩЁ одного оператора (напоминаю, что в Паскаль допускается наличие ПУСТЫХ операторов!)
второй способ.
учитывать случай с наличием/отсутствием точки с запятой после последнего оператора отдельно. учитывать так — перебираем символы в обратном порядке от конечного END — если нашли точку с запятой — то считаем, что количество операторов РАВНО количеству точек с запятой, если НЕ НАШЛИ точку с запятой (встретился ЛЮБОЙ другой символ, отличный от табуляции/перевода строки) — то считаем, что количество операторов РАВНО количеству точек с запятой ПЛЮС ОДИН.
и ещё, решите для себя, сколько операторов содержит такая конструкция
begin end
ну и ещё. обязательно учтите момент наличия (возможности) комментариев в коде.
Операторы JAVASCRIPT. «2»+2=22. Уроки JAVASCRIPT с нуля 2020
Нужно или декларировать, что их запрещено использовать,
или, если они допускаются, тогда обрабатывать отдельно (я бы удалял из текста все комментарии, чтобы они не мешали подсчётам).
Источник: www.programmersforum.ru
Количество операторов и операндов
Всем привет. Нужно реализовать разбор кода С# по метрике Холстеда. Собственно, необходимо найти все операторы и операнды программы. Возникает такой вопрос: сколько в данном куске кода операторов и операндов:
Cells = new ObservableCollection(); var cell = new Cell < Text = string.Format(«», i) >;
Также интересует следующее: являются ли операторами агрументы цикла for?
for (var col = 0; col < 4; col++)
Возможно, глупый вопрос, но почему-то поставил меня в тупик.
Отслеживать
31.8k 19 19 золотых знаков 79 79 серебряных знаков 105 105 бронзовых знаков
задан 9 окт 2014 в 19:48
Eugene Shilin Eugene Shilin
297 1 1 золотой знак 7 7 серебряных знаков 22 22 бронзовых знака
Вам надо написать всего-навсего парсер C#. Это не так уж и сложно, но поработать придётся. В C# нет общепринятого понятия «оператора» и «операнда», так что вам придётся посмотреть в определение метрики Холстеда.
9 окт 2014 в 19:55
Информация с Хабра: «..К метрикам основанных на подсчете некоторых единиц в коде программы, относят метрики Холстеда. Данные метрики основаны на следующих показателях: n1 — число уникальных операторов программы, включая символы- разделители, имена процедур и знаки операций (словарь операторов), n2 — число уникальных операндов программы (словарь операндов), N1 — общее число операторов в программе, N2 — общее число операндов в программе, n1′ — теоретическое число уникальных операторов, n2′ — теоретическое число уникальных операндов.» Как быть?
9 окт 2014 в 19:59
Ох уж эти любители строгих классификаций. В самом деле как-то не все тут однозначно. — Рассмотрим for (. ) . С одной стороны понятно: Само слово for — оператор. Его операндами являются список выражений и тело цикла (тут не приведено, обычно его тоже относят к операторам, но здесь по идее он д.б. операндом).
Список выражений — это операнд, состоящий из элементов списка, которые тоже являются операндами. Разделители ; это операции. И т.д. рекурсивно. А вопрос (неоднозначность) в том, включать ли в число операндов (при подсчете for ) и сам список, или только его элементы?
9 окт 2014 в 21:20
С циклом for все, допустим, понятно. За это спасибо. Так сколько операторов и операндов в куске кода, о котором я писал? ____ Всё еще актуально!
10 окт 2014 в 4:30
10 окт 2014 в 20:53
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
При расчете метрики Холстеда используются следующие операнды:
Идентификаторы – все идентификаторы, которые не являются зарезервированными словами.
Идентификаторы типов — зарезервированные слова, обозначающие тип данных: bool , char , double , float , int , long , short , signed , unsigned , void .
Константы — числовые, символьные, строковые.
Ключевые слова следующих категорий, которые интерпретируются как операторы:
Идентификаторы класса памяти: inline , register , static , typedef , virtual , mutable .
Квалификаторы типа: const , friend , volatile .
Зарезервированные слова: asm , break , case , class , continue , default , delete , do , else , enum , for , goto , if , new , operator , private , protected , public , return , sizeof , struct , switch , this , union , while , namespace , using , try , catch , throw , const_cast , static_cast , dynamic_cast , reinterpret_cast , typeid , template , explicit , true , false , typename .
Операторы языка программирования: ! != % %= = ( ) * *= + ++ += и т.д.
Следующие управляющие структуры: for(…) , if (…) , switch (…) , while for (…) and catch (. ) интерпретируются как один оператор.
Из приведенного кода cell и i операнды.
Все остальное операторы.
Источник: ru.stackoverflow.com
Определение трудоемкости разработки алгоритма ПП
Трудоемкость создания ПП определяется укрупненным методом:
(3.3)
где — трудоемкость подготовки описания задачи и исследования алгоритма решения,
— трудоемкость разработки блок-схемы алгоритма,
— трудоемкость программирования по готовой блок-схеме,
-трудоемкость отладки программы на ЭВМ,
— трудоемкость подготовки документации по задаче в рукописи,
— трудоемкость редактирования, печати и оформления документации по задаче.
Составляющие приведенной формулы определяются, в свою очередь, через условное число операторов Q в разрабатываемом ПП по формуле:
, (3.4)
где q — число операторов в программе,
С — коэффициент сложности программы,
p — коэффициент коррекции программы в ходе ее разработки.
Коэффициент сложности программы С характеризует относительную сложность программ задачи по отношению к так называемой типовой задаче, сложность которой принята за единицу. Значение коэффициента определяется на базе экспертных оценок.
Коэффициент коррекции программ p характеризует увеличение объема работ за счет внесения изменений в алгоритм и программу, изменения состава и структуры информации, а также уточнений, вносимых разработчиком программы для улучшения ее качества без изменения постановки задачи. Значение p может быть принято равным 0,15. 0,5.
Q = 128 * 1 * (1 + 0,3) = 166,4 опер.
Составляющие трудоемкости разработки программы определятся по формулам (3.3) – (3.8).
, (3.5)
, (3.6)
, (3.7)
, (3.8)
, (3.9)
. (3.10)
где W — коэффициент увеличения затрат труда вследствие недостаточного или некачественного описания задачи (W = 1,2. 1,5),
К — коэффициент квалификации разработчика алгоритмов и программ (при стаже работы до двух лет К=0,8, при стаже от двух до трех лет К=1,0, при стаже от трех до пяти лет К=1,1. 1,2 ,при стаже от пяти до семи лет К=1,3. 1,4 , при стаже свыше семи лет К= 1,5. 1,6.).
Примем W = 1,4; K = 0,8.
Трудоемкость разработки ПП:
3.2.2 Определение себестоимости создания ПП
Для определения себестоимости создания программного продукта необходимо определить затраты на заработную плату разработчика по формуле:
, (3.11)
где — трудоемкость разработки программного продукта, чел-ч.,
— среднечасовая ставка работника, осуществлявшего разработку программного продукта, руб,
— коэффициент, учитывающий процент премий в организации-разработчике (принят 0,4),
— коэффициент, учитывающий дополнительную заработную плату (принят 0,15),
— коэффициент, учитывающий отчисления от фонда заработной платы (отчисления в фонд социальной защиты населения и отчисления на обязательное медицинское страхование от несчастных случаев); (принят 0,346).
Среднечасовая ставка работника определяется исходя из Единой тарифной системы оплаты труда в Республике Беларусь по следующей формуле:
, (3.12)
где — среднемесячная заработная плата работника 1 разряда (принята 292 000 руб),
— тарифный коэффициент работника соответствующего разряда (принят 3,54),
170 – среднее нормативное количество рабочих часов в месяце для 2015 года.
tчр =
В себестоимость разработки ПП включаются также затраты на отладку ПП в процессе его создания. Для определения их величины необходимо рассчитать стоимость машиночаса работы ЭВМ, на которой осуществлялась отладка.
Затраты на отладку программы определяются по формуле:
, (3.13)
где — трудоемкость отладки программы, час,
— стоимость машиночаса работы ЭВМ, руб/час.
Количество символов в написанной программе составляет 1 536. Выполнение отладки осуществляется со скоростью 30 символов в минуту. Отсюда,
минуты = 0,85 часа.
Стоимость машиночаса работы ЭВМ определяется по формуле:
, (3.14)
где — расходы на электроэнергию за час работы ЭВМ, руб,
— годовая величина амортизационных отчислений на реновацию ЭВМ,
— годовые затраты на ремонт и техническое обслуживание ЭВМ, руб,
— годовая величина амортизационных отчислений на реновацию производственных площадей, занимаемых ЭВМ, руб,
— годовая величина арендных платежей за помещение, занимаемое ЭВМ, руб,
— годовой фонд времени работы ЭВМ, час.
Расходы на электроэнергию за час работы ЭВМ определяются по формуле:
, (3.15)
где — стоимость 1 кВт-часа электроэнергии, руб (принята 1779,6 руб.),
— среднечасовое потребление электроэнергии ЭВМ, кВт (принято 0,6).
Годовая величина амортизационных отчислений на реновацию ЭВМ определяется по формуле:
(3.16)
где — цена ЭВМ на момент ее выпуска, руб (5 000 000 руб.),
— коэффициент удорожания ЭВМ (зависит от года выпуска) (В том случае, когда в качестве цены используется цена текущего года, коэффициент удорожания =1),
— коэффициент, учитывающий затраты на монтаж и транспортировку ЭВМ ( = 1,05),
— норма амортизационных отчислений на ЭВМ, % ( =10%),
— балансовая стоимость ЭВМ, руб.
руб.
Годовые затраты на ремонт и техническое обслуживание ЭВМ укрупненно могут быть определены по формуле:
, (3.17)
где — коэффициент, учитывающий затраты на ремонт и техническое обслуживание ЭВМ, в том числе затраты на запчасти, зарплату ремонтного персонала и др. ( = 0,13).
руб.
Годовая величина амортизационных отчислений на реновацию производственных площадей, занятых ЭВМ определяется по формуле:
, (3.18)
где — балансовая стоимость площадей, руб,
— норма амортизационных отчислений на производственные площади, % (
=1,2%),
— площадь, занимаемая ЭВМ, м 2 (принята 1 м 2 ),
— коэффициент, учитывающий дополнительную площадь (kд = 3),
— цена 1 квадратного метра производственной площади, руб. (принята 3 500 000 руб.).
Тогда балансовая стоимость в этом случае составит
руб.
, (3.19)
где — коэффициент, учитывающий затраты на ремонт и эксплуатацию производственных площадей ( = 0,05).
Годовая величина арендных платежей за помещение, занимаемое ЭВМ, рассчитывается по формуле:
, (3.20)
где — площадь, занимаемая ЭВМ, м 2 (принята 1,5 м 2 ),
— коэффициент, учитывающий дополнительную площадь ( = 3),
— ставка арендных платежей за помещение (принята 120 000 руб.),
– коэффициент комфортности помещения (принят 0,75),
– повышающий коэффициент, учитывающий географическое размещение площади (принят 0,85).
Годовой фонд времени работы ЭВМ определяется исходя из режима ее работы и может быть рассчитан по формуле:
(3.21)
где — среднесуточная фактическая загрузка ЭВМ, час (принята 8 часов),
— среднее количество дней работы ЭВМ в год (принято 250 дней).
ч.
руб.
Себестоимость разработки ПП определяется по формуле:
, (3.22)
где — коэффициент накладных расходов проектной организации без учета эксплуатации ЭВМ (принят 1,2).
Источник: megaobuchalka.ru