• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Задача: Перевод с десятичной Cист. исчислений в 2-ую, 8-чную и 16-ричн

  • Автор темы ermackprogramis
  • Дата начала
Статус
Закрыто для дальнейших ответов.
E

ermackprogramis

Нужно перевести с десятичной в эти 3 системы,но с рекурсией у меня не выходит. Как его сделать?Я в этом деле новенький,помогите пожалуйста
 
L

lazybiz

Как ответил - так и помогаю. Вот пример рекурсии:
C++:
double Factorial( int N )
{
double F;
if ( N <= 1 ) {
F = 1;
} else {
F = Factorial( N - 1 ) * N;
}
return F;
}
 
E

ermackprogramis

извини что так ответил, по програмированию знаю немного, мне на завтра нужно здать лабу, как реализовать перевов в эти 3 системы, с помощью рекурсии я не знаю, пробовал через цыкл FOR, что то получилось но сказали что через цыкл нельзя, помоги если не сложно
 
E

ermackprogramis

Этот код писал не я но он пашет, как перевести в рекурсию этот код без единого цыкла я не знаю
C++:
#include <stdio.h>
#include <conio.h>

#include <math.h>
#include <string.h>
#pragma hdrstop

//------------------------------------------------
#pragma argsused

int CharToInt(char alpha)
{
if(alpha<58 )
return alpha - 48;
else
return alpha - 55;
}

int ConvertToDec(char *input , int sinp )
{
int sum = 0;
int pow = 1;
for(int i = strlen(input)-1; i>=0; i--)
{
sum+=CharToInt(input[i]) * pow;
pow*=sinp;
}
return sum;
}

char *convertX(int input, int sout, char *out)
{
while(input!=0)
{
float j = input%sout;
input/=sout;
out--;
if(j<10)
*out = 48 + j;
else
*out = 55 + j;
}
return out;
}

int main(int argc, char* argv[])
{
printf("Enter the number: " );
char input[32] = "";
scanf("%s", &input);

printf("\nEnter from what: ");
int sinp;
scanf("%i", &sinp);

printf("\nEnter to where: ");
int sout;
scanf("%i", &sout);

printf("\n\n= ");

char output[32];
output[31] = 0;
printf("%s", convertX(ConvertToDec(input, sinp), sout, output+31));

//printf("\n\nNazsmite ljubuju klavisu...");
//getch();
system("pause");
return 0;
}




А то мой код, но он только для двоичной
C++:
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
int dec, bin=0, j;

cin >> dec;
for(j=0; dec>0; j++)
{
bin+=(dec%2)*pow(10.0,j);
dec/=2;
}

cout <<bin<< endl;
system("pause");
return 0;
}
 
L

lazybiz

Вот перевод в двоичную систему:
C++:
#include <iostream.h>

void to_bin( char *p, int v, int c )
{
p[c - 1] = v & 1 ? '1' : '0';
v >>= 1;
if ( v > 0 ) to_bin( p, v, --c );
}

int main()
{
int		v;
char	p[33];

cin >> v;
memset( p, ' ', 32 );
p[32] = '\0';
to_bin( p, v, 32 );
cout << p;

return 0;
}
Сегодня с ног валюсь, т.ч. в данный момент больше ни чем не помогу.. Возможно завтра, если не сильно буду занят то подумаю на счет других систем счисления.
 
E

ermackprogramis

спасибо что зделал это!!! если будет время помоги над другими)))) плиз)))) спасибо
 
E

ermackprogramis

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

lazybiz

Привет. А может ты сам попробуешь, а если что не получится то я тебе подскажу!)
 
E

ermackprogramis

C++:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

const char *numset = "0123456789ABCDEF";

void to_bin( char *p, int v, int c )
{
p[c - 1] = v & 1 ? '1' : '0';
v >>= 1;
if ( v > 0 ) to_bin( p, v, --c );
}

void _toOther(int dec, int m, char *str)
{
str[0] = numset[dec % m];
if (dec >= 16)
_toOther(dec / m, m, str + 1);
else
str[1] = 0;
}

void toOther(int dec, int m, char *str)
{
_toOther(dec, m, str);
int l = strlen(str);
for (int i = 0; i < l / 2; i++)
swap(str[i], str[l - i - 1]);
}

int main(int argc, char argv)
{ 
int dec;
char str[1000];
scanf("%d", &dec);
toOther(dec, 16, str);
printf("%s\n", str);
toOther(dec, 8, str);
printf("%s\n", str);
char	p[33];
memset( p, ' ', 32 );
p[32] = '\0';
to_bin( p, dec, 32 );
cout << p;
system("pause");
}

Привет взгляни на это пожалуйста, там твой код я вклеил и еще перевод в 16 и 8 системы.Ноу восьмиричную не правильно переводит.ПОдскажи что нам надо сделать что б правильно переводило пожалуйста
 
L

lazybiz

Пфф...
C++:
#include <iostream.h>

char *	up_to_hex_table	= "0123456789abcdef";

void to_x( char *p, int v, int radix, int n )
{
p[n - 1] = up_to_hex_table[v & (radix - 1)];
v /= radix;
if ( v ) to_x( p, v, radix, --n );
}

int main()
{
int		v;
char	p[33];
char * pp;

cin >> v;
memset( p, ' ', sizeof( p ) - 1 );
p[sizeof( p ) - 1] = '\0';

to_x( p, v, 16, sizeof( p ) - 1 );

for ( pp = p; *pp; pp++ ) if ( *pp != ' ' ) cout << *pp;

return 0;
}
Не за что. Пожалуйста.

Добавлено: P.S.: radix - это система счисления.
 
D

DarkKnight

Так чем тут вся эпопея то закончилась ? ;-)
Вообще это не самый лучший пример для рекурсии, цикл тут куда более граммотен и актуален, но т.к. задание такое, то видно ничего не поделаешь???
Тема актуальна еще?

Добавлено: Если да, то какие именно ее аспекты, а то я смотрю ребята уйму работы по этому топику проделали :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!