Программирование >>  Аргументация конструирования 

1 ... 30 31 32 [ 33 ] 34 35 36 ... 108


flfuuiefi большей nfioiftoMMH

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

Вы, вероятно, помните, что FunctionDemo. срр содержит следующий код:

FunctionDemo - демонстрирует использование функций

путем выделения внутреннего

цикла программы

в отдельную функцию

#include <stdio.h> #include <iostream.h>

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

не буде дено отрицательное число.

Возвращает сумму введенных чисел

int sumSequence(void) {

Вечный цикл

int nAccumulator = 0 ; for (;;)

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

cout Введите следуюцее число: ; cin nValue;

Если число отрицательное...

if (nValue < 0)

...тогда выполнить выход из цикла break;

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

nAccumulator nAccumulator +

вернуть сумму return nAccumulator;

in (int nArg, char* pszArgs[]) {

cout << Эта программа суммируем тельнести \п

<< чисел. Ввод последовательности можно прекратить,\п

<< введя отрицательное число.\п

<< Остановить программу можно,\п

<< введя два отрицательных числа подряд\п ;



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

int nAccumulatedValue;

сложить числа, введенные с клавиатуры

cout < едите следующую пос.ледователь.ность \п ;

nAccumulatedValue = sumSequence () ;

вывести полученный

cout << ХпСумма равна пАсcumu1аtedVa1ue

...пока сумма не равна О } while (nAccumulatedValue != 0); cout << Программа завершена\п ; return 0;

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

TasqeueHue nfiotfioMMM

FunctionDemo

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

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

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

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

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

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

sumSequejice () :

SeparateModule - демонстрирует, как можно разбить программу на несколько модулей,

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

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



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

Iinciude <stdio.h> #include <iostream.h>

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

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

Возвращает сумму введенных чисел

int sumSequence(ostreams out, istreams in) i

Вечный цикл

int nAccumulator = 0; for(;;)

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

out Введите следующее число: ; in >> nValue;

Если число отрицательное.. .

if (nValue < 0)

...тогда выполнить выход из иикла break;

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

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

nAccumulator = nAccumulator + nValue;

вернуть сумму return nAccumulator;

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

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

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

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

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

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



1 ... 30 31 32 [ 33 ] 34 35 36 ... 108

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика