М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
rahcheeva81
rahcheeva81
27.11.2021 04:58 •  Информатика

Реализуйте в классе binary перегрузку четырёх операций: операция сложенияоперация вычитанияоперация умноженияоперация делениякаждая операция принимает на вход двоичное число и выдаёт ответ в виде двоичного числа. операция деления производит деление нацело.напишите программу, которая принимает на вход два бинарных числа, находит их сумму, разность, произведение и отношение и выводит их на экран в виде двоичных чисел.class  binary  {protected:       int  data[32];       // цифры двоичного числаpublic:     binary();             // конструктор по умолчанию    binary(int  value);   // конструктор, получающий двоичное число из десятичного    binary(char  *s);     // конструктор, получающий двоичное число из строки, содержащей двоичное число      void  show();         // вывод двоичного числа на экран      int  to_int();       // перевод двоичного числа в десятичное}; binary: : binary() {      for  (int  i =  0; i <   32; ++i)        data[i] =  0; }binary: : binary(int  value) {      for  (int i =  0; i <   32; ++i)        data[i] =  0;       int  t =  31;       while  (value) {        data[t--] = value % 2;         value /= 2;     }}binary: : binary(char  *s) {      int  size = strlen(s)-1;       for  (int  i =  0; i <   32; ++i)        data[i] =  0;       for  (int  i =  31; size > =  0; --size)        data[i--] = s[size] -  '0'; }void  binary: : show() {      int  i =  0;       while  (i <   32  & & ! data[i]) ++i;       if  (i ==  32) {          cout  < <   0;           return;     }      for  (; i <   32; ++i)          cout  < < data[i]; }int    binary: : to_int() {      int  pow =  1, res =  0;       for  (int  i = 31; i > =  0; --i) {        res += data[i] * pow;         pow *=  2;     }      return  res; }​

👇
Открыть все ответы
Ответ:
markdanilov2002
markdanilov2002
27.11.2021

7

Объяснение:

Заметим, что две операции типа 2 не меняют число: если было число x, то после первого вычитания получим 2 - x, после второго 2 - (2 - x) = x.

Значит, в самой короткой последовательности, которая получает 231 из числа 1, нет двух операций типа 2 подряд.

Рассмотрим самую короткую последовательность, получающую 231. Идем с конца:

231 делится на 3. Если бы последней операцией было вычитание, то на предыдущем шаге было бы -229, это число не делилось бы на 3, и получилось бы, что в последовательности два вычитания подряд, чего быть не должно. Значит, последняя операция - умножение, число на предыдущем шаге - 231 / 3 = 7777 не делится на 3, единственный вариант для предыдущего шага - получить из -75 путем вычитания-75 делится на 3, аналогично первому рассуждению это результат умножения числа -25 на 3-25 не делится на 3, оно получено из 27 путем вычитания27 делится на 3, аналогично, получено из 9 умножением9 делится на 3, аналогично, получено из 3 умножением3 могло получиться из 1 за один шаг умножением на 3.

Итак, всё происходило так:

(1) 1 * 3 = 3

(1) 3 * 3 = 9

(1) 9 * 3 = 27

(2) 2 - 27 = -25

(1) -25 * 3 = -75

(2) 2 - (-75) = 77

(1) 77 * 3 = 231

4,6(39 оценок)
Ответ:
kurroro
kurroro
27.11.2021

сообщение об ошибке (или 900)

Объяснение:

В программе есть несколько ошибок:

- в строчке c1 = 10 вместо = должно быть :=

- в строчке write(Apb(ci,c2)*Apb(c1,c2); вместо ci видимо должно быть c1; кроме того, не хватает одной закрывающей скобки.

Если все эти ошибки исправить, получится такая программа:

program Primer;

var  c1, c2: integer;

function Apb(a, b: integer): integer;

begin

 Apb := a + b;

end;

begin

 с1 := 10;

 с2 := 20;

 write(Apb(c1, c2) * Apb(c1, c2));

end.

Apb - просто функция, которая выдает сумму своих аргументов. Тогда

Apb(c1, c2) * Apb(c1, c2) = (с1 + с2) * (с1 + с2) = (10 + 20) * (10 + 20) = 900.

Это число и будет выведено на экран инструкцией write

4,4(37 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ