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

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

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

 
Closed Topic Открыть новую тему 
> Сложение/вычитание в двоичной системе
сообщение
Сообщение #1





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

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


Сложение и вычитание в двоичной системе.
Кто поможет?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Adminь
****

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

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


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

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





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

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


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

То есть:

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

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

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


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


Adminь
****

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

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


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


Adminь
****

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

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


Код

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

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

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


Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





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

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


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

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


Adminь
****

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

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


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

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

 





- Текстовая версия 29.03.2024 8:44
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name