Calculadora código de idioma c
# include ltmath.h gt/*Definición de funciones matemáticas*/
# include ltconio.h gt/*Pantalla Función de operación*/
# incluye ltstdio.h gt/*función de E/S*/
# incluye ltstdlib.h gt/*función de biblioteca*/
># include ltstdarg.h gt/*Lista de parámetros de longitud variable*/
# include ltgraphics.h gt/*Función gráfica*/
# include ltstring.h gt/* Cadena función*/
# incluir ltctype.h gt/*Función de operación de caracteres*/
# definir hasta x48/*Tecla cursor arriba*/
# definido abajo 0x 50/*Tecla de cursor hacia abajo*/
#defineLEFT0x4b/*Tecla de cursor izquierda*/
#defineRIGHT0x4d/*Tecla de cursor derecha*/
# definenter0x0d/* Enter */
void * rar/*Variable global, guardar imagen del cursor*/
structpalettetypepalette/*Usar información de paleta*/
intGraphDriver/ *Controlador de dispositivo de gráficos*/
intGraphMode/*Valor del modo de gráficos*/
Código interno /*Código de error*/
intMaxColors /*Número máximo de colores disponibles*/
intMaxX, MaxY/*Resolución máxima de la pantalla*/
Espectro dual /*Relación de píxeles de la pantalla*/
voiddrawboder; (void);/*función de dibujo de borde*/
void inicialize(void);/*función de inicialización*/
void computer(void);/*cálculo Función de cálculo */
voidchangetextstyle(intfont, intdirection, int charsize); /*Función de cambio de estilo de texto*/
void mwindow(char * header /*Función de ventana* /
);intspecialkey(void);/*Obtener la función de tecla especial*/
intarrow();/*Establecer la función de cursor de flecha*/
/*Función principal */
intmain()
{
initialize() /*Configura el sistema para ingresar al modo de gráficos*/
Computadora ( ) ; /*Ejecutar la calculadora*/
closegraph(); /*El sistema cierra el modo de gráficos y vuelve al modo de texto*/
return(0); el programa* /
}
/*Configurar el sistema para ingresar al modo de gráficos*/
voidinitialize
{
intxasp, yasp/*Se utiliza para leer la relación de aspecto en las direcciones X e Y*/
GraphDriver = DETECT/*Detecta automáticamente la pantalla*/
iniciar gráfico( controlador de gráficos
amp;GraphMode, "";
/*Inicializar el sistema de gráficos*/
código de error = resultado del gráfico();/*Leer el resultado de la inicialización*/
if(ErrorCode!=grOk)/*Si ocurre un error durante la inicialización*/
{
printf(" graphicsystemerror: s \ n ",
grapherrormsg(código de error));/*Mostrar código de error*/
Salir(1);/*Salir*/
}
obtener paleta( amp; paleta); /*Leer información del panel*/
max colores = get maxcolor() 1 /*Leer el valor máximo de color*/
MaxX = get MaxX( );/*Leer el tamaño de la pantalla*/
MaxY = get MaxY();/*Leer el tamaño de la pantalla*/
getaspectratio( amp; xasp amp; yasp ); *Copiar la relación de aspecto en una variable*/
aspectation =(double)xasp/(double)yasp /*Calcular la relación de aspecto*/
}
<; p>/*Función de calculadora*/Equipo vacío (void)
{
structviewporttypevp/*Definir variable de tipo de ventana gráfica*/ p>
intcolor, alto, ancho
intx, y, x0, y0, I, j, v, m, n, act, flag = 1;
floatnum1= 0, num2= 0, resultado; /*variables de resultado de cálculo y operando*/
charcnum[5], str2[20]={""}, c, temp[20]= { " " };
charstr1[]="1230.456 -789*/qc=^";/*Defina el símbolo de cadena que se mostrará en el gráfico del botón*/
mwindow("Calcular ""); / *Mostrar la ventana principal*/
Color = 7 /*Establecer el valor de gris*/
getview settings(amp;VP);/*Leer el tamaño de la ventana actual*/
Ancho = (VP . derecha 1)/10; /*Establecer ancho del botón*/
alto = (VP . abajo-10)/*Establecer alto del botón* /
x = ancho/2; /*Establece el valor de las coordenadas de x*/
y =Altura/2 /*Establece el valor de las coordenadas de y*/< /p; >
setfillstyle(SOLID_FILL, color 3);
bar(x ancho*2, y, x 7 *ancho, y alto);
/*Dibuja un dos- barra rectangular dimensional para mostrar operandos y resultados*/
setcolor(color 3 /*Establecer línea de borde verde claro*/
Rectángulo (x ancho*2, y, x 7); *ancho, y alto);
/*Dibuja una línea de borde rectangular*/
setcolor(red);/*Establece el color en rojo*/
out textxy(x 3 *ancho, y alto/2, "0.
"); /*Cadena de salida "0"*/
x = 2 *Ancho-ancho/2; /*Establece el valor de las coordenadas de x*/
y = 2 * Height/2; /*Establecer el valor de las coordenadas de y*/
for(j = 0; j lt4; j)/*Dibujar un botón*/
{
for(I = 0; i lt5; i)
{
setfillstyle(SOLID_FILL, color);
setcolor(rojo);
bar(x, y, x ancho, y alto); /*Dibujar una barra rectangular*/
Rectangle(x, y, x ancho, y alto);
sprintf(str2, "c", str 1[j * 5 I]);
/*Guardar los caracteres en str2*/
outtextxy(x (ancho /2), y altura/2, str 2);
x = x ancho (ancho/2); /*Mover coordenadas de columna*/
}
y = (altura/2)* 3; /*Mover coordenadas de línea*/
x = 2 *Ancho-Ancho/2; /*Restablecer coordenadas de columna*/
}
x0 = 2 * ancho;
y0 = 3 * alto
x = x0
y = y0 p; >
gotoxy(x, y); /*Mover el cursor a la posición x, y*/
flecha() /*Mostrar el cursor*/
putimage ( x, y, rar, XOR _ PUT);
m = 0;
n = 0; * Establezca str2 en una cadena vacía*/
while((v=specialkey())!=45)/*Presione Alt x para finalizar el programa; de lo contrario, ejecute el siguiente bucle*/
{
while((v=specialkey())!=ENTER)/*No se ingresa cuando se presiona la tecla*/
{
putimage( x, y, rar, p>if (x gt; = x0 6 * ancho)
/*Si se mueve hacia la derecha y hasta el final, se mueve a la posición del carácter más a la izquierda*/
{
x = x0
m = 0;
}
Otros
{
x = x ancho/2;
m;
}/* De lo contrario, pasa a la siguiente posición del carácter a la derecha*/ p>
If(v ==LEFT)/*Cálculo de nueva posición al mover la flecha hacia la izquierda*/
if(x lt; = x0)
{ p>
x = x0 6 *Width;
m = 4;
}/*Si se mueve hacia la cabeza y luego hacia la izquierda, se mueve a la posición del carácter más a la derecha*/
Otro
{
x = x-ancho-ancho/2;
m-;
}/*En caso contrario, mueve hacia la izquierda a la posición del carácter anterior*/
If(v==UP)/*Cálculo de la nueva posición al mover la flecha hacia arriba*/
if (y lt;= y0)
{
y = y0 4 *altura altura/2;
n = 3;
}/*Si se mueve a la cabeza y luego hacia arriba, se mueve a la posición inferior del personaje*/
Otros
{ p >
y = y-height-height/2;
n-;
}/* De lo contrario, muévase al bit superior de un carácter*/
If(v==DOWN)/*Cálculo de nueva posición al mover la flecha hacia abajo*/
If (y gt= 7 *high)
{
y = y0
n = 0;
}/*Si se mueve hasta el final y luego se mueve hacia abajo, se mueve a la posición superior del carácter*/
Otros
{
y = y height/2;
n
}/* En caso contrario, pase al siguiente carácter Posición*/
putimage(x, y, rar, XOR_PUT /*Mostrar la flecha del cursor en la nueva posición*/
}
c = str 1[n * 5 m];/*Guardar los caracteres en la variable c*/
If (isdigit (c) || c = ' . ')/*Determinar si es un número o un punto decimal*/
{
Si (bandera = -1)/*Si la bandera es -1, significa un número negativo*/
{
strcpy (str2, "-");/*Concatenar los signos menos en una cadena*/
flag = 1;
}/* Restaurar el valor de la bandera a 1*/ p>
sprintf(temp, "c", c);/*Guardar los caracteres en la variable de cadena temp*/
strcat(str2, temp );/*Guardar la cadena en temp Conectar a str2 */
setfillstyle(SOLID_FILL, color 3);
Bar(2*width/2, height/2, 15* ancho/2, 3*alto /2);
outtextxy(5 *ancho, alto, cadena 2 /*display string*/
}
if(c== ' ')
{
num 1 = atof(str 2 /*Convierte el primer operando a un número de punto flotante*/
strcpy( str2, " "); /* Vaciar str2 */
act = 1; /* Calcular y agregar valor de bandera */
setfillstyle(SOLID_FILL, color 3
p>Bar(2*ancho/2, alto/2, 15*ancho/2, 3*alto/2);
out textxy(5*ancho, altura, "0.
");/*Mostrar cadena*/
}
if(c=='-')
{
Si ( strcmp(str2, " ")==0)/*Si str2 está vacío, significa un signo menos, no un signo negativo*/
flag =-1;/*Establece el indicador de número negativo* /
Otros
{
num 1 = atof(str 2); /*Convierte el segundo operando a un número de punto flotante*/
strcpy(str2, " "); /* Vaciar str2 */
act = 2; /* Calcular el valor del indicador de resta */
setfillstyle(SOLID_FILL, color 3
Bar(2*ancho/2, alto/2, 15*ancho/2, 3*alto/2 /*Dibujar un rectángulo*/
fuera textxy); (5 *Ancho, alto, "0."); /*Mostrar cadena*/
}
}
if(c=='* ' )
{
num 1 = atof(str 2); /*Convierte el segundo operando a un número de punto flotante*/
strcpy(str2 , " "); /* Vaciar str2 */
act = 3; /* Calcular el valor del indicador de multiplicación */
setfillstyle(SOLID_FILL, color 3); Bar ( 2*width/ 2, alto/2, 15*ancho/2, 3*alto/2);
out textxy(5*ancho, alto, "0.");/*Mostrar cadena de caracteres*/ p>
}
if(c=='/')
{
num 1 = atof(str 2) ;/*Convertir el segundo operando a un número de punto flotante*/
strcpy(str2, " "); /*Empty str2 */
act = 4 /*Calcular el valor del indicador de división*; /
setfillstyle(SOLID_FILL, color 3);
Bar(2*ancho/2, alto/2, 15*ancho/2, 3* alto/2); p>
out textxy(5 *ancho, alto, "0."); /*display string*/
}
if (c=='^')
{
num 1 = atof(str 2); /*Convierte el segundo operando a un número de punto flotante*/
strcpy(str2, " " );/*Empty str2 */
act = 5;/*Calcular el valor del símbolo de poder*/
setfillstyle(SOLID_FILL, color 3) ;/*Establecer para llenar con luz entidades verdes*/
Barra (2 * ancho/2, alto/2, 15 * ancho/2, 3 * alto/2 /* dibuja un Rectángulo*/
); fuera textxy(5 *ancho, alto, "0.
");/*Mostrar cadena*/
}
if(c==' ')
{
num 1 = atof(str 2); /*Convierte el segundo operando a un número de coma flotante*/
strcpy(str2, " "); /*Calcular el valor del indicador de potencia modular*/
setfillstyle(SOLID_FILL, color 3); /*Establecer para rellenar con sólidos de color verde claro*/
Bar(2 * Ancho/ 2, alto/2, 15*ancho/2, 3*alto/2); /*Dibujar un rectángulo*/
out textxy(5*ancho, alto, "0.") ;/* Mostrar cadena*/
}
if(c=='= ')
{
num 2 = atof(str 2 );/*Convertir el segundo operando a un número de coma flotante*/
Cambiar (act)/*Calcular según el símbolo de operación*/
{
caso1: resultado = num 1 num 2; romper /*agregar*/
Caso 2: resultado = num 1-num 2; romper /*hacer resta*/
Caso 3: Resultado = num 1 * num 2; /*Hacer multiplicación*/
Caso 4: Resultado = num 1/num 2 /*Hacer división*/ p><; p>Caso 5: Resultado = pow(num1, num 2); /*Hacer x la potencia de y*/
Caso 6: Resultado = fmod(num1, num 2); *Hacer operación modular*/
}
setfillstyle(SOLID_FILL, color 3 /*Establecer para rellenar con entidades de color verde claro*/
Bar(2); *ancho/2, alto/2, 15*ancho/2, 3*alto/2); /*cubrir el área de resultados*/
sprintf(temp, " f ", resultado /*); Guardar el resultado en temp*/
outtextxy(5 *ancho, alto, temperatura /*Mostrar el resultado*/
}
if(c); =='c ')
{
num 1 = 0 /*Restablece los dos operandos a 0, el signo es 1*/ p>
num; 2 = 0;
bandera = 1;
strcpy(str2, " "); /* cadena vacía */
setfillstyle (SOLID_FILL, color 3) ; /*Establecer para rellenar con entidades de color verde claro*/
Bar (2*ancho/2, alto/2, 15*ancho/2, 3*alto/2);/*Sobrescribir el área de resultados */
out textxy(5 *ancho, alto, "0.
"); /*Mostrar cadena*/
}
if(c == ' Q ')exit(0); /*Si se selecciona Q Enter, finaliza el cálculo. Programa */
}
putimage(x, y, rar, XOR _ PUT); /*Eliminar la flecha del cursor antes de salir*/
Regresar; * Retorno */
}
/*Función de ventana*/
voidmwindow(char*header)
{
intheight
clear device(); /*Borrar la pantalla de gráficos*/
set color(max colours-1) /*Establecer el color actual en blanco*/
setviewport(20, 20, MaxX/2, MaxY/2, 1); /*Establecer el tamaño de la ventana gráfica*/
height = altura del texto(" H ");/ *Leer el tamaño del texto básico*/
settextstyle(DEFAULT_FONT, HORIZ_DIR, 1); /*Establecer estilo de texto*/
settextjustify(CENTER_TEXT, TOP_TEXT); caracteres*/
outtextxy(MaxX/4, 2, encabezado); /*Título de salida*/
setviewport(20, 20 altura 4, MaxX/2 4, MaxY /2 20, 1); /*Establecer el tamaño de la ventana gráfica*/
draw boder(); /*Dibujar el borde*/
}
Voiddrawboder( void )/*Dibujar el borde*/
{
structviewporttypevp/*Definir la variable de tipo de ventana gráfica*/
establecer color(max Colors-1);/ *Establecer el color actual en blanco*/
setlinestyle(SOLID_LINE, 0, NORM _ WIDTH /*Establecer el método de dibujo lineal*/
getview settings(amp;VP) /*Carga la información de la ventana gráfica actual en la estructura señalada por vp*/
Rectangle (0, 0, vp.right-vp.left, VP . bottom-VP . top); un rectángulo Borde*/
}
/*Función gráfica del ratón de diseño*/
Flecha()
{
intsize
intraw[]={4, 4, 4, 8, 6, 8, 14, 16, 16, 16, 8, 6, 8, 4, 4, 4} / *Definición de coordenadas del polígono*/
setfillstyle(SOLID_FILL, 2); /*Establecer modo de relleno*/
fillpoly(8, raw/*Dibujar flecha del cursor*/
setfillstyle(SOLID_FILL, 2); p>
size=imagesize(4, 4, 16, 16); /*Probar tamaño de imagen*/
rar=malloc(size); /*Asignar área de memoria*/
getimage(4, 4, 16, 16, rar); /*Almacenar imagen de flecha del cursor*/
putimage(4, 4, rar, XOR _ PUT); * /
return0
}
/*Función clave*/
intspecialkey(void)
<p>{
intkey
while(BIOS key(1)= = 0); /*esperar la entrada del teclado*/
key = BIOS key( 0 ); /*Entrada de teclado*/
Tecla = tecla amp0xff? Llaves y llaves. 0x ff: key gt; gt8; /*Solo toma el valor de escaneo de la clave especial, el resto es 0*/
Ingresar clave /*Devuelve el valor de la clave*/
}