diff --git a/task2.cpp b/task2.cpp index a12e35c..e60d4d7 100644 --- a/task2.cpp +++ b/task2.cpp @@ -1,41 +1,60 @@ // Задание 2 // Написать программу для реализации ускоренного сложения чисел в // двоичной системе (аналогично примеру на рис. 1) - #include -bool isZero(bool* a, int size) { - for (int i = 0; i < size; i++) { - if (a[i] == 1) { - return false; +bool* addBinary(bool* A, bool* B, int size) { + bool* result = new bool[size](); // Результат может быть на 1 бит больше + bool carry = false; // Перенос + + for (int i = size - 1; i >= 0; i--) { + // Сложение с учетом переноса + bool sum = A[i] ^ B[i] ^ carry; // XOR для сложения + carry = (A[i] && B[i]) || (carry && (A[i] || B[i])); // Логика переноса + result[i + 1] = sum; // Записываем результат } - } - return true; -} + result[0] = carry; // Записываем перенос в старший бит -bool* sum(bool* a, bool* b, int size) -{ - bool* result = new bool[size](); - - bool* remainder = new bool[size](); - for (int i = 0; i < size; i++) - { - remainder[i] = b[i]; - } - - while (!isZero(b, size)) - { - for (int i = 0; i < size; i++) - { - - } - } + return result; } int main() { + std::setlocale(LC_ALL, "ru"); - unsigned char size; + int size; + std::cout << "Введите длину двоичных чисел: "; + std::cin >> size; - return 0; + bool* a = new bool[size](); + bool* b = new bool[size](); + + std::cout << "Введите первое двоичное число (0 или 1): "; + for (int i = 0; i < size; i++) { + int bit; + std::cin >> bit; + a[i] = (bit != 0); // Преобразуем в bool + } + + std::cout << "Введите второе двоичное число (0 или 1): "; + for (int i = 0; i < size; i++) { + int bit; + std::cin >> bit; + b[i] = (bit != 0); // Преобразуем в bool + } + + bool* result = addBinary(a, b, size); + + std::cout << "Результат сложения: "; + for (int i = 0; i < size + 1; i++) { + std::cout << result[i] << " "; + } + std::cout << std::endl; + + // Освобождаем память + delete[] a; + delete[] b; + delete[] result; + + return 0; }