2 Programinhas em C para conversão de bases

Publicado por Samuel Macedo 06/10/2004

[ Hits: 40.964 ]

Download cbase1 e 2




Bom, tô mandando 2 códigos juntos na verdade, ao invés de 1. eles servem para converter bases. O primeio converte um numero decimal para um numero em qualquer base. O segundo converte um numero em qualquer base para um numero decimal. Eu ainda começando em C, por isso o código tá bem tosco, cheio de gatilhos, mas como é uma seção com scripts de iniciantes mesmo, acho q não tem problema. Funcionam normal, só q não exibe mensagens de erro se o cara digitar alguma coisa nada a ver... Valeu!

  



Esconder código-fonte

/*Converte um numero na base 10 para um numero
em uma base qualquer.
-->Samuel Macedo*/

#include <stdio.h>
char numparacar(int);
main()
{
 long int bcknum,num,base,i,ind=0;
 char j='A',numimp,vetnum[1000],vetch[1000];
 printf("Numero (em base 10): ");
 scanf("%d",&num);
 printf("Base para a qual o numero sera convertido: ");
 scanf("%d",&base);
 bcknum = num;
 for(i=0;i<1000;i++)
     vetch[i] = 0;
 while(num>0){
      numimp = num%base;
      if(numimp > 9){
         numimp = numparacar(numimp);
         vetch[ind]=1;

      }

      vetnum[ind] = numimp;
      ++ind;
      num = num / base;
 }
  printf("%d(10) = ",bcknum);
  j=ind;
  while(vetnum[j]==0)j--;
   for(;j>=0;j--){
    if(vetch[j]==1)
    printf("%c",vetnum[j]);
    else
    printf("%d",vetnum[j]);

    }
    printf("(%d)\n",base);

}
char numparacar(NUM)
{
 int a;char b='A';
 for(a=10;a<NUM;a++)
     b++;
 return b;
}

------------------------------------------------------------------------------------

/*converte de qualquer base para decimal
-->Samuel Macedo*/

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int letparaint(char);
main()
{
    int numint,i,j,base,valdec=0,valexp,exp;
    char gt[2],num[100];

    scanf("%s",&num);


    scanf("%d",&base);
    //printf("numero carregado: %s",num);

    for(i=0;num[i]!='{FONTE}';i++);
    exp=i-1;
    //printf("EXP: %d\n",exp);

    for(i=0;num[i]!='{FONTE}';i++){
     valexp=1;
     for(j=0;j<exp;j++){
        valexp=valexp*base;
       // printf("valexp: %d\n",valexp);
     }

      if(num[i]>='0'&& num[i]<='9'){
         gt[0]= num[i];
         gt[1]='{FONTE}';
         numint = atoi(gt);
         //printf("numint -> %d\n",numint);

       }
       else{
          numint = letparaint(num[i]);
       }
         valdec+=(numint*valexp);
         --exp;
    }
    printf("Valor decimal: %d\n",valdec);

}

int letparaint(char LET)
{
 int cont=0,i,j;
 tolower(LET);
 for(i=LET;i>'a';i--)
    ++cont;
 cont+=10;
  //printf("---->%d",cont);
 return cont;

}



Scripts recomendados

Números primos da seqüência Fibonacci

Conversor de Euros em Reais

Calculo de Área e Diametro do circulo

Algoritmo em C - Ordenação por Inserção

Cálculo do IMC


  

Comentários
[1] Comentário enviado por C0Y0TE- em 14/11/2005 - 21:35h

Otimo programa. Ficou bem simples e facil de intender

[2] Comentário enviado por leonardo_cdan em 28/04/2007 - 03:18h

Achei o programa legal !

[3] Comentário enviado por pedroarthur.jedi em 19/01/2008 - 01:41h

qualquer base?

[4] Comentário enviado por neufer.ramon em 29/03/2010 - 12:24h

Alguem consegue esse programa em c++?

[5] Comentário enviado por JonatasLaet em 17/08/2015 - 12:54h

As variáveis do tipo int só aceitam números que vão de -2147483647 até 2147483647.
Por trabalhar com números em variáveis do tipo int, e também por causa das restrições do que propõe o problema, era pra aceitar números que vão de 1 até 2147483647. Porém, o código primeiro, por exemplo, tem alguns problemas, dentre eles: dá erro ao digitar o número decimal 1, 2 e 3 a serem convertidos pra base 2. Depois dá uma olhada direito nos códigos. Passei o olho rapidamente e vi apenas isso. Até mais.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts