![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Acad |
![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 4 Репутация: ![]() ![]() ![]() |
Сложение и вычитание в двоичной системе.
Кто поможет? |
![]() ![]() |
mj |
![]()
Сообщение
#2
|
![]() Adminь ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
1 + 0 = 1, 1 + 1 = 10, а дальше как обычное сложение
пример: 00101001 + 00010001 = 00111010 10 - 1 = 1, 1 - 1 = 0, а дальше как обычное вычетание пример: 00101001 - 00010001 = 00011000 |
Acad |
![]()
Сообщение
#3
|
![]() Группа: Пользователи Сообщений: 4 Репутация: ![]() ![]() ![]() |
Я имел в виду не саму двоичную арифметику, а реализацию этого на Pascal'е...
То есть: program BinMinus; write('Введите первое число в двоичной системе счисления: '); readln... write('Введите второе число в двоичной системе счисления: '); readln... ...считаем... write('Результат равен: '); ... end. Меня интересует что написать вместо ...считаем..., а то у меня не получается ![]() |
mj |
![]()
Сообщение
#4
|
![]() Adminь ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Можно сначала конвертировать в числовую переменную, сложить/отнять, а потом обратно...
А можно работать прям со строковыми данными... Что из этого тебя интересует? |
Acad |
![]()
Сообщение
#5
|
![]() Группа: Пользователи Сообщений: 4 Репутация: ![]() ![]() ![]() |
Нужно со строковыми данными...
Кой-чего я уже написал: Код 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 - 17.12.2004 2:07 |
mj |
![]()
Сообщение
#6
|
![]() Adminь ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Код program BinMinus; write('Введите первое число в двоичной системе счисления: '); readln... write('Введите второе число в двоичной системе счисления: '); readln... ... res := IntToBin(BinToInt(X1)-BinToInt(X2)); ... write('Результат равен: '); ... end. Сообщение отредактировано: volvo - 17.12.2004 2:08 |
mj |
![]()
Сообщение
#7
|
![]() Adminь ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Код 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 - 17.12.2004 2:08 |
mj |
![]()
Сообщение
#8
|
![]() Adminь ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Код 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 - 17.12.2004 2:09 |
Acad |
![]()
Сообщение
#9
|
![]() Группа: Пользователи Сообщений: 4 Репутация: ![]() ![]() ![]() |
|
mj |
![]()
Сообщение
#10
|
![]() Adminь ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
а я и забыл что shr и shl в паскале тоже есть...
|
![]() ![]() |
![]() |
Текстовая версия | 23.06.2025 23:28 |