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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.83
Ser_Aguero
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
#1

Функция перевода целого числа из десятичной системы в p - ичную - C++

08.02.2013, 16:17. Просмотров 3933. Ответов 22
Метки нет (Все метки)

Нужно перевести число в p - ичную систему, начиная с двоичной и до шестнадцатиричной
как дописать чтобы переводилась в 16-чной системе?(

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
 { 
 int n, p;
 cin >> n >> p;
 int ch = 0;
 for (int i = 0; n >= 1; i++)
 { 
 ch+=(n % p)* pow(10, i); 
 n/=p; 
 } 
 cout << ch;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2013, 16:17     Функция перевода целого числа из десятичной системы в p - ичную
Посмотрите здесь:
C++ Написать рекурсивную функцию перевода целого числа из десятичной системы счисления в 9 систему счисления C++
Программа перевода числа из десятичной системы в восмеричную C++
C++ Рекурсивная процедура перевода числа из десятичной системы счисления в двоичную
C++ Программа для перевода числа из десятичной системы счисления во все существующие С++
Написать рекурсивную функцию перевода числа с десятичной системы исчисления в двоичную C++
Рекурсивная функция находящая наибольшую цифру в десятичной записи неотрицательного целого числа C++
Составить программу для перевода данного натурального числа в p-ичную систему счисления C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ser_Aguero
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
12.02.2013, 22:23  [ТС]     Функция перевода целого числа из десятичной системы в p - ичную #2
что никто не знает?(
iama
1249 / 974 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
12.02.2013, 23:09     Функция перевода целого числа из десятичной системы в p - ичную #3
Никто не понял. Сформулируй вопрос нормально.
Feyko
2 / 2 / 0
Регистрация: 07.01.2013
Сообщений: 22
13.02.2013, 10:46     Функция перевода целого числа из десятичной системы в p - ичную #4
с двоичной системы в шестнадцатиричную
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
program ty;
uses crt;
var i,n,l,z:integer;
s,s2,shest:string;
begin
Writeln('Введите двоичное число:');
read(s);
l:=length(s);
//удаляем нолики из начала 
for i:=1 to l do
 if s[1]='0' then
  begin
  Delete(s,1,1);
  l:=l-1;
  end
 else
  break;
//Дописываем нужное количество ноликов сначала
if (l mod 4)<>0 then
 repeat
  s:='0'+s;
  inc(l);
 until (l mod 4)=0;
//Начало основного алгоритма
z:=l div 4;
l:=1;
for i:=1 to z do //для скольки тетрад делаем
 begin
  for n:=l to (l+3) do //для 4 символов
   s2:=s2+s[n];//записываем текущую тетраду
  l:=l+4;
  if s2='0000' then shest:=shest+'0';
  if s2='0001' then shest:=shest+'1';
  if s2='0010' then shest:=shest+'2';
  if s2='0011' then shest:=shest+'3';
  if s2='0100' then shest:=shest+'4';
  if s2='0101' then shest:=shest+'5';
  if s2='0110' then shest:=shest+'6';
  if s2='0111' then shest:=shest+'7';
  if s2='1000' then shest:=shest+'8';
  if s2='1001' then shest:=shest+'9';
  if s2='1010' then shest:=shest+'A';
  if s2='1011' then shest:=shest+'B';
  if s2='1100' then shest:=shest+'C';
  if s2='1101' then shest:=shest+'D';
  if s2='1110' then shest:=shest+'E';
  if s2='1111' then shest:=shest+'F';
  s2:='';//сбрасываем значение
 end;
Writeln('Шестнадцатиричное число: ',shest);
end.
Добавлено через 7 минут
Перевод из двоичной в шестнадцатиричную
C++
1
2
3
4
5
6
7
8
void DecToBin (long num,char *bin)
{
 int i,j;
 char tmp[33];
 
 for (i=0; num; num>>=1, i++)tmp[i] = (num&1)?('1'):('0');
 for (j=0; j<i; j++) bin[j] = tmp[i-j-1];
}
Ser_Aguero
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
14.02.2013, 14:18  [ТС]     Функция перевода целого числа из десятичной системы в p - ичную #5
Цитата Сообщение от iama Посмотреть сообщение
Никто не понял. Сформулируй вопрос нормально.
функция для перевода целого десятичного числа в P - ичную систему счисления, p из [2..16]

что то набросал сам, только не понимаю как перевести в систему большей 10тичной... например для 16ичной, как в буквы переводить.. вот

Добавлено через 2 минуты
и какие тесты можно придумать для модульного тестирования этой функциии? кроме самых простых конечно, типа задания некорректных данных(
booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
14.02.2013, 15:01     Функция перевода целого числа из десятичной системы в p - ичную #6
используйте itoa()

C++
1
2
3
4
void IntToChar (int& num,char* ch)
{
    itoa(num,ch,10);  // itoa(целое число,строка,основание)
};
Добавлено через 19 минут


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int main(){
    
    int digit;
    std::cout<<"enter number"<<std::endl;
    std::cin>>digit;
    char str[64];
    for(int n=2;n<=16;n++)
    {
        std::cout<<"base - "<<n<<" "<<itoa(digit,str,n)<<std::endl;
    }
 
    system("pause");
}
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
14.02.2013, 16:32     Функция перевода целого числа из десятичной системы в p - ичную #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
32
33
34
#include <iostream>
using namespace std;
 
void toRadix( int x, char *str, int radix )
// x - переводимое число, str - результат в СС по основанию radix
{
    int pow = 1;
 
    while ( pow * radix <= x ) pow *= radix;
 
    int i = 0;
 
    for ( int t; pow; ++i, pow /= radix )
    {
        t = x / pow;
        if ( t < 10 ) str[ i ] = t + '0';
        else str[ i ] = t - 10 + 'a';
        x -= pow * t;
    }
    str[ i ] = 0;
}
 
int main()
{
    int x;
    char str[ 1000 ];
    
    cin >> x;
 
    toRadix( x, str, 17 );
    cout << "result: " << str << endl;
 
    return 0;
}
Ser_Aguero
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
15.02.2013, 19:08  [ТС]     Функция перевода целого числа из десятичной системы в p - ичную #8
ya_noob, не понимаю как работает ваша функция, ввожу целое число, а она мне сразу какой то результат выводит, причем я еще не ввел систему счисления в которую надо перевести(
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
15.02.2013, 21:18     Функция перевода целого числа из десятичной системы в p - ичную #9
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
не понимаю как работает ваша функция, ввожу целое число, а она мне сразу какой то результат выводит, причем я еще не ввел систему счисления в которую надо перевести(
число переводится в семнадцатеричную систему счисления, о чём недвусмысленно указывает аргумент 17 в вызове функции
C++
1
toRadix( x, str, 17 );
Хотите свою СС, модифицируйте слегка код
Ser_Aguero
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
15.02.2013, 22:00  [ТС]     Функция перевода целого числа из десятичной системы в p - ичную #10
с 17ичной понятно, мне в p-чную надо, самому задавать систему, а не какая то конкретная)
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
15.02.2013, 22:22     Функция перевода целого числа из десятичной системы в p - ичную #11
ну так заменить 17 на переменную, которую предварительно выведешь с клавиатуры. все будет работать вплоть до 36-ричной сс
Ser_Aguero
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
19.02.2013, 17:43  [ТС]     Функция перевода целого числа из десятичной системы в p - ичную #12
кто нибудь может подсказать где прочитать как написать модульный тест на функию на С++ в VS2012?
в частности на функцию из 7го поста? как использвать констуркцию assert?((
C++
1
2
3
4
5
6
TEST_METHOD(TestMethod1)
        {
        int x = 555;
        int radix = 16;
        assert //???
        }
Добавлено через 19 часов 28 минут
вот(
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include "CppUnitTest.h"
#include "C:\Documents\Visual Studio 2012\Projects\dip1\dip1\rad.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
 
namespace UnitTest1
{       
    TEST_CLASS(UnitTest1)
    {
    public:
        
        TEST_METHOD(TestMethod1)
        {
        int x = 555;
        int radix = 16;
        Assert::AreEqual(dip1::toRadix(555, 16), "22b");
        }
 
    };
}
Добавлено через 4 часа 49 минут
в какой теме хоть можно спросить то про unit тестирование??

Добавлено через 20 часов 47 минут
никто опять не понимает вопроса?(
Ser_Aguero
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
23.02.2013, 14:54  [ТС]     Функция перевода целого числа из десятичной системы в p - ичную #13
Цитата Сообщение от ya_noob Посмотреть сообщение
Туц:
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
32
33
34
35
#include <iostream>
using namespace std;
 
void toRadix( int x, char *str, int radix )
// x - переводимое число, str - результат в СС по основанию radix
{
    int pow = 1;
 
    while ( pow * radix <= x ) pow *= radix;
 
    int i = 0;
 
    for ( int t; pow; ++i, pow /= radix )
    {
        t = x / pow;
        if ( t < 10 ) str[ i ] = t + '0';
        else str[ i ] = t - 10 + 'a';
        x -= pow * t;
    }
    str[ i ] = 0;
}
 
int main()
{
    int x;
    char str[ 1000 ];
    
    cin >> x;
           cin >> radix;
 
    toRadix( x, str, radix );
    cout << "result: " << str << endl;
 
    return 0;
}
можно спросить почему функция три параметра получает? я же ввожу 2 - число и систему счисления для перевода? зачем же str?
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
23.02.2013, 16:43     Функция перевода целого числа из десятичной системы в p - ичную #14
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
можно спросить почему функция три параметра получает? я же ввожу 2 - число и систему счисления для перевода?
За целую неделю вы даже не потрудились разобраться как работает функция. печально.
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
зачем же str?
А куда по-вашему должен результат сохраняться?
Ser_Aguero
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
23.02.2013, 18:48  [ТС]     Функция перевода целого числа из десятичной системы в p - ичную #15
ya_noob, да я особо и не вникал пока, спасибо за помощь, мне главное модульные тесты, а это функция для примера, по которой надо написать, не знаешь в каком теме можно спросить про это?(
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
23.02.2013, 19:11     Функция перевода целого числа из десятичной системы в p - ичную #16
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
с 17ичной понятно, мне в p-чную надо, самому задавать систему, а не какая то конкретная)
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
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <locale>
using namespace std;
void CC(int, int, int, int []);
 
int main() {
    setlocale(LC_ALL, "Rus");
int ch, cc;
cout<<"Ââåäèòå ÷èñëî ГЁ Г*îâóþ ÑÑ:"<<endl<<"×èñëî: ";
cin>>ch;
cout<<endl<<"ÑèñòåìГ* ñ÷èñëåГ*ГЁГї: ";
cin>>cc;
int i=1;
int B[100];
CC(ch, cc, i, B);
}
void CC(int ch, int cc, int i, int B[]) {
     
     if(ch>=cc) {
                B[i]=ch%cc;
                ch=(ch-(ch%cc))/cc;
                i++;
                CC(ch, cc, i, B);
                }
     else { 
          B[i]=ch;
          for(i; i>=1; i--) 
          if(cc>10) {
                    if(B[i]==10) {cout<<"A";}
                    else if(B[i]==11) {cout<<"B";}
                    else if(B[i]==12) {cout<<"C";}
                    else if(B[i]==13) {cout<<"D";}
                    else if(B[i]==14) {cout<<"E";}
                    else if(B[i]==15) {cout<<"F";}
                    else { cout<<B[i];}
                    }
          else {
               cout<<B[i];
               }
}
}
Ser_Aguero
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
25.02.2013, 07:37  [ТС]     Функция перевода целого числа из десятичной системы в p - ичную #17
В чем ошибка в модульном тесте??(( блин
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdafx.h"
#include "CppUnitTest.h"
#include "C:\Documents\Visual Studio 2012\Projects\dip1\dip1\rad.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
 
namespace UnitTest1
{       
    TEST_CLASS(UnitTest1)
    {
    public:
        
        TEST_METHOD(TestMethod1)
        {
            //char res = toRadix(555,16);
        int x =555;
        int radix = 16;
        char *str =0;
        Assert::AreEqual("22b", toRadix(555,16,0));
        //Assert::AreEqual(expectedValue, actualValue);
        }
 
    };
}
1 IntelliSense: отсутствуют экземпляры перегруженная функция "Microsoft::VisualStudio::CppUnitTestFramework::Assert::AreEqual", соответствующие списку аргументов
типы аргументов: (const char [4], void) c:\Documents\Visual Studio 2012\Projects\dip1\UnitTest1\unittest1.cpp 18
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
25.02.2013, 08:40     Функция перевода целого числа из десятичной системы в p - ичную #18
Не все аргументы ввели. Или наоборот перебор аргументов.
почитайте на досуге, msdn вам в помощь.

Добавлено через 1 минуту
Надеюсь очевидно что ссылка в моём посте вам.
Ser_Aguero
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
25.02.2013, 08:56  [ТС]     Функция перевода целого числа из десятичной системы в p - ичную #19
Цитата Сообщение от Wolkodav Посмотреть сообщение
Не все аргументы ввели. Или наоборот перебор аргументов.
почитайте на досуге, msdn вам в помощь.

Добавлено через 1 минуту
Надеюсь очевидно что ссылка в моём посте вам.
да читал это уже.. спасибо.. str в моем случае же массив временных значений, как его заглушить не знаю..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2013, 14:29     Функция перевода целого числа из десятичной системы в p - ичную
Еще ссылки по теме:
Функция перевода из десятичной в двоичную систему C++
Программа для перевода из десятичной системы счисления в двоичную C++
Разработать программу перевода вещественных чисел из десятичной системы счисления в двоичную C++
C++ Перевод перевода целого числа
Разработка рекурсивной функции для перевода числа из десятичной сс в двоичную C++

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

Или воспользуйтесь поиском по форуму:
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
25.02.2013, 14:29     Функция перевода целого числа из десятичной системы в p - ичную #20
Ser_Aguero, я может чего-то не понимаю, но разве по этой ссылке
Цитата Сообщение от Wolkodav Посмотреть сообщение
от вас не этого требуют:
C++
1
2
3
4
5
int x =555;
 char str[ 1000 ];
 int radix = 16;
 toRadix( x, str, radix );
 Assert::AreEqual("22b", str, "aaa-aa-a-a-a");
да и аргументы вы не в той последовательности указываете. вы делаете так:
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
C++
1
toRadix(555,16,str)
а надо так:
C++
1
toRadix(555,str,16)
Сосредоточтесь!
Yandex
Объявления
25.02.2013, 14:29     Функция перевода целого числа из десятичной системы в p - ичную
Ответ Создать тему
Опции темы

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