💀
Второй курс РПО
Разработка программных модулей
Разработка программных модулей
  • Модели разработки
  • Ошибки и отладка программ
  • Средства разработки алгоритмов
    • Основные принципы и стадии тестирования
  • Сложностные классы
  • Эмуляторы операционных систем
  • Сложность сортировки
  • Уровни тестирования
  • Задание №1
  • Регрессионное тестирование
  • Тестирование «белым ящиком»
  • Как делать оценку сложности?
  • Алгоритмы и сложность
  • Тестирование "белым ящиком" №2
  • Сложность алгоритмов
  • Тестирование "белым ящиком" №3
  • Тестирование "Чёрным ящиком»" №1
  • Тестирование "Черным ящиком" №2
  • Оценка сложности эвристических алгоритмов
  • Принципы ООП
  • Тестирование "Черным ящиком" №3
  • КТ - В3
  • Модульное тестирование
    • С кодами
  • Модульное тестирование
  • Абстрактные классы и интерфейсы в Python
  • Структуры в Python по аналогии с C++
    • Диалоги гениев
  • Делегаты в Python
    • Ещё более не смешные диалоги
  • Регулярные выражения в Python от простого к сложному
  • Python: Коллекции
  • Параметризованные классы (шаблоны)
  • Указатели и операции со списками в Python
  • Интеграционное тестирование
  • Работа с классами. Перегрузка методов
  • Определение операций в классе.
  • Создание наследованных классов
  • Интеграционное тестирование
  • Работа с объектами через интерфейсы
  • Использование стандартных интерфейсов
  • Работа с типом данных "Структура"
  • Коллекции. Параметризованные классы
  • Использование регулярных выражений
  • Операции со списками
  • Что такое паттерны проектирования?
  • Шпаргалка по шаблонам проектирования
    • [Habr] Шпаргалка
  • UML-диаграммы проектирования
  • Использование основных шаблонов.
  • Использование каких то там шаблонов
  • 15-я Практическая
  • 16-я Практическая
  • Graphviz Online
  • 17-я Практическая
  • Введение в теорию программирования: Объектно-ориентированный подход
  • Документирование софта и стандарты
  • C# Ввод и вывод
  • Оптимизация кода: просто о главном
  • Автоматизация разработки технической документации
  • Автоматизированное документирование и первичные данные
  • ADO.NET что это?
Powered by GitBook
On this page

Тестирование "белым ящиком" №3

02.12.2024

Код на Python

Python
a = int(input("Введите a: "))  # Вводим a
b = int(input("Введите b: "))  # Вводим b

# Нахождение НОД без использования функции
while b != 0:
    a, b = b, a % b  # Основная операция: обновляем значения a и b

print(f"НОД: {a}")  # Выводим результат
Тестирование
# Тест 1
a, b = 48, 18
assert a != b and (a % b == 6)  # Проверка НОД(48, 18)

# Тест 2
a, b = 101, 103
assert a != b and (a % b == 1)  # Проверка НОД(101, 103)

# Тест 3: НОД одного числа с нулём
a, b = 0, 5
assert b == 5  # НОД(0, 5) должен быть 5

# Тест 4: НОД двух одинаковых чисел
a, b = 7, 7
assert a == 7  # НОД(7, 7) должен быть 7

# Тест 5: НОД с отрицательным числом
a, b = -48, 18
assert a != b and (a % b == 6)  # НОД(-48, 18) должен быть 6

print("Все тесты прошли успешно!")

Assert - проверка, с выводом True или False

Описание работы кода на Python:

  1. Вводятся два числа a и b.

  2. В цикле while выполняется основная операция:

    • a обновляется значением b.

    • b становится остатком от деления a на b.

  3. Цикл продолжается, пока b не станет равным нулю.

  4. Результатом является значение a, которое и является НОД.


Код на C++

cpp
#include <iostream>
#include <locale.h>
using namespace std;

int main() {
    setlocale(LC_ALL, "");
    int a = 0, b = 0;

    cout << "Введите a: " << endl;
    cin >> a; // Вводим a
    cout << "Введите b: " << endl;
    cin >> b; // Вводим b

    // Нахождение НОД без использования функции
    while (b != 0) {
        int temp = b; // Сохраняем текущее значение b
        b = a % b;    // b становится остатком от деления a на b
        a = temp;     // a принимает старое значение b
    }

    cout << "НОД: " << a << endl; // Выводим результат
    return 0;
}
Тестирование
#include <iostream>
#include <locale.h>
using namespace std;

int main() {
    int a, b;
    setlocale(LC_ALL, "");
    // Тест 1: НОД(48, 18)
    a = 48; b = 18;
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    cout << "Тест 1: НОД(48, 18) = " << a << endl;

    // Тест 2: НОД(101, 103)
    a = 101; b = 103;
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    cout << "Тест 2: НОД(101, 103) = " << a << endl;

    // Тест 3: НОД(0, 5)
    a = 0; b = 5;
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    cout << "Тест 3: НОД(0, 5) = " << a << endl;

    // Тест 4: НОД(7, 7)
    a = 7; b = 7;
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    cout << "Тест 4: НОД(7, 7) = " << a << endl;

    // Тест 5: НОД(-48, 18)
    a = -48; b = 18;
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    cout << "Тест 5: НОД(-48, 18) = " << a << endl;

    return 0;
}

Описание работы кода на C++:

Программа находит НОД двух чисел с использованием алгоритма Евклида. После ввода значений для переменных a и b, начинается цикл while, который работает до тех пор, пока b не станет равным нулю. Внутри цикла:

  • Переменная b обновляется как остаток от деления a на b.

  • Переменная a получает старое значение b. Когда цикл завершается, выводится значение a, которое и является НОД этих двух чисел.


Алгоритм работы программы

  1. Алгоритм Евклида основан на следующем принципе: НОД двух чисел не изменяется, если большее число заменить на остаток от деления на меньшее.

  2. Выполняется последовательное деление с нахождением остатка, пока одно из чисел не станет равно нулю.

  3. Оставшееся ненулевое число — это и есть НОД.


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

PreviousСложность алгоритмовNextТестирование "Чёрным ящиком»" №1

Last updated 5 months ago