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

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

Войти
Регистрация
Восстановить пароль
 
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
#1

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

18.10.2012, 17:19. Просмотров 1033. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод из десятичной в N систему счисления (C++):

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

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

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

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

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

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

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

Добавлено через 52 секунды
Условие в 20-й строке бессмысленное. У тебя в любом случае по сути дела исполняется оператор continue (т.к. цикл продолжается по достижению фигурной скобки)
1
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
18.10.2012, 23:15  [ТС] #3
Спасибо за ответ. Еще добавил 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
18029 / 6261 / 427
Регистрация: 30.03.2009
Сообщений: 17,203
Записей в блоге: 27
18.10.2012, 23:26 #4
Цитата Сообщение от delexa Посмотреть сообщение
Еще добавил z=z-1; и убрал i=0
Строки 22-25 по-хорошему надо переписать. У тебя есть массив mas со значениями. Ты знаешь, что в этот массив записано "i" элементов. И тебе нужно в простом цикле распечатать эти элементы в обратном порядке. Без повторных мухлежей с переменной b (и вообще без переменной b).

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

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

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

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
18029 / 6261 / 427
Регистрация: 30.03.2009
Сообщений: 17,203
Записей в блоге: 27
19.10.2012, 00:06 #6
Цитата Сообщение от delexa Посмотреть сообщение
Все приходится учить самому
А с программированием по другому никак. Во всём надо разбираться самому, по другому ты вряд ли чему-то научишься. А преподаватель должен тебе только пинка под зад давать, чтобы ты двигался в нужном направлении
1
Leon_AD
103 / 103 / 28
Регистрация: 11.04.2014
Сообщений: 160
20.03.2015, 22:20 #7
У меня тут завалялся такой вариант, может кому пригодится:
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
20.03.2015, 22:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2015, 22:20
Привет! Вот еще темы с ответами:

Перевод строки из 2-ной системы счисления в 8-ную систему счисления - C++
помогите пожалуйста как сделать перевод строки из 2 системы счисления на 8 систему счисления через массив ?

Перевод чисел из двоичной системы счисления в систему счисления кратной степеням двойки и обратно - C++
Нужно две программы, одна реализует перевод чисел из двоичной системы счисления в систему счисления кратной степеням двойки, а другая...

Преобразование из десятичной в шестнадцатеричную систему счисления - C++
Добрый день. (Borland C++) Мне необходимо преобразовать введенное число (в поле Edit1), в число шестнадцатеричной сис.сч.. Не могу...

Перевести с десятичной в двоичную систему счисления - C++
Есть ли какой метод в С++ для этого или надо самому писать метод))?


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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