Advertisement
BanyRule

Тесты и функции

Sep 21st, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.92 KB | None | 0 0
  1. // (づ°ω°)づミe★゜・。。・゜゜・。。・゜☆゜・。。・゜゜・。。・゜
  2. #define _CRT_SECURE_NO_WARNINGS 1
  3. #include <stdio.h>
  4. #include <assert.h>
  5.  
  6. // *****************************************************************************************
  7. // TODO Реализовать функцию
  8. // Вернуть индекс минимального элемента, или -1, если массив пустой
  9. int find_min(int array[], int size) {
  10.     int i = 0;
  11.     int min = 0;
  12.     int min_index = 0;
  13.  
  14.     if ((size == 0) || (array == NULL))
  15.         return -1;
  16.  
  17.     min = array[0];
  18.     for (i = 0; i < size; ++i) {
  19.         if (array[i] < min) {
  20.             min = array[i];
  21.             min_index = i;
  22.         }
  23.     }
  24.  
  25.     return min_index;
  26. }
  27.  
  28. // TODO Реализовать функцию
  29. // Вычислить среднее арифметическое массива, принимает только непустой массив
  30. float calculate_avg(int array[], int size) {
  31.     float sum = 0;
  32.     int i = 0;
  33.  
  34.     if ((size == 0) || (array == NULL))
  35.         return -1;
  36.  
  37.     for (i = 0; i < size; ++i) {
  38.         sum += array[i];
  39.     }
  40.    
  41.     return sum / size;
  42. }
  43.  
  44. // TODO Реализовать функцию
  45. // Отсортировать массив методом пузырька
  46. void bubble_sort(int array[], int size) {
  47.  
  48.     if (!(size && array))
  49.         return;
  50.  
  51.     int i = 0;
  52.     int j = 0;
  53.     int temp = 0;
  54.  
  55.     for (i = 0; i < size - 1; i++)
  56.         for (j = size - 2; j >= i; j--)
  57.             if (array[j] > array[j + 1])
  58.             {
  59.                 temp = array[j];
  60.                 array[j] = array[j + 1];
  61.                 array[j + 1] = temp;
  62.             }
  63. }
  64.  
  65. // TODO Реализовать функцию
  66. // Поменять порядок элементов в массиве на противоположный
  67. void reverse_array(int array[], int size) {
  68.     int i = 0;
  69.     int j = 0;
  70.     int temp = 0;
  71.  
  72.     if (!(size && array))
  73.         return;
  74.  
  75.     for (i = 0; i < size / 2; ++i) {
  76.         temp = array[i];
  77.         array[i] = array[size - (i + 1)];
  78.         array[size - (i + 1)] = temp;
  79.     }
  80.  
  81.        
  82. }
  83.  
  84. // *****************************************************************************************
  85. // Тесты для написанных функций
  86. #define ARR_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))
  87.  
  88. void test_min() {
  89.     {
  90.         int array[] = { 1, 2, 3 };
  91.         assert(0 == find_min(array, ARR_SIZE(array)));
  92.     }
  93.     {
  94.         int array[] = { 1, -2, 3 };
  95.         assert(1 == find_min(array, ARR_SIZE(array)));
  96.     }
  97.     {
  98.         int array[] = { 3, 2, 1 };
  99.         assert(2 == find_min(array, ARR_SIZE(array)));
  100.     }
  101.     {
  102.         int empty[] = { 1 };
  103.         assert(-1 == find_min(empty, 0));
  104.     }
  105.     {
  106.         assert(-1 == find_min(NULL, 2));
  107.     }
  108.    
  109. }
  110.  
  111. void test_avg() {
  112.     {
  113.         int single[] = { 1 };
  114.         assert(1 == calculate_avg(single, ARR_SIZE(single)));
  115.     }
  116.     {
  117.         int several[] = { 1, 3, 5, 7 };
  118.         assert(4 == calculate_avg(several, ARR_SIZE(several)));
  119.     }
  120.     {
  121.         int odd[] = { 2, 4, 6 };
  122.         assert(4 == calculate_avg(odd, ARR_SIZE(odd)));
  123.     }
  124.     {
  125.         int nonint[] = { 1, 2, 3, 4, 5 };
  126.         assert((1 + 2 + 3 + 4 + 5) / 5 == calculate_avg(nonint, ARR_SIZE(nonint)));
  127.     }
  128. }
  129.  
  130. // Запустить сортировку пузырьком и проверить на отсортированность
  131. int test_bubble_sample(int array[], size_t size) {
  132.     bubble_sort(array, size);
  133.     for (size_t i = 0; array && size && i < size - 1; i++) {
  134.         if (array[i] > array[i + 1]) {
  135.             printf("FAIL: Array is not sorted at element %d: %d > %d\n", i, array[i], array[i + 1]);
  136.             return 0;
  137.         }
  138.     }
  139.     return 1;
  140. }
  141.  
  142. void test_bubble() {
  143.     {
  144.         int simple[] = { 1, 3, 2, 5, 4 };
  145.         assert(test_bubble_sample(simple, ARR_SIZE(simple)));
  146.     }
  147.     {
  148.         int reverse[] = { 5, 4, 3, 2, 1 };
  149.         assert(test_bubble_sample(reverse, ARR_SIZE(reverse)));
  150.     }
  151.     {
  152.         int empty[] = { 1 };
  153.         assert(test_bubble_sample(empty, 0));
  154.         assert(test_bubble_sample(NULL, 4));
  155.     }
  156. }
  157.  
  158. // Запустить обращение массива и проверить результат
  159. int test_reverse_sample(int array[], size_t size, int expected[]) {
  160.     reverse_array(array, size);
  161.     if (!array || !size) {
  162.         return 1;
  163.     }
  164.     for (size_t i = 0; i < size; i++) {
  165.         if (array[i] != expected[i]) {
  166.             printf("FAIL: Difference in element %d: got %d vs expected %d\n", i, array[i], expected[i]);
  167.             return 0;
  168.         }
  169.     }
  170.     return 1;
  171. }
  172.  
  173. void test_reverse() {
  174.     {
  175.         int rising[] = { 1, 2, 3, 4, 5 };
  176.         int expected[] = { 5, 4, 3, 2, 1 };
  177.         assert(test_reverse_sample(rising, ARR_SIZE(rising), expected));
  178.     }
  179.     {
  180.         int single[] = { 1 };
  181.         int expected[] = { 1 };
  182.         assert(test_reverse_sample(single, ARR_SIZE(single), expected));
  183.     }
  184.     {
  185.         int random[] = { 1, 3, 2, 9, 0 };
  186.         int expected[] = { 0, 9, 2, 3, 1 };
  187.         assert(test_reverse_sample(random, ARR_SIZE(random), expected));
  188.     }
  189.     {
  190.         int empty[] = { 1 };
  191.         assert(test_reverse_sample(empty, 0, empty));
  192.         assert(test_reverse_sample(NULL, 5, NULL));
  193.     }
  194. }
  195.  
  196. // *****************************************************************************************
  197.  
  198. void main() {
  199.     test_min();
  200.     test_avg();
  201.     test_bubble();
  202.     test_reverse();
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement