Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.65
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
#1

Необходимо вывести двоичное представление числа на экран. - C++

16.02.2014, 13:12. Просмотров 3764. Ответов 20
Метки нет (Все метки)

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

С клавиатуры вводится целое число. Необходимо вывести его двоичное представление на экран.
Программа должна поддерживать все целочисленные типы данных языка реализации (char, int, long int, unsigned int, unsigned long int для языка C/C++, integer, byte, word, shorting, longint для Pascal/Delphi).
Отрицательные числа выводятся в дополнительном коде.
Необходимо также решить обратную задачу: преобразовать двоичное число в десятичный вид.
Замечания:
1. Дополнительный код образуется из прямого путем инверсии бит и прибавления единицы:
Пример: -5: 5 = 00000101, -5 = not(5)+1 = 11111010+1 = 11111011
2. Запрещается использовать для машинно-зависимые методы и библиотеки языков программирования.
1. В качестве одного из вариантов решения предлагается следующие алгоритм на псевдоязыке:

Код
program Translate1;
s : string;
begin
 enter(a);
 s:=’’;
 while a<>0 do
   if  (abs(a) mod 2) then s:=’1’+s else s:=’0’+s;
   a:=abs(a) div 2;
 end while;
 if a<0 then
  mind:=0;
  for i:=1 to 8 do
    k:=val(s[8-i+1])+1+mind;
    s[8-i+1]:=k;
    if k=2 then begin
      s[8-i+1]:=’0’; mind:=1;
    endif  
    if k=3 then begin
      s[8-i+1]:=’1’; mind:=1;
    endif  
  endfor
 endif
end;
где div и mod  - операции целочисленного деления и деления по модулю соответственно.
 
program Translate1;
s : string;
begin
 enter(a);
 s:=’’;
 while a<>0 do
   if  (abs(a) shr 1) and (1 shl (sizeof(a)+1) + 1) then s:=’1’+s else s:=’0’+s;
   a:=abs(a) shr 2;
 end while;
 if a<0 then
  mind:=0;
  for i:=1 to 8 do
    k:=val(s[8-i+1])+1+mind;
    s[8-i+1]:=k;
    if k=2 then begin
      s[8-i+1]:=’0’; mind:=1;
    endif  
    if k=3 then begin
      s[8-i+1]:=’1’; mind:=1;
    endif  
  endfor
 endif
end;
где shr и sizeof - операции сдвига вправо и определения размера типа в битах соответственно.

А вод и код:
C++
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
94
95
96
97
98
99
100
101
102
103
104
105
106
#include"stdafx.h"
#include<iostream>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
int main(void)
{ 
char *end; //указатель на последний символ строки
char str[32];
int k;
char str2[10];//строка с наибольшим числом
 
for (int i = 0; i <= 31; ++i)
str[k] = '0';
cout << "Vvedite desiatichnoe chislo:\n";
cin >> str2;
if (str2[0]=='-')
{
long int bb=strtol(str2,&end,10);//строку str2 по основанию 10, т.е. переводим в десят систему
k=31;
while (bb != 0)
{
if ((bb % 2) != 0)
str[k] = '1';
--k;
bb = bb / 2;
}
 
for ( k=0;k<=31;k++)
{
if (str[k]!='1')
str[k]='1';
else
str[k]='0';
};
 
for (int i=31;i>=0;i--)
{
if (str[k]=='1')
str[k]='0';
else
{str[k]='1';
break;}
}
 
}
else
{ unsigned long int bb=strtoul(str2,&end,10);
k=31;
while (bb != 0)
{
if ((bb % 2) != 0)
str[k] = '1';
--k;
bb = bb / 2;
}
};
cout << "Chislo v desiatichnoi sisteme schislenia: "<<endl;
for (int i=0;i<=31;i++)
cout<<str[k];
cout<<endl;
 
{char str3[32];
char str[32];
long tmp = 0;//отрицательное
unsigned long int ptr=0;//положительное
for (int i = 0; i <= 31; ++i)
str[k] = '0';
cout<<"Vvedite chislo v dvoichnoi sisteme schislenia:\n"<<endl;;
cout<<"********************************"<<endl;
cout<<"\n";
cin>>str3;
{int k=0;
for(int i=31,k=strlen(str3)-1;i>=0;i--,k--)//весь массив заполняем нулями
{str[k]=str3[k];//а введенное число заносим в конец
if (k==0)
break;}
 
cout<<"Chislo v desiatichnoi sisteme (polo)I(itel'noe):\n";
for ( int i = 31, k = 0; i >= 0; i--, k++)
ptr= ptr + (str[k] - '0') * pow(2,k);//переводим двоичное число в положительное десятичное
cout<<ptr<<"\n"<<endl; //через степень числа 2
 
for ( k=0;k<=31;k++)
{
if (str[k]!='1')//инвертируем введенное двоичное число
str[k]='1';//0 меняем на 1 и наоборот
else
str[k]='0';
}
 
for (int i = 31, k = 0; i >= 0; i--, k++)
tmp = tmp + (str[k] - '0') * pow(2,k);
tmp=(tmp+1)*(-1); //прибавляем единицу по правилу
 
if (tmp<0)
{cout<<"Chislo v desiatichnoi sisteme(otricatel'noe):\n";
cout<<tmp<<endl;}}} //выводим отрицательное число
 
 
getchar();
system("pause");
}
Добавлено через 11 часов 47 минут
прошу Вас о помощи
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2014, 13:12     Необходимо вывести двоичное представление числа на экран.
Посмотрите здесь:

Двоичное представление типов данных C++
Определить, является ли симметричным двоичное представление длинного целого числа C++
C++ двоичное представление
Вывести на экран шестнадцатеричное представление натурального числа C++
C++ Программа показывающая внутреннее двоичное представление типа данных
Двоичное представление символов ASCII C++
C++ Двоичное представление символов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2014, 02:43     Необходимо вывести двоичное представление числа на экран.
Еще ссылки по теме:

Получить двоичное строковое представление целого неотрицательного числа C++
C++ Двоичное представление double
C++ Двоичное представление
C++ Получить двоичное представление числа р в виде последовательности нулей и единиц
Двоичное представление числа C++

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

Или воспользуйтесь поиском по форуму:
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
18.02.2014, 02:43  [ТС]     Необходимо вывести двоичное представление числа на экран. #21
Цитата Сообщение от Alex566 Посмотреть сообщение
В смысле ограничить в 4 символа? И сделать максимальным числом 7?
да.
Yandex
Объявления
18.02.2014, 02:43     Необходимо вывести двоичное представление числа на экран.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru