Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/64: Рейтинг темы: голосов - 64, средняя оценка - 4.89
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
1

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

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

Author24 — интернет-сервис помощи студентам
Нужно перевести число в 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;
 }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2013, 16:17
Ответы с готовыми решениями:

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

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

Написать программу перевода целого числа из десятичной системы в любую другую от двоичной до системы с основанием 35
Написать программу перевода целого числа из десятичной системы в любую другую от двоичной до...

Опишите процедуру перевода целого числа из десятичной системы в 8-ичну систему числения
Опишите процедуру перевода целого числа из десятичной системы в 8-ичну систему числения. Опишите...

22
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
12.02.2013, 22:23  [ТС] 2
что никто не знает?(
0
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
12.02.2013, 23:09 3
Никто не понял. Сформулируй вопрос нормально.
0
2 / 2 / 2
Регистрация: 07.01.2013
Сообщений: 22
13.02.2013, 10:46 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];
}
0
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
14.02.2013, 14:18  [ТС] 5
Цитата Сообщение от iama Посмотреть сообщение
Никто не понял. Сформулируй вопрос нормально.
функция для перевода целого десятичного числа в P - ичную систему счисления, p из [2..16]

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

Добавлено через 2 минуты
и какие тесты можно придумать для модульного тестирования этой функциии? кроме самых простых конечно, типа задания некорректных данных(
0
24 / 24 / 5
Регистрация: 21.11.2012
Сообщений: 106
14.02.2013, 15:01 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");
}
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
14.02.2013, 16:32 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;
}
1
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
15.02.2013, 19:08  [ТС] 8
ya_noob, не понимаю как работает ваша функция, ввожу целое число, а она мне сразу какой то результат выводит, причем я еще не ввел систему счисления в которую надо перевести(
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
15.02.2013, 21:18 9
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
не понимаю как работает ваша функция, ввожу целое число, а она мне сразу какой то результат выводит, причем я еще не ввел систему счисления в которую надо перевести(
число переводится в семнадцатеричную систему счисления, о чём недвусмысленно указывает аргумент 17 в вызове функции
C++
1
toRadix( x, str, 17 );
Хотите свою СС, модифицируйте слегка код
1
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
15.02.2013, 22:00  [ТС] 10
с 17ичной понятно, мне в p-чную надо, самому задавать систему, а не какая то конкретная)
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
15.02.2013, 22:22 11
ну так заменить 17 на переменную, которую предварительно выведешь с клавиатуры. все будет работать вплоть до 36-ричной сс
0
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
19.02.2013, 17:43  [ТС] 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 минут
никто опять не понимает вопроса?(
0
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
23.02.2013, 14:54  [ТС] 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?
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
23.02.2013, 16:43 14
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
можно спросить почему функция три параметра получает? я же ввожу 2 - число и систему счисления для перевода?
За целую неделю вы даже не потрудились разобраться как работает функция. печально.
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
зачем же str?
А куда по-вашему должен результат сохраняться?
0
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
23.02.2013, 18:48  [ТС] 15
ya_noob, да я особо и не вникал пока, спасибо за помощь, мне главное модульные тесты, а это функция для примера, по которой надо написать, не знаешь в каком теме можно спросить про это?(
0
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
23.02.2013, 19:11 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];
               }
}
}
0
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
25.02.2013, 07:37  [ТС] 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
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
25.02.2013, 08:40 18
Не все аргументы ввели. Или наоборот перебор аргументов.
почитайте на досуге, msdn вам в помощь.

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

Добавлено через 1 минуту
Надеюсь очевидно что ссылка в моём посте вам.
да читал это уже.. спасибо.. str в моем случае же массив временных значений, как его заглушить не знаю..
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
25.02.2013, 14:29 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)
Сосредоточтесь!
0
25.02.2013, 14:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2013, 14:29
Помогаю со студенческими работами здесь

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

Составить модуль для перевода чисел (целых, дробей, смешанных) из десятичной системы счисления в любую р-ичную систему и обратно
Составить модуль для перевода чисел (целых, дробей, смешанных) из десятичной системы счисления в...

Преобразование числа из десятичной системы счисления в 19-ичную
Составить программу преобразования числа из десятичной системы счисления в 19-ичную систему...

Перевод целого числа заданного в десятичной системы счисления в системы от двоичной до восьмиричной
Помогите, пожалуйста написать калькулятор: Разработать приложение, с помощью которого можно...

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru