Как было показано в предыдущем разделе на примере программы, преобразующей массив целых чисел, приложение может собираться и работать, но не выполнять полностью того, что ему полагается делать. Это означает, что текст программы не соответствует спецификации поставленной задачи и содержит логическую ошибку, а возможно, сразу и несколько логических ошибок.
Из всех категорий ошибок логические ошибки найти наиболее трудно, так как они берут свое начало в ошибочном рассуждении при поиске решения задачи. Такие ошибки обнаруживаются на этапе выполнения программы и приводят к неверным результатам, к остановке или «зависанию» приложения. Это делает необходимым тестирование приложения с различными наборами данных. Только тщательное тестирование на самых разнообразных значениях данных может дать на практике гарантию того, что приложение не содержит логических ошибок.
Самым простым способом локализации логической ошибки является пошаговое прослеживание результатов выполнения всех операторов программы. При отладке приложения в VS можно отображать значения указанных переменных или выражений в любой точке программы.
Вычисленные значения можно, сравнивать с теми, что должны быть, и если обнаруживается несоответствие, то, логическая ошибка локализована.
Начало сеанса отладки
Первый шаг отладки приложения – это выбор команды Start Debugging (F5) на стандартной панели инструментов или в меню Debug, после чего приложение запускается в режиме отладки.
Перед началом отладки целесообразно определить то место в программе, где возможна ошибка. Это, как правило, позволяет существенно сократить время, затрачиваемое на поиски ошибки. В примере 2 ошибка может содержаться в том фрагменте программы, который изменяет значения элементов массива после их ввода с клавиатуры.
Установка точек останова
Для того чтобы отладчик прерывал выполнение программы на определенной строке, необходимо установить на этой строке точку останова. Точка останова – это просто место (например, строка с оператором программы), которое помечено для отладчика и отображается красным кружком в поле индикаторов (узкое поле серого цвета с левого края окна редактора кода). Когда отладчик встречает точку останова, то выполняющаяся программа моментально останавливается (до выполнения данной строки кода).
Установить точку останова на какой-либо строке кода можно при помощи щелчка по полю индикаторов данной строки (рис. 16). Либо можно установить курсор на нужной строке и нажать клавишу F9.
Рисунок 16.Установка точки останова
Просмотр данных в отладчике
Когда выполнение программы в сеансе отладки приостановлено (например, при помощи точки останова), можно изучить состояние и содержимое ее переменных и объектов. Для этого в VS можно использовать три вида окон: Local (Локальные), Autos (Видимые) и Watch (Контрольные).
Доступ к окнам можно получить нажав Debug->Windows->выбрать нужное окно(Рис. 17)
Рисунок 17. Доступ к окнам
Окно Local показывает все переменные и их значения для текущей области видимости отладчика. Это дает вам представление обо всем, что имеется в текущей выполняющейся функции. Переменные в этом окне организованы в список и автоматически настраиваются отладчиком. На рис. 18 показан пример окна Local. С его помощью можно увидеть приложение нашего примера, которое приостановлено до обнуления соответствующих элементов массива. Обратите внимание, что объект (массив) a развернут для того, чтобы показать значения его элементов в момент остановки выполнения программы. По мере установки значений результаты будут отображаться в столбце Value.
Однако очень часто просмотр всех локальных переменных дает слишком много информации, чтобы в ней можно было разобраться. Так может происходить тогда, когда в области видимости данного процесса или функции находится слишком много операторов. Для того
чтобы увидеть значения, связанные с той строкой кода, на которую вы смотрите, можно использовать окно Autos. Это окно показывает значения всех переменных и выражений, имеющихся в текущей выполняющейся строке кода или в предыдущей строке кода. На рис. 19
показано окно Autos для той же самой строки кода, которая показана на рис. 18. Обратите внимание на разницу.
Окна Watch в VS позволяют настраивать собственный список переменных и выражений, за которыми нужно наблюдать (рис. 20). Окна Watch выглядят и ведут себя точно так же, как и окна Local и Autos. Кроме того, те элементы, которые вы размещаете в окнах Watch, сохраняются между сеансами отладки.
Рисунок 18. Окно Local
Рисунок 19. Окно Autos
Вы получаете доступ к окнам Watch из меню или панели инструментов Debug (рис. 17). Четыре окна Watch (которые называются Watch 1, Watch 2, Watch 3 и Watch 4) позволяют настроить четыре списка элементов, за которыми необходимо наблюдать. Эта возможность может быть особенно полезна в том случае, когда каждый список относится к отдельной области видимости вашего приложения.
Переменную или выражение в окно Watch 1 можно добавить из редактора кода. Для этого в редакторе кода выделите переменную (или выражение), щелкните по ней правой кнопкой мыши и выберите пункт Add Watch. При этом выделенная переменная (или выражение) будет помещена в окно Watch 1. Вы можете также перетащить выделенный элемент в это окно.
Рисунок 20. Окно Watch 1
Пошаговое прохождение для поиска ошибки
После того как в нашем примере отладчик, встретив точку останова, прервал выполнение программы, далее можно выполнять код по шагам (режим трассировки). Для этого можно выбрать команду Step into на панели инструментов Debug или нажать функциональную клавишу F11(Рис. 21). Это приведет к последовательному выполнению кода по одной строке, что позволит вам видеть одновременно и ход выполнения приложения, и состояние объектов программы по мере выполнения кода. Команда Step into (F11) позволяет продвигаться по коду по одной строке. Вызов этой команды выполнит текущую строку кода и поместит курсор на следующую выполняемую строку. Важное различие между Step into и другими похожими командами состоит в
том, как Step into обрабатывает строки кода, в которых содержатся вызовы функций. Если вы находитесь на строке кода, которая вызывает другую функцию программы, то выполнение команды Step into перенесет вас на первую строку этой функции.
Если сделать так в нашем примере, то вы увидите ошибку: обнуление элементов массива должно начинаться не с элемента с индексом i1, а со следующего элемента i1+1.
Команда Step out (F10) позволяет вам сохранять фокус в текущей функции (не заходя в вызываемые ею подпрограммы), т. е. вызов Run out приведет к выполнению строки за строкой, но не заведет вас в вызовы функций и при этом следующей выполняемой
строкой для пошагового прохождения станет следующая за вызовом функции строка.
Рис 21. Команда Step Into
Одной из более удобных (и часто упускаемых) функциональных возможностей набора инструментов отладки является функция Run to cursor ( Выполнить до текущей позиции). Она работает в полном соответствии со своим названием. Вы устанавливаете курсор на некий код и вызываете эту команду. Приложение компилируется и выполняется до тех пор, пока не доходит до той строки, где находится курсор. В этой точке отладчик прерывает приложение и выдает вам эту строку кода для пошагового прохождения. Рис. 22.
Рисунок 22. Вызов команды Run To Cursor
Продолжить отладку после точки останова можно повторным нажатием на кнопку F5 (Start Debugging).
Рисунок 23. Результат работы программы после исправления ошибки
Рассмотрим пошаговое выполнение программы с использованием окна Watch на простейшем примере.
Пример.
#include "stdafx.h"
#include "conio.h"
int _tmain(int argc, _TCHAR* argv[])
{
int a,S,i,b;
a=0;
b=0;
i=0;
S=1;
do
{
a=a+1;
b=b+2;
S=(S*a)+(S/b);
i++;
}while(i<5);
printf("%d",S);
getch();
return 0;
}
Запускаем трассировку(Step Into) нажатием F11 либо Debug>Step Into. Открываем окно Watch(Debug>Windows>Watch>Watch1). Переход на следующий шаг осуществляется нажатием кнопки F11.
Рисунок 24. Окно редактора кода в начале трассировки.
Рисунок 25. Значение переменных перед первым прохождением цикла
Рисунок 26. Окно редактора кода перед первым прохождением цикла
Рисунок 27. Значения переменных после выполнения операции а=а+1
Рисунок 28. Значения переменных после выполнения операции b=b+2
Рисунок 29. Значения переменных после выполнения операции S=(S*a)+(S/b)
Рисунок 30. Значения переменных после выполнения операции i++
Рисунок 31. Значения переменных после прохождения цикла
Рисунок 32. Вывод итогового значения на экран
ПРИЛОЖЕНИЕ 1
ТАБЛИЦА НАИБОЛЕЕ ЧАСТО ДОУСКАЕМЫХ ОШИБОК
Описание ошибки в Error List
Вероятная проблема
Исправление
error C2146: syntax error : missing ';' before identifier 'printf'
Пропущена ; перед идентификатором printf
Поставить ; в конце предыдущей операции
error C3861: 'scnf': identifier not found
Идентификатор не найден
Ввести правильное имя функции(в нашем случае scanf)
error C2143: syntax error : missing ']' before ')'
Пропущена квадратная скобка ] перед скобкой )
Закрыть квадратную скобку
error C2065: 'i1' : undeclared identifier
Не объявлен тип переменной
Объявить тип используемой переменной(int, float и т.д.)
error C2146: syntax error : missing ')' before identifier 'a'
Пропущена скобка ) перед идентификатором а
Закрыть скобку )
fatal error C1075: end of file found before the left brace '{
Конец файла находящегося перед левой фигурной скобкой {
Закрыть фигурную скобку(для исправления этой ошибки нужно внимательно проверить код программы. В случае установки скобки в неверном месте, компилятор эту ошибку не увидит и программа будет работать не правильно)
ПРОСТРАНСТВЕННО-ПЛАНИРОВОЧНАЯ СТРУКТУРА ГОРОДА
Характер обновления городской среды последовательно меняется по мере удаления от исторического ядра города. С позиций режима реконструкции его территорию районируют.
Рис. 1.5. Схема пространственно-планировочной структуры города:
1— охранная зона исторического центра; 2 — зона регулирования исторической застройки; 3 — сложившаяся промышленно-жилая зона; 4 — планировочные зоны, имеющие историко-архитектурные ограничения; 5 — то же, не имеющие; 6—центры планировочных зон; 7—направления приоритетного развития территории города.
Примером такого районирования является схема на рис. 1.5. К первому району, где расположена охранная зона, относят ядро центра крупного города с историческим ландшафтом. Здесь допустимы незначительные преобразования локального характера, не нарушающие изначально заложенные внешние свойства планировки и застройки.
Как правило, необходима разборка малоценных строений позднего периода для обеспечения обзора и скрытая реконструкция — преобразование внутриквартальных участков, не влияющее на внешний облик улиц и площадей.
Во второй район с зонами регулирования включают периферию центрального ядра. Здесь возможны упорядочение планировочных систем и создание новых архитектурных комплексов, но при условии гармоничного сочетания старого с новым. Эти мероприятия, как правило, преследуют цели санации среды. Некоторые заброшенные, застроенные малоценными домами или освобождающиеся за выносом вредных предприятий участки осваиваются вновь. В некоторых случаях допускают значительные преобразования, но с применением традиционных для данного города методов формирования застройки, например квартальной со зданиями по периметру.
В третьей зоне, обычно являющейся промышленным поясом, не действуют строгие ограничения охраны исторической среды, за исключением вкрапленных участков отдельных архитектурных ансамблей. Здесь требуется радикальная модернизация промышленности и жилья с его санацией.
Функционально-планировочная структура города.
Территория города по функциональному назначению и характеру использования подразделяется на ряд крупных зон: селитебную, промышленную, коммунально-складскую, внешнего транспорта и ландшафтно-рекреационную. В ДБН 360-92 приводится такое подразделение: селитебная, производственная (куда входят промышленные, коммунальные предприятия, склады, объекты внешнего транспорта) и ландшафтно-рекреационная.
Селитебная территориявключает участки жилых домов, общественных зданий и сооружений, в т.ч. учебных, проектных, научно-исследовательских и других институтов (без опытных производств), внутриселитебную улично-дорожную и транспортную сеть, площади, объекты зеленого строительства (парки, сады, бульвары, скверы) и отдыха, отдельные коммунальные и промышленные объекты, не требующие устройства санитарно-защитных зон (СЗЗ).
Производственная территорияпредназначена для размещения промышленных предприятий и связанных с ними производственных объектов; комплексов НИИ с их опытными производствами; коммунально-складских объектов; предприятий по производству и переработке с/х продукции; СЗЗ промышленных предприятий и коммунальных объектов; объектов спецназначения (для нужд обороны); сооружений внешнего транспорта и путей внегородского и пригородного сообщения, внутригородской улично-дорожной и транспортной сети (АТП, гаражи, АЗС, СТО и др.).
Ланшафтно-рекреационная территория включает озелененные и водные пространства и другие элементы природного ландшафта в пределах городской черты (парки, сады, лесопарки, городские леса, охраняемые ландшафты, с/х и другие угодья), которые формируют систему открытых пространств (природный каркас города), связанных с пригородными и загородными зонами кратковременного и длительного отдыха, включая курортные зоны.
Планировочная структура города формируется вокруг центра в результате взаиморазмещения различных функциональных зон и их объектов с учетом природно-климатических и санитарно-экологических требований и условий, на основе трех городских систем: улично-дорожной (траспортной) сети, культурно-бытового обслуживания (КБО), зеленых насаждений общего пользования (отдыха).
Главным санитарным требованием является размещение селитебной зоны с наветренной стороны относительно промышленных зон и выше по течению реки при соблюдении соответствующих СЗЗ.
Большую роль в формировании планировочной структуры города играют основные композиционные оси плана: пойма реки или водохранилище, магистральные улицы города. Чем шире река и чем меньше город, тем целесообразнее его развивать на одном высоком берегу (по экономическим соображениям). В этом случае общественный центр города (городская площадь, административные здания и др.) смещаются от геометрического центра городской территории в сторону водоема или непосредственно на его берег.
В планировочной практике различают следующие формы плана города:
- компактную;
- расчлененную (при наличии реки, крупного оврага, железной дороги);
- рассредоточенную с примерно равновеликими жилыми массивами или с выделением преобладающего по своей величине основного жилого массива;
- линейную;
- комбинированную.
ЛЕКЦИЯ №3 (ВОПРОСЫ 5-15) .СТРУКТУРА КАЧЕСТВА ЖИЛОЙ ЗАСТРОЙКИ
С точки зрения философии и психологии первичные потребности человека вытекают из интуитивных нужд организма и определенного видения проблемы личностью. Отсутствие в жилой среде обитания некоторых свойств вызывает различные заболевания, а полноценная среда является не только непременным условием физического и психического здоровья, но и стимулирует также философские абстракции‚как потребность в красоте, истине и самовыражении.
Жилая застройка с ее окружением — это природно-антропогенная система, созданная для жизнедеятельности людей: сна, питания, работы на дому, пассивного и активного отдыха.
Качествожилой застройки - это совокупность свойств, характеризующих степень пригодности зданий к использованию по назначению и удовлетворения запросов потребителя.
Оценка качества жилой застройки базируется на методахквалиметрии (лат. qualis — какого качества) — науки, корнями своими уходящей в гуманитарные, медико-санитарные, экологические, специальные инженерные и архитектурно-планировочные дисциплины.
Структура качества жилой застройки представляется в виде «дерева свойств» (рис.1).
Рис. 1. Структура качества жилой застройки
Методы квалиметрии базируются на классификации свойств качества по уровням.
Показатели свойств рассматривают на различных уровнях. На верхнем находится интегральное понятие качества, на других от уровня к уровню его последовательно расчленяют на частные, уточняя содержание этого собирательного термина. Например, на втором уровне показатели комфортности сочетают с рациональностью, существенным фактором которой является экономичность. Комфортность часто вступает в противоречие с этим фактором: повышение качества требует дополнительных затрат.
На следующем уровне расшифровывают собирательные понятия. Так, капитальность ассоциируют с общественным значением застройки и концентрацией в ней материальных ценностей, но прежде всего с долговечностью. В свою очередь критерии комфортности делят на три группы показателей: гигиены, функциональности и безопасности.
На самом высоком уровне критерии свойств стремятся выразить численно. Это позволяет четко ограничить пределы оптимальности показателей, дать точную и беспристрастную их оценку, а не качественную, страдающую субъективностью и поэтому приблизительную.