Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
-2 / 0 / 1
Регистрация: 09.10.2012
Сообщений: 44
1

Преобразовать набор нулей и единиц (двоичное число) в десятичное

09.10.2012, 23:34. Показов 1772. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вот задание - С помощью целочисленных и сдвиговых операций преобразовать введенный с клавиатуры набор нулей и единиц (т.е. двоичное число) в десятичное.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2012, 23:34
Ответы с готовыми решениями:

Преобразовать строку, содержащую произвольную последовательность нулей и единиц (двоичное число), в целое число
Помогите пожалуйста с заданием Написать функцию, которая преобразует строку, содержащую...

Преобразовать десятичное число в двоичное
Vообщем немного не стандартная задача. Мне нужно преобразовать десятичное число в двоичное. И...

Преобразовать семиразрядное двоичное число в десятичное
Помогите решить контрольную в turbo pascal ! написать программу,которая преобразует введенне с...

Как преобразовать двоичное число в десятичное?
Как перделать двуичное число в десятичное (с помощью какой функции можно реализовать)

9
14 / 13 / 5
Регистрация: 04.10.2012
Сообщений: 29
10.10.2012, 02:40 2
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
var i, multiply,result:longint;
    digit:byte;
    fail:boolean;
begin
    writeln('Input binary number:');
        readln(i);
        multiply := 1;
        result:=0;
    fail:=false;
        repeat
        {Вычисление младшей значащей цифры}
                digit := i mod 10;
 
        if((digit <> 0) and (digit <> 1))then
        begin
            {Число не двоичное}
            writeln('Number is not binary');
            fail:=true;
            break;
        end;
 
        {Целочисленное деление на 2 сдвигом на 1 бит вправо}
                i := i shr 1;
 
        {Целочисленное деление на 5,
         чтобы вместе с предыдущей операцией получилось деление на 10}
        i := i div 5;
 
        {Вычисление результата результата}
        result:=result+digit*multiply;
 
        {Обновление разрядного множителя}
        multiply:=multiply*2;
        until i = 0;
    if (fail=false)then
    begin
        writeln('Decimal number:');
        writeln(result);
    end;
end.
Добавлено через 52 минуты
Если мало битовых операций, то можно так:
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
var i, multiply,result:longint;
    digit:byte;
    fail:boolean;
begin
    writeln('Input binary number:');
        readln(i);
        multiply := 1;
        result:=0;
    fail:=false;
        repeat
        {Вычисление младшей значащей цифры}
                digit := i and 1;
 
        if((i mod 10 <> 0) and (i mod 10 <> 1))then
        begin
            {Число не двоичное}
            writeln('Number is not binary');
            fail:=true;
            break;
        end;
 
        {Целочисленное деление на 2 сдвигом на 1 бит вправо}
                i := i shr 1;
 
        {Целочисленное деление на 5,
         чтобы вместе с предыдущей операцией получилось деление на 10}
        i := i div 5;
 
        {Вычисление результата результата}
        result:=result+digit*multiply;
 
        {Обновление разрядного множителя}
        multiply:=multiply*2;
        until i = 0;
    if (fail=false)then
    begin
        writeln('Decimal number:');
        writeln(result);
    end;
end.
1
-2 / 0 / 1
Регистрация: 09.10.2012
Сообщений: 44
11.10.2012, 18:01  [ТС] 3
Спасибо) а можно еще блок-схему к 1 варианту программы?
0
Tengu
25.10.2012, 17:19 4
спасибо)
5 / 5 / 1
Регистрация: 26.10.2012
Сообщений: 20
27.10.2012, 19:09 5
Ограничения на двоичное число имеются?

Добавлено через 9 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
type
    int=integer;
var
    result,k:longint;
    i:int;
    input:string;
begin
readln(input);
k:=1;
for i:=length(input) downto 1 do begin
    result:=result+k*(ord(input[i])-ord('0'));
    k:=k*2;
end;
writeln(result);
readln;
end.
Вот такой исходник приходит на ум... В нём нет операций побитовых сдвигов shr и shl. Работает он на строках длинной не более 31 символа. Т.к. иначе переполнение типа longint.

Добавлено через 28 минут
К слову k:=k*2; Можно заменить на k:=k shl 1;
Вот и побитовый сдвиг. Другое дело, что от вас, вероятно, что-то другое хотят...
0
34 / 34 / 19
Регистрация: 17.11.2012
Сообщений: 109
Записей в блоге: 2
02.12.2012, 22:37 6
Поясни ясней задание пожалуста
0
259 / 94 / 24
Регистрация: 18.04.2011
Сообщений: 719
Записей в блоге: 1
02.12.2012, 22:42 7
Цитата Сообщение от Ce7eH_111 Посмотреть сообщение
Поясни ясней задание пожалуста
Пользователь вводит число с клавиатуры в двоичном виде. Задача - перевести число в десятичную систему счисления.
Я так понял задание.
0
-2 / 0 / 1
Регистрация: 09.10.2012
Сообщений: 44
03.12.2012, 02:25  [ТС] 8
Цитата Сообщение от EvilVoodoo Посмотреть сообщение
Пользователь вводит число с клавиатуры в двоичном виде. Задача - перевести число в десятичную систему счисления.
Я так понял задание.
ИМЕННО)

Добавлено через 9 минут
Цитата Сообщение от doc0 Посмотреть сообщение
ИМЕННО)
но организовываться это должно с помощью целочисленных и сдвиговых операций(
0
-2 / 0 / 1
Регистрация: 09.10.2012
Сообщений: 44
28.12.2012, 21:50  [ТС] 9
С помощью целочисленных и сдвиговых операций преобразовать введенный с клавиатуры набор нулей и единиц (т.е. двоичное число) в десятичное. САМО ЗАДАНИЕ - Выполнить соответствующий вариант из задания к работе с ис-пользованием оператора цикла с параметром For.
Код Pascal
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program project2;
var
x:longint;
i, n:integer;
begin
writeln('Введите натуральное число (макс. 9 знаков): ');
readln(x);
n:=1;
write('Число состоит из цифр: ');
write(' ');
for i:=0 to 10 do
begin
n := x mod 2;
write(#8,n);
x := x div 2;
n := n+1;
if x = 0 then break;
end;
writeln;
writeln('Для выхода нажмите ENTER');
readln
end.
0
314 / 273 / 272
Регистрация: 25.09.2011
Сообщений: 477
29.12.2012, 17:31 10
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var
  s : string;
  i : byte;
  x,x1: longInt;
begin
  write('Input dwoichnoe chislo [0..1] = '); readln(s);
  x:=0; x1:=1;
  for i:=Length(s) downto 1 do
  if s[i] in ['0','1'] then begin
    if s[i]='1' then x:=x+x1;
    x1:=x1 shl 1; { x1:=x1*2}
  end else begin
    writeln('stroka ne sootwetstwuet uslowiu!');
    readln; exit;
  end;
  writeln(s,' = ',x);
  readln;
end.
0
29.12.2012, 17:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2012, 17:31
Помогаю со студенческими работами здесь

Из задаваемой списка нулей и единиц построить десятичное число
Помогите реализовать функцию (TEN n x), которая выдает число в десятичной системе счисления,...

Преобразовать введенное с клавиатуры десятичное число в двоичное
Помогите пожалуйста!!! Преобразовать введенное с клавиатуры десятичное число в двоичное.Нужно...

Преобразовать введенное пользователем десятичное число в двоичное
Помогите исправить прогу ПЛЗ!!! Условие: Написать программу, которая преобразует введеное...

Преобразовать введенное с клавиатуры десятичное число в двоичное
Преобразовать введенное с клавиатуры десятичное число в двоичное.Нужно через процедуру....


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

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