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

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

08.02.2013, 16:17. Показов 12823. Ответов 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;
 }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.02.2013, 16:17
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 2 минуты
и какие тесты можно придумать для модульного тестирования этой функциии? кроме самых простых конечно, типа задания некорректных данных(
0
 Аватар для booker
24 / 24 / 5
Регистрация: 21.11.2012
Сообщений: 106
14.02.2013, 15:01
используйте 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
Туц:
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  [ТС]
ya_noob, не понимаю как работает ваша функция, ввожу целое число, а она мне сразу какой то результат выводит, причем я еще не ввел систему счисления в которую надо перевести(
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
15.02.2013, 21:18
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
не понимаю как работает ваша функция, ввожу целое число, а она мне сразу какой то результат выводит, причем я еще не ввел систему счисления в которую надо перевести(
число переводится в семнадцатеричную систему счисления, о чём недвусмысленно указывает аргумент 17 в вызове функции
C++
1
toRadix( x, str, 17 );
Хотите свою СС, модифицируйте слегка код
1
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
15.02.2013, 22:00  [ТС]
с 17ичной понятно, мне в p-чную надо, самому задавать систему, а не какая то конкретная)
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
15.02.2013, 22:22
ну так заменить 17 на переменную, которую предварительно выведешь с клавиатуры. все будет работать вплоть до 36-ричной сс
0
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
19.02.2013, 17:43  [ТС]
кто нибудь может подсказать где прочитать как написать модульный тест на функию на С++ в 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  [ТС]
Цитата Сообщение от 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
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
можно спросить почему функция три параметра получает? я же ввожу 2 - число и систему счисления для перевода?
За целую неделю вы даже не потрудились разобраться как работает функция. печально.
Цитата Сообщение от Ser_Aguero Посмотреть сообщение
зачем же str?
А куда по-вашему должен результат сохраняться?
0
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 77
23.02.2013, 18:48  [ТС]
ya_noob, да я особо и не вникал пока, спасибо за помощь, мне главное модульные тесты, а это функция для примера, по которой надо написать, не знаешь в каком теме можно спросить про это?(
0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
23.02.2013, 19:11
Цитата Сообщение от 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  [ТС]
В чем ошибка в модульном тесте??(( блин
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::CppUnitTestFra mework::Assert::AreEqual", соответствующие списку аргументов
типы аргументов: (const char [4], void) c:\Documents\Visual Studio 2012\Projects\dip1\UnitTest1\unittest1.c pp 18
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
25.02.2013, 08:40
Не все аргументы ввели. Или наоборот перебор аргументов.
почитайте на досуге, msdn вам в помощь.

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

Добавлено через 1 минуту
Надеюсь очевидно что ссылка в моём посте вам.
да читал это уже.. спасибо.. str в моем случае же массив временных значений, как его заглушить не знаю..
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
25.02.2013, 14:29
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.02.2013, 14:29
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю 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. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru