Ejemplo de operación de división de código fuente
# 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 de gráficos*/
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 / *Relació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/*Detección y visualización automáticas*/
init graph( amp; controlador de gráficos amp; Grap
hMode, "";
/*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);/*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 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; num1=0, num2=0, resultado; /*operandos y variables de resultados 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); *Leer 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; Establezca el valor de las coordenadas de y*/
setfillstyle(SOLID_FILL, color 3);
bar(x width*2, y, x 7 *width, y height); p>
/*Dibuja una barra rectangular bidimensional para mostrar los operandos y los resultados*/
setcolor(color 3 /*Establece la línea del borde verde claro*/
<); p >Rectángulo (x ancho*2, y, x 7*ancho, y alto);/*Dibujar una línea de borde rectangular*/
setcolor(rojo);/* Establezca el color Establezca en red*/
out textxy(x 3 *width, y height/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; ilt5; i)
{
setfillstyle(SOLID_FILL, color);
setcolor(rojo); p>
bar(x, y, x ancho, y alto); /*Dibujar una barra rectangular*/
Rectángulo(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*/
}
< p); >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*/ p>
{
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, se 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) p>
{
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*/ p>
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*/ 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 rellenar con verde claro entidades*/
Bar (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)
{ p >
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)
{
tecla int;
while(tecla BIOS(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*/
}