8-Lesson №27

Урок №27. Диалоговая отладка программ.

Простейший метод отладки программы — это вывод отладочной информации. Рассмотрим этот способ на примере.

Программисту нужно было написать программу, которая вычисляет корни квадратного уравнения ах2 +Ьх + с = 0. Он поспешил и написал программу так:

from math import sqrt
print("Введите a, b, c: ")
a = float(input())
b = float(input())
c = float(input())
D = b*b - 4*a*a
x1 = (-b+sqrt(D))/2*a
x2 = (-b-sqrt(D))/2*a
print("x1=", x1, " x2=", x2, sep="")

Для вычисления квадратного корня здесь используется стандартная функция sqrt. Оказалось, что программа в некоторых случаях работает верно (например, при а = 1,b = 2 и с = 1), а в других случаях — неверно (например, при а = 1, b = -5 и с = 6).

Для того чтобы найти ошибку, нужно определить её возможные причины. В нашем случае есть три варианта:

  1. неверно вводятся данные;
  2. неверно вычисляется дискриминант D = b -4ас;
  3. неверно вычисляются корни 

Добавим в программу две дополнительные команды для вывода отладочной информации:

  1. выведем значения коэффициентов а, b и с сразу после ввода;
  2. выведем вычисленное значение дискриминанта.

Значения корней уравнения уже и так выводятся в конце работы программы.

a = float(input())
b = float(input())
c = float(input())
print(a, b, c)
D = b*b - 4*a*a
print("D=", D)
...

При вводе коэффициентов 1, -5 и 6 программа  выводит:


-5
6
D=21.0
х1=4.791288. х2=0.208712

По первой строке видим, что ввод выполнен правильно — именно такие числа мы вводили. А вот значение дискриминанта, вычисленного программой, отличается от того, что мы ожидаем получить: D = (-5)2 — 4*1*6 = 1. Поэтому нужно искать ошибку в выражении для вычисления D.

Если исправить эту ошибку (сделайте это самостоятельно), мы увидим, что дискриминант считается правильно, а корни уравнения — нет (при а = 1, b= -5 и с = 6 мы должны получить х1 = 3 и х2 = 2). Поэтому останется исправить ошибки в строках, где вычисляются корни.

Современные среды программирования, в том числе КуМир, АЛ ГО и PascalABC.NET, содержат встроенный отладчик, который позволяет:

  • выполнять программу в пошаговом режиме;
  • после выполнения очередной команды просматривать значения переменных в памяти;
  • устанавливать точки останова, где программа должна остановиться и перейти в пошаговый режим.

Выполнить домашнюю работу