Skip to content

Instantly share code, notes, and snippets.

@gvillalta99
Created August 14, 2014 19:13
Show Gist options
  • Save gvillalta99/06c10cab66f0bc15143a to your computer and use it in GitHub Desktop.
Save gvillalta99/06c10cab66f0bc15143a to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#define TAMANHO 128
int converteBinarioDecimal(char[]);
char* converteDecimalTernario(int);
char* inverteVetor(char * vetor);
int tamanho(char[]);
int potencia2(int);
int main(int argc, char *argv[]){
char input1[TAMANHO];
char input2[TAMANHO];
int numero1 = 0l;
int numero2 = 0l;
puts("Entre com o valor binario do primeiro numero:");
scanf("%s", &input1);
puts("Entre com o valor binario do segundo numero:");
scanf("%s", &input2);
numero1 = converteBinarioDecimal(input1);
numero2 = converteBinarioDecimal(input2);
char * ternario1 = inverteVetor(converteDecimalTernario(numero1));
char * ternario2 = inverteVetor(converteDecimalTernario(numero2));
printf("Primeiro numero: %d [%s]\n", numero1, ternario1);
printf("Segundo numero: %d [%s]\n", numero2, ternario2);
free(ternario1);
free(ternario2);
return 0;
}
#define ZERO '0'
#define UM '1'
#define QUEBRA '\0'
int converteBinarioDecimal(char input[]){
int numero = 0l;
int i = 0;
int bit = 0;
int size = tamanho(input);
for(i=0; i<TAMANHO; i++){
if (input[size -i -1] == QUEBRA)
break;
if (input[size - i -1] == ZERO)
bit = 0;
else if (input[size - i -1] == UM)
bit = 1;
else
break;
numero += bit * potencia2(i);
}
return numero;
}
char* converteDecimalTernario(int numeroDecimal){
char * numeroTernario =(char *) malloc(TAMANHO * sizeof(char));
int i = 0;
int dividendo = numeroDecimal;
int resto = 0;
while(dividendo > 2){
resto = dividendo % 3;
dividendo = dividendo / 3;
numeroTernario[i] = (char)(((int)'0') + resto);
i++;
}
numeroTernario[i] = (char)(((int)'0') + dividendo);
numeroTernario[i+1] = '\0';
return numeroTernario;
}
char* inverteVetor(char * vetor){
int size = tamanho(vetor);
char * novoVetor = (char *)(malloc(TAMANHO*sizeof(char)));
int i = 0;
for(i=1; i<=size; i++){
if(vetor[size-1] != '\0'){
novoVetor[i-1] = vetor[size - i];
//printf("novoVetor[%d](%c) = vetor[%d](%c)\n",i-1,novoVetor[i-1], size -i, vetor[size-i] );
}
}
//printf("\ninverte---%s---\n",novoVetor);
return novoVetor;
}
int tamanho(char input[]){
int tamanho = 0;
for(tamanho = 0; tamanho < TAMANHO; tamanho++)
if(input[tamanho] == '\0') break;
return tamanho;
}
int potencia2(int i) {
return i == 0 ? 1 : 2*potencia2(i-1);
}
Entre com o valor binario do primeiro numero:
Entre com o valor binario do segundo numero:
Primeiro numero: 9 [100]
Segundo numero: 6 [20]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment