Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции программирование.doc
Скачиваний:
38
Добавлен:
05.11.2018
Размер:
4.73 Mб
Скачать

1.3.Полная обработки задачи пользователя

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

Взаимодействие этих этапов иллюстрируется схемой (рис. 2.8)

Рис. 1.8. Схема технологии решения задачи

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Реализация рекомендаций по обеспечению дружественности первых этапов (постановке задачи и созданию модели) выполнена на рассмотренных ранее примерах 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.