Member 14785310 Ответов: 4

Что касается бинарной задачи c++. Может объяснить или дать решение этого вопроса .


C++ может сдвигать биты влево или вправо, но не содержит встроенных функций для поворота битов в целое число.
Я... каждый бит смещен влево. Если пятый бит оказывается единицей, мы считаем это переполнением и перемещаем его в крайнее правое положение, эффективно "вращая" биты.

II... Обратите внимание на использование двоичных литералов. Префикс 0b позволяет указывать двоичные литералы как нули и единицы.

III... Обратите внимание, что двоичный код и значения и переполнения сравнивается с переполнением, чтобы определить, соответствует ли один бит независимо от состояния других битов. Этот прием, известный как маскировка, потребуется несколько раз на протяжении всей программы.


5. объявите четыре целых числа (inValvesOpen, outValvesOpen, pistonUp, cylinderFire) и инициализируйте их 4-битными двоичными литералами в соответствии со следующей таблицей цилиндров. Обратите внимание, что в каждой переменной крайний левый бит представляет цилиндр 1, а крайний правый бит-цилиндр

6. Создайте цикл for, который выполняется пять раз. Весь оставшийся код должен быть реализован в этом цикле.

7. объявите шесть отображаемых строк, которые в сочетании представляют начальное состояние ASCII art

8. объявите внутренний цикл, c, который выполняется 4 раза, один раз для каждого цилиндра, начиная с нуля (цилиндр 1).
Я.... Объявите целочисленное смещение и инициализируйте его в начальную позицию определенного цилиндра в строках отображения. (Каждый цилиндр имеет девять символов в ширину.)

II... Объявите шесть символьных переменных, которые будут использоваться для хранения символа, представляющего различные изменяющиеся части цилиндра.
III. Объявите целочисленную позиционную маску и инициализируйте один бит в позиции, представляющей цилиндр 1.

i. чтобы изменить маску для представления бита в положении текущего цилиндра, сдвиньте его вправо на c.

IV. Используйте маску положения для определения состояния впускного клапана текущего цилиндра. Если открыто (1), измените представление символов inValve на " o "и установите метку состояния на" I’ (вход)

V. Проверьте положение поршня, используя ту же маску. Если в верхнем положении:

i. измените символ upPiston, чтобы показать поршень (T), и символ downPiston, чтобы показать пустую нижнюю камеру (символ пробела).

ii. Если цилиндр также стреляет, измените значение камеры на звездочку, а метку состояния-на " P " (мощность)

ВИ. Используйте маску положения для определения состояния выпускного клапана текущего цилиндра. Если открыто (1), измените представление символов outValve на ‘o’ и установите метку состояния на ‘E ' (Exhaust).

VII. Измените символы в строках отображения, чтобы они соответствовали состоянию этих переменных.


Повторите процедуру для каждого из четырех цилиндров.

9. когда все четыре состояния цилиндра были вычислены, используйте поток cout для отображения каждой из шести строк дисплея в отдельной строке, за которой следуют две пустые строки.

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

I. используя битовую маскировку, определите количество битов для поворота влево в зависимости от текущего стреляющего цилиндра.

II. Если у cylinderFire установлен бит 3 (в настоящее время стреляющий цилиндр 3), Вращение 1 бита влево сделает цилиндр 2 следующим цилиндром для стрельбы.

III. Если в данный момент стреляет цилиндр 4, то вращение 3 бит влево приведет к срабатыванию цилиндра 1.

IV. В противном случае, если в данный момент стреляют цилиндры 1 или 2, вращение 2 бит влево приведет к срабатыванию цилиндра 3 или 4 соответственно.

V. Поверните каждую из четырех двоичных переменных состояния на одинаковую величину, вызвав функцию rotate, которую мы создали ранее.

ВИ. Повторите тот же процесс пять раз, так что мы закончим в том же состоянии для каждого цилиндра, как мы начали.

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

Что я уже пробовал:

нет, я не пробовал, потому что не могу правильно понять этот вопрос.

4 Ответов

Рейтинг:
2

CPallini

Пожалуйста, не просите нас делать вашу собственную домашнюю работу. Вместо этого постарайтесь сделать это самостоятельно и размещайте здесь только конкретные вопросы.


Michael Haephrati

Я полностью согласен с тем, что вы написали, но вы должны были поместить это в качестве комментария. Это не ответ

Рейтинг:
1

phil.o

Если вы не можете понять вопрос, то прочитайте (или перечитайте) материал вашего курса, который будет содержать элементы, относящиеся к заданию, которое было дано вам.
Если вы все еще не видите связи между вашим курсом и вопросом, то вам следует поговорить со своим учителем.

Вот несколько ссылок, имеющих отношение к вашей задаче:
Побитовая операция - Википедия[^]
О. 3 — битовых манипуляций с побитовые операции и битовые маски | выучить C++[^]
в - Что такое битовая маскировка? - переполнение стека[^]


Рейтинг:
1

OriginalGriff

Цитата:
нет, я не пробовал, потому что не могу правильно понять этот вопрос.

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

Если вы вообще не можете понять вопрос, то вам нужно поговорить со своим преподавателем и выяснить, почему - это будет связано с материалом, который был освещен недавно, поэтому либо его объяснение не сработало, либо ваше понимание не удалось. В любом случае, он должен знать, чтобы исправить это.


Рейтинг:
0

Patrice T

Цитата:
нет, я не пробовал, потому что не могу правильно понять этот вопрос.

Перечитайте свои уроки или поговорите с учителем.

Мы не делаем вашу домашнюю работу.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.