0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 71

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

21.10.2023, 16:25. Показов 1253. Ответов 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
2431 / 1574 / 723
Регистрация: 17.03.2022
Сообщений: 5,099
21.10.2023, 16:41
Ну попробуем:
1) Зачем вы вводите a? В условии задачи указано конкретное основание новой системы счисления, так что вводить его не надо. Собственно, после ввода оно нигде не используется.
2) Зачем вводимое число хранится в виде массива символов? Дальше вы выполняете арифметические операции не с фактически введенными числами, а с кодами соответствующих символов, которые, естественно, равны чему-то другому. Смените тип элементов массива ch на какой-нибудь целочисленный.
0
Модератор
Эксперт С++
 Аватар для zss
13781 / 10974 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
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
13781 / 10974 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
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
13781 / 10974 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
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
13781 / 10974 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
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
13781 / 10974 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
21.10.2023, 20:09
не совсем, надо определить, сколько бит в первой цифре (один, два или три).
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13203 / 6838 / 1822
Регистрация: 18.10.2014
Сообщений: 17,298
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru