Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Часть II. Становимся программистами. // накопление последовательности чисел. // сложить числа, введенные




// накопление последовательности чисел...

 

do

 

// сложить числа, введенные

// с клавиатуры

cout <<       следующую nAccumulatedValue =

 

// вывести полученный cout << "\пСумма равна "

<<nAccumulatedValue

«

 

// ...пок а сумма не равна О

} whil e (nAccumulatedValue ! = 0) ; cou t << "Программа завершена\п" ; retur n 0 ;

 

Как и во многих других программах этой книги, в FunctionDemo суммируется по- следовательность введенных с клавиатуры чисел. Однако, в отличие от остальных про- грамм, для сложения введенных чисел main () вызывает функцию sumSequence ().

 

FunctionDemo

Модуль FunctionDemo. можно логически разделить на две функции, которые выполняют разные действия.  Сейчас  функция О приглашает пользователя вве- сти числа и выполняет цикл, в котором накапливаются и выводятся суммы последова- тельностей чисел. Функция sumSequence () суммирует

и возвращает полученный результат.

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

Для демонстрации этого метода новая версия программы FunctionDemo разбита на два модуля: первый содержит функцию sumSequence (), а второй — функцию main ().

Конечно, приведенная программа очень мала. И хотя sumSequence () можно раз- делить еще на несколько модулей, разбивать FunctionDemo не имеет смысла ни для упрощения работы, ни для ускорения компиляции. Этот пример демонстрирует меха- низм разбиения программы на несколько частей и не более того.

 

Отделение МОДУЛЯ sumSequence ()

Функцию sumSequence О легко отделить от остальной программы. Приведенный ниже  листинг           содержит единственную функцию

 

// SeparateModule — демонстрирует, как можно разбить

//            программу на несколько модулей,

//            упростив написание и проверку;

//            этот модуль содержит функцию,

Глава 10. Прочие функциональные особенности                                111


//             вызываемую из

 

//        - суммирует последовательность введенных с клавиатуры чисел, пока

//         не будет введено отрицательное

//         Возвращает сумму введенных чисел out, in)

 

// Вечный цикл

int nAccumulator =

 

// Ожидание следующего числа int nValue 0;

out << "Введите следующее   "; in  >> nValue;

// Если число отрицательное... if (nValue < 0)

{

// ...тогда выполнить выход из

 

 

// противном случае добавить число

// к аккумулятору

nAccumulator = nAccumulator + nValue;

 

// вернуть сумму returnnAccumulator;

}

Структура  модуля                                            почти такая же, как и других программ,

однако эта программа отличается от остальных отсутствием функпии main() . Этот модуль будет скомпилирован, но на последнем этапе (компоновки) появится

ние об ошибке.

Последний этап сборки программы называется связыванием, поскольку в этот мо- мент разные модули связываются в единую конечную выполняемую программу.

Функция   sumSequence ()     выглядит почти так же, как и в программе из главы 6,  "Создание                                                        с одним небольшим отличием.

В предыдущей версии ввод осуществлялся с помощью потока ввода cin, а вывод

с помощью  потока cout. Для придания  большей универсальности    функции передаются имена потоков ввода и вывода.

Объект ci n имеет тип                    однако тот же тип могут иметь и файлы, отличные от стандартного ввода. Поскольку функции можно передать любой поток ввода и вы- вода, sumSequence () может быть использована для работы с любым типом потока, например с внешними файлами. В главе 26, "Использование потоков ввода-вывода", этот вопрос рассматривается подробнее.

Может показаться, что передача объектов ввода-вывода только вносит ненужную путаницу в программу, а путаницы следует избегать. Но в данном случае небольшая путаница — цена гибкости программы, обеспечивающая возможность дальнейшего использования этих объектов в других программах.

 


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 241; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.011 с.)
Главная | Случайная страница | Обратная связь