IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Сложение/вычитание в двоичной системе
Acad
сообщение 19.01.2003 0:58
Сообщение #1





Группа: Пользователи
Сообщений: 4

Репутация: -  0  +


Сложение и вычитание в двоичной системе.
Кто поможет?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов(1 - 9)
mj
сообщение 19.01.2003 1:08
Сообщение #2


Adminь
****

Группа: Администраторы
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


1 + 0 = 1, 1 + 1 = 10, а дальше как обычное сложение
пример: 00101001 + 00010001 = 00111010

10 - 1 = 1, 1 - 1 = 0, а дальше как обычное вычетание
пример: 00101001 - 00010001 = 00011000
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Acad
сообщение 19.01.2003 1:31
Сообщение #3





Группа: Пользователи
Сообщений: 4

Репутация: -  0  +


Я имел в виду не саму двоичную арифметику, а реализацию этого на Pascal'е...

То есть:

program BinMinus;
write('Введите первое число в двоичной системе счисления: ');
readln...
write('Введите второе число в двоичной системе счисления: ');
readln...

...считаем...

write('Результат равен: ');
...
end.


Меня интересует что написать вместо ...считаем..., а то у меня не получается sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mj
сообщение 19.01.2003 1:40
Сообщение #4


Adminь
****

Группа: Администраторы
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


Можно сначала конвертировать в числовую переменную, сложить/отнять, а потом обратно...
А можно работать прям со строковыми данными...
Что из этого тебя интересует?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Acad
сообщение 19.01.2003 1:52
Сообщение #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 - 17.12.2004 2:07
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mj
сообщение 19.01.2003 1:57
Сообщение #6


Adminь
****

Группа: Администраторы
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


Код

program BinMinus;
write('Введите первое число в двоичной системе счисления: ');
readln...
write('Введите второе число в двоичной системе счисления: ');
readln...

...
res := IntToBin(BinToInt(X1)-BinToInt(X2));
...

write('Результат равен: ');
...
end.


Сообщение отредактировано: volvo - 17.12.2004 2:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mj
сообщение 19.01.2003 2:07
Сообщение #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 - 17.12.2004 2:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mj
сообщение 19.01.2003 2:15
Сообщение #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 - 17.12.2004 2:09
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Acad
сообщение 19.01.2003 2:21
Сообщение #9





Группа: Пользователи
Сообщений: 4

Репутация: -  0  +


Спасибо!
Все работает! :)

Функция перенесена в FAQ: Общие вопросы по математике
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mj
сообщение 19.01.2003 2:33
Сообщение #10


Adminь
****

Группа: Администраторы
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


а я и забыл что shr и shl в паскале тоже есть...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 23.06.2025 23:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"