Ir ao conteúdo

Programa conversor de bases com função e vetores


Rafa Souza

Posts recomendados

Postado

Olá pessoal, gostaria de pedir ajuda a vocês, comecei este ano a faculdade de Analista de sistemas e como bem sabem, as federais entraram nessa greve, e foi bem no momento onde estávamos aprendendo vetores, por isso ficou bem fraca a minha concepção e realmente estou sofrendo para realizar este exercício em especial:

Criar um programa que converta decimal-binário (e vice versa) e decimal-octal (idem). O usuário deve ter acesso a um menu escolhendo 4 opções, uma para cada conversão. Depois de selecionada deve informar o número a ser convertido. Esse valor deve ser passado para uma função, e dentro dessa função os cálculos devem ser armazenados em vetores e em seguida mostrar o resultado em tela.

Peço desculpas a possíveis "noobices" mas estou realmente no começo da faculdade e tentei o meu melhor e não consigo, pesquisei, descobri atoi e outros macetes, mas tenho que seguir como fala o enunciado.

Foi até aqui onde consegui, montar a estrutura principal, e fazer a minha lógica na primeira conversão, porém pede o número e não passa disso(quando abri em nova aba e isolei o programa com apenas uma conversão, a primeira, pois se rodar assim vai dar erro em várias coisas como vetores com tamanho não definido). Se puderem me ajudar na conversão para decimal, com a lógica, posso tentar fazer ela também!

A última dica que consegui com a professora, antes da greve, era que eu tinha que armazenar os restos no vetor, e depois ler ele ao contrário para mostrar o número. Então teria que ter um contador de quantos restos foram calculados para partir dele a contagem regressiva no vetor até zero, porém não entendi bem como fazer isso, e também como ler todos os números em uma única resposta


#include <stdio.h>
#include <conio.h>

void decimal_binario(int dec_bin) //Função converte decimal para binario
{
int vet[10], resto=0, i, cont=0;
while(dec_bin >=2)
{
resto=dec_bin%2;
dec_bin/2;
for (i=0;i<10;i++)
{
vet[i]=resto;
}
cont++;
}

for(cont=cont;cont=0;cont--)
{
printf("O numero em binario fica: %d", vet[cont]);
}

}

void binario_decimal(int bin_dec)//Função converte binario para decimal
{
int vet[], num=0,cont;
while()
{

}
}

void decimal_octal(int dec_oct)//Função converte decimal para octal
{
int vet[], num=0,cont;
while()
{

}
}

void octal_decimal(int oct_dec)//Função converte octal para decimal
{
int vet[], num=0,
while()
{

}
}

main()
{
char opcao;
int dec_bin, bin_dec, dec_oct, oct_dec;

printf("Programa de conversao Binario/Decimal/Octal\n\n");
printf("A- Decimal para Binario \n B- Binario para Decimal \n C- Decimal para Octal \n D- Octal para Decimal");
scanf("%c", &opcao);

//Menus de opcao
switch (opcao)
{
case'a':
printf("Digite o valor Decimal a ser convertido: ");
scanf("%d", &dec_bin);
decimal_binario(dec_bin);//Funcao chamada
break;
case'b':
printf("Digite o valor Binario a ser convertido: ");
scanf("%d", &bin_dec);
binario_decimal(bin_dec);//Funcao chamada
break;
case'c':
printf("Digite o valor Decimal a ser convertido: ");
scanf("%d", &dec_oct);
decimal_octal(dec_oct);//Funcao chamada
break;
case'd':
printf("Digite o valor Octal a ser convertido: ");
scanf("%d", &oct_dec);
octal_decimal(oct_dec);//Funcao chamada
break;
}
getch();
}

Postado

Ja existe um metodo que faz isso, é o itoa

int main(){
int i = 5; // Valor a ser convertido
char c[33]; // Onde vou guardar o valor convertido (use o tamanho 33)

itoa(i, c, 2); // converter na base 2, acredito que converta até base 32

printf("%s", c);

getchar();
}

mas acredito que você tenha que fazer o seu metodo, aqui vai um exemplo em C#, tente converter em C

public static string ToBase(this Int32 value, int toBase = 10)
{
if (toBase > 16 || toBase < 2)
throw new ArgumentOutOfRangeException("apenas numeros entre 2 e 16.");

char[] c = new char[32];
char[] values = "0123456789ABCDEF".ToCharArray();

for (int i = 0; i < 32; i++)
c[i] = '0';

for (int i = 31; value != 0; i--)
{
c[i] = values[(value % toBase)];
value /= toBase;
}

return new String(c);
}

Postado

Bom, o que posso apontar como erro é: infelizmente c não exibe em binario por padrão... e como existem até 63 casas (até onde eu já vi..) acho que usar inteiro pra isso não vai ter um bom efeito... talvez seja melhor usando string não? o que "volta" com outro erro, que é

void binario_decimal(int bin_dec)//Função converte binario para decimal
{
int vet[], num=0,cont;

no caso, se você não quer alocar uma memoria ao vetor, coloque na chamada e faça no main() um vetor de char chamado resposta

ex:
long int numero_pra_converter;
char resposta[63];
//quando for na hora da chamada coloque
char *itob(int numero_pra_converter, [COLOR=RED]char resposta[][/COLOR])

quando for escrever o numero, dentro do

int numero_pra_converter;
//voce usa um
itob(int numero_pra_converter, char resposta[], int base)

isso vai lhe poupar muita dor de cabeça já que só ira precisar colocar a base de diferente...

recomendo usar uma "string posicionada" como a seguinte:

char gabarito[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

e para obter o numero use o resto como está usando, mas neste caso use


while(numero_pra_converter>0)
{
resposta[i]=gabarito[numero_pra_converter%base];
numero_pra_converter/=base;
}

bom, é isso.. acho que isso ajuda sem dar a resposta (espero XD)

Postado

Queria agradecer de momento, notei que tem vários macetes em C, infelizmente ainda estou bem no bruto da coisa então to apanhando bastante, não conheço alguns termos, mas vou pegar as respostas e me dedicar mais um pouco aqui hehe, qualquer coisa volto a postar mais tarde! ^_^

  • Moderador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!