Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите решить (http://www.tehnari.ru/f41/t61469/)

Танюшка 1991 19.12.2011 02:28

Помогите решить
 
Лабораторная работа №2 (2 часа)
Побитовые операции

Замечание. При работе нельзя использовать массивы для хранения цифр двоичного представления чисел. Все действия необходимо выполнить, используя либо арифметические операции “+” или “-“ либо побитовые операции “shl”, “shr”, “and”, “or” или “xor” языка Pascal

Общие задания
Задано целое число без знака (тип word). Распечатайте содержимое битов заданного числа.

Индивидуальные задания:
(во всех заданиях рассматривается тип word)
1. Циклически сдвинуть двоичные разряды числа на одну позицию вправо

Vladimir_S 19.12.2011 11:27

Да, интересно. Что-то и не соображу, как с такими жесткими ограничениями вывернуться.
Цитата:

Сообщение от Танюшка 1991 (Сообщение 637676)
Задано целое число без знака (тип word). Распечатайте содержимое битов заданного числа.

Это-то можно, только вот биты будут идти в обратном порядке, т.е. возрастание разрядов идет слева направо, а не справа налево, как обычно:
Код:

VAR
 x,y:Word;
BEGIN
 Write('x= ');
 Readln(x);
 Repeat
  y:=x Shr 1;
  y:=y Shl 1;
  Write(x-y);
  x:=x Shr 1;
 Until x=0;
 Readln;
END.

А вот как их в нормальном порядке выстроить... То есть можно, скажем, так:
Код:

VAR
 x,y:Word;
 t:Byte;
 z,m:LongInt;
BEGIN
 Write('x= ');
 Readln(x);
 m:=1;
 z:=0;
 Repeat
  y:=x Shr 1;
  y:=y Shl 1;
  t:=x-y;
  z:=z+t*m;
  x:=x Shr 1;
  m:=m*10;
 Until x=0;
 Writeln(z);
 Readln;
END.

Но, боюсь, что это выйдет за пределы ограничений...:tehnari_ru_325:


Часовой пояс GMT +4, время: 10:23.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.