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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
doomer74
1 / 1 / 0
Регистрация: 01.12.2011
Сообщений: 51
#1

Перевод десятичного числа во внутреннее представление - C++

20.04.2012, 20:11. Просмотров 1543. Ответов 6
Метки нет (Все метки)

Всем привет. Сделал программу перевода десятичного числа во внутреннее представление. Число лежит в диапазоне от -128 до 127 (тип char). Также реализован циклический сдвиг вправо и влево.
Препод попросил исправить следующий недочет:
Вывести в функции output массив char* по %s без всяких циклов. Для этого записывать в массив char* символы '0' и '1' в функции
dvoichperevod (не забытьпро '\0' в конце).
Но я не знаю, как это сделать, если без цикла. Помогите, пожалуйста, исправить программу.

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
#include <conio.h>
#include <clocale>
#include <stdio.h>
#include <stdlib.h>
 
void dvoichperevod(char *binnumber, char decnumber) // Функция, в которой десятичное число переводится во внутреннее двоичное представление. 
                                                    // decnumber - десятичное число. binnumber - массив, в который записываются полученные в результате сдвига decnumber
                                                    // вправо и побитового умножения на 1 цифры: 0 или 1
{
        for (int i = 0; i < sizeof(decnumber)*8; i++) 
            binnumber[i] = (decnumber >> sizeof(decnumber)*8-1-i) & 1; // Цикл, в котором записываются в массив binnumber цифры 0 или 1
}
 
char leftsdvig(unsigned char chislo, int domg) // Функция сдвига влево. domg - введенное число, являющееся количеством разрядов, на которое следует произвести 
                                               // циклический сдвиг влево. chislo - число, над которым производится операциия сдвига
{
        int dbit = sizeof(chislo)*8;
        return chislo << domg % dbit | chislo >> dbit - domg % dbit;
}
 
char rightsdvig(unsigned char chislo, int domg) // Функция сдвига вправо. domg - введенное число, являющееся количеством разрядов, на которое следует произвести 
                                                // циклический сдвиг вправо. chislo - число, над которым производится операция сдвига
{
        int dbit = sizeof(chislo)*8;
        return chislo >> domg % dbit | chislo << dbit - domg % dbit;
}
 
int scanfik() // Функция ввода переменных
{
    int a = 0, chr = 0;
    while (!chr || (a < -128) || (a > 127))
        {
                chr = scanf("%d", &a);
                fflush(stdin); // Сброс буфера ввода
        }
    return a; // Возвращает значение введенной переменной
}
 
void output(char *n, int bitr) // Функция вывода результата в консоль
{
                int m = 0;
                while (m < bitr*8)
                    printf("%d", n[m++]);
                printf("\n\n");
}
 
void main() // Тело основной программы
{
 setlocale(LC_CTYPE, "rus");
 char dvoich[8], chooser = 0,  result;
 int number = 0 ;
 
 printf(" Введите десятичное число в диапазоне от -128 до 127: ");
 number = scanfik(); // Введённое десятичное число в функции scanfik() присваивается переменной number
 dvoichperevod(dvoich, number); // Вызов функции, переводящей введенное число во внутреннее двоичное представление
 printf(" Двоичное представление числа: ");
 output(dvoich, 1); // Вывод в консоль двоичного представления числа
 
 printf(" Выберите, какой циклический сдвиг вы желаете произвести: \n");
 printf(" Клавиша '1' - Произвести циклический сдвиг числа влево\n");
 printf(" Клавиша '2' - Произвести циклический сдвиг числа вправо\n");
 printf("\n Клавиша '3' - выход из программы");
 
 do
 {
    chooser = _getch(); // Присваиваем переменной choose функцию _getch(), считывающую введенный символ
    switch(chooser) // Перебираем значения введенной переменной
    {
    case '1': printf(" \n Введите число разрядов для сдвига влево: ");
              result = leftsdvig(number, scanfik()); // Присваивание переменной result результата работы функции сдвига влево
              break;
    case '2': printf(" Введите число разрядов для сдвига вправо: ");
              result = rightsdvig(number, scanfik()); // Присваивание переменной result результата работы функции сдвига вправо
              break;
    case '3': exit(1);
    default: printf("\n Такого пункта нет\n"); // Если будут нажаты другие клавиши, в консоль будет выведено соответствующее сообщение
             break;
    }
 
 dvoichperevod(dvoich, result); // Вызов функции, переводящей введенное число во внутреннее двоичное представление
 printf(" \n Число в двоичном представлении: ");
 output(dvoich, 1); // Вызов функции, выводящей число в консоль
 printf(" Число в десятичной системе счисления: ");
 printf("%d", result);
 printf(" \n\n Нажмите клавишу '3' для выхода из программы\n");
 printf(" Нажмите клавишу '1', если желаете снова сделать циклический сдвиг влево\n");
 printf(" Нажмите клавишу '2', если желаете снова сделать циклический сдвиг вправо\n");
 }
 while (chooser != '3');
 _getch();
 }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2012, 20:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод десятичного числа во внутреннее представление (C++):

Перевод даты из символьного формата во внутреннее представление и обратно - C++
Разработать функцию, которая переводит дату из символьного формата «дд.мм.гггг» во внутреннее представление и обратно.Только чтобы не...

Внутреннее представление числа в памяти - C++
нужно сделать реализацию числа в памятиfloat d1 = 72.9e-8;... а как??? это нужно число перевести в двоичную систему, или как???

Перевод десятичного числа в шестнадцатеричное - C++
если не трудно, помогите с прогой, которая преобразует введенное десятичное число в шестнадцатеричное.

Перевод десятичного числа в двоичное - C++
вот, что я написал #include&lt;iostream&gt; #include&lt;locale.h&gt; using namespace std; int main(){ setlocale(LC_ALL,&quot;rus&quot;); int digit;...

Перевод десятичного числа в двоичное - C++
Доброго времени суток всем. Программа выполняет перевод десятиричного числа в двоичное, если остаток от деления a%b==0; записывает что b (в...

Перевод длинного десятичного числа в шестнадцатиричное - C++
Здравствуйте. Очень интересует меня вопрос: как перевести большое число (до 2^128), представленное в виде строки из 10-ричной СС в число...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
20.04.2012, 20:18 #2
по-моему никак. У тебя же char форматируется при выводе как %d, а не %с
, то есть выводятся десятичные числа, а не символы.
Если ты сделаешь %s - будет выведен весь массив(если\0 в конце добавить), но выглядеть он будет, как строка символов, а не число.
0
doomer74
1 / 1 / 0
Регистрация: 01.12.2011
Сообщений: 51
20.04.2012, 20:52  [ТС] #3
Ну вот как я понял, надо реализовать запись char строки в массив char непосредственно в функции перевода. Потом уже тупо этот массив вывести не с форматированием %d в цикле, а просто как строку... Но как.

Добавлено через 30 минут
Что же, совсем никто не поможет? Может быть, можно как-то реализовать с помощью функции strcpy ?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
20.04.2012, 21:14 #4
ты должен понимать разницу между числами и символами.
unsigned char c= '0' ; c= '1'
и c=0; c= 1 - это разные вещи
твоя функция void dvoichperevod(char *binnumber, char decnumber)
записывает в char именно 0 / 1 без кавычек.
массив таких чисел через %s не вывести.
0
doomer74
1 / 1 / 0
Регистрация: 01.12.2011
Сообщений: 51
20.04.2012, 21:18  [ТС] #5
Это я понимаю. Но мне как мне это вот понимание применить?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
20.04.2012, 21:22 #6
ну для начала определись символы в массиве ты хочешь двигать или биты в байтах числа
0
doomer74
1 / 1 / 0
Регистрация: 01.12.2011
Сообщений: 51
20.04.2012, 21:24  [ТС] #7
Наверное, придется символы двигать. Раз такое требование.
Иначе я не знаю, как сделать, чтобы функция возвращала значение числа, и при этом в функции output выводился массив символов.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2012, 21:24
Привет! Вот еще темы с ответами:

Рекурсия: перевод десятичного числа в двоичное - C++
Здравствуйте. Пытался написать пример перевода десятичного числа в двоичный с использованием рекурсии . Но при запуске выводит просто ноль...

Перевод числа из двоично-десятичного в десятичное - C++
Помогите! Нужна программа перевода числа из двоично-десятичного в десятичное

Перевод десятичного числа в двоичное число - C++
Всем доброго времени суток! Собственно вот мой код, который должен переводисть число десятичное в число двоичное. Потестил я его, со...

Перевод вещественного десятичного числа в любую СС - C++
При запуске программы пользователь вводит вещественное число, записанное в десятичной системе и основание системы счисления, в которую он...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.04.2012, 21:24
Ответ Создать тему
Опции темы

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