Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
5 / 5 / 6
Регистрация: 04.12.2011
Сообщений: 179
1

Сложение двух двоичных чисел - разобрать код

12.02.2012, 15:06. Показов 3846. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
выделленную часть не могу понять
программа производит сложение двух двоичных чисел

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
34
35
36
37
var sr, sf, ss: string;
function BinAdd(s1, s2: string): string;
var
  s: string;
  l, i, d, carry: byte;
begin
  {выравнивание строк по длине}
  if length(s1) > length(s2) then
    while length(s2) < length(s1) do
      s2 := '0' + s2
  else
    while length(s1) < length(s2) do
      s1 := '0' + s1;
  l := length(s1);
  s := '';
  carry := 0;
  for i := l downto 1 do
  begin
//вот отсюда 
    d := (ord(s1[i]) - ord('0')) + (ord(s2[i]) - ord('0')) + carry;
    carry := d div 2;
    d := d mod 2;
    s := char(d + ord('0')) + s;
  end;
  if carry <> 0 then
    s := '1' + s;
  BinAdd := s;
//до сих пор
end;
begin
  writeln('введите 1-е двоичное число:');
  readln(sf);
  writeln('введите 2-е двоичное число:');
  readln(ss);
  sr := BinAdd(sf, ss);
  writeln('результат сложения = ', sr);
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2012, 15:06
Ответы с готовыми решениями:

Сложение двоичных чисел
можете помочь исправить ошибки и сделать эту задачу с вычитанием сложение: program summa2;...

Вычитание и сложение двоичных чисел
Помогите написать программу(мы) которая будте выполнять вычитание и сложение двоичных чисел.

Сложение и вычитание двоичных чисел
Помогите написать программу, можно это действие сделать двумя задачами, не обязательно что бы все...

PIC16f84A Сложение двух 2-х разрядных двоичных чисел
Помогите с кодом для PiC16f84a со следующими функциями: сложение двух 2-х разрядных двоичных...

5
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
12.02.2012, 15:22 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
 d := (ord(s1[i]) - ord('0')) + (ord(s2[i]) - ord('0')) + carry; //код первой цифры минус код символа 0
    // плюс код второй цифры минус код символа 0 + перенос из младшего разряда
    //например s1[i]='1' s2[i]='1' перенос=1 будет 1+1+1=3
    carry := d div 2; //перенос будет 3/2=1
    d := d mod 2;//остаток от деления=1
    s := char(d + ord('0')) + s;//в начало строки пишем символ цифры 1=сhr(1+47)='1'
    //кстати  char это ошибка
  end;
  if carry <> 0 then //кончили складывать и, если в переносе 1
    s := '1' + s; //то в начало строки добавляем символ '1'
  BinAdd := s; //присваиваем значение функции
Добавлено через 1 минуту
коды символов '0'..'9' равны 48..57, если из кода вычесть 48, то будет цифра
0
5 / 5 / 6
Регистрация: 04.12.2011
Сообщений: 179
15.02.2012, 22:24  [ТС] 3
а почему используется коды чисел?
почему char это ошибка?

можно ли провести бинарное сложение другим методом? например через массив?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.02.2012, 06:58 4
Цитата Сообщение от ГузелькаС Посмотреть сообщение
можно ли провести бинарное сложение другим методом? например через массив?
Конечно можно.
0
5 / 5 / 6
Регистрация: 04.12.2011
Сообщений: 179
17.02.2012, 12:43  [ТС] 5
а вы можете показать мне пример таких программ?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
17.02.2012, 12:54 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот пример сложения чисел в СС от 2 до 9.
Числа вводятся как строки с проверкой, а сложение идет в массивах цифр.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
uses crt;
var s1,s2:string;
    a,b,c:array[byte] of byte;
    base,na,nb,i,j,n,p:byte;
    t,k:integer;
    f:boolean;
begin
clrscr;
repeat
write('Введите основание СС от 2 до 9 base=');
readln(base);
until base in [2..9];
{ввод чисел с проверкой}
repeat
write('Введите число A:');
readln(s1);
i:=1;
f:=true;
while(i<=length(s1))and f do
if not(ord(s1[i])-48 in [0..base-1])then f:=false
else i:=i+1;
if not f then writeln('Это не число в СС ',base,' повторите ввод');
until f;
repeat
write('Введите число B:');
readln(s2);
i:=1;
f:=true;
while(i<=length(s2))and f do
if not(ord(s2[i])-48 in [0..base-1])then f:=false
else i:=i+1;
if not f then writeln('Это не число в СС ',base,' повторите ввод');
until f;
{нормализация}
na:=length(s1);
nb:=length(s2);
for i:=1 to na do
  begin
    val(s1[i],t,k);
    a[i]:=t;
  end;
for i:=1 to nb do
  begin
    val(s2[i],t,k);
    b[i]:=t;
  end;
if na>nb then
  begin
    n:=na;
    for i:=1 to na-nb do
      begin
        nb:=nb+1;
        for j:=nb downto 2 do
        b[j]:=b[j-1];
        b[1]:=0;
      end;
   end
else if nb>na then
   begin
     n:=nb;
     for i:=1 to nb-na do
       begin
         na:=na+1;
         for j:=na downto 2 do
         a[j]:=a[j-1];
         a[1]:=0;
       end;
    end
else if nb=na then n:=na;
p:=0;
for i:=n downto 1 do
  begin
   c[i]:=a[i]+b[i]+p;
   if (c[i]>base-1)and(i>1) then
      begin
       c[i]:=c[i] mod base;
       p:=1;
      end
    else p:=0;
  end;
if c[1]>base-1 then
  begin
    c[1]:=c[1] mod base;
    n:=n+1;
    for j:=n downto 2 do
    c[j]:=c[j-1];
    c[1]:=1;
  end;
writeln('Chislo C:');
for i:=1 to n do
write(c[i]);
readln
end.
0
17.02.2012, 12:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2012, 12:54
Помогаю со студенческими работами здесь

Построить Машину Тьюринга вычисляющую сложение двух двоичных чисел
Не понимаю принцип, сколько бы не читал. Очень нужна ваша помощь

Сложение двоичных чисел
Здравсвуйте! Даны два массива: int a = {1, 0, 0, 1}; // двоичное число 1001 int b = {0, 1,...

Сложение двоичных чисел
Нужно сложить 2 двоичных числа. Написал класс с двумя методами: DecimalToBinary() - преобразует...

Сложение двоичных чисел
Ввести два действительных двоичных числа, представленных как символьные строки, и найти их сумму. ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru