• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Работа с битами. Массивы

  • Автор темы Автор темы Dhon
  • Дата начала Дата начала

Dhon

Ученик
Регистрация
21 Окт 2020
Сообщения
2
Реакции
0
Баллы
0
Работа с битами. Массивы

Не понимаю, как решить эту задачу. Помогите пожалуйста! tehno010

Ввести последовательность из 8 символов. Если символ есть + - * / %, то заменить в нём четыре младших бита единицами, иначе – заменить 5-й бит нулем. Вывести исходную и преобразованную последовательности в символьной и восьмеричной формах
 
Pascal:

Код:
const cf:string='0123456789ABCDEF';
var m:array[1..8] of char;
    i,n,d,b:word;
    a:char;
    c:set of char;
    s,st:string;
begin
  c:=['+','-','*','/','%'];
  b:=15; d:=239; st:='';
  for i:=1 to 8 do Readln(m[i]);
  Writeln;
  for i:=1 to 8 do Write(m[i]:3);
  Writeln;
  for i:=1 to 8 do
   begin
    s:=''; n:=Ord(m[i]);
    while n>0 do
     begin
      s:=cf[n mod 8+1]+s;
      n:=n div 8;
     end;
    st:=st+'  '+s;
   end;
  Writeln(st);
  Writeln;
  for i:=1 to 8 do
   begin
     if m[i] in c
      then
       begin
        n:=Ord(m[i]) or b; m[i]:=Chr(n)
       end
      else
       begin
        n:=Ord(m[i]) and d; m[i]:=Chr(n)
       end;
   end;
  for i:=1 to 8 do Write(m[i]:3);
  Writeln;
  st:='';
  for i:=1 to 8 do
   begin
    s:=''; n:=Ord(m[i]);
    while n>0 do
     begin
      s:=cf[n mod 8+1]+s;
      n:=n div 8;
     end;
    st:=st+'  '+s;
   end;
  Writeln(st);
  Readln;
end.
 
Назад
Сверху