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

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

Восстановить пароль Регистрация
 
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
18.10.2012, 17:19     Перевод из десятичной в N систему счисления #1
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, например не переводит
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 17:19     Перевод из десятичной в N систему счисления
Посмотрите здесь:

C++ Перевод дробных чисел из десятичной в двоичную систему счисления
Перевод числа из десятичной в шестнадцатеричную систему счисления C++
Перевод с десятичной в двоичную систему C++
C++ Перевод натурального числа из десятичной системы счисления в систему счисления по основанию
C++ Перевод чисел из двоичной системы счисления в систему счисления кратной степеням двойки и обратно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
18.10.2012, 22:59     Перевод из десятичной в N систему счисления #2
В первом цикле вместо "while (chislo!=1)" должно быть "while (chislo!=0)". При выделении массива mas у тебя используется размер ноль, а потому любое обращение в этот массив испортит какую-нибудь память. После исправления этих ошибок у тебя в массиве mas по сути дела будут все нужные разряды, но записанные в обратном порядке

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

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

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

Если у тебя преподаватель сколь-нибудь толковый, он тебе скажет, что 0 у тебя неправильно сконвертируется
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
18.10.2012, 23:46  [ТС]     Перевод из десятичной в N систему счисления #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;
            }
От преподавателей толка мало. Все приходится учить самому)
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
19.10.2012, 00:06     Перевод из десятичной в N систему счисления #6
Цитата Сообщение от delexa Посмотреть сообщение
Все приходится учить самому
А с программированием по другому никак. Во всём надо разбираться самому, по другому ты вряд ли чему-то научишься. А преподаватель должен тебе только пинка под зад давать, чтобы ты двигался в нужном направлении
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2015, 22:20     Перевод из десятичной в N систему счисления
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Leon_AD
 Аватар для Leon_AD
103 / 103 / 28
Регистрация: 11.04.2014
Сообщений: 155
20.03.2015, 22:20     Перевод из десятичной в N систему счисления #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");
}
Yandex
Объявления
20.03.2015, 22:20     Перевод из десятичной в N систему счисления
Ответ Создать тему
Опции темы

Текущее время: 00:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru