Программирование сверху вниз. Основной из схем разработки программ является метод программирования сверху вниз (ПСВ), согласно которому следует постепенно детализировать общий замысел работы программы, доводя его до детального описания программы. Пусть требуется написать программу для решения некоторой задачи A. Если задача простая и мы сразу видим во всех деталях, как ее решать, то надо сразу и писать программу ее решения. Но обычно задача сложная и все детали ее решения не видны. Поэтому следует свести эту задачу к более простым подзадачам (ПЗ), скажем, к подзадачам B, C и D (рис. а). A BCD рис. а
Если решения этих ПЗ очевидны, тогда пишем программы их решения и затем объединяем эти решения в единую программу решения всей исходной задачи. Однако некоторые ПЗ, например C, могут оказаться сложными, тогда и их надо свести к подзадачам, скажем, к подподзадачам C1 и C2 (рис. б). Тем самым мы еще более детализировали исходную задачу. Если новые ПЗ снова сложны, то и их детализируем, и т.д. A BCD C1C2 рис. б ПСВ - это постепенная детализация общего замысла работы программы вплоть до детального описания ее работы. Отсюда и другие названия ПСВ - пошаговая детализация, нисходящее проектирование.
Достоинства В чем выгода такой пошаговой детализации? 1) Прежде всего, в систематичности такого подхода к решению сложных задач. Здесь мы четко знаем, что нам надо делать на каждом этапе - надо разбить задачу на более простые ПЗ. Это знание делает нашу деятельность более целенаправленной, упорядочивает ее, сокращает время. 2) Кроме того, пошаговая детализация очень хорошо учитывает особенности человеческой памяти, которая устроена так, что не может охватить сразу массу деталей, частностей. При ПСВ же мы на каждом шаге вводим только небольшое число новых деталей, т.к. каждая очередная задача разбивается обычно на десяток новых ПЗ, а это количество наше внимание способно охватить целиком. 3) К тому же, когда мы детализируем некоторую ПЗ, то при этом нам не надо следить за другими ПЗ - каждая ПЗ детализируется независимо от других ПЗ. Поэтому в каждый момент наше внимание сосредоточено не на всех задачах и подзадачах в целом, а только на каком-то отдельном пункте. Так что метод пошаговой детализации действительно неплохо учитывает особенности человеческой памяти.
Дана система линейных уравнений n-го порядка (n=20): a 11 *x 1 + a 12 *x a 1n *x n = b 1 a 21 *x 1 + a 22 *x a 2n *x n = b 2 det A 0... a n1 *x 1 + a n2 *x a nn *x n = b n или в векторном виде: Ax=b. Считаем, что определитель системы (det A) не равен 0, поэтому система имеет решение и притом единственное. Требуется написать программу на Паскале для решения этой задачи. Метод Гаусса Пусть дана система 3-го порядка (рис. а): 2x 1 - x 2 +x 3 =3 |*3 |*1 2x 1 - x 2 + x 3 = 3 2x 1 - x 2 + x 3 = 3 3x 1 +2x 2 -x 3 =4 |*2 ==> 7x 2 -5x 3 =-1 |*3 ==> 7x 2 -5x 3 =-1 x 1 + x 2 +x 3 =6 |*2 3x 2 + x 3 = 9 |*7 22x 3 =66 а) б) в)
1-й шаг детализации Это шаг очевиден: чтобы решить задачу, надо прежде всего будет ввести исходные данные, потом привести систему к треугольному виду, затем решить эту треугольную систему и, наконец, вывести результатов. Запишем все сказанное в следующем виде: begin ввод исходных данных; приведение системы к треугольному виду; решение треугольной системы; вывод результатов end
2-й шаг детализации: begin {ввод исходных данных} ввод А; ввод В; {приведение системы к треугольному виду} for i:=1 to n-1 do begin if A[i,i]=0 then begin поиск k-го уравнения с A[k,i] 0; перестановка i-го и k-го уравнений end; for k:=i+1 to n do исключение x[i] из k-го уравнения end; {решение треугольной системы} for i:=n downto 1 do вычисление x[i]; {вывод результатов} вывод х end
Тестирование Способы проверки программ 1. Проверка за столом. 2. Верификация. 3. Тестирование. Тестом называется задача с известным ответом, т.е конкретные исходные данные плюс ответ, который должен быть у задачи при этих данных. Проверка за столом означает следующее: вы садитесь за стол, кладете перед собой текст программы и «прокручиваете» программу в уме, т.е. мысленно выполняете оператор за оператором и сопоставляете то, что должна делать программа, с тем, что она делает согласно написанному тексту. Верификация - это проверка правильности программ с помощью формальных рассуждений, это нечто вроде доказательства теорем: с помощью логических методов доказывается, что программа действительно делает то, что она и должна делать, что она не содержит ошибок.
. Пусть программа должна возводить в квадрат: y=x 2, и пусть эта программа написана так: read(x); if x<>6.079 then y:=x*x else y:=1.2; writeln(y); Стратегии тестирования : 1. Стратегия черного ящика 1) Метод эквивалентных классов 2) Метод анализа граничных значений 2. Стратегия белого ящика 1) Метод покрытия операторов 2) Метод покрытия переходов (условий) 3) Метод покрытия маршрутов Отладка Отладка состоит из трех этапов: 1) определение места ошибки; 2) определение причины ошибки; 3) исправление ошибки.