Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Часть 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; Нарушение авторского права страницы