Лекции по проге / 5_Пример протокола к лр 5_1
.pdf
ПРИМЕР ПРОТОКОЛА
Лабораторная работа №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]; }
}
