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

Лекции по проге / 5_Пример протокола к лр 5_1

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

ПРИМЕР ПРОТОКОЛА

Лабораторная работа №5

Функции. Массивы. Отладка функции, вариант №0

ФИО

Иванов

И.И.

Группа

ИВТ-160

Преподаватель

Петров

А.А.

Срок сдачи

 

 

Оценка

 

 

Т Е С Т И Р О В А Н И Е Ф У Н К Ц И И

Формулировка

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

/*!

*Удаляет элемент массива с заданным индексом

*\param [in|out] arr - массив

*\param [in] length - длина массива [1, MAX_LENGTH]

*\param [in] index - индекс удаляемого элемента [0, length-1]

*/

void deleteElement(int arr[], int length, int index);

Перечень тестовых ситуаций

 

Ситуации

 

 

 

 

 

 

 

 

 

 

 

Входные данные

Выходные данные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.

Удаление элемента из середины

arr

1

 

2

 

3

4

 

arr = {1, 2, 3, 4}

arr = {1, 2, 4}

массива

 

 

 

 

 

 

 

 

 

 

 

length = 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

index = 2

 

2.

Удаление первого элемента

arr

 

 

 

 

 

 

 

 

 

arr = {1, 2, 3, 4}

arr = {2, 3, 4}

1

 

2

 

3

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

length = 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

index = 0

 

3.

Удаление последнего элемента в

 

 

 

 

 

 

 

 

 

 

arr = {1, 2, 3, 4, 5}

arr = {1, 2, 3, 4}

arr

 

1

2

3

4

 

5

 

массиве максимальной длины

 

 

 

 

 

 

 

 

 

 

 

length = MAX_LENGTH

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

index = MAX_LENGTH-1

 

4.

Удаление единственного

 

 

 

 

 

 

 

 

 

 

arr = {1}

arr = {}

arr

1

 

 

 

 

 

 

 

 

элемента

 

 

 

 

 

 

 

 

 

 

 

length = 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

index = 0

 

Код unit-тестирования

#include "stdafx.h"

#include "00_first_func.h" #include "testing.h" #include "for_unit_test.h"

/*!

* Тестируем функцию deleteElement */

int test_deleteElement();

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

 

{

 

// Тестирование

 

puts("Тестирование функции deleteElement ...");

 

if(test_deleteElement())

 

{

");

puts("\n----------------------------------------------------------------

puts("\nfunction correct");

 

}

 

else

 

{

");

puts("\n----------------------------------------------------------------

puts("\nfunction incorrect");

 

}

 

WAIT_ANY_KEY

 

return 0;

 

}

 

int test_deleteElement()

{

// Кол-во тестов

const int test_count = 4;

//Названия тестов (длиной не более 100 символов) char test_name[test_count][101] =

{ "Удаление элемента из середины массива", "Удаление первого элемента",

"Удаление последнего элемента в массиве максимальной длины", "Удаление единственного элемента"

};

//Входные данные для тестирования

int input_length[test_count] = { 4, 4, MAX_LENGTH, 1 }; int input_arr[test_count][MAX_LENGTH] =

{

{1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4, 5}, {1}

};

int input_index[test_count] = { 2, 0, MAX_LENGTH-1, 0 };

// Ожидаемые выходные данные

int expect_arr[test_count][MAX_LENGTH] =

{

{1, 2, 4}, {2, 3, 4}, {1, 2, 3, 4}, {}

};

// Собственно тестирование int is_Ok = 1;

int diff_index;

for(int i = 0 ; i < test_count; i++)

{

// ВЫЗЫВАЕМ ТЕСТИРУЕМУЮ ФУНКЦИЮ

deleteElement(input_arr[i], input_length[i], input_index[i]);

// СРАВНИВАЕМ ПОЛУЧЕННЫЙ РЕЗУЛЬТАТ С ЭТАЛОННЫМ НА СОВПАДЕНИЕ

diff_index = equal_array(input_arr[i], expect_arr[i], input_length[i]-1); if(diff_index > -1) // тест не пройден

{

is_Ok = 0;

//Печатаем неудачный тест ...

//...разделитель

puts("\n----------------------------------------------------------------");

// ...номер и название

printf("%d %s\n", i+1, test_name[i]);

// ...суть расхождения

printf("\nРасхождение в элементе с индексом %d: %2d >> %2d", diff_index, input_arr[i][diff_index], expect_arr[i][diff_index]);

}

}

return is_Ok;

}

 

Р Е А Л И З А Ц И Я

Ф У Н К Ц И И

Структура данных

 

 

Имя

Тип

 

Описание

arr

массив целых чисел

массив, из которого удаляются элементы

length

целое число [1, MAX_LENGTH]

длина массива arr

элемента

index

целое число [0, length-1]

индекс удаляемого

i

целое число [0, MAX_LENGTH-1]

переменная цикла,

см. таблицу циклов

Таблица циклов

Назначение цикла

Повторяющееся

Переменная цикла

Вид цикла и его

 

 

действие

Зависимые от нее переменные и формулы

параметры

 

 

 

их вычисления

 

Ц1

Передвинуть на место

Копировать элемент

i – позиция элемента-источника

цикл для

 

index удаляемого

массива из i в

(передвигаемого элемента)

index + 1 ≤ i ≤

 

элемента все

предшествующую

i-1 – позиция предшествующего элемента

 

последующие

позицию

 

length-1

Алгоритм

Код функции

#include "stdafx.h" #include "00_first_func.h"

void deleteElement(int arr[], int length, int index)

{

// Передвинуть на место удаляемого элемента все последующие for(int i = index+1; i <= length-1; i++)

{ arr[i-1] = arr[i]; }

}