Advertisement
kutuzzzov

Задачи на 9 июня

Jun 9th, 2025 (edited)
625
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.33 KB | None | 0 0
  1. Задача 1 с решением:
  2.  
  3. #include <cassert>
  4. #include <iostream>
  5.  
  6. // Функция для тестирования
  7. int factorial(int n) {
  8.     if (n < 0) {
  9.         std::cerr << "Error: Factorial is not defined for negative numbers\n";
  10.         return -1; // Возвращаем ошибочное значение
  11.     }
  12.     int result = 1;
  13.     for (int i = 1; i <= n; ++i) {
  14.         result *= i;
  15.     }
  16.     return result;
  17. }
  18.  
  19. // Функция для запуска тестов
  20. void runTests() {
  21.     std::cout << "Running tests...\n";
  22.  
  23.     // Тест 1: Минимальное значение (0)
  24.     assert(factorial(0) == 1); // По определению, 0! = 1
  25.  
  26.     // Тест 2: Маленькое положительное число
  27.     assert(factorial(1) == 1);
  28.  
  29.     // Тест 3: Большое число (проверка на переполнение)
  30.     if (factorial(20) < 0) {
  31.         std::cerr << "Test failed: Overflow occurred\n";
  32.         assert(false);
  33.     }
  34.  
  35.     // Тест 4: Отрицательное число
  36.     if (factorial(-5) != -1) {
  37.         std::cerr << "Test failed: Negative input not handled correctly\n";
  38.         assert(false);
  39.     }
  40.  
  41.     std::cout << "All tests passed!\n";
  42. }
  43.  
  44. int main() {
  45.     runTests();
  46.     return 0;
  47. }
  48.  
  49. Задача 2 с решением:
  50. #include <cassert>
  51. #include <vector>
  52. #include <iostream>
  53.  
  54. // Функция для тестирования
  55. int findMax(const std::vector<int>& nums) {
  56.     if (nums.empty()) {
  57.         std::cerr << "Error: Cannot find max in an empty array\n";
  58.         return -1; // Возвращаем ошибочное значение
  59.     }
  60.     int maxVal = nums[0];
  61.     for (int num : nums) {
  62.         if (num > maxVal) maxVal = num;
  63.     }
  64.     return maxVal;
  65. }
  66.  
  67. // Функция для запуска тестов
  68. void runTests() {
  69.     std::cout << "Running tests...\n";
  70.  
  71.     // Тест 1: Пустой массив
  72.     if (findMax({}) != -1) {
  73.         std::cerr << "Test failed: Empty array not handled correctly\n";
  74.         assert(false);
  75.     }
  76.  
  77.     // Тест 2: Массив с одним элементом
  78.     assert(findMax({42}) == 42);
  79.  
  80.     // Тест 3: Обычный массив
  81.     assert(findMax({1, 2, 3, -1, 5}) == 5);
  82.  
  83.     // Тест 4: Массив с отрицательными числами
  84.     assert(findMax({-10, -20, -5, -1}) == -1);
  85.  
  86.     std::cout << "All tests passed!\n";
  87. }
  88.  
  89. int main() {
  90.     runTests();
  91.     return 0;
  92. }
  93.  
  94. Задача 3 с решением:
  95. #include <cassert>
  96. #include <string>
  97. #include <iostream>
  98.  
  99. // Функция для тестирования
  100. std::string reverseString(const std::string& str) {
  101.     std::string reversed;
  102.     for (int i = str.size() - 1; i >= 0; --i) {
  103.         reversed += str[i];
  104.     }
  105.     return reversed;
  106. }
  107.  
  108. // Функция для запуска тестов
  109. void runTests() {
  110.     std::cout << "Running tests...\n";
  111.  
  112.     // Тест 1: Пустая строка
  113.     assert(reverseString("") == "");
  114.  
  115.     // Тест 2: Строка с одним символом
  116.     assert(reverseString("a") == "a");
  117.  
  118.     // Тест 3: Обычная строка
  119.     assert(reverseString("hello") == "olleh");
  120.  
  121.     // Тест 4: Строка с пробелами
  122.     assert(reverseString("a b c") == "c b a");
  123.  
  124.     std::cout << "All tests passed!\n";
  125. }
  126.  
  127. int main() {
  128.     runTests();
  129.     return 0;
  130. }
  131.  
  132. Задача 4 с решением:
  133. #include <cassert>
  134. #include <iostream>
  135.  
  136. // Функция для тестирования
  137. bool isPrime(int n) {
  138.     if (n <= 1) return false;
  139.     for (int i = 2; i * i <= n; ++i) {
  140.         if (n % i == 0) return false;
  141.     }
  142.     return true;
  143. }
  144.  
  145. // Функция для запуска тестов
  146. void runTests() {
  147.     std::cout << "Running tests...\n";
  148.  
  149.     // Тест 1: Минимальное значение (0)
  150.     assert(!isPrime(0));
  151.  
  152.     // Тест 2: Единица (специальный случай)
  153.     assert(!isPrime(1));
  154.  
  155.     // Тест 3: Первое простое число (2)
  156.     assert(isPrime(2));
  157.  
  158.     // Тест 4: Простое число
  159.     assert(isPrime(17));
  160.  
  161.     // Тест 5: Составное число
  162.     assert(!isPrime(4));
  163.  
  164.     std::cout << "All tests passed!\n";
  165. }
  166.  
  167. int main() {
  168.     runTests();
  169.     return 0;
  170. }
  171.  
  172.  
  173. -------------------------------------------------------------------------------
  174.  
  175. Задачи для самостоятельной практики
  176. Ниже представлены 20 задач с готовым кодом, содержащим ошибки. Для каждой задачи требуется написать модульные тесты, чтобы обнаружить и исправить ошибки.
  177.  
  178. Задача 1: Сумма двух чисел
  179.  
  180. int sum(int a, int b) {
  181.     return a - b; // Ошибка: вместо сложения используется вычитание
  182. }
  183.  
  184. Задача 2: Факториал
  185.  
  186. int factorial(int n) {
  187.     if (n == 0) return 1;
  188.     return n * factorial(n - 2); // Ошибка: рекурсия неверна
  189. }
  190.  
  191. Задача 3: Проверка на простое число
  192.  
  193. bool isPrime(int n) {
  194.     if (n <= 1) return false;
  195.     for (int i = 2; i < n; ++i) {
  196.         if (n % i == 0) return true; // Ошибка: должно быть return false
  197.     }
  198.     return true;
  199. }
  200.  
  201. Задача 4: Поиск максимального элемента
  202.  
  203. int findMax(const std::vector<int>& nums) {
  204.     if (nums.empty()) return 0; // Ошибка: некорректное значение для пустого массива
  205.     int maxVal = nums[0];
  206.     for (int num : nums) {
  207.         if (num > maxVal) maxVal = num;
  208.     }
  209.     return maxVal;
  210. }
  211.  
  212. Задача 5: Переворот строки
  213.  
  214. std::string reverseString(const std::string& str) {
  215.     std::string reversed;
  216.     for (int i = str.size(); i >= 0; --i) { // Ошибка: индексация начинается с size()
  217.         reversed += str[i];
  218.     }
  219.     return reversed;
  220. }
  221.  
  222. Задача 6: Проверка на палиндром
  223.  
  224. bool isPalindrome(const std::string& str) {
  225.     int n = str.size();
  226.     for (int i = 0; i < n / 2; ++i) {
  227.         if (str[i] != str[n - i]) return false; // Ошибка: индексация
  228.     }
  229.     return true;
  230. }
  231.  
  232. Задача 7: Сложение строк
  233.  
  234. std::string concatenate(const std::string& a, const std::string& b) {
  235.     return a - b; // Ошибка: оператор "-" не определён для строк
  236. }
  237.  
  238. Задача 8: Вычисление среднего
  239.  
  240. double average(const std::vector<int>& nums) {
  241.     if (nums.empty()) return 0;
  242.     double sum = 0;
  243.     for (int num : nums) {
  244.         sum += num;
  245.     }
  246.     return sum / (nums.size() - 1); // Ошибка: деление на size() - 1
  247. }
  248.  
  249. Задача 9: Проверка на чётность
  250.  
  251. bool isEven(int n) {
  252.     return n % 3 == 0; // Ошибка: проверка на делимость на 3
  253. }
  254.  
  255. Задача 10: Поиск минимума
  256.  
  257. int findMin(const std::vector<int>& nums) {
  258.     if (nums.empty()) return 0; // Ошибка: некорректное значение для пустого массива
  259.     int minVal = nums[0];
  260.     for (int num : nums) {
  261.         if (num < minVal) minVal = num;
  262.     }
  263.     return minVal;
  264. }
  265.  
  266. Задача 11: Возведение в степень
  267.  
  268. int power(int base, int exp) {
  269.     int result = 1;
  270.     for (int i = 0; i < exp; ++i) {
  271.         result *= base;
  272.     }
  273.     return result;
  274. }
  275.  
  276. Задача 12: Проверка на отсортированность
  277.  
  278. bool isSorted(const std::vector<int>& nums) {
  279.     for (int i = 0; i < nums.size(); ++i) { // Ошибка: индексация
  280.         if (nums[i] > nums[i + 1]) return false;
  281.     }
  282.     return true;
  283. }
  284.  
  285. Задача 13: Удаление дубликатов
  286.  
  287. std::vector<int> removeDuplicates(const std::vector<int>& nums) {
  288.     std::vector<int> result;
  289.     for (int num : nums) {
  290.         if (result.back() == num) continue; // Ошибка: back() на пустом векторе
  291.         result.push_back(num);
  292.     }
  293.     return result;
  294. }
  295.  
  296. Задача 14: Поиск индекса элемента
  297.  
  298. int findIndex(const std::vector<int>& nums, int target) {
  299.     for (int i = 0; i < nums.size(); ++i) {
  300.         if (nums[i] == target) return i;
  301.     }
  302.     return -1;
  303. }
  304.  
  305. Задача 15: Перевод в верхний регистр
  306.  
  307. std::string toUpperCase(const std::string& str) {
  308.     std::string upper;
  309.     for (char c : str) {
  310.         upper += c + 'A' - 'a'; // Ошибка: некорректное преобразование
  311.     }
  312.     return upper;
  313. }
  314.  
  315. Задача 16: Подсчёт слов
  316.  
  317. int countWords(const std::string& str) {
  318.     int count = 0;
  319.     bool inWord = false;
  320.     for (char c : str) {
  321.         if (c == ' ') inWord = false;
  322.         else if (!inWord) {
  323.             count++;
  324.             inWord = true;
  325.         }
  326.     }
  327.     return count;
  328. }
  329.  
  330. Задача 17: Проверка на анаграмму
  331.  
  332. bool areAnagrams(const std::string& a, const std::string& b) {
  333.     if (a.size() != b.size()) return false;
  334.     std::sort(a.begin(), a.end()); // Ошибка: sort() не работает со строками
  335.     std::sort(b.begin(), b.end());
  336.     return a == b;
  337. }
  338.  
  339. Задача 18: Вычисление НОД
  340.  
  341. int gcd(int a, int b) {
  342.     while (b != 0) {
  343.         int temp = b;
  344.         b = a % b;
  345.         a = temp;
  346.     }
  347.     return a;
  348. }
  349.  
  350. Задача 19: Проверка на вхождение подстроки
  351.  
  352. bool containsSubstring(const std::string& str, const std::string& substr) {
  353.     return str.find(substr) != std::string::npos;
  354. }
  355.  
  356. Задача 20: Умножение матриц
  357.  
  358. std::vector<std::vector<int>> multiplyMatrices(
  359.     const std::vector<std::vector<int>>& a,
  360.     const std::vector<std::vector<int>>& b) {
  361.     int n = a.size();
  362.     int m = b[0].size();
  363.     std::vector<std::vector<int>> result(n, std::vector<int>(m, 0));
  364.     for (int i = 0; i < n; ++i) {
  365.         for (int j = 0; j < m; ++j) {
  366.             for (int k = 0; k < a[0].size(); ++k) {
  367.                 result[i][j] += a[i][k] * b[k][j]; // Ошибка: неправильные индексы
  368.             }
  369.         }
  370.     }
  371.     return result;
  372. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement