Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по проге / Rabota_v_srede_Visual_Studio_2005

.pdf
Скачиваний:
35
Добавлен:
14.03.2016
Размер:
763.25 Кб
Скачать

Рис. 19. Наблюдение значений переменных Radius и Area

21

2.2.Требования к оформлению кода программы

2.2.1. Правила оформления кода программы

Жирным шрифтом выделены обязательные требования, остальные требования считаются дополнительными.

1.Наименования переменных должны быть смысловыми (отражать их назначение). Запрещаются однобуквенные переменные, за исключением простых переменных циклов (i, j…), а также переменных, обозначающих математические и физические понятия с устоявшимся однобуквенным обозначением (например x, y, m, F).

2.На строке с объявлением переменной должен содержаться комментарий, объясняющий ее назначение.

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

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

5.В каждой строке программы записывается не более одного оператора.

6.При применении управляющих операторов (if…else, switch…case, while, do…while, for) форматирование производится следующим образом:

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

b)Операторы, составляющие тело цикла или условия, записываются со сдвигом вправо на 4 пробела либо 1 символ табуляции относительно начала оператора цикла или условия (и фигурных скобок).

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

d)В случае оператора switch…case каждый оператор case записывается на

отдельной строчке, не содержащей более ничего. Последующие операторы (включая break) располагаются со сдвигом вправо на 4 пробела либо 1 символ табуляции.

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

22

7.Логические блоки программы предваряются строчкой комментария, описывающей назначение блока.

8.Функции предваряются комментарием по следующему образцу:

/*! <краткое описание функции>

* \param <имя параметра> <описание параметра> (для каждого параметра)

* \return <описание возвращаемого значения> (если имеется) */

Например:

/*!

*Функция возводит число a в степень b.

*\param a число, которое возводится в степень

*\param b степень, в которую возводится число

*\return результат возведения в степень

*/

long power(int a, int b)

{

...

}

2.2.2. Пример оформления кода программы

// Поиск наибольшего числа среди массива целых чисел до первого отрицательного элемента

#include "stdafx.h" #include <conio.h>

int _tmain(int argc, _TCHAR* argv[])

{

//массив, в

котором производится

поиск

int Array[10];

int i;

//индекс текущего элемента массива

int Maximum;

//найденное

значение максимального элемента

int IndexOfMax;

//номер найденного максимального

элемента

/////////////////////////////////////////////////////////////

// Ввод массива

input_printf("Введите элементы массива\n»); for(i=0; i<10; i++)

{//перебор всех элементов массива для ввода

input_printf("Введите %d-тый элемент \n",i+1); scanf("%d",&Array[i]);

}

/////////////////////////////////////////////////////////

// Нахождение максимального элемента

Maximum=-1;

// поскольку искомый элемент

положительный,

IndexOfMax=-1;

// он точно

будет

больше -1

и не найден,

// номер

элемента

может быть

i=0;

//

тогда

IndexOfMax останется -1

//

начинаем

с первого элемента

23

while(Array[i]>=0 && i<10)

{//перебираем элементы массива до первого отрицательного

if(Array[i]>Maximum)

{/* если текущий элемент больше любого из предыдущих то запоминаем его как максимальный */

Maximum=Array[i];

IndexOfMax=i;

}

i++;

}

/////////////////////////////////////////////////

//Вывод результатов if(IndexOfMax==-1)

//элемент не найден

printf("Массив начинается с отрицательного числа\n");

else

{// элемент найден

printf(" Искомый элемент - %d \n", Maximum);

printf(" Его номер - %d \n", IndexOfMax + 1);

}

/////////////////////////////////////////////////////////

// Задержка результатов на экране до нажатия клавиши Enter _getch();

return 0;

}

2.3. Aвтотестирование программы

2.3.1. Принцип использования автотестера

Автотестер подает на вход тестируемой программы исходные данные. Считывает выходные данные, формируемые программой. Сравнивает выходные данные с эталонными значениями. Для тестирования одной программы исползуется от 5 до 30 наборов входных и выходных данных. Если тестируемая программа не работает хотя бы на одном тесте, то она возвращается на доработку

2.3.2. Подготовка программы к автотестированию

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

24

Шаг 1. Ввести исходный код программы.

#include "stdafx.h" #include <conio.h>

/* Вычисление длины окружности и площади круга */ int _tmain(int argc, _TCHAR* argv[])

{

float Radius;

// радиус окружности

float Length;

// длина окружности

float Area;

// площадь окружности

// Вводим радиус окружности printf("Input Radius: "); scanf("%f", &Radius); if(Radius < 0)

{

printf("Invalid radius!!!");

}

else

{

//Рассчитываем длину окружности и площадь круга Length= 2*3.1415*Radius;

Area= 3.1415*Radius*Radius;

//Отображаем длину окружности и площадь круга

printf("\nRadius= %.2f\nCircle length= %.2f\nCircle area= %.2f", Radius,Length,Area);

}

// Приостановка окна вывода _getch();

return 0;

}

Шаг 2. Скопировать файл testing.h в папку с исходными файлами вашего проекта и подключить его к главному cpp файлу с помощью команды #include.

Шаг 3. Модифицировать исходный код программы в соответсвии со следующими правилами:

1)вставить в начало функции main (после объявления переменных) макрос MAIN_TESTING;

2)при печати сообщений о том, что необходимо ввести (приглашений ко вводу) использовать input_printf вместо printf.

3)при печати сообщений о некорректных входных данных использовать error_printf вместо printf;

4)при необходимости задержки до нажатия клавиши в конце программы использовать макрос

WAIT_ANY_KEY.

#include "stdafx.h"

 

 

#include

<conio.h>

 

 

#include

"testing.h"

// Подключить библиотеку для

 

 

//

использования макросов input_printf,

 

 

//

error_printf и т.д

/* Вычисление длины окружности и площади круга */ int _tmain(int argc, _TCHAR* argv[])

{

25

float Radius;

// радиус окружности

 

float Length;

// длина окружности

 

float Area;

// площадь окружности

MAIN_TESTING

 

// Использовать главный макрос

// Вводим радиус окружности

// Во всех прииглашениях ко вводу

input_printf("Input Radius: ");

 

 

// данных функцию printf заменить на

 

 

// input_printf

scanf("%f", &Radius);

// Каждое входное значение вводится с помощью

 

 

// отдельной команды scanf

if(Radius < 0)

{

error_printf("Invalid radius!!!");// Сообщения о неверных входных данных

// выводить с помощью макроса error_printf

}

else

{

//Рассчитываем длину окружности и площадь круга Length= 2*3.1415*Radius;

Area= 3.1415*Radius*Radius;

//Отображаем длину окружности и площадь круга

printf("\nRadius= %.2f\nCircle length= %.2f\nCircle area= %.2f",

Radius, Length,Area);

}

 

// Приостановка окна вывода

// Ждать нажатие клавиши

WAIT_ANY_KEY

return 0;

 

}

Шаг 4. В настройках проекта задать свойству проекта Configuration properties > General > Character Set значение Not Set, а свойству Configuration properties > С/С++ > Code Generation > Runtime Library − значение Multi-threaded Debug (/MTd).

Шаг 5. Создать исполняемый файл и задать ему название FIO_LabN.exe, N – номер лабораторной работы, например, IvanovAB_Lab1.exe.

2.4. Правила подготовки вопросов преподавателю

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

1.Если при компиляции программы выдается непонятная вам ошибка:

a)переведите сообщение об ошибке на русский язык (при необходимости воспользуйтесь

26

словарем);

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

c)если ошибка кажется вам не связанной с пройденным материалом, проверьте, выполнили ли вы все действия по настройке проекта, описанные выше (неправильно настроенный проект приведет к непонятным вам ошибкам);

d)если причина ошибки, тем не менее, не ясна, сформулируйте вопрос, указав место и форму ошибки (как вы ее поняли), задавая вопрос обязательно имейте методический и лекционный материал по теме вопроса (и смежным темам).

2.Если программа аварийно прекращает свою работу с выдачей сообщения:

a)переведите сообщение об ошибке на русский язык (при необходимости воспользуйтесь словарем);

b)с помощью пошагового выполнения (см. пункт «Изучение работы программ при помощи трассировки») определите строку, в которой возникает ошибка, и значения переменных в ней;

c)попытайтесь понять причину ошибки на основе обнаруженных данных;

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

3.Если программа работает неправильно:

a)напишите структуру данных и словесный алгоритм программы, если вы еще этого не сделали;

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

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

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

3. Порядок выполнения работы

3.1. Самостоятельная работа студента

Предварительной самостоятельной работы студента не предполагается.

27

3.2.Аудиторная работа студента

1.Получить у преподавателя индивидуальное задание — файл с исходным кодом программы и входные данные для программы. Исходный код программы не отформатирован и содержит в себе синтаксические ошибки.

2.Создать консольный проект для языка Си с названием FIO_Lab1.exe в папке

...\Lab1_ФамилияСтудента . Выполнить необходимые настроки проекта.

3.Скопировать в файл FIO_Lab1.cpp выданный исходный код приложения.

4.Отформатировать исходный код приложения по правилам, приведенным в п. 2.2.

5.Создать исполняемый файл приложения. Если возникли синтаксические ошибки, то исправить их.

6.Используя справочную службу, найти заголовочные файлы, в которых описаны используемые стандартные функции, и подключить их к исходному коду программы.

7.После создания исполняемого файла выполнить пошаговую тарссировку программы и создать трассу программы в электронном виде (см. п. 4).

8.Согласно п.2.3 подготовить программу к автотестированию и сдать преподавателю на проверку.

4. Содержание отчета

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

Пример трассы см. в приложении 1.

5.Форма контроля

1)проверка правильности форматрования кода программы;

2)проверка последовательности шагов в трассе программы;

3)проверка автотестером работоспособности программы.

6.Литература

1)Справочная служба MSDN Library – [Электронный ресурс] .

28

Приложение 1. Пример трассы вычислений

29