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

1 ... 34 35 36 [ 37 ] 38 39 40 ... 108


Очевидно, какая-то из переменных ums или nSum (а возможно, и обе) содержит неверное значение. Для того чтобы исправить ошибку, необходимо узнать, какая именно из этих переменных содержит неверную информацию. Не помешало бы также знать, что содержится в переменной nValue, поскольку она используется для подсчета суммы в nSum.

Для этого воспользуемся методом отладочной печати. Чтобы узнать значения nValue. nSum и n\iums, перепишите тело цикла for так, как показано в следуюшем листинге:

for (int nNums = 0; ;nNums + +)

ждет ввода следующего числа int nValue;

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

если введенное число меньше нуля... if (nValue < 0)

... тогда вывести среднее cout \пСреднее равно:

nSun/nNuins

\ п ;

break;

вывести отладочную информацию cout << nra = << nSum << \n ; cout nNums= nNums \n ; cout . nValue= nValue \n ; cout << \n ;

если число больше нуля, сложить его с аккумулятором nSum += nValue;

Обратите внимание на то, что информация о состоянии отслеживаемых перемен-н1х nValue, nSum и nNums выводится в каждом цикле.

Ответ программы на ввод уже привычных 1, 2, 3 и -1 приведен ниже. При первом же проходе nSum принимает какое-то несуразное значение, хотя оно должно равняться нулю (поскольку к этой переменной пока что ничего не прибавлялось). Эта программа содержит ошибки!

Введите следующее число:! nSum = -858993460 0

nValue= 1

Введите следующее nSum = -858993459 nNums= 1

nValue= 2

Введите следующее nSum = -858993457 nNums= 2 nValue= 3



Введите следующее число:

Внимательно присмотревшись к программе, можно заметить, что nSura б1ла объявлена, но не проиниииализнроваиа. Для того чтобы исправить эту ошибку, объявление переменной необходимо изменить следующим образом:

int nSura = 0;

Примечание. Пока переменная не проинициализирована, ее значение непредсказуемо.

Теперь, когда вы нашли все ошибки, перепишите программу так, как показано в следующем листинге:

rogram - эта программа усредняет ряд чисел и не содержит

ошибок

iinclude <stdio.h> linclude <iostream.h>

int char*

cout << Эта программа работает!\n ;

лирует ряд чисел, пока пользователь не введет отрицательное число, чего выводит среднее

int nSum = 0;

for (in ums = 0; ;nNums + +)

ждет ввода следующего числа int nValue;

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

cin >> nValue;

если введенное число меньше нуля... if (nValue < 0)

...тогда вывести среднее cout ХпСреднее равно:

nSurn/nNums

<< \п ; break;

если число больше нуля,

сложить его с аккумулятором

nSum += nValue;

return 0;

Теперь вывод программы будет правильным.

Эта программа

Введите следующее Введите следующее число:2



Введите следующее число:3 Введите следующее число:-1

Среднее но: 2

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

иснмьзование о/нми/члша

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

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

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

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

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

Что такое отладчик

Отладчик - это утилита, встроенная, например, в rhide или Microsoft Visual С+ + (в этих приложениях разные программы отладчиков, однако работают они по одному принципу).

Программист управляет отладчиком с помощью команд так же, как, например, при редактировании или компиляции программы. Команды отладчика можно выполнять с помощью контекстных меню или горячих клавиш.

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

Чтобы оценить удобство отладчика, его нужно увидеть в действии. В этом разделе преимущества отладчика показаны при работе с небольшой программой (я использовал отладчик rhide, но отладчик в Visual C++ работает очень похоже).

Выбор отладчика

В отличие от стандартизированного языка C + + , набор команд, поддерживаемый отладчиком, варьируется от производителя к производителю. К счастью, большинство отладчиков поддерживают некоторый базовый набор команд. Необходимые

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

виш их вызова.



1 ... 34 35 36 [ 37 ] 38 39 40 ... 108

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