Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Задача 1 с решением:
- #include <cassert>
- #include <iostream>
- // Функция для тестирования
- int factorial(int n) {
- if (n < 0) {
- std::cerr << "Error: Factorial is not defined for negative numbers\n";
- return -1; // Возвращаем ошибочное значение
- }
- int result = 1;
- for (int i = 1; i <= n; ++i) {
- result *= i;
- }
- return result;
- }
- // Функция для запуска тестов
- void runTests() {
- std::cout << "Running tests...\n";
- // Тест 1: Минимальное значение (0)
- assert(factorial(0) == 1); // По определению, 0! = 1
- // Тест 2: Маленькое положительное число
- assert(factorial(1) == 1);
- // Тест 3: Большое число (проверка на переполнение)
- if (factorial(20) < 0) {
- std::cerr << "Test failed: Overflow occurred\n";
- assert(false);
- }
- // Тест 4: Отрицательное число
- if (factorial(-5) != -1) {
- std::cerr << "Test failed: Negative input not handled correctly\n";
- assert(false);
- }
- std::cout << "All tests passed!\n";
- }
- int main() {
- runTests();
- return 0;
- }
- Задача 2 с решением:
- #include <cassert>
- #include <vector>
- #include <iostream>
- // Функция для тестирования
- int findMax(const std::vector<int>& nums) {
- if (nums.empty()) {
- std::cerr << "Error: Cannot find max in an empty array\n";
- return -1; // Возвращаем ошибочное значение
- }
- int maxVal = nums[0];
- for (int num : nums) {
- if (num > maxVal) maxVal = num;
- }
- return maxVal;
- }
- // Функция для запуска тестов
- void runTests() {
- std::cout << "Running tests...\n";
- // Тест 1: Пустой массив
- if (findMax({}) != -1) {
- std::cerr << "Test failed: Empty array not handled correctly\n";
- assert(false);
- }
- // Тест 2: Массив с одним элементом
- assert(findMax({42}) == 42);
- // Тест 3: Обычный массив
- assert(findMax({1, 2, 3, -1, 5}) == 5);
- // Тест 4: Массив с отрицательными числами
- assert(findMax({-10, -20, -5, -1}) == -1);
- std::cout << "All tests passed!\n";
- }
- int main() {
- runTests();
- return 0;
- }
- Задача 3 с решением:
- #include <cassert>
- #include <string>
- #include <iostream>
- // Функция для тестирования
- std::string reverseString(const std::string& str) {
- std::string reversed;
- for (int i = str.size() - 1; i >= 0; --i) {
- reversed += str[i];
- }
- return reversed;
- }
- // Функция для запуска тестов
- void runTests() {
- std::cout << "Running tests...\n";
- // Тест 1: Пустая строка
- assert(reverseString("") == "");
- // Тест 2: Строка с одним символом
- assert(reverseString("a") == "a");
- // Тест 3: Обычная строка
- assert(reverseString("hello") == "olleh");
- // Тест 4: Строка с пробелами
- assert(reverseString("a b c") == "c b a");
- std::cout << "All tests passed!\n";
- }
- int main() {
- runTests();
- return 0;
- }
- Задача 4 с решением:
- #include <cassert>
- #include <iostream>
- // Функция для тестирования
- bool isPrime(int n) {
- if (n <= 1) return false;
- for (int i = 2; i * i <= n; ++i) {
- if (n % i == 0) return false;
- }
- return true;
- }
- // Функция для запуска тестов
- void runTests() {
- std::cout << "Running tests...\n";
- // Тест 1: Минимальное значение (0)
- assert(!isPrime(0));
- // Тест 2: Единица (специальный случай)
- assert(!isPrime(1));
- // Тест 3: Первое простое число (2)
- assert(isPrime(2));
- // Тест 4: Простое число
- assert(isPrime(17));
- // Тест 5: Составное число
- assert(!isPrime(4));
- std::cout << "All tests passed!\n";
- }
- int main() {
- runTests();
- return 0;
- }
- -------------------------------------------------------------------------------
- Задачи для самостоятельной практики
- Ниже представлены 20 задач с готовым кодом, содержащим ошибки. Для каждой задачи требуется написать модульные тесты, чтобы обнаружить и исправить ошибки.
- Задача 1: Сумма двух чисел
- int sum(int a, int b) {
- return a - b; // Ошибка: вместо сложения используется вычитание
- }
- Задача 2: Факториал
- int factorial(int n) {
- if (n == 0) return 1;
- return n * factorial(n - 2); // Ошибка: рекурсия неверна
- }
- Задача 3: Проверка на простое число
- bool isPrime(int n) {
- if (n <= 1) return false;
- for (int i = 2; i < n; ++i) {
- if (n % i == 0) return true; // Ошибка: должно быть return false
- }
- return true;
- }
- Задача 4: Поиск максимального элемента
- int findMax(const std::vector<int>& nums) {
- if (nums.empty()) return 0; // Ошибка: некорректное значение для пустого массива
- int maxVal = nums[0];
- for (int num : nums) {
- if (num > maxVal) maxVal = num;
- }
- return maxVal;
- }
- Задача 5: Переворот строки
- std::string reverseString(const std::string& str) {
- std::string reversed;
- for (int i = str.size(); i >= 0; --i) { // Ошибка: индексация начинается с size()
- reversed += str[i];
- }
- return reversed;
- }
- Задача 6: Проверка на палиндром
- bool isPalindrome(const std::string& str) {
- int n = str.size();
- for (int i = 0; i < n / 2; ++i) {
- if (str[i] != str[n - i]) return false; // Ошибка: индексация
- }
- return true;
- }
- Задача 7: Сложение строк
- std::string concatenate(const std::string& a, const std::string& b) {
- return a - b; // Ошибка: оператор "-" не определён для строк
- }
- Задача 8: Вычисление среднего
- double average(const std::vector<int>& nums) {
- if (nums.empty()) return 0;
- double sum = 0;
- for (int num : nums) {
- sum += num;
- }
- return sum / (nums.size() - 1); // Ошибка: деление на size() - 1
- }
- Задача 9: Проверка на чётность
- bool isEven(int n) {
- return n % 3 == 0; // Ошибка: проверка на делимость на 3
- }
- Задача 10: Поиск минимума
- int findMin(const std::vector<int>& nums) {
- if (nums.empty()) return 0; // Ошибка: некорректное значение для пустого массива
- int minVal = nums[0];
- for (int num : nums) {
- if (num < minVal) minVal = num;
- }
- return minVal;
- }
- Задача 11: Возведение в степень
- int power(int base, int exp) {
- int result = 1;
- for (int i = 0; i < exp; ++i) {
- result *= base;
- }
- return result;
- }
- Задача 12: Проверка на отсортированность
- bool isSorted(const std::vector<int>& nums) {
- for (int i = 0; i < nums.size(); ++i) { // Ошибка: индексация
- if (nums[i] > nums[i + 1]) return false;
- }
- return true;
- }
- Задача 13: Удаление дубликатов
- std::vector<int> removeDuplicates(const std::vector<int>& nums) {
- std::vector<int> result;
- for (int num : nums) {
- if (result.back() == num) continue; // Ошибка: back() на пустом векторе
- result.push_back(num);
- }
- return result;
- }
- Задача 14: Поиск индекса элемента
- int findIndex(const std::vector<int>& nums, int target) {
- for (int i = 0; i < nums.size(); ++i) {
- if (nums[i] == target) return i;
- }
- return -1;
- }
- Задача 15: Перевод в верхний регистр
- std::string toUpperCase(const std::string& str) {
- std::string upper;
- for (char c : str) {
- upper += c + 'A' - 'a'; // Ошибка: некорректное преобразование
- }
- return upper;
- }
- Задача 16: Подсчёт слов
- int countWords(const std::string& str) {
- int count = 0;
- bool inWord = false;
- for (char c : str) {
- if (c == ' ') inWord = false;
- else if (!inWord) {
- count++;
- inWord = true;
- }
- }
- return count;
- }
- Задача 17: Проверка на анаграмму
- bool areAnagrams(const std::string& a, const std::string& b) {
- if (a.size() != b.size()) return false;
- std::sort(a.begin(), a.end()); // Ошибка: sort() не работает со строками
- std::sort(b.begin(), b.end());
- return a == b;
- }
- Задача 18: Вычисление НОД
- int gcd(int a, int b) {
- while (b != 0) {
- int temp = b;
- b = a % b;
- a = temp;
- }
- return a;
- }
- Задача 19: Проверка на вхождение подстроки
- bool containsSubstring(const std::string& str, const std::string& substr) {
- return str.find(substr) != std::string::npos;
- }
- Задача 20: Умножение матриц
- std::vector<std::vector<int>> multiplyMatrices(
- const std::vector<std::vector<int>>& a,
- const std::vector<std::vector<int>>& b) {
- int n = a.size();
- int m = b[0].size();
- std::vector<std::vector<int>> result(n, std::vector<int>(m, 0));
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < m; ++j) {
- for (int k = 0; k < a[0].size(); ++k) {
- result[i][j] += a[i][k] * b[k][j]; // Ошибка: неправильные индексы
- }
- }
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement