Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

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

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Обеспечение эффективности разработки программных продуктов




Ввод в законодательную базу государства понятия интеллектуальная собственность существенно расширил возможности пользователя по созданию программного продукта. При этом под программным продуктом понимаются все составные части, начиная с математической модели и заканчивая программой. Собственностью считается любая часть программного продукта (интеллектуальная разработка) созданная пользователем, т.е. новая математическая модель, нестандартный метод решения, уникальный алгоритм и программа.

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

Технология (стиль) разработки программных продуктов – совокупность правил и приёмов, определяющих эффективный путь создания качественных интеллектуальных разработок решения задач пользователя.

Основные требования к качеству программного продукта – эффективность, универсальность, дружественность к пользователю.

Дружественность – свойства программного продукта, определяющие доступность, простоту, удобство составления, чтения и машинного выполнения.

Технология разработки программных продуктов универсальна. Её эффективность базируется на современных методах анализа и синтеза – системности подхода и структуризации разработок, оформленных в виде набора правил и приёмов.

Дружественность программного продукта в целом, как правило, выявляется на завершающих этапах машинной обработки (отладке и выполнении). Технология создания программного продукта многоэтапна, следовательно, обеспечение дружественности может достигаться последовательной разработкой отдельных элементов на каждом из них.

Элементы дружественности, разработанные на начальных этапах, автоматически попадают в последующие этапы создания программного продукта, т.е. чем раньше начинается их разработка, тем эффективнее дальнейшее использование.

Следовательно, в предмашинной подготовке задачи к решению дружественность желательно предусматривать начиная с первого этапа – постановки задачи.

Систематизируем элементы дружественности и эффективности по основным этапам подготовки задачи к решению.

Словесная формулировка задачи:

· полное описание необходимой и ликвидация избыточной информации;

· чёткое определение входных и выходных данных;

· именование данных в соответствии с их сущностью;

· задание значений входных данных не только фиксировано, но и диапазоном их возможного изменения;

· использование значений с указанной пользователем размерностью.

Формирование математической модели:

· блочность построения;

· оптимальная степень детализации (компромисс наглядности и объёма информации);

· универсальность обозначений данных;

· указание и проверка размерностей всех данных;

· универсальность модели для задач одного типа.

ü Внимание! Неполная (ошибочная) постановка задачи (математическая модель) – основная (главная) причина создания некачественного программного продукта.

Реализация рекомендаций по обеспечению дружественности первых этапов (постановке задачи и созданию модели) выполнена на рассмотренных ранее примерах 1.1 и 1.2.

Выбор метода решения:

· классификация методов решения задачи (общего – для всей задачи и частных – для её составляющих);

· универсальность выбранных методов (для общего – пригодность для решения множества однотипных задач, для частного – применимость для большинства составляющих задачи);

ü Внимание! Универсальность методов делает вашу задачу доступной (дружественной) другим пользователям.

Создание алгоритма решения.

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

· восходящее проектирование;

· нисходящее проектирование.

Восходящее проектирование (проектирование снизу вверх) требует предварительного разбиения сложной задачи на совокупность отдельных подзадач. Каждая из них проходит полный набор технологических этапов предмашинной подготовки и машинной обработки – формулировку, алгоритмизацию, программирование, отладку и решение. Полученные и отлаженные программные модули сшиваются в единое целое. Восходящее проектирование характеризуется проблемами:

· нестыковка входных и выходных величин отдельных программных модулей;

· невозможность общей отладки всей программы, если отсутствует хотя бы один программный модуль.

Широкое распространение для создания программных продуктов получил метод структурного проектирования (программирования). Он базируется на принципах системного анализа, получившего в алгоритмизации (программировании) название метода нисходящего проектирования (программирования) или проектирования (программирования) сверху вниз.

Метод базируется на трёх принципах:

· любой алгоритм должен составляться пошагово, определяя в начале общую формулировку задачи (что делать), а затем, на следующих шагах, детализируя отдельные её участки (как делать);

· алгоритм сложной задачи должен быть представлен совокупностью простых участков, каждый из которых имеет только 1 вход и 1 выход;

· каждый участок алгоритма должен реализовываться одной из базовых управляющих структур;

Базовые структуры делятся на основные и дополнительные.

В качестве основных базовых структур используют:

· последовательность;

· ветвление;

· повторение.

Схемы основных базовых структур имеют вид (рис. 2.9)

Рис. 1.9. Основные базовые структуры: а – последовательность; б – ветвление; в – повторение

Структура повторения представлена общим видом в двух вариантах – циклом с предусловием (левая схема) и цикл с постусловием (правая схема).

На схеме используются обозначения

P – проверяющий блок;

S – выполняемый блок

Проверяющий блок осуществляет анализ (проверку) записанного в нём условия. По результатам проверки истинности (ДА, НЕТ) выбирается один из путей решения – требуемый блок S.

При составлении сложных алгоритмов разрешается в качестве блоков S использовать дополнительно любую из базовых структур, т.е. реализовать пошаговый принцип структурирования, переходя от общей схемы к её детализации.

Помимо основных базовых структур могут использоваться модификации второго и третьего вариантов.

Схемы модифицированных базовых структур имеют вид (рис. 2.10)

Рис. 1.10. Модификации базовых структур: а – неполное ветвление; б – множественный выбор; в – повторение; г – цикл с параметром

В структуре неполного ветвления при реальном использовании на каждой из выходных ветвей должны быть указаны условия выполнения (ДА, НЕТ). В общем виде это нежелательно, т.к. ограничивает универсальность структуры.

В структуре множественного выбора при реальном использовании на каждой из выходных ветвей должны быть указаны значения их выбора. Например, 2, 5, 7 и т.д.

Структура повторения представлена развёрнутым видом в двух вариантах – циклом с предусловием (левая схема) и циклом с постусловием (правая схема). Развёрнутый вид схем повторения облегчает понимание связей элементов в зависимости от проверки условия повторения. При реальном использовании на каждой из выходных ветвей, аналогично структуре неполного ветвления, должны быть указаны условия выполнения (ДА, НЕТ).

Дополнительно введена структура с параметром (два варианта). Левый вариант представлен в развёрнутом, а правый в общем виде.

Конечная цель структурного проектирования – представление схемы алгоритма в виде комбинации базовых структур, соединённых общей логикой выполнения.

ü Внимание! При составлении схем алгоритмов следует помнить, что улучшению качества программного продукта (его отладке) способствует максимальное количество выведенных данных (в принципе всех). В идеале точка вывода каждого данного должна непосредственно следовать за местом получения им значения (ввод или расчёт). Выполнение идеального принципа существенно увеличивает объём алгоритма и снижает его наглядность. Поэтому технология проектирования рекомендует осуществлять группировку выводимых данных в соответствии с логикой задачи и их количеством (не более 5-7 в одном блоке).

Пример структурированного алгоритма задачи о картофеле (пример 2.3) имеет вид (рис. 1.11).

На первом шаге выполнен укрупнённый алгоритм решения (что делать), на втором осуществлена детализация блоков 2,3,4 (как делать). Двойная нумерация блоков этого шага первой цифрой определяет принадлежность блоку первого шага, а второй задаёт порядковый номер в детализации.

Как и в предыдущем варианте схемы (рис. 2.4) для удобства пользователя исходные данные выведены на печать. В соответствии с рекомендациями технологии проектирования вывод каждой совокупности введённых данных завершает их ввод.

Шаг 1 Шаг 2 Шаг 3

Рис. 1.11. Структурированный вариант алгоритма задачи о картофеле

На третьем шаге осуществлён синтез предыдущих шагов и получен окончательный вариант алгоритма решения. При этом восстановлена сквозная нумерация блоков схемы.

Каждый из шагов представляет собой стандартную структуру – последовательность, выполненную с разной степенью детализации.

Программирование задачи.

В соответствии с общей концепцией системного анализа технология программирования определяет общие и частные закономерности создания программ.

Частные закономерности требуют достаточного владения конкретным языком программирования. Общие можно выразить следующими положениями:

· программирование выполнять блочно –идентификацией данных и программой;

· таблица идентификации данных определяет соответствие между физическими именами в алгоритме и будущими именами в программе;

· программу на бланке записывать структурировано, т.е. операторы (их элементы) записывать с разных позиций бланка (например, сдвигая вправо) для увеличения наглядности текста программы;

· использовать комментарии для улучшения читаемости программ. В начале (шапке) программы комментариями расшифровывать название программы, назначение, метод решения, данные разработчика. В теле программы использовать комментарии наряду со структурированностью для облегчения понимания логики решения;

· осуществлять вывод всех введённых величин и максимально возможного количества промежуточных величин для облегчения отладки программы и анализа результатов. Вводимые величины должны оформляться в удобном пользователю виде (с наименованиями и размерностями или таблично).

С учётом рекомендаций выполним программирование алгоритма задачи о картофеле.

Идентификация переменных выполнена ранее (табл. 2.6).

Структурированная программа с комментариями может иметь следующий вид:

/* Программа расчёта массы картофеля. */

/* Линейный вычислительный процесс. */

/* Учебная */

#include<stdio.h> /* включение */

#include<math.h> /* внешних файлов */

main() /* заголовок главной функции (программы) */

{ /* верхний ограничитель тела функции (программы) */

float pd, psh, ub, po, /* описатели */

k1, k2, k3, k4; /* локальных */

float pp, mv, mp, mt; /* переменных */

scanf("%3f%4f%4f%4f",&pd, &psh, &ub, &po); /* ввод */

fprintf(stdprn,"%3.1f %4.0f %4.0f %4.1f\n",pd,psh,ub,po); /* вывод */

scanf("%5f%5e%3f%4f",&k1, &k2, &k3, &k4); /* исходных */

fprintf(stdprn,"%5.0f %5.0e %3.1f %4.0f\n",k1, k2, k3, k4); /* данных */

pp=(pd*k1*psh)*k2; /* расчёт площади поля */

mv=ub*pp*k3; /* расчёт массы выращенного */

mp=mv*po/k4; /* расчёт массы потерь */

mt=mv-mp; /* расчёт массы товарной */

fprintf(stdprn,"%f %f %f %f\n",pp, mv, mp, mt); /* вывод результатов */

} /* нижний ограничитель тела функции (программы) */

1.2750.180.12.7

1000.1.e-40.1100.

Пояснения к программе.

Анализ представленной записи программы показывает, что организация дружественности достигнута использованием значительного объёма комментариев и структурированностью текста программы.

Признак комментария (поясняющего текста) – ограничители вида /* */.

Первые три строки (шапка программы) – комментарий, определяющий название, метод и назначение программы.

Каждая строка (оператор) дополнена собственным комментарием или его фрагментом. Комментарий (совокупность фрагментов) поясняет назначение строки (нескольких взаимосвязанных строк).

Структурированность записи текста выполнена сдвигом некоторых строк вправо от начальной, для выделения некоторых операций из основных. Операторы, выполняющие вспомогательные функции – описатели переменных, вывода исходных данных и расчёта вспомогательных величин, записаны со сдвигом вправо относительно основных для облегчения чтения программы.

 

Вопросы для контроля

 

1. Какие этапы составляют предмашинную подготовку задачи?

2. Что такое алгоритм решения?

3. В каком виде выполняются алгоритмы?

4. Как выполняется схема алгоритма?

5. Что такое программа решения?

 

2.ЯЗЫК ПРОГРАММИРОВАНИЯ С++

2.1 Ключевые слова C++

 

__asm __es __interrupt short
_asm _es _interrupt signed
asm __export interrupt sizeof
auto _export __loadds __ss
break extern _loadds _ss
case __far long static
catch _far __near __stdcall
__cdecl far _near _stdcall
_cdecl __fastcall near struct
cdecl _fastcall new switch
char __finally operator template
class float __pascal this
const for _pascal __thread
continue friend pascal throw
__cs goto private __try
_cs __huge protected try
default _huge public typedef
delete huge register union
do if return unsigned
double __import __rtti virtual
__ds _import __saveregs void
_ds import _saveregs volatile
else inline __seg while
enum int _seg  

 

 

2.2. Расширения C++ по сравнению с Си стандарта ANSI

 

__asm __except __import (2) pascal
_asm __export _import (2) __saveregs (1)
__cdecl __far (1) _interrupt (1) _saveregs (1)
_cdecl _far (1) interrupt (1) __seg (1)
cdecl far (1) __loadds (1) _seg (1)
__cs (1) __fastcall _loadds (1) ___ss (1)
_cs (1) _fastcall __near (1) __ss (1)
__ds (1) __finally _near (1) __rtti
_ds (1) __huge (1) near (1) __thread (2)
__es (1) _huge (1) __pascal __try
_es (1) huge (1) _pascal  


(1) - доступны только для 16-разрядных компиляторов
(2) - доступны только для 32-разрядных компиляторов

 

2.3 Ключевые слова, специфические для C++

 

asm friend protected try
catch inline public virtual
class new template __rtti
delete operator this  
private throw    

 

2.4 Регистровые псевдопеременные Borland C++

 

_AH _CL _EAX (*) _ESP
_AL _CS _EBP (*) _FLAGS
_AX _CX _EBX (*) _FS
_BH _DH _ECX (*) _GS (*)
_BL _DI _EDI (*) _SI
_BP _DL _EDX (*) _SP
_BX _DS _ES _SS
_CH _DX _ESI (*)  

(*) - для 32-разрядного компилятора эти псевдопеременные всегда доступны. 16-разрядный компилятор может их использовать только при указании параметра генерации инструкций 80386.

 

2.5 Идентификаторы

Характерным для C++ и для других реализаций языка является учет регистра букв в идентификаторах. Последние могут содержать буквы от A до Z и от a до z, символ подчеркивания (_) и цифры от 0 до 9 и должны начинаться с буквы. Константы

Константами называются лексемы, представляющие собой фиксированные числовые или символьные значения. Borland C++ поддерживает четыре класса констант: константы с плавающей точкой, целочисленные константы, константы перечислимого типа и символьные константы (включая строковые).

Целочисленные константы представлены десятичным, восьмиричным и шестнадцатиричным форматом.

Символьные константы записываются одним или более символами, заключенными в одинарные кавычки, например 'F', '=', '\n'.

2.6 Описание операций

Операциями называются лексемы, вызывающие некоторые вычисления с переменными и прочими объектами, указанными в выражении. Borland C++ имеет особенно богатый набор операций, включающий в себя помимо обычных арифметических и логических операций средства манипуляции с данными на битовом уровне, доступа к элементам структур и объединений, а также операции с указателями (ссылка и разыменование).

2.6.1 Унарные операции

Операция Смысл
& Операция адресации
* Операция обращения по ссылке
+ Унарный плюс
- Унарный минус
~ Поразрядное дополнение (дополнение до единицы)
! Логическое отрицание
++ Префикс: прединкрементация; Постфикс: постинкрементация
-- Префикс: преддекрементация; Постфикс: постдекрементация

 

2.6.2 Бинарные операции

 

Операция Смысл
Операции типа сложения + Бинарный плюс (сложение)
- Бинарный минус (вычитание)
Операции типа умножения * Умножение
/ Деление
% Остаток от деления
Операции сдвига << Сдвиг влево
>> Сдвиг вправо
Поразрядные операции & Поразрядное И
^ Поразрядное исключающее ИЛИ
| Поразрядное включающее ИЛИ
Логические операции && Логическое И
|| Логическое ИЛИ
Операции присваивания = Присваивание
*= Присвоить произведение
/= Присвоить частное
%= Присвоить остаток
+= Присвоить сумму
-= Присвоить разность
<<= Присвоить сдвиг влево
>>= Присвоить сдвиг вправо
&= Присвоить поразрядное И
^= Присвоить поразрядное исключающее ИЛИ
|= Присвоить поразрядное ИЛИ
Операции отношения < Меньше
> Больше
<= Меньше или равно
>= Больше или равно
Операции равенства == Равно
!= Не равно
Операции выбора элемента . Непосредственный выбор элемента
-> Косвенный выбор элемента
Операции с элементами класса :: Доступ/определение области действия
.* Обращение через указатель к элементу класса
->* Обращение через указатель к элементу класса
Условные операции a? x: y "Если a, то x, иначе - y"
Операция запятой , Вычислить, например, a, b, c слева - направо

 

2.6.3 Пунктуаторы

 

В C++ пунктуаторы, также называемые разделителями, определяются следующим образом:

пунктуатор: одно из [ ] () { },;:... * = #

 

2.6.4 Ассоциативность и приоритеты операций Borland C++

 

Операции Ассоциативность
() [] ->::.! ~ - ++ -- & * (приведение типа) Слева-направо
sizeof new delete Справа-налево
.* ->* Слева-направо
* / % Слева-направо
+ - Слева-направо
<< >> Слева-направо
< <= > >= Слева-направо
==!= Слева-направо
& Слева-направо
^ Слева-направо
| Слева-направо
&& Слева-направо
|| Слева-направо
?:(условное выражение) Справа-налево
= *= /=:= += -= &= ^= |= <<= >>= Справа-налево
, Слева-направо

 

 

2.6.5 Размер памяти и диапазон значений стандартных типов данных СИ/СИ++

 

№ п/п   Тип переменной Объём памяти Диапазоны представления чисел Спецификатор
бит байт min max
  char     -128   %d %c %s
  unsigned char         %c %s
  short     -32768   %d %o %x
  int[1]     -32768   %d %o %x
  unsigned int         %u
  long     -2147483648   %ld %lo %lx
  unsigned long         %lx %lu
  float     3,4 Е-38 3,4 Е+38 %f %e %g
  double     1,7 Е-308 1,7 Е+308 %le %lf
  long double     3,4 Е-4932 3,4 Е+4932 %lf %le %lg
  указатель         %lu
             
             

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных