Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71

Перевод из двоичной системы исчисления в четверичную

21.10.2023, 16:25. Показов 1143. Ответов 11

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! Кто может подсказать мою ошибку в задаче, где надо перевести число из двоичной системы исчисления в четверичную. Вводятся основание a новой системы счисления и длина l исходного числа в двоичной системе. Здесь суть в том чтобы разбить число на пары и каждое как-бы ещё раз перевести в двоичную систему исчисления. Например число 1011100001 мы разбиваем на 5 пар: 10, 11, 10, 00, 01. и если каждое число снова перевести в двоичную систему то получим цифры: 2, 3, 2, 0, 1. Следовательно получилось число 23201. У меня есть наброски, но они неправильно выводят числа, подскажите пожалуйста в чём проблема.
КОД:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using namespace std;
 
int main()
{
    int a, l;
    cin>>a>>l;
    char ch[l];
    for(int i=0; i<l; i++){
        cin>>ch[i];
    }
    for(int i=0; i<l; i+=2){
       cout<<((ch[i])*2)+((ch[i+1])*1);
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2023, 16:25
Ответы с готовыми решениями:

Перевод из двоичной в десятичную систему исчисления
Проверить правильно ввода этого числа ( в его записи должны быть 0 или 1) при правильном вводе перевести в десятеричную

Машина Тьюринга. Перевод из двоичной в четверичную СС
Перевод числа из двоичной в четверичную СС.

Перевод из десятичной системы в четверичную
Необходимо написать программу, переводящую целые числа из десятичной системы счисления в четверичную. Заранее спасибо!

11
 Аватар для Pphantom
2245 / 1504 / 692
Регистрация: 17.03.2022
Сообщений: 4,794
21.10.2023, 16:41
Ну попробуем:
1) Зачем вы вводите a? В условии задачи указано конкретное основание новой системы счисления, так что вводить его не надо. Собственно, после ввода оно нигде не используется.
2) Зачем вводимое число хранится в виде массива символов? Дальше вы выполняете арифметические операции не с фактически введенными числами, а с кодами соответствующих символов, которые, естественно, равны чему-то другому. Смените тип элементов массива ch на какой-нибудь целочисленный.
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
21.10.2023, 17:27
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string> 
using namespace std;
 
int main()
{
    int ch;
    cin>>ch;
    string s;
    while(ch!=0){
        char cnext=ch%4+'0';
        s = cnext+s;
        ch>>=2;
    }
    cout<<s;
    return 0;
}
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
21.10.2023, 17:33  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
string s;
zss, мне надо использовать только тип char и int
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
21.10.2023, 17:38
Цитата Сообщение от igorek_21 Посмотреть сообщение
мне надо использовать только тип char и int
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
    int ch;
    cin>>ch;
    char s[32]={};
    int i=0;
    while(ch!=0){
        char cnext=ch%4+'0';
        s[i++] = cnext;
        ch>>=2;
    }
    for(int j=i-1;j>=0;j--)
        cout<<s[j];
    return 0;
}
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
21.10.2023, 17:39  [ТС]
zss, У вас неправильно работает код
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
21.10.2023, 17:42
Приведите пример, когда неправильно.
Да, а Вы вводите число в десятичной системе?
В двоичную преобразование делает оператор
C++
1
cin>>ch;
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
21.10.2023, 17:44  [ТС]
zss, нет, я же прописал, что вводить надо число в двоичной системе, а выводить в четверичной, и суть программы тоже, это вообще не то, что Вы мне предлагаете
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
21.10.2023, 18:12
Цитата Сообщение от igorek_21 Посмотреть сообщение
вводить надо число в двоичной системе
Так это еще проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
    char ch[64]={},s[32]={};
    cin>>ch;
    int i=0,j=0;
    while(ch[i]!=0){
        char cnext=((ch[i]-'0')<<1) + ch[i+1];
        s[j++] = cnext;
        i+=2;
    }
    cout<<s;
    return 0;
}
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71
21.10.2023, 18:54  [ТС]
zss, а если из двоичной в восьмеричную систему переводить то так будет?
C++
1
2
3
4
5
6
7
while(ch[i]!=0){
        char cnext=((ch[i]-'0')<<1) + ((ch[i+1]-'0')<<2)+ch[i+2];
        s[j] = cnext;
        i+=3;
        j++;
    }
    cout<<s;
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
21.10.2023, 20:09
не совсем, надо определить, сколько бит в первой цифре (один, два или три).
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
21.10.2023, 21:44
Цитата Сообщение от igorek_21 Посмотреть сообщение
вводить надо число в двоичной системе, а выводить в четверичной
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstring>
#include <iostream>
 
int main()
{
  char binary[512] = { '0' };
  if (!std::cin.getline(binary + 1, sizeof binary - 1))
    return -1;
    
  for (const char *p = strlen(binary) % 2 == 0 ? binary : binary + 1;
       *p != '\0';
       p += 2)
    std::cout << (char) ((p[0] - '0') * 2 + p[1]);
    
  std::cout << std::endl;
}
Цитата Сообщение от igorek_21 Посмотреть сообщение
Вводятся [...] длина l исходного числа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{
  unsigned l = 0;
  std::cin >> l;
  
  char d4 = 0;
  for (; l > 0; --l)
  {
    char d2;
    std::cin >> d2;
    d4 = d4 * 2 + (d2 - '0');
    
    if (l % 2 != 0)
    {
      std::cout << (char) (d4 + '0');
      d4 = 0;
    }
  }
}
---

Цитата Сообщение от zss Посмотреть сообщение
Так это еще проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
    char ch[64]={},s[32]={};
    cin>>ch;
    int i=0,j=0;
    while(ch[i]!=0){
        char cnext=((ch[i]-'0')<<1) + ch[i+1];
        s[j++] = cnext;
        i+=2;
    }
    cout<<s;
    return 0;
}
И что же этот код напереводит, если введенное двоичное число имеет нечетную длину?

Пробуем 111. Получаем некое 3. Что это?
http://coliru.stacked-crooked.... 2b396ac387

Цитата Сообщение от zss Посмотреть сообщение
не совсем, надо определить, сколько бит в первой цифре (один, два или три).
А почему при переводе в четверичную вы об этом не позаботились?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2023, 21:44
Помогаю со студенческими работами здесь

Перевод чисел из десятичной системы в четверичную
Используя алгоритм перевода чисел из десятичной системы в четверичную(последовательно делить число на q, т.е. на основание СС) и цикл...

Калькулятор двоичной системы исчисления
Как можно сделать калькулятор двоичной системы исчисления с большими числами? Использовал этот код: int b =...

Тренажер по переводу чисел из двоичной системы исчисления в восьмеричную и шестнадцатеричную
Доброго времени суток господа программисты. У меня возникла проблема написания программы в Visual Basic. Visual Basic для меня это небо и...

Перевод целого числа заданного в десятичной системы счисления в системы от двоичной до восьмиричной
Помогите, пожалуйста написать калькулятор: Разработать приложение, с помощью которого можно выполнять перевод целого числа заданного...

Перевод из 2-ой системы исчисления в 8-ую через триады
Помогите, начал кодить совсем недавно Решил написать код для перевода из 2-ой в 8-ую систему исчисления через триады, но столкнулся с...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru