Red de conocimiento informático - Programación de la red - Calculadora código de idioma c

Calculadora código de idioma c

# include ltdos.h gt/*Función de interfaz DOS*/

# 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*/

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

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*/

If(v ==LEFT)/*Cálculo de nueva posición al mover la flecha hacia la izquierda*/

if(x lt; = x0)

{

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

{

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*/

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*/

}

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);

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>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*/

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*/

}