Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Присваивание начального значения

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

В качестве примера обратимся к Листингу 6.7, содержащему программу расчета среднего арифметическо- го значения трех чисел. Допустим, в области памяти, отведенной для переменной total, содержится слу- чайное значение 1827. Если переменной не было присвоено начальное значение

total = 0;

то, когда мы вводим первое число 75, первый аккумулятор должен будет выполнить следующую матема- тическую операцию:

total = 1827 + 75

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

total = 0 + 75

Проектирование программы

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

Остерегайтесь логических ошибок

Ранее в этой же главе мы приводили пример программы для расчета недельного заработка (см. Лис- тинг6.4). Компиляция этой программы пройдет без ошибок, и вы можете пользоваться ею некоторое вре- мя, прежде чем обнаружится главный изъян, а именно, в программе подразумевается, что служащий рабо- тает, по меньшей мере, 40 часов в неделю, или, что то же самое, минимальной возможной оплатой явля- ется оплата сорокачасовой рабочей недели. Если это действительно так, то никаких проблем не возник- нет. Но что, если работник работает меньше сорока часов в неделю и должен получать зарплату в соот- ветствии с реально отработанным временем? Если в эту программу ввести значение отработанных часов меньшее, чем 40, все расчеты окажутся неверными. Проблема содержится в инструкции

total = (40 * rate) +((hours - 40) * (rate * 2));

Во-первых, даже если кто-то работал меньше 40 часов, все равно значение оплаты одного часа будет ум- ножено на 40, как указано в действии 40 * rate. Во-вторых, результат операции hours - 40 окажется отри- цательной величиной. Это отрицательное значение будет умножено на оплату часа работы, увеличенную вдвое, и полученный результат прибавлен к основной зарплате. Добавление отрицательной величины приведет к уменьшению исходного значения, и в результате работник потеряет из заработка оплату в двойном размере за каждый час, недостающий до40.

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