Сложение/вычитание в двоичной системе |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Сложение/вычитание в двоичной системе |
Acad |
Сообщение
#1
|
Группа: Пользователи Сообщений: 4 Репутация: 0 |
Сложение и вычитание в двоичной системе.
Кто поможет? |
mj |
Сообщение
#2
|
Adminь Группа: Пользователи Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
1 + 0 = 1, 1 + 1 = 10, а дальше как обычное сложение
пример: 00101001 + 00010001 = 00111010 10 - 1 = 1, 1 - 1 = 0, а дальше как обычное вычетание пример: 00101001 - 00010001 = 00011000 |
Acad |
Сообщение
#3
|
Группа: Пользователи Сообщений: 4 Репутация: 0 |
Я имел в виду не саму двоичную арифметику, а реализацию этого на Pascal'е...
То есть: program BinMinus; write('Введите первое число в двоичной системе счисления: '); readln... write('Введите второе число в двоичной системе счисления: '); readln... ...считаем... write('Результат равен: '); ... end. Меня интересует что написать вместо ...считаем..., а то у меня не получается |
mj |
Сообщение
#4
|
Adminь Группа: Пользователи Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
Можно сначала конвертировать в числовую переменную, сложить/отнять, а потом обратно...
А можно работать прям со строковыми данными... Что из этого тебя интересует? |
Acad |
Сообщение
#5
|
Группа: Пользователи Сообщений: 4 Репутация: 0 |
Нужно со строковыми данными...
Кой-чего я уже написал: Код program BinMinus; type massiv=array[1..20] of string; var a,b,k,x,i,BOL,BTL:integer;BO,BT:string;BOm,BTm,BThm:massiv; begin writeln('---------------------------------------------------'); write('Введите первое число в двоичной системе счисления: '); readln(BO); write('Введите второе число в двоичной системе счисления: '); readln(BT); for i:=1 to 20 do BOm[i]:=BO[i]; for i:=1 to 20 do BTm[i]:=BT[i]; for i:=20 downto 1 do begin if (BOm[i]='0') and ((BTm[i]='0') or (BTm[i]=' ')) then BThm[i]:='0'; if (BOm[i]='1') and ((BTm[i]='0') or (BTm[i]=' ')) then BThm[i]:='1'; if (BOm[i]='1') and (BTm[i]='1') then BThm[i]:='0'; if (BOm[i]='1') and (BTm[i]='') then BThm[i]:='1'; if (BOm[i]='0') and (BTm[i]='1') then begin BThm[i]:='1';k:=i-1; repeat if BOm[k]='1' then begin BOm[k]:='0';x:=0; end else begin BOm[k]:='1';k:=k-1 end; until x=0; end; end; write('Результат равен: '); for i:=1 to 20 do write(BThm[i]); end. Но получилось запутанно и работает "не совсем" :-/ Можно ли проще? Сообщение отредактировано: volvo - |
mj |
Сообщение
#6
|
Adminь Группа: Пользователи Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
Код program BinMinus; write('Введите первое число в двоичной системе счисления: '); readln... write('Введите второе число в двоичной системе счисления: '); readln... ... res := IntToBin(BinToInt(X1)-BinToInt(X2)); ... write('Результат равен: '); ... end. Сообщение отредактировано: volvo - |
mj |
Сообщение
#7
|
Adminь Группа: Пользователи Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
Код function IntToBin(I: Integer): String; begin Res := ''; while I>0 do begin Res := Char((I and 1)+48)+Res; asm shr I, 1 end; end; IntToBin := Res; end; Сообщение отредактировано: volvo - |
mj |
Сообщение
#8
|
Adminь Группа: Пользователи Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
Код function BinToInt(B: String): Integer; var F: Byte; Res: Integer; begin Res := 0; for F := 1 to Length(F) do begin if B[F]='0' then begin asm shl Res, 1 end; end; if B[F]='1' then begin asm shl Res, 1 or Res, 1 end; end; end; BinToInt := Res; end; Сообщение отредактировано: volvo - |
Acad |
Сообщение
#9
|
Группа: Пользователи Сообщений: 4 Репутация: 0 |
|
mj |
Сообщение
#10
|
Adminь Группа: Пользователи Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
а я и забыл что shr и shl в паскале тоже есть...
|
Текстовая версия | 17.09.2024 13:06 |