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

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

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

ermackprogramis

Нужно перевести с десятичной в эти 3 системы,но с рекурсией у меня не выходит. Как его сделать?Я в этом деле новенький,помогите пожалуйста
 
Как ответил - так и помогаю. Вот пример рекурсии:
C++:
double Factorial( int N )
{
double F;
if ( N <= 1 ) {
F = 1;
} else {
F = Factorial( N - 1 ) * N;
}
return F;
}
 
извини что так ответил, по програмированию знаю немного, мне на завтра нужно здать лабу, как реализовать перевов в эти 3 системы, с помощью рекурсии я не знаю, пробовал через цыкл FOR, что то получилось но сказали что через цыкл нельзя, помоги если не сложно
 
Этот код писал не я но он пашет, как перевести в рекурсию этот код без единого цыкла я не знаю
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;
}
 
Вот перевод в двоичную систему:
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;
}
Сегодня с ног валюсь, т.ч. в данный момент больше ни чем не помогу.. Возможно завтра, если не сильно буду занят то подумаю на счет других систем счисления.
 
спасибо что зделал это!!! если будет время помоги над другими)))) плиз)))) спасибо
 
Привет,извини что беспокою, что то вышло с теми двумя вариантами?
 
Привет. А может ты сам попробуешь, а если что не получится то я тебе подскажу!)
 
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 системы.Ноу восьмиричную не правильно переводит.ПОдскажи что нам надо сделать что б правильно переводило пожалуйста
 
Пфф...
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 - это система счисления.
 
Так чем тут вся эпопея то закончилась ? ;-)
Вообще это не самый лучший пример для рекурсии, цикл тут куда более граммотен и актуален, но т.к. задание такое, то видно ничего не поделаешь???
Тема актуальна еще?

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

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