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

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

Войти
Регистрация
Восстановить пароль
 
kipetilnik
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 20
#1

Перевод из 2-ой в 8-ую СС - C++

13.12.2012, 17:01. Просмотров 1055. Ответов 4
Метки нет (Все метки)

Необходимо реализовать перевод чисел из двоичной в восьмеричную систему счисления.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2012, 17:01     Перевод из 2-ой в 8-ую СС
Посмотрите здесь:

Перевод на С++ C++
C++ Перевод из C++ в C
Перевод из 2 в 10 сс C++
C++ перевод из с++ в с
Перевод C++
Перевод C++
C++ Перевод в 8-ю ЧС
C++ Перевод на С++
Перевод С++ в Си C++
Перевод с С на С++ C++
Перевод из С++ в Си C++
Перевод с Си на С++ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
13.12.2012, 18:00     Перевод из 2-ой в 8-ую СС #2
А можно использовать тип string?
kipetilnik
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 20
13.12.2012, 18:09  [ТС]     Перевод из 2-ой в 8-ую СС #3
Да можно. Буду благодарен за любую помощь))
DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
13.12.2012, 23:09     Перевод из 2-ой в 8-ую СС #4
Может быть, как-то попроще реализовать можно... У меня вот такой вариант:

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
112
113
114
115
116
117
118
119
120
121
122
#include<iostream>
#include<vector>        //вектор
#include<string>        //строки
#include<cstdlib>       //для atoi()
#include<algorithm>     //для reverse()
 
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::reverse;
using std::string;
 
int func(const string str);     //функция для обработки триады - принимает строку из трех символов, преобразует ее в число, затем сравнивает с таблицей и возвращает значение восьмеричной цифры
//Двоичные триады      000  001 010 011 100 101 110 111
//Восьмеричные цифры    0   1   2   3   4   5   6   7
 
 
int main()
{
    setlocale(LC_ALL,"Rus");    //русский язык
 
    string chislo;      //принимает число(в виде строки)
 
    cout<<"Введите двоичное число: ";
    getline(cin,chislo);
 
    string::size_type kol_vo_triad=chislo.size()/3;     //считаем число триад в строке
    string::size_type ost_cifri=chislo.size()%3;        //сколько цифр осталось, не считая триад
 
    string::size_type chislo_cifr=chislo.size()-1;      //получаем число цифр в строке, и отбавляем его на 1, получая позицию последнего символа строки chislo
 
    string triada;                  //строка, в которой будем хранить триады(три символа)
    string::size_type counter=0;    //будет использоваться для заполнения строки triada 3 символами. Диапазон изменения от 0 до 3
    vector<int>perevedennoe_chislo; //здесь будут хранится переведенные из триад числа
 
 
        while(kol_vo_triad--)   //пока есть триады
        {
            counter=0;
 
            while(counter<3)    //заполняем строку 
            {
                triada+=chislo[chislo_cifr];
        
                ++counter;
                --chislo_cifr;
            }
 
            reverse(triada.begin(),triada.end());       //меняем порядок символов в строке triada на обратный
 
            perevedennoe_chislo.push_back(func(triada));    //и передаем в функцию на обработку
 
            triada.clear();     //очищаем строку перед ее следующим использованием
        }
 
 
        if(ost_cifri>0)     //если остались какие-то цифры, кроме триад
        {
            while(true)     //бесконечный цикл, выходим как только все цифры будут использованы
            {
                if(chislo_cifr==0)  //если достигнуты последняя цифра
                {
                    triada+=chislo[chislo_cifr];    //записываем ее в строку
 
                    reverse(triada.begin(),triada.end());   //реверсируем 
 
                    int temp=func(triada);
 
                    if(temp!=0)
                        perevedennoe_chislo.push_back(temp);    //и отправляем на обработку
                        
                break;
                }
 
            triada+=chislo[chislo_cifr];
            --chislo_cifr;
            }
        }
 
 
        cout<<"После перевода из 2-ой в 8-ую систему: ";
 
        reverse(perevedennoe_chislo.begin(),perevedennoe_chislo.end());     //для вывода на экран реверсируем вектор
 
        for(vector<int>::const_iterator begin=perevedennoe_chislo.begin();begin!=perevedennoe_chislo.end();++begin)     //и выводим на экран
            cout<<*begin;
 
        cout<<endl;
 
    return 0;
}
 
int func(const string str)
{
    int chislo=atoi(str.c_str());       //преобразуем строку в число
 
    switch(chislo)      //проверяем его
    {
        case 0:
            return 0;
        case 1:
            return 1;
        case 10:
            return 2;
        case 11:
            return 3;
        case 100:
            return 4;
        case 101:
            return 5;
        case 110:
            return 6;
        case 111:
            return 7;
        default:
            {
            cout<<"Ошибка, выход из программы"<<endl;
            exit(0);
            }
    }
}
Миниатюры
Перевод из 2-ой в 8-ую СС   Перевод из 2-ой в 8-ую СС  
Xitomi3
0 / 0 / 0
Регистрация: 01.11.2014
Сообщений: 57
01.04.2015, 16:35     Перевод из 2-ой в 8-ую СС #5
а как реализовать данный пример используя ввод цифр с использованием массива?
Yandex
Объявления
01.04.2015, 16:35     Перевод из 2-ой в 8-ую СС
Ответ Создать тему
Опции темы

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