Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
 Аватар для vioup
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 55

XOR

06.09.2017, 15:43. Показов 3936. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть вот такая простенькая программа.
Pascal
1
2
3
4
5
6
7
8
var
  i,j : integer;
begin
  readln(i);
  readln(j);
  i:= i xor j;
  writeln('xor - ', i);
end.
Если ввести числа 1111 и 1, то выведет 1110. А если ввести 1111 и 1000, то выводит 1983, а мне нужно, чтобы выводило 111.
Как это сделать?
Не пишите, пожалуйста, что числа нужно представить в шестнадцатеричной системе, я это знаю. Чего я не знаю, как это реализовать в коде.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.09.2017, 15:43
Ответы с готовыми решениями:

Напишите процедуру Xor
Напишите процедуру procedure _Xor (x, y: boolean), реализующую функцию "Исключающее ИЛИ" двух логических переменных x и y....

Xor шифрование
Доброго времени суток! Нужно написать программу xor шифрования строки другой строкой. Строка, которая будет шифроваться, вводится с...

xor в Паскаль
Привет. Объясните плз алгоритм этой операции (xor). Пример: x := 10 xor 1 Убеждаемся, что x = 11; x := 5 xor 1 Убеждаемся, что...

12
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
06.09.2017, 21:48
Чего конкретно Вы хотите? Чтобы Ваша программа выдала ответ 111? Ну, так возьмите 110 и 1.
Вы неконкретно поставили вопрос.
0
 Аватар для vioup
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 55
06.09.2017, 22:04  [ТС]
Я вполне корректно написал, что нужно ввести 1111 и 1000 и на выходе было 111.
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
07.09.2017, 10:14
Цитата Сообщение от vioup Посмотреть сообщение
Я вполне корректно написал, что нужно ввести 1111 и 1000 и на выходе было 111.
Да, это понятно.
А XOR-то здесь причём? Программа переведёт числа в двоичную систему и проведёт побитовые операции. Другими словами, вместо Ваших чисел программа работает с числами 100001010111 и 1111101000
имеем:
10001010111
.1111101000
------------------
11110111111=1983

Если Вы введёте 15 и 8, то это и будет
1111
1000 и тут действительно получится 111, но двоичное, на экране появится 7
-----
.111=7

Ещё раз прошу уточнить, чего Вы хотите и с помощью какой операции.
0
 Аватар для vioup
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 55
07.09.2017, 11:03  [ТС]
Цитата Сообщение от кот Бегемот Посмотреть сообщение
А XOR-то здесь причём?
Ну как-же причем?
1 xor 1 = 0
1 xor 0 = 1
1 xor 0 = 1
1 xor 0 = 1
Получилось 111? Получилось.
Только нужно, чтобы получалось не с одним на одно число, а с группой чисел. Такой, как 1111 и 1000 или похожими.
Ну в принципе, я себе на вопрос сам и ответил. Нужно будет поместить каждое число отдельно в массив.

Цитата Сообщение от кот Бегемот Посмотреть сообщение
Программа переведёт числа в двоичную систему и проведёт побитовые операции.
Я и хотел, чтобы программа не переводила в двоичную систему, а воспринимала их изначально, будто они уже в двоичной.

Цитата Сообщение от vioup Посмотреть сообщение
Чего я не знаю, как это реализовать в коде.
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
07.09.2017, 11:20
Если я правильно понял, Вы хотите вводить двоичные числа и получать ответ в двоичной системе?
Ну, так ничего проще: добавьте две подпрограммы, их тут 100 раз делали и ваш алгоритм будет выглядеть так:
1. ВВод двух двоичных чисел
2. перевод их в десятичную систему.
3. Выполнение операции XOR
4. Перевод результата в двоичную систему
5. Вывод двоичного результата.
Пункты 2 и 4 выполняются с помощью процедур, неоднократно разобранных на форуме, остальное в вашей программе.
0
 Аватар для kolay_ne
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362
08.09.2017, 10:46
Берете и для каждого знака выполняете операцию:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var a, b: string;
dig_a, dig_b: array of integer;
 
procedure Push_front<T>(var a: array of T; x: T);
begin
  SetLength(a, length(a) + 1);
  for i: integer := length(a) - 1 downto 1 do
  begin
    a[i] := a[i - 1]
  end;
  a[0] := x;
end;
 
begin
  readln(a);
  readln(b);
  foreach i: char in a do
  begin
    Push_front(dig_a, StrToInt(a[length(a)]));
    SetLength(a, length(a) - 1);
  end;
  foreach i: char in b do
  begin
    Push_front(dig_b, StrToInt(b[length(b)]));
    SetLength(b, length(b) - 1);
  end;
  while(length(dig_a) > length(dig_b)) do
    Push_front(dig_b, 0);
  while(length(dig_b) > length(dig_a)) do
    Push_front(dig_a, 0);
  for i: integer := 0 to length(dig_a) - 1 do
    write(dig_a[i] xor dig_b[i]);
end.
Можно без двух последних while (27, 29), но так меньше думать
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
08.09.2017, 12:37
Как написал дядя кот Бегемот.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function bintodec(s:string):integer;
var n,i:integer;
begin
n:=0;
for i:=length(s) downto 1 do
if s[i]='1' then inc(n,round(power(2,length(s)-i)));
result:=n;
end;
function dectobin(n:integer):string;
var s:string;
begin
s:='';
while n>0 do
 begin
  s:=inttostr(n mod 2)+s;
  n:=n div 2;
 end;
result:=s;
end;
var s1,s2:string;
begin
s1:='1111';
s2:='1000';
write(dectobin(bintodec(s1) xor bintodec(s2)))
end.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
08.09.2017, 20:26
Попроще:
Pascal
1
2
3
4
5
6
7
8
9
10
11
var
  s, t: String;
  i: Integer;
begin
  Write('1: '); ReadLn(s);
  Write('2: '); ReadLn(t);
  for i:=1 to Length(s)-Length(t) do t:='0'+t;
  for i:=1 to Length(t)-Length(s) do s:='0'+s;
  for i:=1 to Length(s) do s[i]:=Chr(Ord('0')+Ord(s[i]<>t[i]));
  WriteLn('R: ',s);
end.
Добавлено через 3 минуты
Проверьте, пожалуйста, для ABC нужно что-то менять, или и так сгодится.
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
08.09.2017, 20:28
Цитата Сообщение от bormant Посмотреть сообщение
Попроще:
Вот же счастливый человек...
он реально думает, что это попроще...
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
08.09.2017, 20:38
кот Бегемот,
ваш хрустальный шар кто-то повредил -- сеанс чтения мыслей потерпел фиаско...

Рантайм посложнее, код попроще.

Добавлено через 1 минуту
Хотя и рантайм попроще, там выше IntToStr пачка...

Добавлено через 5 минут
А вот тут и рантайм попроще должен быть:
Pascal
1
2
3
4
5
6
7
8
9
10
11
procedure XorIt(s, t: Longint);
begin
  if s div 10+t div 10<>0 then XorIt(s div 10, t div 10);
  Write((s and 1) xor (t and 1));
end;
var s, t: Longint;
begin
  Write('1: '); ReadLn(s);
  Write('2: '); ReadLn(t);
  Write('R: '); XorIt(s,t); WriteLn;
end.
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
08.09.2017, 20:44
Цитата Сообщение от bormant Посмотреть сообщение
Рантайм посложнее, код попроще.
ну, так вы уже не пугайте людей командами типа
Pascal
1
2
for i:=1 to Length(t)-Length(s) do s:='0'+s;
for i:=1 to Length(s) do s[i]:=Chr(Ord('0')+Ord(s[i]<>t[i]));
Так и до сумасшедствия дойти несложно...
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
08.09.2017, 20:48
Цитата Сообщение от кот Бегемот Посмотреть сообщение
не пугайте людей командами типа
Я б написал
Pascal
1
2
3
const ZO: array [Boolean] of Char = ('0','1');
...
  for i:=1 to Length(s) do s[i]:=ZO[s[i]<>t[i]];
но это в ABC не поддерживается, Boolean здесь не считается порядковым типом и не пригоден для адресации массива.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.09.2017, 20:48
Помогаю со студенческими работами здесь

Функция XOR
Как выполнить функцию XOR для массива?

Используя операции not, and, or, xor
Используя операции not, and, or, xor записать сложные условия , истиные для следующей ситуации: Число x лежит вне отрезка . Добавлено...

Найти числа, XOR которых равен N
Найти числа, XOR которых равен N

Как работает функция XOR и что она делает?
Как работает функция XOR и что она делает?

Исключающее ИЛИ (XOR). Нужен пример операции побайтного XOR
Может кто-нибудь привести пример операции побайтного XOR?что-то вроде: есть данные,считанные из файла любого формата,эти данные по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru