Форум программистов, компьютерный форум 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 подробнее

Показать сообщение отдельно
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.02.2014, 00:32     Необходимо вывести двоичное представление числа на экран.
2. Отрицательное число переводит в обратный код а не в дополнительный по той же самой причине:
C++
1
2
3
4
5
6
7
8
9
10
for (int i = 31; i >= 0; i--)
        {
            if (str[k] == '1')
                str[k] = '0';
            else
            {
                str[k] = '1';
                break;
            }
        }
За итератор взята переменная i, а обращение каждый раз происходит к элементу с индексом k, который даже не изменяется никак в ходе выполнения цикла.
Надо исправить на:
C++
1
2
3
4
5
6
7
8
9
for (int i = 31; i >= 0; i--)
        {
            if (str[i] == '1')
                str[i] = '0';
            else
            {
                str[i] = '1';
                break;
            }
И будет корректно выводиться число в дополнительном коде.

Добавлено через 2 минуты
На текущий момент код выглядит так:
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
107
108
109
110
111
#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[i] = '0';
    cout << "Vvedite desiatichnoe chislo:\n";
    cin >> str2;
    if (str2[0] == '-')
    {
        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[i] == '1')
                str[i] = '0';
            else
            {
                str[i] = '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 dvoichnoi sisteme schislenia: " << endl;
    for (int i = 0; i <= 31; i++)
        cout << str[i];
    /*
    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;
    }
     //выводим отрицательное число
    */
    system("pause");
}
Закомментировал не проверенную область в которой к тому же были ошибки с расстановкой фигурных скобок.
 
Текущее время: 21:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru