Red de conocimiento informático - Conocimiento del nombre de dominio - Urgente, ayúdenme a escribir un programa de calculadora usando vc

Urgente, ayúdenme a escribir un programa de calculadora usando vc

Curso de lenguaje C diseño_diseño de calculadora

#include /*Función de interfaz DOS*/

#include /*Definición de funciones matemáticas*/

#include /*Funciones de operación de pantalla*/

#include /*Funciones de E/S* /

#include /*Función de biblioteca*/

#include /*Lista de parámetros de longitud variable*/

#include < gráficos.h> /*Funciones gráficas*/

#include /*Funciones de cadena*/

#include /* Función de operación de caracteres* /

#define ARRIBA 0x48 /*Tecla cursor arriba*/

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

#define IZQUIERDA 0x4b /* Tecla de cursor izquierda*/

#define RIGHT 0x4d /*Tecla de cursor derecha*/

#define ENTER 0x0d /*Tecla Enter*/

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

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

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

int GraphMode; /* Valor del modo de gráficos*/

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

int MaxColors ; p>

int MaxX, MaxY; /* Resolución máxima de la pantalla*/

doble AspectRatio; /* Relación de píxeles de la pantalla*/

void drawboder(void) ; /*función de dibujo de borde*/

void inicialize(void); /*función de inicialización*/

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

void changetextstyle(int fuente, int dirección, int charsize); /*Cambiar función de estilo de texto*/

void mwindow(char *header );

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

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

/*Función principal*/

int main()

{

inicializar();/* Configurar 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); Finalizar el programa*/

}

/* Configurar el sistema para ingresar al modo de gráficos*/

void inicialize(void)

{

int xasp,yas

p /* Se utiliza para leer la relación de aspecto en las direcciones x e y*/

GraphDriver = DETECT /* Detecta automáticamente la pantalla*/

initgraph( &GraphDriver, &GraphMode, "" );

/*Inicializar el sistema de gráficos*/

ErrorCode = graphresult() /*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 (ErrorCode) ); /* Mostrar código de error*/

exit( 1 );*Salir*/

}

getpalette( &palette ); * Leer información del panel*/

MaxColors = getmaxcolor() + 1 /* Leer el valor máximo de color*/

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

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

getaspectratio( &xasp, &yasp ); >

AspectRatio = (double) xasp/(double)yasp;/* Calcular el valor de la relación de aspecto*/

}

/*Función de calculadora*/

void computer(void)

{

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,flag=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=^%";/* Definir el símbolo mostrado por la cadena en el botón gráfico*/

mwindow( "Calculadora" /* Mostrar el ventana principal*/

color = 7 /*Establecer el valor del color gris*/

getviewsettings( &vp ); >

width=(vp.right+ 1)/10; /*Establecer ancho del botón*/

height=(vp.bottom-10)/10 /*Establecer altura del botón*/

x = width /2 ; /*Establece el valor de las coordenadas de x*/

y = height/2 ;*Establece el valor de las 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 resultados*/

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

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

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

setcolor(RED /*Set); el color a Rojo*/

outtextxy(x+3*width,y+height/2,"0." /*Cadena de salida "0."*/

x = 2*width-width/2 /*Establece el valor de las coordenadas de x*/

y =2*height+height/2 /*Establece el valor de las coordenadas de y*/

for( j=0 ; j<4 ; ++j ) /*Botón Dibujar*/

{

for( i=0 ; i<5 ; + +i )

{

setfillstyle(SOLID_FILL, color);

setcolor(ROJO);

bar( x, y, x+ancho, y+alto); /*Dibuja una barra rectangular*/

rectángulo( x, y, x+ancho, y+alto);

sprintf(str2, "%c" ,str1[j*5+i]);

/*Guardar caracteres en str2*/

outtextxy( x+(ancho/2), y+alto/ 2, str2);

x =x+width+ (ancho / 2) /*Mover coordenadas de columna*/

}

y +=(alto) /2 )*3; /* Mover coordenadas de fila*/

x =2*width-width/2; /*Restablecer coordenadas de columna*/

}

x0=2*ancho;

y0=3*alto;

x=x0;

y=y0;

gotoxy( x,y); /*Mueve el cursor a la posición x,y*/

flecha() /*Mostrar el cursor*/

putimage(x,y); ,rar,XOR_PUT) ;

m=0;

n=0;

strcpy(str2,""); /*Establecer str2 como vacío string*/

while((v=specialkey())!=45) /*Finaliza el programa cuando se presiona la tecla Alt+x, de lo contrario ejecuta el siguiente bucle*/

{

while((v=specialkey())!=ENTER) /*Cuando la tecla presionada no es Enter*/

{

putimage( x,y,rar,XOR_PUT ); /*Mostrar la imagen del cursor*/

if(v==RIGHT) /*Calcular la nueva posición al mover la flecha hacia la derecha*/

si(x>=x6 *ancho)

/*Si te mueves hacia la derecha, muévete hasta el final, luego muévete a la posición del carácter más a la izquierda*/

{

x=x0;

m =0;

}

más

{

x=x+ancho+ancho/2;

m++;

} /*De lo contrario, muévase hacia la derecha a la siguiente posición del carácter*/

if(v==LEFT) /*Calcule la nueva posición al mover la flecha hacia la izquierda* /

if(x<=x0)

{

x=x6*ancho;

m=4;

} /*Si te mueves hacia la cabeza y luego hacia la izquierda, muévete a la posición del personaje más a la derecha*/

else

{

x=x-width-width /2;

m--;

} /*De lo contrario, muévase a la izquierda a la posición anterior del carácter*/

if(v==UP) / *Cálculo de nueva posición al mover la flecha hacia arriba*/

if(y<=y0)

{

y =y4*height+height/2 ;

n=3;

} /*Si se mueve a la cabeza y luego se mueve hacia arriba, se moverá a la posición del carácter inferior*/

else

{

y=y-height-height/2;

n--;

} /* En caso contrario, mueve un carácter a la posición superior*/

if(v==DOWN) /*Nuevo cálculo de posición al mover la flecha hacia abajo*/

if(y>=7*altura)

{

y=y0;

n=0;

} /*Si se mueve hasta el final y luego se mueve hacia abajo, se moverá a la posición superior del carácter */

else

{

y= y+height+height/2;

n++;

} /*De lo contrario, muévase a la posición de carácter inferior*/

putimage(x,y, rar,XOR_PUT); /*Mostrar la flecha del cursor en la nueva posición*/

}

c=str1[n*5+m] /*Guardar caracteres en la variable c */

if(isdigit(c)||c=='. ') /*Determina si es un número o un punto decimal*/

{

if(flag==-1) /*Si la bandera es -1, indica un número negativo*/

{

strcpy(str2,"-") ; /*Concatenar el signo negativo en la cadena*/

flag=1;

} /*Restaurar el valor del indicador a 1*/

sprintf( temp,"%c",c); /*Guardar los caracteres en la variable de cadena temp*/

strcat(str2,temp /*Conectar la cadena en temp a str2*/

setfill

estilo(SOLID_FILL,color+3);

bar(2*ancho+ancho/2,alto/2,15*ancho/2,3*alto/2);

outtextxy(5*ancho,alto,str2); /*Mostrar cadena*/

}

if(c=='+')

{

num1=atof(str2); /*Convierte el primer operando a un número de coma flotante*/

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

act=1; /*Calcular el valor del indicador de adición*/

setfillstyle(SOLID_FILL,color+3);

bar(2*width+width /2, height/2,15*width/2,3*height/2);

outtextxy(5*width,height,"0."); /*Mostrar cadena*/

}

if(c=='-')

{

if(strcmp(str2,"")==0) /*Si str2 está vacío, significa un signo negativo, no un signo menos*/

flag=-1 /*Establece el indicador de número negativo*/

else

< p; > {

num1=atof(str2); /*Convertir el segundo operando a un número de punto flotante*/

strcpy(str2,""); /

act=2; /*Calcular valor del indicador de resta*/

setfillstyle(SOLID_FILL,color+3);

bar(2* ancho+ancho /2,height/2,15*width/2,3*height/2); /*Dibujar un rectángulo*/

outtextxy(5*width,height,"0."); Mostrar cadena*/

}

}

if(c=='*')

{

num1=atof(str2); /*Convertir el segundo operando a un número de coma flotante*/

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

act =3; /*Calcular el valor del indicador de multiplicación*/

setfillstyle(SOLID_FILL,color+3*); height/2);

outtextxy(5*width,height,"0."); /*Mostrar cadena*/

}

if(c =='/')

{

num1=atof(str2); /*Convierte el segundo operando a un número de punto flotante*/

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

act=4; /*Calcular el valor del indicador de división*/

setfillstyle(SOLID_FILL ,color+3);

barra(2*ancho+ancho/2,alto/2,1

5*ancho/2,3*alto/2);

outtextxy(5*ancho,alto,"0."); /*Mostrar cadena*/

}< / p>

if(c=='^')

{

num1=atof(str2); /*Convierte el segundo operando a un número de punto flotante* /

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

act=5; /*Calcular valor del indicador de exponenciación*/

setfillstyle(SOLID_FILL, color+3); /*Establecer para rellenar con entidades de color verde claro*/

bar(2*width+width/2,height/2,15*width/2,3*height /2); /*Dibujar un rectángulo*/

outtextxy(5*width,height,"0."); /*Mostrar cadena*/

}

if (c=='%')

{

num1=atof(str2 /*Convierte el segundo operando a un número de punto flotante*/

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

act=6 /*Calcular el valor del indicador de exponenciación de la operación modular*/

setfillstyle(SOLID_FILL,color+3 ); /*Establecer para rellenar con entidades de color verde claro*/

bar(2*width+width/2,height/2,15*width/2,3*height/ 2); a rectángulo*/

outtextxy(5*width,height,"0."); /*Mostrar cadena*/

}

if(c= ='=')

{

num2=atof(str2); /*Convierte el segundo operando a un número de punto flotante*/

switch(act ) /*Calcular según los símbolos de operación*/

{

case 1:result=num1+num2;break /*Hacer suma*/

case; 2:result=num1-num2;break; /*Hacer resta*/

caso 3:result=num1*num2;break; /*Hacer multiplicación*/

caso 4: resultado=num1/num2;break; /*Hacer división*/

caso 5:result=pow(num1,num2);break; /*Hacer x elevado a la yésima potencia* /

caso 6:result=fmod(num1,num2);break; /*Hacer operación de módulo*/

}

setfillstyle(SOLID_FILL,color+ 3); para rellenar con entidades de color verde claro*/

bar(2*width+width/2,height/2,15*width/2,3*height/2 /*Sobrescribir área de resultados*/<); /p>

sprintf(temp,"%f",result); /*Guardar el resultado en temp*/

outtextxy(5*width,height,temp) /*Mostrar resultados*; /

}

if(c=='c')

{

num1=0 /*Restablece los dos operandos a 0 y el indicador de signo es 1*/

num2=0;

flag=1;

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

setfillstyle(SOLID_FILL,color +3); /*Establecer para rellenar con entidades de color verde claro*/

bar(2*width+width/2,height/2,15*width/2,3*height/2); * Sobrescribir el área de resultados*/

outtextxy(5*width,height,"0." /*Display string*/

}

if ( c=='Q')exit(0); /*Si se selecciona q, presione Enter para finalizar el programa de cálculo*/

}

putimage(x,y, rar,XOR_PUT ); /*Borrar la flecha del cursor antes de salir*/

return /*Return*/

}

/*Función de ventana*/

void mwindow( char *header )

{

int height;

cleardevice() /* Limpiar la pantalla de gráficos* /

setcolor( MaxColors - 1 ); /* Establece el color actual en blanco*/

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

height = texttheight( "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 disposición de caracteres*/

outtextxy( MaxX/4, 2, encabezado /*Título de salida*/);

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

drawboder(); ; /*Dibujar borde*/

}

void drawboder(void) /*Dibujar borde*/

{

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

setcolor( MaxColors - 1 /*Establecer el color actual en blanco*/

setlinestyle(SOLID_LINE, 0, NORM_WIDTH) ;/*Establece el modo de línea de pintura*/

getviewsettings( &vp );/*Carga la información de la ventana gráfica actual en la estructura señalada por vp*/

rectángulo( 0, 0 , vp.right- vp.left, vp.bottom-vp.top ); /*Dibujar un borde rectangular*/

}

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

int flecha( )

{

int tamaño;

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

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

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

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

rar=malloc(size); /*Asignar área de memoria*/

getimage(4, 4, 16,16,rar); /*Guardar la imagen de la flecha del cursor*/

putimage(4,4,rar,XOR_PUT /*Eliminar la imagen de la flecha del cursor*/

return 0;

}

/*Función clave*/

int tecla especial(void)

{

int key;

while(bioskey(1)==0); /*esperar entrada del teclado*/

key=bioskey(0); /*entrada del teclado* /

key=key&0xff? key&0xff:key>>8; /*Solo toma el valor de escaneo de la clave especial, el resto es 0*/

return(key); Devuelve la clave Valor*/

}