calculadora.
Tengo, un problema para implementar un codigo de la funcion resta de una calculadora ...el lenguaje es delphi5....la resta tiene que ser de 40 digitos como maximo(minuendo y sustraendo)
espero me ayuden
gracias
espero me ayuden
gracias
DESEO REALIZAR UNA CALCULADORA Y ME FALTAN FUNCIONES....
POR FAVOR AYUDENME
POR FAVOR AYUDENME
xfavor, si no os importara mucho me podeis mandar los codigos de calculadora trigonometrica a [email protected] GRACIAS
Bueno primo creo q hemos llegado al mimo sitio, espero que te los envíen, un abrazo yo seguiré buscando.
yo halla una calcu cientifica en turbo c++ por si les interesa ahi les va:
#include <ctype.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <dos.h>
#include <bios.h>
#define ESC 0x11b
#define ENTER 0x1c0d
void toca(void)
{sound(400);delay(200);nosound();}
void p(int x,int y,char men[])
{gotoxy (x,y);cprintf("%s", men);}
void p (int x,int y,float f)
{gotoxy (x,y);cprintf("%0.2f ",f);}
void pc (int y,char men[],char c=40)
{gotoxy (c-((strlen(men))/2),y);cprintf("%s", men);}
void tc(int c)
{textcolor(c);}
void fc(int c)
{textbackground(c);}
void marco (char t[])
{
char i;
fc(1);
clrscr();
tc(7);
p(2,2,"CALCULADORA CIENTIFICA");
for(i=1;i<=80;i++) {p(i,1,"ß"); sound(i+150);delay(3);}
for(i=80;i;i--) {p(i,24,"Ü");sound(i+150);delay(3);}
pc(3,t);
nosound();
tc(6);fc(0);
p(62,2,"±±±±±±±±±±±±±±±±±±");
p(62,3,"±±±±±±±±±±±±±±±±±±");
tc(0);
fc(1);
}
//**************************** FUNCIONES DE NUMEROS **************************
// ÜÜÜÜÜ ÜÜÜ ÜÜÜÜÜ ÜÜÜÜÜ Ü Ü ÜÜÜÜÜ ÜÜÜÜÜ ÜÜÜÜÜ ÜÜÜÜÜ ÜÜÜÜÜ
// Û Û Û ÜÜÜÜÛ ÜÜÜÛ ÛÜÜÜÛ ÛÜÜÜÜ ÛÜÜÜÜ ß Û ÛÜÜÜÛ ÛÜÜÜÛ ÜÜÜ
// ÛÜÜÜÛ ÜÜÛÜÜ ÛÜÜÜÜ ÜÜÜÜÛ Û ÜÜÜÜÛ ÛÜÜÜÛ Û ÛÜÜÜÛ Û Ü
void cero (char x, char y)
{
p(x,y, "ÜÜÜÜÜ");
p(x,y+1,"Û Û");
p(x,y+2,"ÛÜÜÜÛ");
}
void uno (char x, char y)
{
p(x,y, "ÜÜÜ ");
p(x,y+1," Û ");
p(x,y+2,"ÜÜÛÜÜ");
}
void dos (char x, char y)
{
p(x,y, "ÜÜÜÜ");
p(x,y+1,"ÜÜÜÛ");
p(x,y+2,"ÛÜÜÜ");
}
void tres (char x, char y)
{
p(x,y, "ÜÜÜÜ");
p(x,y+1," ÜÜÛ");
p(x,y+2,"ÜÜÜÛ");
}
void cuatro (char x, char y)
{
p(x,y, "Ü Ü");
p(x,y+1,"ÛÜÜÜÛ");
p(x,y+2," Û");
}
void cinco (char x, char y)
{
p(x,y, "ÜÜÜÜ");
p(x,y+1,"ÛÜÜÜ");
p(x,y+2,"ÜÜÜÛ");
}
void seis (char x, char y)
{
p(x,y, "ÜÜÜÜ");
p(x,y+1,"ÛÜÜÜ");
p(x,y+2,"ÛÜÜÛ");
}
void siete (char x, char y)
{
p(x,y, "ÜÜÜÜ");
p(x,y+1,"ß Û");
p(x,y+2," Û");
}
void ocho (char x, char y)
{
p(x,y, "ÜÜÜÜÜ");
p(x,y+1,"ÛÜÜÜÛ");
p(x,y+2,"ÛÜÜÜÛ");
}
void nueve (char x, char y)
{
p(x,y, "ÜÜÜÜÜ");
p(x,y+1,"ÛÜÜÜÛ");
p(x,y+2," Û");
}
void punto (char x, char y)
{
p(x,y+2," Ü ");
}
void menos (char x, char y)
{
p(x,y+1," ÜÜÜ ");
}
void numero (char x, char y,char c)
{
char n=0;
void (*fun []) (char,char) = {cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,punto,menos};
if(c==\'.\') n=10;
if(c==\'-\') n=11;
if(c>=\'0\'&&c<=\'9\') n=c-\'0\';
fun[n] (x,y);
}
char *sup_char (char i, char *en)
{
char x;
for(x=i;en[x];x++)
en[x]=en[x+1];
return en;
}
char *redondeo (char *en)
{
char i;
for(i=0;en[i];i++) if(en[i]==\'.\') break;
if(!en[i]) return en;
for(i=strlen(en)-1;i>=0&&en[i]==\'0\';i--)
sup_char (i,en);
if(en[i]==\'.\'&&(!en[i+1])) sup_char (i,en);
return en;
}
char *flotante (float f,int n,char *en)
{
const char *cad[]={"%0.0f","%0.1f","%0.2f","%0.3f","%0.4f","%0.5f","%f"};
sprintf(en,cad[n],f);
return redondeo(en);
}
char *a_cadena (float f, char *en)
{
char n;
if(f>999999999999.00) f=999999999999.00;
if(f<-99999999999.00) f=-99999999999.00;
for(n=6;n>=0&&(strlen(flotante (f,n,en))>12);n--);
return en;
}
void cifra (char *cad)
{
window(5,6,76,8);clrscr();window(1,1,80,25);
char i,x;
for(i=strlen(cad)-1,x=71;i>=0&&x>=5;i--,x=x-6)
numero(x,6,cad[i]);
p(40,24,"");
}
void cifra (float f)
{
char cad[50];
cifra(a_cadena(f,cad));
}
//**************************************************************************
//********************** OPERACIONES **********************************
// ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ
// ÛÜÜ ÛÜÜÛ ÛÜÜÛ Û Û ÛÜÜÛ
// ÛÜÜÜ Û ßÜ Û ßÜ ÛÜÜÛ Û ßÜ
char error (void)
{
window(5,6,76,8);clrscr();window(1,1,80,25);
tc(8+BLINK);
pc(6,"ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ");
pc(7,"ÛÜÜ ÛÜÜÛ ÛÜÜÛ Û Û ÛÜÜÛ");
pc(8,"ÛÜÜÜ Û ßÜ Û ßÜ ÛÜÜÛ Û ßÜ");
p(40,24,"");
toca();
toca();
toca();
delay(200);
tc(8);
return 0;
}
char divi (float *r, float n1, float n2)
{
if(!n2) return error();
*r=n1/n2;
return 1;
}
char modulo (float *r, float n1, float n2)
{
if(!n2) return error();
*r=(int)n1%(int)n2;
return 1;
}
char potencia (float *r, float n1, float n2)
{
double d;
if(((!n1)&&n2<=0.00)||(n1<0.00&&n2<1.00)) return error();
d=pow(n1,n2);
*r=d;
return 1;
}
char inversa (float *r, float n1)
{
if(!n1) return error();
*r=1/n1;
return 1;
}
char exponencial (float *r, float n1)
{
return potencia(r,exp(1.00),n1);
}
char diez_ala (float *r, float n1)
{
return potencia(r,10.00,n1);
}
char raiz (float *r, float n1)
{
return potencia(r,n1,0.5);
}
char raiz_y (float *r, float n1,float n2)
{
float inv;
if(!inversa(&inv,n2)) return 0;
return potencia(r,n1,inv);
}
char ln (float *r, float n1)
{
if(n1<=0.00) return error();
*r=log(n1);
return 1;
}
char log_10 (float *r, float n1)
{
if(n1<=0.00) return error();
*r=log10(n1);
return 1;
}
char cardinalidad (float *en,float n)
{
long int c,i=n;
float m=n-i;;
if(n<0.00||(m)) return error();
*en=1;
for(c=0;c<i&&(*en)<99999999999.00;c++)
*en=(*en)*(c+1);
return 1;
}
//*****************************************************************************
void teclas (char x, char y, char t[], char f[])
{
p(x,y,t);p(x+11,y,f);
}
void ambiente (void)
{
char i;
marco("FUNCIONAMIENTO DE LA CALCULADORA");
tc(0);
fc(1);
p(2,11, "ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
for(i=12;i<=22;i=i+2)
{
p(2,i, "³ ³ ³³ ³ ³³ ³ ³");
p(2,i+1,"ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´");
}
p(2,23, "ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ");
pc(10,"<F1>,<F2>,<F3> MEMORIA AUXULIARES, <SHIF+Fx> CARGAR MEMORIA");
teclas(4, 12,"TECLA<S>","sen(x)");
teclas(4,14,"TECLA<C>","cos(x)");
teclas(4,16,"TECLA<T>","tan(x)");
teclas(4,18,"TECLA<E>","exp^(x)");
teclas(4,20,"TECLA<L>","ln(x)");
teclas(4,22,"TECLA<X>","(x)^(y)");
teclas(30,12,"TECLA<I>","1/(x)");
teclas(30,14,"TECLA<A>","10^(x)");
teclas(30,16,"TECLA<D>","log(x)");
teclas(30,18,"TECLA<Y>","(y)raiz(x)");
teclas(30,20,"TECLA<\">","(x)ý");
teclas(30,22,"TECLA<R>","raizý (x)");
teclas(56,12,"TECLA<Ä>","ñ(x)");
teclas(56,14,"TECLA<P>","(x)=Pi");
teclas(56,16,"TECLA<M>","M+");
teclas(56,18,"TECLA<N>","M-");
teclas(56,20,"ALT+M","(x)=M");
teclas(56,22,"CTRL+M","M = 0.00");
tc(7);
pc(25,"<Barra> AC, <Supr> C, <ÍÍ> Borrar, <Esc> Off");
tc(0);
fc(7);
p(2,5,"ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ");
p(2,6,"Û Û");
p(2,7,"Û Û");
p(2,8,"Û Û");
p(2,9,"ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ");
//5 //76
tc(8);
}
char existe_char (char *cad,char c)
{
char i;
for(i=0;cad[i]&&cad[i]!=c;i++);
return cad[i];
}
void incertar (float *c,int k,int *i,char *cad)
{
if(((*i)>11)||(k==\'0\'&&(!(*i)))||(k==\'.\'&&existe_char (cad,\'.\'))) return;
cad[*i]=k;
cad[(*i)+1]=NULL;
(*i)++;
*c=atof(cad);
}
void borrar (float *c,int *i,char *cad)
{
if(!(*i)) return;
(*i)--;
cad[*i]=NULL;
if(!(*i)) {cad[0]=\'0\'; cad[1]=NULL;}
*c=atof(cad);
}
int comenzar (char *op,float *c, float *a,char *cad)
{
cad[0]=\'0\';
cad[1]=NULL;
*c=0.00;
*a=0.00;
*op=NULL;
return 0;
}
char operacion (float *en, char op, float c, float a)
{
switch (op)
{
case \'+\': *en=a+c; break;
case \'-\': *en=a-c; break;
case \'*\': *en=a*c; break;
case \'/\': return divi (en,a,c);
case \'%\': return modulo (en,a,c);
case \'X\': return potencia (en,a,c);
case \'Y\': return raiz_y (en,a,c);
};
return 1;
}
int resultado (char *op, float *c, float *a, char *cad,char i)
{
float en=0.00;
if(!(*op)) return i;
if (!operacion(&en,*op,*c,*a)) return comenzar (op,c,a,cad);
*op=NULL;
*c=en;
return strlen(a_cadena(en,cad));
}
int cambia_signo (float *c,char *cad,char i)
{
if((!(*c))||(!i)) return i;
*c=(*c)*(-1);
return strlen(a_cadena(*c,cad));
}
char operacion_unitaria (float *en,int k,float n)
{
switch (k)
{
case \'"\': *en=n*n; break;
case \'ú\': *en=n*n*n; break;
case \'$\': *en=n*n*n*n; break;
case \'P\': *en=3.141592654; break;
case \'T\': *en=tan(n); break;
case \'S\': *en=sin(n); break;
case \'C\': *en=cos(n); break;
case \'R\': return raiz(en,n);
case \'I\': return inversa(en,n);
case \'L\': return ln(en,n);
case \'E\': return exponencial(en,n);
case \'D\': return log_10(en,n);
case \'A\': return diez_ala(en,n);
case \'!\': return cardinalidad (en,n);
}
return 1;
}
int resultado_unitario (int k,float *c, float *a, char *cad)
{
float en=0.00;
char op=0;
if (!operacion_unitaria(&en,k,*c)) return comenzar (&op,c,a,cad);
*c=en;
*a=0.00;
return strlen(a_cadena(en,cad));
}
int pon_numero (float num,float *c,char *cad)
{
*c=num;
return strlen(a_cadena(num,cad));
}
void abrir (float *F1, float *F2, float *F3, float *M, float *c)
{
FILE *fp;
if(!(fp=fopen("calcu.dat","r"))) return;
fscanf(fp,"%f\n",F1);
fscanf(fp,"%f\n",F2);
fscanf(fp,"%f\n",F3);
fscanf(fp,"%f\n",M);
fscanf(fp,"%f\n",c);
fclose(fp);
}
void grabar (float F1, float F2, float F3, float M, float c)
{
FILE *fp;
if(!(fp=fopen("calcu.dat","w"))) return;
fprintf(fp,"%f\n",F1);
fprintf(fp,"%f\n",F2);
fprintf(fp,"%f\n",F3);
fprintf(fp,"%f\n",M);
fprintf(fp,"%f\n",c);
fclose(fp);
}
void calculadora (void)
{
ambiente();
int k,i=0;
char cad[15]="0",op=NULL;
float a=0.00,c=0.00,F1=0.00,F2=0.00,F3=0.00,M=0.00;
abrir (&F1,&F2,&F3,&M,&c);
i=pon_numero(c,&c,cad);
while(1)
{
if((!c)&&i) i=0;
cifra(cad);
if(!i) {cad[0]=\'0\';cad[1]=NULL;}
k=bioskey(0);
if(k==ESC) break;
if(k==ENTER&&op) {i=resultado(&op,&c,&a,cad,i); a=0.00;}
if(k==0xe08) {borrar(&c,&i,cad);continue;}
if(k==0x5300) {i=pon_numero(0.00,&c,cad);continue;}
if(k==0x3b00) {i=pon_numero(F1,&c,cad);continue;}
if(k==0x3c00) {i=pon_numero(F2,&c,cad);continue;}
if(k==0x3d00) {i=pon_numero(F3,&c,cad);continue;}
if(k==0x3200) {i=pon_numero(M,&c,cad);continue;}
if(k==0x3920) {i=comenzar(&op,&c,&a,cad);continue;}
if(k==0xf09) {i=cambia_signo (&c,cad,i);continue;}
if(k==0x5400) {F1=c; continue;}
if(k==0x5500) {F2=c; continue;}
if(k==0x5600) {F3=c; continue;}
if(k==0x320d) {M=0; continue;}
k=toupper(k&0xFF);
if(k==\'M\') {M=M+c;continue;}
if(k==\'N\') {M=M-c;continue;}
if(k==\'.\'||(k>=\'0\'&&k<=\'9\')) {incertar(&c,k,&i,cad); continue;}
if(k==\'"\'||k==\'R\'||k==\'I\'||k==\'L\'||k==\'E\'||k==\'D\'||k==\'A\'||k==\'ú\'||k==\'$\'||k==\'P\'||k==\'T\'||k==\'S\'||k==\'C\'||k==\'!\')
{
resultado(&op,&c,&a,cad,i);
i=resultado_unitario(k,&c,&a,cad);
continue;
}
if(k==\'+\'||k==\'*\'||k==\'-\'||k==\'/\'||k==\'%\'||k==\'X\'||k==\'Y\')
{
resultado(&op,&c,&a,cad,i);
op=k;
a=c;
c=0.00;
i=0;
continue;
}
}
grabar (F1,F2,F3,M,c);
}
//DA EL EFECTO DE MOVIMIENTO VERTICAL A UNA CADENA
// COMENZANDO DESDE YI Y FINALIZANDO EN Y;
void mueve (int yi,int y,char que[50])
{int ya, yc;
yc=yi;ya=yi;
while(yc<=y)
{
pc(ya," ");
pc(yc,que);
sound(yc+100);
p(40,24,"");
delay(50);
ya=yc;yc++;
}
nosound();
}
void mueve_horizontal (int xi,int y,char men[])//DA EFECTO DE BALAS
{
int i,x,xc;
i=strlen(men)-1;
xc=xi;
while(i>=0)
{
for(x=2;x<=xc;x++)
{
gotoxy(x,y); cprintf("%c",men[i]);
sound(x+100);
delay(1);
if(x!=xc) p(x,y," ");
}
xc--;
i--;
}
nosound();
}
void presentacion (void)
{
/*
ßÜ Üß ÛßÜ Û Ûßßßßßß
ßÜß Û ßÜ Û ÛÜÜÜÜÜ
Û Û ßÛ Û
Û Û Û ÛÜÜÜÜÜÜ
ÛßßßßßÛ ß
ÛÜÜÜ Û
Û ßßßÛ
Ü ÛÜÜÜÜÜÛ
*/
marco("PRESENTACION DEL PROGRAMA");
tc(6);
mueve (5,13," Ü ÛÜÜÜÜÜÛ");
mueve (5,12," Û ßßßÛ");
mueve (5,11,"ÛÜÜÜ Û ");
mueve (5,10,"ÛßßßßßÛ ß ");
delay(1000);
tc(7);
mueve (5,13," Û Û Û ÛÜÜÜÜÜÜ");
mueve (5,12," Û Û ßÛ Û ");
mueve (5,11," ßÜß Û ßÜ Û ÛÜÜÜÜÜ");
mueve (5,10,"ßÜ Üß ÛßÜ Û Ûßßßßßß");
mueve (5,8,"Yo No Entiendo");
p(40,24,"");
delay(500);
tc(0);
mueve_horizontal (72,18,"Programa gratuito y de c¢digo abierto");
mueve_horizontal (72,20,"Para m s informaci¢n de este y otros");
mueve_horizontal (72,21,"productos visita nuestra p gina web");
tc(6);
mueve_horizontal (72,22,"www.yonoentiendo.com");
p(40,24,"");delay(500);
tc(7);
mueve_horizontal(60,25,"PRESIONE CUALQUIER <Tecla> PARA CONTINUAR");
p(40,24,"");
bioskey(0);
}
void main (void)
{
textmode(BW80);
presentacion();
calculadora ();
}
#include <ctype.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <dos.h>
#include <bios.h>
#define ESC 0x11b
#define ENTER 0x1c0d
void toca(void)
{sound(400);delay(200);nosound();}
void p(int x,int y,char men[])
{gotoxy (x,y);cprintf("%s", men);}
void p (int x,int y,float f)
{gotoxy (x,y);cprintf("%0.2f ",f);}
void pc (int y,char men[],char c=40)
{gotoxy (c-((strlen(men))/2),y);cprintf("%s", men);}
void tc(int c)
{textcolor(c);}
void fc(int c)
{textbackground(c);}
void marco (char t[])
{
char i;
fc(1);
clrscr();
tc(7);
p(2,2,"CALCULADORA CIENTIFICA");
for(i=1;i<=80;i++) {p(i,1,"ß"); sound(i+150);delay(3);}
for(i=80;i;i--) {p(i,24,"Ü");sound(i+150);delay(3);}
pc(3,t);
nosound();
tc(6);fc(0);
p(62,2,"±±±±±±±±±±±±±±±±±±");
p(62,3,"±±±±±±±±±±±±±±±±±±");
tc(0);
fc(1);
}
//**************************** FUNCIONES DE NUMEROS **************************
// ÜÜÜÜÜ ÜÜÜ ÜÜÜÜÜ ÜÜÜÜÜ Ü Ü ÜÜÜÜÜ ÜÜÜÜÜ ÜÜÜÜÜ ÜÜÜÜÜ ÜÜÜÜÜ
// Û Û Û ÜÜÜÜÛ ÜÜÜÛ ÛÜÜÜÛ ÛÜÜÜÜ ÛÜÜÜÜ ß Û ÛÜÜÜÛ ÛÜÜÜÛ ÜÜÜ
// ÛÜÜÜÛ ÜÜÛÜÜ ÛÜÜÜÜ ÜÜÜÜÛ Û ÜÜÜÜÛ ÛÜÜÜÛ Û ÛÜÜÜÛ Û Ü
void cero (char x, char y)
{
p(x,y, "ÜÜÜÜÜ");
p(x,y+1,"Û Û");
p(x,y+2,"ÛÜÜÜÛ");
}
void uno (char x, char y)
{
p(x,y, "ÜÜÜ ");
p(x,y+1," Û ");
p(x,y+2,"ÜÜÛÜÜ");
}
void dos (char x, char y)
{
p(x,y, "ÜÜÜÜ");
p(x,y+1,"ÜÜÜÛ");
p(x,y+2,"ÛÜÜÜ");
}
void tres (char x, char y)
{
p(x,y, "ÜÜÜÜ");
p(x,y+1," ÜÜÛ");
p(x,y+2,"ÜÜÜÛ");
}
void cuatro (char x, char y)
{
p(x,y, "Ü Ü");
p(x,y+1,"ÛÜÜÜÛ");
p(x,y+2," Û");
}
void cinco (char x, char y)
{
p(x,y, "ÜÜÜÜ");
p(x,y+1,"ÛÜÜÜ");
p(x,y+2,"ÜÜÜÛ");
}
void seis (char x, char y)
{
p(x,y, "ÜÜÜÜ");
p(x,y+1,"ÛÜÜÜ");
p(x,y+2,"ÛÜÜÛ");
}
void siete (char x, char y)
{
p(x,y, "ÜÜÜÜ");
p(x,y+1,"ß Û");
p(x,y+2," Û");
}
void ocho (char x, char y)
{
p(x,y, "ÜÜÜÜÜ");
p(x,y+1,"ÛÜÜÜÛ");
p(x,y+2,"ÛÜÜÜÛ");
}
void nueve (char x, char y)
{
p(x,y, "ÜÜÜÜÜ");
p(x,y+1,"ÛÜÜÜÛ");
p(x,y+2," Û");
}
void punto (char x, char y)
{
p(x,y+2," Ü ");
}
void menos (char x, char y)
{
p(x,y+1," ÜÜÜ ");
}
void numero (char x, char y,char c)
{
char n=0;
void (*fun []) (char,char) = {cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,punto,menos};
if(c==\'.\') n=10;
if(c==\'-\') n=11;
if(c>=\'0\'&&c<=\'9\') n=c-\'0\';
fun[n] (x,y);
}
char *sup_char (char i, char *en)
{
char x;
for(x=i;en[x];x++)
en[x]=en[x+1];
return en;
}
char *redondeo (char *en)
{
char i;
for(i=0;en[i];i++) if(en[i]==\'.\') break;
if(!en[i]) return en;
for(i=strlen(en)-1;i>=0&&en[i]==\'0\';i--)
sup_char (i,en);
if(en[i]==\'.\'&&(!en[i+1])) sup_char (i,en);
return en;
}
char *flotante (float f,int n,char *en)
{
const char *cad[]={"%0.0f","%0.1f","%0.2f","%0.3f","%0.4f","%0.5f","%f"};
sprintf(en,cad[n],f);
return redondeo(en);
}
char *a_cadena (float f, char *en)
{
char n;
if(f>999999999999.00) f=999999999999.00;
if(f<-99999999999.00) f=-99999999999.00;
for(n=6;n>=0&&(strlen(flotante (f,n,en))>12);n--);
return en;
}
void cifra (char *cad)
{
window(5,6,76,8);clrscr();window(1,1,80,25);
char i,x;
for(i=strlen(cad)-1,x=71;i>=0&&x>=5;i--,x=x-6)
numero(x,6,cad[i]);
p(40,24,"");
}
void cifra (float f)
{
char cad[50];
cifra(a_cadena(f,cad));
}
//**************************************************************************
//********************** OPERACIONES **********************************
// ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ
// ÛÜÜ ÛÜÜÛ ÛÜÜÛ Û Û ÛÜÜÛ
// ÛÜÜÜ Û ßÜ Û ßÜ ÛÜÜÛ Û ßÜ
char error (void)
{
window(5,6,76,8);clrscr();window(1,1,80,25);
tc(8+BLINK);
pc(6,"ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ ÜÜÜÜ");
pc(7,"ÛÜÜ ÛÜÜÛ ÛÜÜÛ Û Û ÛÜÜÛ");
pc(8,"ÛÜÜÜ Û ßÜ Û ßÜ ÛÜÜÛ Û ßÜ");
p(40,24,"");
toca();
toca();
toca();
delay(200);
tc(8);
return 0;
}
char divi (float *r, float n1, float n2)
{
if(!n2) return error();
*r=n1/n2;
return 1;
}
char modulo (float *r, float n1, float n2)
{
if(!n2) return error();
*r=(int)n1%(int)n2;
return 1;
}
char potencia (float *r, float n1, float n2)
{
double d;
if(((!n1)&&n2<=0.00)||(n1<0.00&&n2<1.00)) return error();
d=pow(n1,n2);
*r=d;
return 1;
}
char inversa (float *r, float n1)
{
if(!n1) return error();
*r=1/n1;
return 1;
}
char exponencial (float *r, float n1)
{
return potencia(r,exp(1.00),n1);
}
char diez_ala (float *r, float n1)
{
return potencia(r,10.00,n1);
}
char raiz (float *r, float n1)
{
return potencia(r,n1,0.5);
}
char raiz_y (float *r, float n1,float n2)
{
float inv;
if(!inversa(&inv,n2)) return 0;
return potencia(r,n1,inv);
}
char ln (float *r, float n1)
{
if(n1<=0.00) return error();
*r=log(n1);
return 1;
}
char log_10 (float *r, float n1)
{
if(n1<=0.00) return error();
*r=log10(n1);
return 1;
}
char cardinalidad (float *en,float n)
{
long int c,i=n;
float m=n-i;;
if(n<0.00||(m)) return error();
*en=1;
for(c=0;c<i&&(*en)<99999999999.00;c++)
*en=(*en)*(c+1);
return 1;
}
//*****************************************************************************
void teclas (char x, char y, char t[], char f[])
{
p(x,y,t);p(x+11,y,f);
}
void ambiente (void)
{
char i;
marco("FUNCIONAMIENTO DE LA CALCULADORA");
tc(0);
fc(1);
p(2,11, "ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
for(i=12;i<=22;i=i+2)
{
p(2,i, "³ ³ ³³ ³ ³³ ³ ³");
p(2,i+1,"ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´");
}
p(2,23, "ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ");
pc(10,"<F1>,<F2>,<F3> MEMORIA AUXULIARES, <SHIF+Fx> CARGAR MEMORIA");
teclas(4, 12,"TECLA<S>","sen(x)");
teclas(4,14,"TECLA<C>","cos(x)");
teclas(4,16,"TECLA<T>","tan(x)");
teclas(4,18,"TECLA<E>","exp^(x)");
teclas(4,20,"TECLA<L>","ln(x)");
teclas(4,22,"TECLA<X>","(x)^(y)");
teclas(30,12,"TECLA<I>","1/(x)");
teclas(30,14,"TECLA<A>","10^(x)");
teclas(30,16,"TECLA<D>","log(x)");
teclas(30,18,"TECLA<Y>","(y)raiz(x)");
teclas(30,20,"TECLA<\">","(x)ý");
teclas(30,22,"TECLA<R>","raizý (x)");
teclas(56,12,"TECLA<Ä>","ñ(x)");
teclas(56,14,"TECLA<P>","(x)=Pi");
teclas(56,16,"TECLA<M>","M+");
teclas(56,18,"TECLA<N>","M-");
teclas(56,20,"ALT+M","(x)=M");
teclas(56,22,"CTRL+M","M = 0.00");
tc(7);
pc(25,"<Barra> AC, <Supr> C, <ÍÍ> Borrar, <Esc> Off");
tc(0);
fc(7);
p(2,5,"ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ");
p(2,6,"Û Û");
p(2,7,"Û Û");
p(2,8,"Û Û");
p(2,9,"ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ");
//5 //76
tc(8);
}
char existe_char (char *cad,char c)
{
char i;
for(i=0;cad[i]&&cad[i]!=c;i++);
return cad[i];
}
void incertar (float *c,int k,int *i,char *cad)
{
if(((*i)>11)||(k==\'0\'&&(!(*i)))||(k==\'.\'&&existe_char (cad,\'.\'))) return;
cad[*i]=k;
cad[(*i)+1]=NULL;
(*i)++;
*c=atof(cad);
}
void borrar (float *c,int *i,char *cad)
{
if(!(*i)) return;
(*i)--;
cad[*i]=NULL;
if(!(*i)) {cad[0]=\'0\'; cad[1]=NULL;}
*c=atof(cad);
}
int comenzar (char *op,float *c, float *a,char *cad)
{
cad[0]=\'0\';
cad[1]=NULL;
*c=0.00;
*a=0.00;
*op=NULL;
return 0;
}
char operacion (float *en, char op, float c, float a)
{
switch (op)
{
case \'+\': *en=a+c; break;
case \'-\': *en=a-c; break;
case \'*\': *en=a*c; break;
case \'/\': return divi (en,a,c);
case \'%\': return modulo (en,a,c);
case \'X\': return potencia (en,a,c);
case \'Y\': return raiz_y (en,a,c);
};
return 1;
}
int resultado (char *op, float *c, float *a, char *cad,char i)
{
float en=0.00;
if(!(*op)) return i;
if (!operacion(&en,*op,*c,*a)) return comenzar (op,c,a,cad);
*op=NULL;
*c=en;
return strlen(a_cadena(en,cad));
}
int cambia_signo (float *c,char *cad,char i)
{
if((!(*c))||(!i)) return i;
*c=(*c)*(-1);
return strlen(a_cadena(*c,cad));
}
char operacion_unitaria (float *en,int k,float n)
{
switch (k)
{
case \'"\': *en=n*n; break;
case \'ú\': *en=n*n*n; break;
case \'$\': *en=n*n*n*n; break;
case \'P\': *en=3.141592654; break;
case \'T\': *en=tan(n); break;
case \'S\': *en=sin(n); break;
case \'C\': *en=cos(n); break;
case \'R\': return raiz(en,n);
case \'I\': return inversa(en,n);
case \'L\': return ln(en,n);
case \'E\': return exponencial(en,n);
case \'D\': return log_10(en,n);
case \'A\': return diez_ala(en,n);
case \'!\': return cardinalidad (en,n);
}
return 1;
}
int resultado_unitario (int k,float *c, float *a, char *cad)
{
float en=0.00;
char op=0;
if (!operacion_unitaria(&en,k,*c)) return comenzar (&op,c,a,cad);
*c=en;
*a=0.00;
return strlen(a_cadena(en,cad));
}
int pon_numero (float num,float *c,char *cad)
{
*c=num;
return strlen(a_cadena(num,cad));
}
void abrir (float *F1, float *F2, float *F3, float *M, float *c)
{
FILE *fp;
if(!(fp=fopen("calcu.dat","r"))) return;
fscanf(fp,"%f\n",F1);
fscanf(fp,"%f\n",F2);
fscanf(fp,"%f\n",F3);
fscanf(fp,"%f\n",M);
fscanf(fp,"%f\n",c);
fclose(fp);
}
void grabar (float F1, float F2, float F3, float M, float c)
{
FILE *fp;
if(!(fp=fopen("calcu.dat","w"))) return;
fprintf(fp,"%f\n",F1);
fprintf(fp,"%f\n",F2);
fprintf(fp,"%f\n",F3);
fprintf(fp,"%f\n",M);
fprintf(fp,"%f\n",c);
fclose(fp);
}
void calculadora (void)
{
ambiente();
int k,i=0;
char cad[15]="0",op=NULL;
float a=0.00,c=0.00,F1=0.00,F2=0.00,F3=0.00,M=0.00;
abrir (&F1,&F2,&F3,&M,&c);
i=pon_numero(c,&c,cad);
while(1)
{
if((!c)&&i) i=0;
cifra(cad);
if(!i) {cad[0]=\'0\';cad[1]=NULL;}
k=bioskey(0);
if(k==ESC) break;
if(k==ENTER&&op) {i=resultado(&op,&c,&a,cad,i); a=0.00;}
if(k==0xe08) {borrar(&c,&i,cad);continue;}
if(k==0x5300) {i=pon_numero(0.00,&c,cad);continue;}
if(k==0x3b00) {i=pon_numero(F1,&c,cad);continue;}
if(k==0x3c00) {i=pon_numero(F2,&c,cad);continue;}
if(k==0x3d00) {i=pon_numero(F3,&c,cad);continue;}
if(k==0x3200) {i=pon_numero(M,&c,cad);continue;}
if(k==0x3920) {i=comenzar(&op,&c,&a,cad);continue;}
if(k==0xf09) {i=cambia_signo (&c,cad,i);continue;}
if(k==0x5400) {F1=c; continue;}
if(k==0x5500) {F2=c; continue;}
if(k==0x5600) {F3=c; continue;}
if(k==0x320d) {M=0; continue;}
k=toupper(k&0xFF);
if(k==\'M\') {M=M+c;continue;}
if(k==\'N\') {M=M-c;continue;}
if(k==\'.\'||(k>=\'0\'&&k<=\'9\')) {incertar(&c,k,&i,cad); continue;}
if(k==\'"\'||k==\'R\'||k==\'I\'||k==\'L\'||k==\'E\'||k==\'D\'||k==\'A\'||k==\'ú\'||k==\'$\'||k==\'P\'||k==\'T\'||k==\'S\'||k==\'C\'||k==\'!\')
{
resultado(&op,&c,&a,cad,i);
i=resultado_unitario(k,&c,&a,cad);
continue;
}
if(k==\'+\'||k==\'*\'||k==\'-\'||k==\'/\'||k==\'%\'||k==\'X\'||k==\'Y\')
{
resultado(&op,&c,&a,cad,i);
op=k;
a=c;
c=0.00;
i=0;
continue;
}
}
grabar (F1,F2,F3,M,c);
}
//DA EL EFECTO DE MOVIMIENTO VERTICAL A UNA CADENA
// COMENZANDO DESDE YI Y FINALIZANDO EN Y;
void mueve (int yi,int y,char que[50])
{int ya, yc;
yc=yi;ya=yi;
while(yc<=y)
{
pc(ya," ");
pc(yc,que);
sound(yc+100);
p(40,24,"");
delay(50);
ya=yc;yc++;
}
nosound();
}
void mueve_horizontal (int xi,int y,char men[])//DA EFECTO DE BALAS
{
int i,x,xc;
i=strlen(men)-1;
xc=xi;
while(i>=0)
{
for(x=2;x<=xc;x++)
{
gotoxy(x,y); cprintf("%c",men[i]);
sound(x+100);
delay(1);
if(x!=xc) p(x,y," ");
}
xc--;
i--;
}
nosound();
}
void presentacion (void)
{
/*
ßÜ Üß ÛßÜ Û Ûßßßßßß
ßÜß Û ßÜ Û ÛÜÜÜÜÜ
Û Û ßÛ Û
Û Û Û ÛÜÜÜÜÜÜ
ÛßßßßßÛ ß
ÛÜÜÜ Û
Û ßßßÛ
Ü ÛÜÜÜÜÜÛ
*/
marco("PRESENTACION DEL PROGRAMA");
tc(6);
mueve (5,13," Ü ÛÜÜÜÜÜÛ");
mueve (5,12," Û ßßßÛ");
mueve (5,11,"ÛÜÜÜ Û ");
mueve (5,10,"ÛßßßßßÛ ß ");
delay(1000);
tc(7);
mueve (5,13," Û Û Û ÛÜÜÜÜÜÜ");
mueve (5,12," Û Û ßÛ Û ");
mueve (5,11," ßÜß Û ßÜ Û ÛÜÜÜÜÜ");
mueve (5,10,"ßÜ Üß ÛßÜ Û Ûßßßßßß");
mueve (5,8,"Yo No Entiendo");
p(40,24,"");
delay(500);
tc(0);
mueve_horizontal (72,18,"Programa gratuito y de c¢digo abierto");
mueve_horizontal (72,20,"Para m s informaci¢n de este y otros");
mueve_horizontal (72,21,"productos visita nuestra p gina web");
tc(6);
mueve_horizontal (72,22,"www.yonoentiendo.com");
p(40,24,"");delay(500);
tc(7);
mueve_horizontal(60,25,"PRESIONE CUALQUIER <Tecla> PARA CONTINUAR");
p(40,24,"");
bioskey(0);
}
void main (void)
{
textmode(BW80);
presentacion();
calculadora ();
}
Buenas disculpen la molestia, soy novato en prog,deseo hacer un programa en c++ builder de una calculadora sencilla igual a la de windows , pero que solo tenga las 4 operaciones basicas de suma resta multip. y division .si tienen el codigo por favor .
grac
grac
hola que tal tu de casualidad no tendras una calculadora trigonometrica en C++? coon CIN Y COUT en ves de PRINTF Y SCANF..
Te lo agradeceria mucho gracias
Te lo agradeceria mucho gracias
Hola soy jose carlos y Tengo el mismo problema con la calculadora pero en delphi 7, tendras el codgo de la calculadora para que lo compartas con migo. Muchas Gracias, saludos.
Necesito hacer un delay controlado en C++ Builder y no tengo ni idea como