Red de conocimiento informático - Conocimiento sistemático - Matemáticas Yuanji

Matemáticas Yuanji

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

# include ltctype.h gt/*Función de operación de caracteres*/

#define UP 0x48 /*Tecla de cursor hacia arriba*/

#define ABAJO 0x50 /*Tecla cursor abajo*/

#Definir izquierda 0x4b /*Tecla cursor izquierda*/

#Definir derecha 0x4d /*Tecla cursor derecha*/

#define ENTER 0x0d /* Enter */

void * rar/*Variable global, guardar imagen del cursor*/

estructura tipo paleta paleta;/*Usar información de muestra de llamada*/

int GraphDriver/*Controlador de dispositivo gráfico*/

int GraphMode/*Valor del modo gráfico*/

int código de error;/ *Código de error*/

int MaxColors/*Número máximo de colores disponibles*/

int MaxX, MaxY/*Resolución más alta de la pantalla*/

Volteo a doble cara / *Proporción de píxeles de la pantalla*/

void draw boder(void); /*Función de dibujo de borde*/

inicialización de vacío (void) /*Función de inicialización */

void computer (void); /*Función de cálculo de la calculadora*/

void changetextstyle(int font, int direction, int charsize/*Función de cambio de estilo de texto* /

void m window(char * header); /*Función de ventana*/

int tecla especial(void); /*Obtener función de tecla especial*/

int flecha(); /*Establecer función de cursor de flecha*/

/*Función principal*/

int main()

{

initialize() ;/*Configurar el sistema en modo de gráficos*/

Computadora();/*Ejecutar la calculadora*/

closegraph();/*Apagar el sistema en modo de gráficos y regresar al modo texto*/

return(0);/*Finalizar programa*/

}

/*Configurar el sistema para ingresar al modo gráfico* /

inicialización de vacío (void)

{

int xasp, yasp/*usado para leer la relación de aspecto en las direcciones X e Y*/

GraphDriver = DETECT/*Detectar pantalla automáticamente*/

iniciar gráfico( amp; 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("Error del sistema de gráficos: s\n ",

grapherrormsg (código de error)); /*Mostrar código de error*/

Salir (1); Paleta); /*Leer información del panel*/

max colores = obtener maxcolor() 1 /*Leer el valor máximo de color*/

MaxX = obtener MaxX (); /*Leer el tamaño de la pantalla*/

MaxY = get MaxY(); /*Leer el tamaño de la pantalla*/

getaspectratio(amp; xasp amp; yasp); la relación de aspecto en una variable*/

aspectation =(double)xasp/(double)yasp /*Calcular la relación de aspecto*/

}

/*Función de calculadora*/

Equipo no válido (no válido)

{

struct viewporttype vp/*Definir variable de tipo de ventana gráfica*/

int color, alto, ancho;

int x, y, x0, y0, I, j, v, m, n, act, bandera = 1

float num1= 0, num2=0, resultado; /*operandos y variables de resultado de cálculo*/

char cnum[5], str2[20]={""}, c, temp[20 ]= { " " };

Char·str1[]="1230.456 -789*/qc=^"; /*Define el símbolo de cadena que se mostrará en el gráfico del botón*/

mwindow( "Calculadora"); /*Mostrar la ventana principal*/

Color = 7 /*Establecer el valor de gris*/

getview settings( amp; VP ); el tamaño de la ventana actual*/

Ancho = (VP . derecha 1)/10 /*Establecer ancho del botón*/

alto = (VP . abajo -10)/ 10; /*Establecer la altura del botón*/

x = ancho/2 /*Establecer el valor de las coordenadas de x*/

y =Altura/2; valor de coordenadas de y*/

setfillstyle(SOLID_FILL, color 3);

bar(x ancho*2, y, x 7 *ancho, y alto);

/*Dibuja una barra rectangular bidimensional para mostrar los operandos y los resultados*/

setcolor(color 3) /*Establece la línea del borde verde claro*/

Rectángulo (x ancho*2, y, x 7 *ancho, y alto);

/*Dibujar una línea de borde rectangular*/

setcolor(red);/*Establecer el color a Rojo*/

salida 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 * Altura Altura/2 /*Establecer el valor de las coordenadas de y*/

for(j = 0; j lt4; j) /*Dibujar un botón*/

{

for(I = 0; ilt5; 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 hay entrada cuando se presiona la tecla*/

{

putimage( x, y, rar, p>if(x gt; = x0 6 * ancho)

/*Si se mueve hacia la derecha y se mueve 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 hacia 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 alto

Grado/2;

n = 3;

}/*Si se mueve hacia la cabeza y luego hacia arriba, se mueve a la posición inferior del personaje*/

Otros

{

y = y-height-height/2

n-

}/* En caso contrario, pase a a El bit alto del personaje*/

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

If (y gt= 7 *alto)

{

y = y0

n = 0;

}/*Si te mueves hasta el final y luego bajar, subir a la posición superior del personaje*/

Otros

{

y = y height/2;

n;

}/*De lo contrario, pasa a la siguiente posición del carácter*/

putimage(x, y, rar, XOR _ PUT /*Muestra 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 = ' . ' )/*Juzga si es un número o un punto decimal*/

{

If (flag = -1)/*If 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);/*Conecta la cadena en temp a str2 */

setfillstyle(SOLID_FILL, color 3);

Bar (2 * ancho/2, alto/ 2, 15 * ancho / 2, 3 * alto / 2

outtextxy (5 * ancho, alto, str /*); mostrar cadena */

}

if(c==' ')

{

num 1 = atof(str 2) ; /*Convierte el primer operando a un número de punto flotante */

strcpy(str2, " "); /* Vacío str2 */

act = 1; agregar valor de bandera */

setfillstyle(SOLID_FILL, color 3);

Bar(2*ancho/2, alto/2, 15*ancho/2, 3*alto/2 );

out textxy(5 *ancho, alto, "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 punto flotante*/

Cambiar (act) /*Calcular según el símbolo de operación*/

{

Caso 1: Resultado = num 1 num 2; /*Sumar*/

Caso 2: Resultado = num 1-num 2; /*Hacer resta*/

Caso 3: Resultado = num 1 * num 2; /*Hacer multiplicación*/

Caso 4: Resultado = num 1/num 2; /*Hacer división*/

Caso 5: Resultado = pow(num1, num 2); Break /*Hacer x la potencia de y*/

Caso 6: Resultado = fmod(num1, num 2) ;Break; /*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*/

número 2 = 0;

bandera = 1;

strcpy(str2, " "); /*empty str2 */

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

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

void mwindow( char *header)

{

int height;

clear device();/*Borrar la pantalla de gráficos*/

establecer color(max colours-1);/*Establecer el color actual en White*/

setviewport(20, 20, MaxX/2, MaxY/2, 1, /*Establece 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); Establecer la disposición de los caracteres*/

outtextxy(MaxX/4, 2, header /*Título de salida*/

setviewport(20, 20 height 4, MaxX/2 4); , MaxY/2 20, 1); /*Establecer el tamaño de la ventana gráfica*/

dibujar borde() /*Dibujar el borde*/

}

Void drawboder(void) /*Dibujar el borde*/

{

struct viewporttype vp/*Definir la variable de tipo de ventana gráfica*/

establecer color( max colours-1 /*Establece el color actual en blanco*/

setlinestyle(SOLID_LINE, 0, NORM _ WIDTH /*Establece 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 );/*Dibujar un borde rectangular*/

}

/*Diseñar la función de gráficos del mouse*/

Flecha entera()

{

int tamaño;

int raw[]={4, 4, 4, 8, 6, 8, 14, 16, 16, 16, 8, 6 , 8, 4, 4, 4};/*Definir coordenadas de polígono*/

setfillstyle(SOLID_FILL, 2);/*Establecer modo de relleno*/

fillpoly(8, raw );/ *Dibujar flecha del cursor*/

size=imagesize(4, 4, 16, 16); /*Probar tamaño de imagen*/

rar=malloc(size); /*Asignación de área de memoria*/

getimage(4, 4, 16, 16, rar /*Imagen de flecha del cursor de almacenamiento*/

putimage(4, 4, rar, XOR _ PUT );/*Borrar imagen de flecha del cursor*/

Devolver 0;

}

/*Funciones clave*/

int tecla especial(

void)

{

int key;

while(BIOS key(1)== 0); /*esperar la entrada del teclado*/

tecla = tecla BIOS(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*/

}