Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+1

Задачка по плюсам про наследственный массив

Создайте на основе класса Binary класс BinaryWithOutput.

В новом классе добавляется перегрузка операций ввода-вывода и метод увеличения числа на 1.

Операция ввода читает из входного потока число в виде набора нулей и единиц (бинарное представление).
Операция вывода отправляет в выходной поток число в виде набора нулей и единиц (бинарное представление).
метод увеличения числа на 1 возвращает новое число, большее текущего на единицу.
При помощи данного класса считайте из файла число, записанное в бинарном виде, добавьте к нему единицу и выведите в файл.

Формат входных данных
Из ФАЙЛА вводится целое неотрицательное число N в бинарном представлении (0 <= N < 231-1).
Формат выходных данных
В ФАЙЛ выводится целое неотрицательное числа в бинарном представлении.

Код для работы (надо сделать BinaryWithOutput именно наследственным)

#include <cstring>
#include <iostream>

using namespace std;

class Binary {
protected:
bool data[32]; // массив для хранения битов числа
public:
Binary(); // конструктор по умолчанию
Binary(int value); // конструктор из целочисленного
Binary(char *s); // конструктор из строки
void show() const; // метод для вывода числа в двоичном виде
int to_int() const; // метод для получения значения типа int
};

Binary::Binary() {
memset(data, false, sizeof(data)); // инициализация массива нулями
}

Binary::Binary(int value) {
memset(data, false, sizeof(data)); // инициализация массива нулями
int i = 0;
while (value > 0) { // переводим число в двоичную систему счисления
data[i++] = value % 2;
value /= 2;
}
}

Binary::Binary(char *s) {
memset(data, false, sizeof(data)); // инициализация массива нулями
int len = strlen(s);
for (int i = len - 1, j = 0; i >= 0; i--, j++) {
if (s[i] == '1') data[j] = true; // заполняем массив данными из строки
}
}

void Binary::show() const {
int i;
for (i = 31; i >= 0; i--) {
if (data[i]) break; // ищем первую единицу в массиве
}
if (i == -1) { // если все элементы массива равны нулю
cout << "0\n";
return;
}
for (int j = i; j >= 0; j--) {
cout << data[j]; // выводим на экран все элементы массива, начиная с первой
// единицы
}
cout << endl;
}

int Binary::to_int() const {
int value = 0;
int mult = 1;
for (int i = 0; i < 32; i++) {
if (data[i]) {
value += mult; // переводим число в десятичную систему счисления
}
mult *= 2;
}
return value;
}

int main() {

return 0;
}

По дате
По рейтингу
Аватар пользователя
Просветленный

Для создания класса BinaryWithOutput наследуемся от класса Binary и добавим методы для перегрузки операций ввода-вывода и для увеличения числа на 1.

```
class BinaryWithOutput : public Binary {
public:
BinaryWithOutput() : Binary() {}
BinaryWithOutput(int value) : Binary(value) {}
BinaryWithOutput(char *s) : Binary(s) {}
BinaryWithOutput operator++(); // префиксный инкремент
friend ostream& operator<<(ostream& out, const BinaryWithOutput& bw);
friend istream& operator>>(istream& in, BinaryWithOutput& bw);
};

BinaryWithOutput BinaryWithOutput::operator++() {
for (int i = 0; i < 32; i++) {
if (data[i]) {
data[i] = false;
} else {
data[i] = true;
break;
}
}
return *this;
}

ostream& operator<<(ostream& out, const BinaryWithOutput& bw) {
for (int i = 31; i >= 0; i--) {
out << bw.data[i];
}
return out;
}

istream& operator>>(istream& in, BinaryWithOutput& bw) {
char s[33];
in >> s;
BinaryWithOutput temp(s);
bw = temp;
return in;
}

```

Теперь можем использовать класс BinaryWithOutput для чтения из файла числа в бинарном представлении, увеличения его на 1 и записи в файл.

```
#include <fstream>

int main() {
BinaryWithOutput bw;
ifstream fin("input.txt");
if ( fin.is _open()) {
fin >> bw;
fin.close();
}
++bw; // увеличение числа на 1
ofstream fout("output.txt");
if ( fout.is _open()) {
fout << bw;
fout.close();
}
return 0;
}

```

Формат входных данных: целое неотрицательное число в бинарном представлении.
Формат выходных данных: целое неотрицательное число в бинарном представлении.