С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134

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

18.10.2012, 17:19. Показов 3268. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
 
int main () 
    { int osn2, chislo,z=0,i=0,a,b;
     int *mas = new int[z];
    cout<<"\nVvedite osnovanie systemi, v kotoruyu vi hotite perevesti chislo= "; cin>>osn2;
    cout<<"Vvedite, kotoroe hotite perevesti chislo= "; cin>>chislo;
                     a=chislo;
                     b=chislo;
                    {  while (chislo!=1)
                    {  chislo=chislo/osn2;  z++;
                                             }}
                cout<<z<<endl;
 
                  while (a!=0)
                    { mas[i]=a%osn2;  a=a/osn2; cout<<mas[i]; i++;
                    if (a==1) continue; }
                  cout<<endl;
 
                  i=0;
                  while (z!=-1)
                    {  b=b/osn2; cout<<mas[z]<<" "; z--;}
                  cout<<endl;
        system("pause");
        return 0;
            }
Что не так в коде/алгоритме. Не пойму, почему некоторые числа не хочет переводить. Например, число 6 в систему с основанием 4, 56 в систему с основанием 2, и т.д. Что нужно изменить?

Добавлено через 25 минут
ошибся. число 16 в систему счисления по основанию 5, например не переводит
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.10.2012, 17:19
Ответы с готовыми решениями:

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

Рекурсия: перевод целого числа из десятичной системы счисления в 9 систему счисления
Написать рекурсивную функцию перевода целого числа из десятичной системы счисления в 9-чную систему счисления.

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

6
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.10.2012, 22:59
В первом цикле вместо "while (chislo!=1)" должно быть "while (chislo!=0)". При выделении массива mas у тебя используется размер ноль, а потому любое обращение в этот массив испортит какую-нибудь память. После исправления этих ошибок у тебя в массиве mas по сути дела будут все нужные разряды, но записанные в обратном порядке

Добавлено через 52 секунды
Условие в 20-й строке бессмысленное. У тебя в любом случае по сути дела исполняется оператор continue (т.к. цикл продолжается по достижению фигурной скобки)
1
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
18.10.2012, 23:15  [ТС]
Спасибо за ответ. Еще добавил z=z-1; и убрал i=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
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
 
int main () 
    { int osn2, chislo,z=0,i=0,a,b;
     int *mas = new int[z];
    cout<<"\nVvedite osnovanie systemi, v kotoruyu vi hotite perevesti chislo= "; cin>>osn2;
    cout<<"Vvedite, kotoroe hotite perevesti chislo= "; cin>>chislo;
                     a=chislo;
                     b=chislo;
                    {  while (chislo!=0)
                    {  chislo=chislo/osn2;  z++;
                                             }}
                cout<<z<<endl;
 
                  while (a!=0)
                    { mas[i]=a%osn2;  a=a/osn2; cout<<mas[i]; i++;
                        continue;   }
                  cout<<endl;
                  z=z-1;
                  while (z!=-1)
                    {  b=b/osn2; cout<<mas[z]<<" "; z--;}
                  cout<<endl;
        system("pause");
        return 0;
            }
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.10.2012, 23:26
Цитата Сообщение от delexa Посмотреть сообщение
Еще добавил z=z-1; и убрал i=0
Строки 22-25 по-хорошему надо переписать. У тебя есть массив mas со значениями. Ты знаешь, что в этот массив записано "i" элементов. И тебе нужно в простом цикле распечатать эти элементы в обратном порядке. Без повторных мухлежей с переменной b (и вообще без переменной b).

При этом выделение памяти для mas ты так и не исправил. Номинально программа у тебя работает некорректно. Но звёзды встали таким образом, что ты ничего важного не испортил и программа не сломалась. Другими словами, строку 8 надо перенести на место строки 17 (когда тебе уже стало известно z)

В строке 20 оператор continue не нужен вообще. Поскольку закрывающая скобка в операторе while или for имеет ровно такой же смысл

Если у тебя преподаватель сколь-нибудь толковый, он тебе скажет, что 0 у тебя неправильно сконвертируется
1
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
18.10.2012, 23:46  [ТС]
Вот, что получилось. Тоже работает)

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
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
 
int main () 
    { int osn2, chislo,z=0,i=0,a;
    
    cout<<"\nVvedite osnovanie systemi, v kotoruyu vi hotite perevesti chislo= "; cin>>osn2;
    cout<<"Vvedite, kotoroe hotite perevesti chislo= "; cin>>chislo;
                     a=chislo;
                    {  while (chislo!=0)
                    {  chislo=chislo/osn2;  z++;
                                             }}
                cout<<z<<endl;
                 int *mas = new int[z];
                  while (a!=0)
                    { mas[i]=a%osn2;  a=a/osn2; cout<<mas[i]; i++;}
                  cout<<endl;
 
                  for (i=i-1;i>=0;)
                  {cout<<mas[i]<<" "; i--;}
 
                  cout<<endl;
        system("pause");
        return 0;
            }
От преподавателей толка мало. Все приходится учить самому)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
19.10.2012, 00:06
Цитата Сообщение от delexa Посмотреть сообщение
Все приходится учить самому
А с программированием по другому никак. Во всём надо разбираться самому, по другому ты вряд ли чему-то научишься. А преподаватель должен тебе только пинка под зад давать, чтобы ты двигался в нужном направлении
1
 Аватар для Leon_AD
105 / 105 / 51
Регистрация: 11.04.2014
Сообщений: 160
20.03.2015, 22:20
У меня тут завалялся такой вариант, может кому пригодится:
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
#include <iostream>
#include <string>
 
using namespace std;
void reverse(string& s)
{
    string temp("");
    for(int i(s.length()-1);i>=0;i--)
        temp+=s[i];
    s=temp;
}
void main()
{
    int number,num, base;
    string s("");
    cout << "Enter a number in base 10: ";
    cin >> number;
    num=number;
    cout << "Enter next base(2-10): ";
    cin >> base;
    while(num >= base)
    {
        s+=char(num % base + 48);
        num/=base;
    }
    s+=char(num+48);
    cout << number << "(10)"<< " --> ";
    reverse(s);
    cout << s <<"("<< base <<")"<< endl;
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2015, 22:20
Помогаю со студенческими работами здесь

Перевод числа из десятичной в шестнадцатеричную систему счисления
Здраавствуйте, помогите найти ошибку в этом коде. Непонимаю почему при переводе таких чисел как 16,32,64,128 и тд не дописываются нули. ...

Перевод из десятичной в восьмеричную систему счисления (в чем ошибка?)
Помогите пожалуйста , нужно составить программу , которая переводит из десятичной в восьмеричную систему счисления . Написал код , он не...

Перевод дробных чисел из десятичной в двоичную систему счисления
для натуральных чисел все понятно, и предельно ясно. А как сделать для дробных чисел? Ведь перевод дроби надо умножать, а здесь делить с...

Написать программу, которая переводит число из десятичной системы счисления в позиционную систему счисления
Помогите написать программу, которая переводит число из десятичной системы счисления в позиционную систему счисления. Цифра в самом младшем...

Перевод из любой системы счисления в любую другую систему счисления (2-36)
Привет. 1 курс факультета ИВТ, изучаю С++ только один месяц. Из основного прошли строки, массивы, начали разбирать функции. Преподаватель...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru