Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 2
Регистрация: 25.10.2012
Сообщений: 26
1

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

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

Author24 — интернет-сервис помощи студентам
Необходимо реализовать перевод чисел из двоичной в восьмеричную систему счисления.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2012, 17:01
Ответы с готовыми решениями:

Перевод кода с Паскаля (перевод в метры)
var a,b,d:integer; c,e:real; begin writeln('1-дециметр 2-километр'); writeln('3-метр ...

Заменить в строке все пробелы на перевод строки, а перевод строки изменить на два перевода
Меня интересует следующий вопрос: как заменить в моем стринге все пробелы на переходы на новую...

Разбиение строки на части, перевод строки в число и перевод числа
Есть задание: 1. Необходимо реализовать консольное приложение, позволяющее манипулировать строкой,...


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

Или воспользуйтесь поиском по форуму:
4
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
13.12.2012, 18:00 2
А можно использовать тип string?
1
1 / 1 / 2
Регистрация: 25.10.2012
Сообщений: 26
13.12.2012, 18:09  [ТС] 3
Да можно. Буду благодарен за любую помощь))
1
43 / 41 / 20
Регистрация: 12.11.2011
Сообщений: 188
13.12.2012, 23:09 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-ую СС  
0
0 / 0 / 0
Регистрация: 01.11.2014
Сообщений: 62
01.04.2015, 16:35 5
а как реализовать данный пример используя ввод цифр с использованием массива?
0
01.04.2015, 16:35
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru