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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Выводит какую то ересь http://www.cyberforum.ru/cpp-beginners/thread1097568.html
В общем начал выполнять свою лабораторную, задание которой было таковым: "В заданном предложении указать слово, в котором доля гласных(A, E, I, O)(a, e, i, o) максимальна. Предложение может иметь больше одной строки и заканчивается точкой" Прошу не осуждать что программа без функций. Пока делаю так потом переделаю... Пока что я пробую вывести на экран таблицу(матрицу) в которой будет...
C++ Инвертировать символы (разместить задом наперед) в указанной строке Напишите программу, которая 1. Вводит с клавиатуры число записей в массиве структур n -целое число. 2. Создает динамический массив структур типа: struct rec_{int i; char *cp;} из n элементов (записей). 3. В цикле заполняет массив структур следующими данными: i – порядковый номер записи, cp указывает на введенную с клавиатуры строку символов, которая сохраняется в динамическом массиве с... http://www.cyberforum.ru/cpp-beginners/thread1097565.html
C++ Задан файл из целых чисел со знаком, разделенных пробелом. Произвести чтение этих чисел в обратном порядке, не читая предыдущие.
Есть множество задач анализа данных, записанных в файле, которые можно решить за "линию", не обязательно, сохраняя данные в оперативную память, если бы они поступали "с конца". А прямой анализ занимал бы полином степени повыше. Читать файл с конца- это конечно утопия, но компьютер способен на многое. Я нахожусь в поиске стандартных функций, которые реализовывали бы это, возможно,...
C++ Не выполняет ввод
#include <iostream>; #include <cmath>; #include <vector>; #include <string>; #include <algorithm> #include <windows.h> using namespace ::std; void main () {
C++ Составить рекурсивную процедуру нахождения максимального элемента в массиве http://www.cyberforum.ru/cpp-beginners/thread1097542.html
3. Составить рекурсивную процедуру нахождения максимального элемента в массиве.
C++ Вычислить рекурсивно полином Лежандра порядке n 2. Вычислить рекурсивно полином Лежандра порядке n: P0(x) = 1; P1(x) = x; Pn(x)=((2n-1)Pn-1(x) - (n-1)Pn-2(x)/n подробнее

Показать сообщение отдельно
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
16.02.2014, 13:12     Необходимо вывести двоичное представление числа на экран.
Собственно само задание..
Код вроде вполне правильный, но все же не работает((
Не могу понять в чем проблема..
Прошу руку помощи))

С клавиатуры вводится целое число. Необходимо вывести его двоичное представление на экран.
Программа должна поддерживать все целочисленные типы данных языка реализации (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 минут
прошу Вас о помощи
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru