Calculadora, muy buena veanla.

glas
17 de Agosto del 2009
Hola a todos, aqui les dejo una calculadora de suma,resta,division,multiplicacion, ademas de conversion de bases numericas entre decimal, binario y hexadecimal. El programa consta de dos partes la primera es la que realiza las funciones de conversion entre bases, la segunda es la que realiza la funciones aritmeticas. Espero les sea de su agrado y les puede servir, esta echa para plataforma linux, pero solo se debe cambiar una sentencias nada mas seexplica en el codigo, tiene bastante trabajo, si tienen dudas pregunten, saludos GLAS

[code]//*****************************************************
//*****===== Autor: Jonathan Carrasco (GLAS) =====*****
//***************** Glas Calculadora ******************
#include<stdio.h>
#include<stdlib.h> //para Linux y Unix system("clear"); .Para Windows system ("cls"); .Limpia pantalla
#include<math.h> //solo para el uso de la raiz cuadrada
main()
{
int x=0,v;
char valor[20];
//Declaracion de funciones
void cal_glas(); // funcion de calculadora aritmetica
void b_decimal(char valor_b[20]);//OK, conversion binario-decimal,hasta 31 caracteres 1 y 0, formato: B1111000011110000111100001111000 pulsar ENTER.
void b_hexa(char glas[20]); //OK, conversion binario-hexadecimal, lo mismo anterior.
void d_binario(char valor_d[20]);//OK, conversion decimal-binario, hasta diez caracteres numericos, formato: D1234567890 pulsar ENTER.
void d_hexa(char valor[20]); //OK, conversion decimal-hexadecimal, lo mismo anterior.
void h_decimal(char valor_h[20]);//OK, conversion hexadecimal-decimal, hasta el valor FFFFFFF, formato: HFFFFFFF pulsar ENTER.
void h_binario(char valor_h[20]);//OK, conversion hexadecimal-binario, lo mismo anterior.
system("clear"); //para limpiar pantalla
printf("n=====Glas_Calculadora=====nn");
gets(valor); //tomando el primer valor
while(valor[x]!='F') //hacer mientras no se ingrese la letra f. Letra f para salir.
{
if(valor[x]=='B') //si primer caracter es B, entonces es binario.
{
b_decimal(valor);
b_hexa(valor);
}
if(valor[x]=='d' || valor[x]=='D') //si primer caracter es d o D, entonces es decimal.
{
d_binario(valor);
d_hexa(valor);
}
if(valor[x]=='h' || valor[x]=='H') //si primer caracter es h o H, entonces es hexadecimal.
{
h_decimal(valor);
h_binario(valor);
}
if(valor[x]=='o' || valor[x]=='O') //si primer caracter es 'o' o 'O', entonces ingresar a cal. aritmetica.
cal_glas();
getchar();
system("clear");
printf("n=====Glas_Calculadora=====nn");
gets(valor);
}
printf(".......FIN DE PROGRAMA");
getchar();
return 0;
}//fin de programa principal
//Definicion de todas las funciones
//------------------------------------------
void b_decimal(char valor_b[20]) //funcion conversion binario-decimal
{
int c=0,n,v=0,r=0; //forma de conversion: 11001 -> 1*(2e4) + 1*(2e3) + 0*(2e2) + 0*(2e1) + 1*(2e0) = 16 + 8 + 0 + 0 + 1 = 25
while(valor_b[c]!='') { c++; } //cantidad de caracteres en 'c'
c--; //menos uno, porque se ocupara para ingresar a la cadena valor_b[c], e ir recorriendola hacia atras.
while(valor_b[c]!='B')
{
n=(valor_b[c]-'0');
v=v*2;
if(v==0) v=1;
n=n*v; c--;
r=r+n;
}
printf(" %dn",r);
}//En la sgte. funcion se utiliza codigo de otras funciones de conversion------------------
void b_hexa(char valor_b[20]) //funcion de conversion binario-hexadecimal (la conversion se realiza de binario-decimal-hexadecimal)
{
int valor_d=0,c=0,n,v=0,r,p=0;
char hexa[10],C;
//convierte de cadena a caracter y a la ves convierte de binario a decimal
while(valor_b[c]!='') { c++; } //cantidad de caracteres en 'c'
c--; //menos uno, se toma caracter a caracter desde atras de la cadena.
while(valor_b[c]!='B')
{
n=(valor_b[c]-'0');
v=v*2;
if(v==0) v=1;
n=n*v; c--;
valor_d=valor_d+n; //en 'r' queda almacenado el valor en decimal
}
//convierte de decimal a hexadecimal
while(valor_d!=0)
{
r=valor_d%16;
valor_d=valor_d/16;
if(r==10) hexa[p]='A';
if(r==11) hexa[p]='B';
if(r==12) hexa[p]='C';
if(r==13) hexa[p]='D';
if(r==14) hexa[p]='E';
if(r==15) hexa[p]='F';
if(r>=0 && r<=9) { C=r+'0'; hexa[p]=C; }
p++;
}
p--; printf(" H");
while(p>=0) { printf("%c",C=hexa[p]); p--; }
printf("n");
}//--------------------------------------------
void h_binario(char valor_h[20]) //funcion de conversion hexadecimal-binario.
{
int p=0;
printf(" b");
while(valor_h[p]!='' && (valor_h[0]=='h' || valor_h[0]=='H'))
{
if(valor_h[p]=='A') printf("1010");
if(valor_h[p]=='B') printf("1011");
if(valor_h[p]=='C') printf("1100");
if(valor_h[p]=='D') printf("1101");
if(valor_h[p]=='E') printf("1110");
if(valor_h[p]=='F') printf("1111");
if(valor_h[p]>='0' && valor_h[p]<='9')
{
if(valor_h[p]=='0') printf("0000");
if(valor_h[p]=='1') printf("0001");
if(valor_h[p]=='2') printf("0010");
if(valor_h[p]=='3') printf("0011");
if(valor_h[p]=='4') printf("0100");
if(valor_h[p]=='5') printf("0101");
if(valor_h[p]=='6') printf("0110");
if(valor_h[p]=='7') printf("0111");
if(valor_h[p]=='8') printf("1000");
if(valor_h[p]=='9') printf("1001");
}
p++;
}
printf("n");
}//------------------------------------------
void d_binario(char valor_d[20])//funcion de conversion decimal-binario.
{
int c=1,n=0,r=0,p=0;
char bin[80],a;
while(valor_d[c]!='')
{ n=n*10+(valor_d[c]-'0'); c++; }
while(n>=1)
{
r=n%2;
n=n/2;
if(r==1) { bin[p]='1'; p++; }
if(r==0) { bin[p]='0'; p++; }
}
p--; printf(" b");
while(p>=0) { printf("%c",a=bin[p]); p--; }
printf("n");
}//------------------------------------------
void h_decimal(char valor_h[20]) //funcion de conversion hexadecimal-decimal
{
int c=0,n,v=0,x,z=0,r=0;
while(valor_h[c]!='') { c++; } //cantidad de caracteres
c--;
while(valor_h[c]!='H')
{
if(valor_h[c]>='A' && valor_h[c]<='F')
{
if(valor_h[c]=='A') n=10;
if(valor_h[c]=='B') n=11;
if(valor_h[c]=='C') n=12;
if(valor_h[c]=='D') n=13;
if(valor_h[c]=='E') n=14;
if(valor_h[c]=='F') n=15;
v=v*16;
if(v==0) v=1;
n=n*v; z++; c--;
}
else
{
n=(valor_h[c]-'0');
v=v*16;
if(v==0) v=1;
n=n*v; z++; c--;
}
r=r+n;
}
printf(" %dn",r);
}//-----------------------------------------
void d_hexa(char valor[20]) //funcion de conversion decimal-hexadecimal.
{
int valor_d=0,r,p=1; char hexa[10],c;
while(valor[p]!='') { valor_d=valor_d*10+(valor[p]-'0'); p++; }
p=0; printf(" H");
while(valor_d!=0)
{
r=valor_d%16;
valor_d=valor_d/16;
if(r==10) hexa[p]='A';
if(r==11) hexa[p]='B';
if(r==12) hexa[p]='C';
if(r==13) hexa[p]='D';
if(r==14) hexa[p]='E';
if(r==15) hexa[p]='F';
if(r>=0 && r<=9) { c=r+'0'; hexa[p]=c; }
p++;
}
p--;
while(p>=0) { printf("%c",c=hexa[p]); p--; }
printf("n");
}//------------------------------------------
void cal_glas() //funcion de calculadora aritmetica (suma,resta,division,multiplicacion,raiz).
{
int i=0,n1=0,n2=0,r=0,j;
float N1=0,N2=0,R=0;
char num[100];
system("clear");
printf("n======Calculadora_Aritmetica======nn");
gets(num);
while(num[0]!='F')
{
while(num[i]!='')
{
if(num[i]=='+')//suma, formato de ingreso ej: 234+234 luego ENTER.
{
for(j=0;j<i;j++)
n1=n1*10+(num[j]-'0');
for(j=i+1;num[j]!='';j++)
n2=n2*10+(num[j]-'0');
r=n1+n2; printf(" = %d",r);
}
if(num[i]=='-')//resta, formato de ingreso ej: 234-23 luego ENTER.
{
for(j=0;j<i;j++)
n1=n1*10+(num[j]-'0');
for(j=i+1;num[j]!='';j++)
n2=n2*10+(num[j]-'0');
r=n1-n2; printf(" = %d",r);
}
if(num[i]=='*')//multiplicacion, formato de ingreso ej: 276*265 luego ENTER.
{
for(j=0;j<i;j++)
n1=n1*10+(num[j]-'0');
for(j=i+1;num[j]!='';j++)
n2=n2*10+(num[j]-'0');
r=n1*n2; printf(" = %d",r);
}
if(num[i]=='/')//division, formato de ingreso ej: 765/89 luego ENTER.
{
for(j=0;j<i;j++)
N1=N1*10+(num[j]-'0');
for(j=i+1;num[j]!='';j++)
N2=N2*10+(num[j]-'0');
R=N1/N2; printf(" = %3.6f",R);
}
if(num[i]=='v' || num[i]=='V')
{
j=i+1;
while(num[j]!='')
{
N1=N1*10+(num[j]-'0'); j++;
}
N1=sqrt(N1); printf(" raiz cuadrada= %3.6f",N1);
}
i++;
}
i=0; n1=0; n2=0;
N1=0,N2=0;
getchar();
system("clear");
printf("n======Calculadora_Aritmetica======nn");
gets(num);
}
printf(" A salido de Calculadora_Aritmetica");
}//FIN DE PROGRAMA[/code]

glas
17 de Agosto del 2009
NOTA: ignoren el [code] al comienzo, [/code], borrenlos, gracias, saludos GLAS