Aquí os dejo mi practica 3.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265
/*Programado por Daniel Carriazo Rabadán
El programa calcula el area y el perimetro de un cuadrado, circulo, triangulo equilatero, hexagono
o sector circular. El programa funciona mediante instrucciones que le introduce el usuario, por ejemplo:
"calcular area circulo radio 7.2"
despues de introducir esto el programa calculara el area del circulo de radio 7.2.
"calcular perimetro triangulo equilatero lado 8.4"
despues de introducir esto el programa calculara el perimetro del triangulo equilatero de lado 8.4
"calcular area perimetro sector circular radio 3.2 angulo 63"
despeus de introducir esto el programa calculara el area y el primetro del sector circular de radio 3.2
y angulo 63 (grados)
Reconoce indistintamente minusculas de mayusculas mediante una funcion que convierte los caracteres de las
cadenas a mayusculas.
No he utilizado el comando system("cls") ya que he considerado util que se siga mostrando en pantalla
lo que has calculado antes, salvo al principio del programa porque ofrezco la oportunidad de borrar las instrucciones.
*/
float percuad(float l) /*funcion para calcular el perimetro del cuadrado*/
{
float a;
a=4*l;
return(a);
}
float areacuad(float l)/*funcion para calcular el area del cuadrado*/
{
float a;
a=l*l;
return(a);
}
float percir(float r)/*funcion para calcular el perimetro del circulo*/
{
float a;
a=2*PI*r;
return(a);
}
float areacir(float r)/*funcion para calcular el area del circulo*/
{
float a;
a=PI*r*r;
return(a);
}
float pertri(float l)/*funcion para calcular el perimetro del triangulo equilñatero*/
{
float a;
a=l*3;
return(a);
}
float areatri(float l)/*funcion para calcular el area del triangulo equilatero*/
{
float a;
a=l*l/2;
return(a);
}
float perhex(float l)/*funcion para calcular el perimetro del hexagono*/
{
float a;
a=6*l;
return(a);
}
float areahex(float l)/*funcion para calcular el area del hexagono*/
{
float a;
a=6*(areatri(l));
return(a);
}
float persec(float r, float ang)/*funcion para calcular el perimetro del sector circular*/
{
float a;
a=2*PI*r*ang/360;
return(a);
}
float areasec(float r,float ang)/*funcion para calcular el area del sector circulrar*/
{
float a;
a=PI*r*r*ang/360;
return(a);
}
void pasomayus(char a[]) /*funcion para convertir a mayusculas las cadenas de caracteres*/
{
int i;
for(i=0;a[i];i++)
a[i]=toupper(a[i]);
}
main() /*Funcion principal*/
{
puts("\n Este programa calcula el area y el perimetro de un cuadrado, circulo, \ntriangulo equilatero, hexagono"
" o sector circular. El programa funciona mediante instrucciones que le introduce el usuario, por ejemplo:\n"
"\n 'calcular area circulo radio 7.2'\n"
"despues de introducir esto el programa calculara el area del circulo de \nradio 7.2.\n"
"\n 'calcular perimetro triangulo equilatero lado 8.4'\n"
"despues de introducir esto el programa calculara el perimetro del triangulo \nequilatero de lado 8.4\n"
"\n 'calcular area perimetro sector circular radio 3.2 angulo 63'\n"
"despues de introducir esto el programa calculara el area y el primetro del \nsector circular de radio 3.2"
"y angulo 63 (grados)\n\n");
system("pause");
puts("\nReconoce indistintamente minusculas de mayusculas.\n\n"
"En el caso del sector circular, el angulo habra que ponerlo en grados. \nSin embargo, para el lado o el radio "
"sera indistinta la utilizacion de metros, \ncm, etc.\n\n"
"Introduce finalizar para cerrar el programa\n\n");
float percuad(float);
float areacuad(float);
float percir(float);
float areacir(float);
float pertri(float);
float areatri(float);
float perhex(float);
float areahex(float);
float persec(float,float);
float areasec(float,float);
void pasomayus(char*);
int auxp=0,auxa=0;
float res,lado,radio,ang;
char a[10],b[20],c[20],d[20],e[20],f[20],g[20];
puts("Quieres borrar las instrucciones?");
scanf("%s",a);
pasomayus(a); /*doy al usuario la opcion de borrar las instrucciones de la pantalla*/
if (a[0]=='S') system("cls");
else {a[0]='r';}
while (a[0]!= 'F')
{
auxp=0;/*si el usuario a pedido el perimetro*/
auxa=0;/*estara a 1 si el usuario a pedido el area*/
puts("\n\nIntroduce las instrucciones:\n");/*las instrucciones se iran cogiendo una a una segun los espacios que las separan y las ira reconociendo en el transcurso del programa*/
scanf("%s",a);
pasomayus(a); /*convierte la cadena a mayusculas*/
switch (a[0])
{
case 'C':
{
scanf("%s%s",b,c);
pasomayus(b);
pasomayus(c);
switch (b[0])/* utilizo dos banderas para reconocer si el
usuario pide el area, el perimetro o ambos*/
{
case 'P':
{
auxp=1;
break;
}
case 'A':
{
auxa=1;
break;
}
}
switch (c[0])
{
case 'A':
{
auxa=1;
scanf("%s",c);
pasomayus(c);
break;
}
case 'P':
{
auxp=1;
scanf("%s",c);
pasomayus(c);
break;
}
}
switch (c[0])/*con este interruptor reconocera la figura geometrica*/
{
case 'C':
{
switch (c[1])/*diferencia entre los casa cuadrado y circulo, que empiezan por la misma consonate*/
{
case 'U':
{
scanf("%s%f",d,&lado); /*En realidad la palabra 'lado' , 'radio' o 'angulo'
no se usan para nada, solo para hacerlo mas visible
al usuario. Por tanto la palabra (en este caso sera lado)
la enviamos a un array que no utilizaremos. Solo nos interesa
el valor de lado, que si que lo utilizaremos. Esto se hara para
todas las figuras.*/
/*si auxp=1 mostrara el valor del*/ if (auxp==1)printf("\nEl perimetro del cuadrado de lado %.2f es:%.2f\n",lado,percuad(lado));
/*perimetro*/ else{};
/*si auxa=1 mostrara el valor del*/ if (auxa==1) printf("El area del cuadrado de lado %.2f es:%.2f\n\n",lado,areacuad(lado));
/*area*/ else{};
break;
}
case 'I':
{
scanf("%s%f",d,&radio);
if (auxp==1)printf("\nEl perimetro del circulo de radio %.2f es:%f\n",radio,percir(radio));
else{};
if (auxa==1) printf("\nEl area del circulo de radio %.2f es:%.2f\n\n",radio,areacir(radio));
else{};
break;
}
default:
{
puts("\nErroor !!!! Mi no entender!!\n");
break;
}
}
break;
}
case 'T':
{
scanf("%s%s%f",d,e,&lado);
if (auxp==1)printf("\nEl perimetro del triangulo equilatero de lado %.2f es: %.2f\n",lado,pertri(lado));
else{};
if(auxa==1) printf("\nEl area del triangulo equilatero de lado %.2f es: %.2f\n\n",lado,areatri(lado));
else{};
break;
}
case 'H':
{
scanf("%s%f",d,&lado);
if (auxp==1)printf("\nEl perimetro del hexagono de lado %.2f es: %.2f\n",lado,perhex(lado));
else{};
if (auxa==1) printf("\nEl area del hexagono de lado %.2f es: %.2f\n\n",lado,areahex(lado));
else{};
break;
}
case 'S':
{
scanf("%s%s%f%s%f",d,e,&radio,f,&ang);
if (auxp==1)printf("\nEl perimetro del sector circular de radio %.2f y angulo %.2f grados es: %.2f\n",radio,ang,persec(radio,ang));
else{};
if (auxa==1) printf("\nEl area del sector circular de radio %.2f y angulo %.2f grados es: %.2f\n\n",radio,ang,areasec(radio,ang));
else{}
break;
}
default:
{
puts("\nErroor !!!! Mi no entender!!\n");
break;
}
}
break;
}
case 'F':/*para este caso el programa no hara nada pork con el while del principio se saldra automaticamente cuando llegue arriba otra vez*/
{
break;
}
default:
{
puts("\nErroor !!!! Mi no entender!!\n"); /*si no entiende las intrucciones mostrara este error*/
break;
}
}
}
system("PAUSE");
}