Según sea necesario, estoy buscando una calculadora en lenguaje C.

Programación en lenguaje C para calculadora

1. Descripción general de funciones: este programa puede calcular los resultados de fórmulas con corchetes dobles, como ((3+2)*(3+2)+5)*((3). +2)*(3+2)+5)*(5+5)=El resultado de salida es 9000.

2. Programa fuente:

# include & ltstdio.h & gt

int w;

Doble B[4][ 40];

shuru(char *pt)

{

int i=0, m;

Hacer

{

*(pt+I)= getchar();

m = I;

i++;

}

mientras(*(pt+m)!='=');

*(pt+m)= '+';

*(pt +m+1)= ' = ';

}

tlchli(char *p)

{

int a, b ;

if(*p=='-'||*p=='+')

{

for(b = 0;*( p+b)! ='=';b++)

;

for(;b & gt=0;b -)

*(p+ b+ 1)= *(p+b);

* p = ' 0

}

Otros

{

for(a = 1;*(p+a)!='=';a++)

{

if(*(p+a)==' - '||*(p+a)=='+')

{

if(*(p+a-1)= '(' &&*(p +a+1)>= ' 0 ' & amp& amp*(p+a+1)& lt;='9')

{

for(b = 0; *(p+a+b)! ='=';b++)

;

for(;b & gt=0;b -)

*(p+a+b+ 1)= *(p+a+b);

*(p+a)=“0”;

a =( a+1 );

}

}

}

}

}

jgh (doble B[4][40], char *p)

{

int a, b, c=0, d, e, f, h, I, k, n, m;

Doble g=0, j = 0;

for(a = 0; a & lt4;a++)

for (b = 0; b & lt40; b++)

b[a]= 0;

for(d = 0;*(p+d)! ='=';d++)

{

if(*(p+d)= = '+' | | *(p+d)= = '-' | | *(p+d)= = ' * ' | *(p+d)= = '/')

{

if(*(p+d)= = '+')B[3][c]= '+';

if(*(p+d)= = '-')B[3][c]= '-';

if(*(p+d)= = ' * ' B[3][c]= ' * ';

if(*(p+d)= = '/ ')B[3][c]= '/';

if(*(p+d-1)= ')' & amp;& amp*(p+d-2)== ')')

{

b[0][c]= ')';

b[1][c]= ')';

}

if(*(p+d-1)= ')' & amp; & amp*(p+d-2)! =')')

b[1][c]= ')';

for(e = d-1;*(p+e)<0 ' | | *(p+e)>;'9'

;e -)

;

for(f = e;*(p+f)!='.'& amp& amp(f & gt0)& amp;& amp* (p+f)>= ' 0 ' & amp& amp*(p+f)& lt;='9';f -)

;

if(*(p +f)== ' . ')

{

for(h = f-1; (h & gt= 0)&&*(p+h) >= ' 0 ' & amp& amp*(p+h)& lt;='9';h -)

;

h++;

si (* (p+h-1)= '(' & amp;& amp*(p+h-2)== '(')

{

b[0 ][ c]= '(';

b[1][c]= '(';

}

if(*(p+h -1 )= '(' &&*(p+h-2)!='(')

b[1][c]= '(';

for( I = h;*(p+i)>= ' 0 ' & amp& amp*(p+I)& lt;='9';i++)

g =(*( p+I) -48)+g * 10.0;

for(k = f+1;*(p+k)>= ' 0 ' & amp& amp*(p+k)& lt; ='9' ;k++)

;

k-;

for(n = k;*(p+n)>= ' 0 ' & amp& amp*( p+n)& lt;='9';n -)

j =(j/10.(*(p+n)-48)/10.0);

b[2][c]=(g+j);

g = j = 0;

}

Otros

{

for(m = e;*(p+m)>= ' 0 ' & amp& amp*(p+m)& lt;='9';m-);

m++;

if(*(p+m-1)= '(' & amp;& amp*(p+m-2)== '(')

{

b[0][c]= '(';

b[1][c]= '(';

}

if(*(p+m-1)= '(' &&*(p+m-2)!='(')

b[1][c ]= '(';

for(I = m;*(p+i)>= ' 0 ' & amp& amp*(p+I)& lt;=' 9';i++)

g =(*(p+I)-48)+g * 10.0;

b[2][c]= g;

g = 0

}

c++;

}

}

w =( c-1);

}

qkh1(doble B[4][40])

{

int a=1 , b, c, d , e, f, j, k;

for(b = 0; b & ltw; b++)

{

si (B[a]= = '(')

{

for(c = b;B[a][c]! =')';c++)

;

for(d = b+ 1;B[a][d]!= '(' &&d<c;d++ )

;

if(B[a][d]== '(')

k = d;

Otros

k=b;

<

p>b[a][k]= 0; b[a][c]= 0;

for(e = k; e & ltc; e++)

{

if(B[3][e]=='* ')

{

B[2][e+1]= B[2] [e]* B[2][e+1];

if(B[3][e-1]= = '-' & amp;& amp(e & gt0))

{

b[2][e]= 0

b[3][e]= '-';

Otro

{

b[2][e]= 0

b[3][e]= '+ ';

}

}

if(B[3][e]=='/')

{

B[2][e+1]= B[2][e]/B[2][e+1];

if(B[3][e-1 ]= = '-' &&e>0)

{

b[2][e]= 0;

b[3] [e]= '-';

}

Otro

{

b[2][e]= 0;

b[3][e]= '+';

}

}

}

para (f = k

if(B[3][f]=='+')

{

B[2][f+1]= B[2][f]+B[2][f+1];

b[2][f]= 0 ;b[3 ][f]= '+';

}

if(B[3][f]=='-')

{

B[2][f+1]= B[2][f]-B[2][f+1];

b[2][f] = 0; [3][f]= '+';

}

}

b = c-1; [3][k-1]= = ' * ' & amp; & ampk & gt0)

{

for(;k & ltc;k++)

{

b[3][k]= ' * ';

b[2][k]=

}

}

if(B[3][k-1]= = '/' & amp;& ampk & gt0)

{

for(;k & ltc;k++)

{

b[3][k]= '/';

b[ 2][k ]= 1.0;

}

}

}

}

for(j = 0;j< = w;j++)

{

if(B[1][j]! = '(' &&B[1][j]!=')')

B[1][j]= B[0][j];

}

}

qkh2(doble B[4][40])

{

int a, b, c, d, e, f, j;

for(b = 0; b & ltw; b++)

{

if(B[1]== '( ')

{

for(c = b;B[1][c]!=')';c++)

;

p>

b[1]= 0; b[1][c]= 0;

for(e = b; e & ltc; e++)

{

if(B[3][e]=='*

')

{

B[2][e+1]= B[2][e]* B[2][e+1];

if(B[3][e-1]= = '-' & amp;& amp(e & gt0))

{

b[2][e ]= 0;

b[3][e]= '-';

}

Otro

{

b[2][e]= 0;

b[3][e]= '+';

}

}

if(B[3][e]=='/')

{

B[2][e+1]= B[2] [e]/B[2][e+1];

if(B[3][e-1]= = '-' & amp;& amp(e & gt0))

{

b[2][e]= 0

b[3][e]= '-';

Otro

{

b[2][e]= 0

b[3][e]= '+ ';

}

}

}

for(f = b; f & ltc; f++)

{

if(B[3][f]=='+')

{

B[2][f+1]= B[2][f]+B[2][f+1];

b[2][f]= 0; b[3][f]= '+';

}

if(B[3][f]=='-')

{

B[2][f+1 ]= B[2][f]-B[2][f+1];

b[2][f]= 0; b[3][f]= '+';

}

}

if(B[3][B-1]= = ' * ' & amp; & ampb & gt0)

{

for(;b & ltc;b++)

{

b[3]= ' * ';

b[2]= 1.0;

}

}

if(B[3][B-1]= = '/' & amp; & ampb & gt0)

{

for(;b & ltc;b++)

{

b[3]= ' /';

b[2]= 1.0;

}

}

}

}

}

jshjg(doble B[4][40])

{

int b, d, e, f <; /p>

for(e = 0; e & ltw; e++)

{

if(B[3][e]=='* ')

{

B[2][e+1]= B[2][e]* B[2][e+1];

si( B[3][e-1]= = '-' &&e>0)

{

b[2][e]= 0;

b[3][e]= '-';

}

Otros

{

b[2 ][e] = 0;

b[3][e]= '+';

}

}

si (B[3 ][e]=='/')

{

B[2][e+1]= B[2][e]/B[2 ][e+ 1];

if(B[3][e-1]= = '-' & amp; & ampe & gt0)

{

b [2][e]= 0;

b[

3][e]= '-';

}

Otros

{

b[2][e]= 0 ;

b[3][e]= '+';

}

}

}

for(f = 0; f & ltw; f++)

{

if(B[3][f]=='+')

{

B[2][f+1]= B[2][f]+B[2][f+1];

b[2][f] = 0; b[3][f]= '+'

}

if(B[3][f]=='-')

{

B[2][f+1]=(B[2][f]-B[2][f+1]);

b[2 ][f]= 0; b[3][f]= '+'

}

}

}

shuchu(doble B[4][40], char *p)

{

printf("Respuesta %f\n ", B[2][w]);

}

Principal()

{

char *p, A[100];

Shu Ru (1);

p = & ampa[0];

tlchli(p);

jgh(B, p);

qkh 1(B);

qkh 2(B);

jshjg(B);

Shu Chu(B, p);

p>

}

#Contiene "string.h"

#Contiene "graphics.h"

#Contiene "conio .h"

#Incluir "dos.h"

#Incluir "tiempo.h"

#Incluir " stdlib.h "

#Incluye "stdio.h"

#Contiene "math.h"

/*Llama a una serie de funciones de biblioteca*/

int py/ *Definir una variable global* /

Modo vacío (int py)/*función de modo, utilizada para configurar y utilizar varias funciones informáticas de la calculadora*/

{ double x1, x2 , ans, ans 2 ;

if(py & lt;11)

{ printf("entrada x1, x2:");

scanf(" %lf,%lf "y ampx1.

x2);}

else { printf(" entrada x:"); scanf("%lf ", & ampx 1);}

Cambiar (py)

{Caso 6: ans = x 1+x2; printf("=%.3lf ", ans);

Caso 7: ans = x 1-x2; .3lf ", ans); break;

Caso 8: ans = x 1 * x2; printf ("=%.3lf ", ans); break;

Caso 9: ans = x 1/x2; printf("=%.3lf ", ans);

Caso 10: ans=pow(x1, x2); .3lf",x2,ans); romper;

caso 11:ans = sqrt(x 1); printf("=%.3lf ",ans); romper;

Caso 12: ans = sin(x 1); ans2 = cos(x 1); printf("sin x=%.3lf, cos x=%.3lf ", ans, ans 2); p>Caso 13: ans = asin(x 1); ans 2 = acos(x 1); printf("asin x=%.3lf, acos x=%.3lf ", ans, ans 2); p>

}

getch(); clr SCR();

}

Int join(char *ps) /*se ingresa la función de unión El nombre de usuario y la contraseña pueden coincidir con el usuario registrado.

Los usuarios registrados pueden utilizar funciones avanzadas*/

{ char name[30], pass[20]

int len, I

printf(" ID; :");

scanf("%s ", nombre);

printf(" \ n contraseña:");

scanf("% s ", pasar);

clr SCR();

for(I = 0;i<strlen(PS);i++)

if(pasar [i ]! =*(ps+i)) devuelve 0;

devuelve 1;

}

int menú(int pass)/*menú función, menú */

{ int py = 6; char clave = 0;

gotoxy(1, 4

printf(" MENÚ \ n \ n ");

printf(" AGREGAR+\ n ");

printf(" SUB-\ n "); );

printf(" DIV/");

gotoxy(10, 6); printf(" & lt;-");

if( pasar) {gotoxy(1, 10); printf(" inv ^\n ");

printf(" EVO ~ \ n ");

printf(" SIN COS \ n ");

printf("ACOS \ n ");

printf(" modificar \ n ");

printf( " SALIR "); }

else {gotoxy(1, 10); printf(" QUIT ");}

And (key!=13) /*Las siguientes son selecciones de control Todas las declaraciones en el posición de la flecha */

{ key = getch();

Interruptor (tecla)

{Caso 80: gotoxy(10, py); "); if (!pass) py = py % 5+6; else { ++ py; if (py == 16) py = 6; } roto;

Caso 72: gotoxy (10, py); printf (" "); -py; si (py = = 5)py = 15 * pasar

}

gotoxy(10 , py) ; printf(" <-");

}

Devuelve py;

}

Principal() /*Función principal , declaraciones sobre la asignación de funciones y el inicio de la animación*/

{ int gd=DETECT, gm, x=320, y=10, I, l=10, h=10, t, co=3, v = 0;

int pass

ARCHIVO * fpchar PS[20];

init gráfico(& amp; gd, & ampgm, ""; /* Inicializar el modo de gráficos*/

registerbgidriver(EGA VGA_driver);

for(I = 1;i<31;co=(co++%10), v++, y++ = 2+v, i++ )

{ retraso(9e 10); borrar dispositivo();

establecer color(co);

setfillstyle (1, co

Sector (x, y, 0, 360, l, h) /*Dibujar un círculo*/

p>

}

for(I = 1;i<300;i++)

{ establecer color(I % 10);

circle( x, y, I);

Retraso (1000); /*Retraso*/

}

borrar dispositivo(); /*Borrar pantalla* /

closegraph();

fp=fopen("file1", "r");

if(FP == NULL) pasar = 1; >

else {fgets(ps, 20, FP);

pasar = unirse(PS);}

LD:py = menú(pasar);

if(py = = pasar * 5+10){ clrscr(); printf("¡Adiós!"); getch(); return }

else if(py! = 14) { clrscr(); modo (py); } else { fp=fopen("file1", "w");

printf("\n contraseña:");

scanf("%s ", PS);

fputs(ps, FP);

fclose(FP); clr SCR();

}

goto ld/*Saltar dentro de la función*/

}

# include & ltstdio.h & gt/*Función de biblioteca */

Nodo de estructura

{

int data;

struct s _ node * next

};

estructura typedef s_node s_list

typedef s_list * enlace

Operador de enlace = NULL

Operando de enlace = NULL

Enlace push(pila de enlaces, valor int)

{

Enlace nuevonodo

nuevo nodo = (enlace) malloc(sizeof(s_list) );

if (! nuevo nodo)

{

printf("\n¡¡¡Error en la asignación de memoria!!!" );

Devolver NULL

}

Nuevo nodo->data=value;

Nuevo nodo->next =stack;

pila = newnode

Volver a la pila;

}

Vínculo emergente (pila de enlaces, int *valor)

p>

{

Enlace superior;

if (stack! = vacío)

{

arriba = pila;

pila = pila-> siguiente;

* valor = arriba -> ;Datos;

Gratis (Parte 1);

Devolver pila;

}

Otros

* valor =-1;

}

int vacío (pila de enlaces)

{

if(stack==NULL)

Devuelve 1;

Otros

Devuelve 0;

}

int is_operator (operador de carácter)

{

Interruptor (Operador)

{

Caso'+':Caso'-':Caso' * ':Caso'/' : devuelve 1;

Valor predeterminado: devuelve 0;

>

int precedencia (operador de carácter)

{

Interruptor (operador)

{

Caso' +':caso '-':return 1;

case "*":case "/":return 2;

Valor predeterminado: return 0;

}

}

int two_result(int operador, int operando1, int operando2)

{

switch(operador)

{

case '+':return(operando 2+operando 1);

case '-':return(operando 2-operando 1); >case ' * ':return(operando 2 * operando 1);

case '/':return(operando 2/operando 1);

}

}

void main()

{

expresión char[50];

int posición = 0;

int op = 0;

int operando 1 = 0;

int operando 2 = 0

int evaluar = 0;

printf("\nIngrese la expresión secuencial:");

gets(expresión);

while(expresión[posición] ! = ' \ 0 ' & amp& ampexpresión [posición]! ='\n ')

{

if(is_operator(expresión[posición]))

{

if(!null(operador))

while(prioridad(expresión[posición])<=prioridad(operador-> ; datos); & amp

! vacío (operador) )

{

operando=pop(operando& ampoperando 1);

Operador=pop(operando& operación2);

Operador=pop (operador&op);

Operador=push(operando, dos_resultados(op, operando1, operando 2));

}

Operador=push(operador, expresión [posición]);

}

Otros

Operador=push(operando, expresión [posición]-48);

posición++ ;

}

p>

Y (! Vacío(operador))

{

Operador=pop(operador&op);

Operador=pop(operando&operando 1) ;

Operación =pop(operando&operación2);

Operación=push(operando, dos_resultados(op,operando1,operando2));

}

Operando=pop(operando & amp evaluación);

printf("La expresión [%s] da como resultado ' %d ' ", expresión, evaluar);

getch();

}