| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
pacharo
Registrado: 27 Nov 2007 Mensajes: 3 Ubicación: México D.F.
| Publicado: 04/12/2007 4:47 pm | | | Título: por que no aparece el mes |
| En el programa que tengo que hacer, primero debe aparecer un menu, con tres opciones: 1.- calculo del area de un triangulo, 2.- mostrar los dias de un mes, 3.- salir del programa.
el primer problema es que si el usuario da una opcion en minuscula no lo acepta. el segundo es que no me desplega los dias del mes, no supe como de nuevo poner los doces meses con una opcion.
y tercera si el usuario escribe otra opcion que el programa le indique opcion invalida.
muchas gracias de antemano.
les escribo el codigo /*PROGRAMA PARA CALCULAR EL AREA DE UN TRIANGULO Y LOS MESES DE UN MES CUALQUIERA*/
#include <stdio.h> #include <math.h> #include <conio.h>
//Lo primero es declarar la funcion que calcula el area. float area(int ladoA,int ladoB, int ladoC) {//Comienza la funsion area. float area; float p; p=(ladoA+ladoB+ladoC)*0.5; area=sqrt(p*(p-ladoA)*(p-ladoB)*(p-ladoC)); return(area); }//Termina la funsion area.
int ladoA,ladoB,ladoC,nmes; char menu; float areat; void main()
{//Inicia el programa for(menu='A'; menu!='C' //Inicia el ciclo para seguir o salir. {//Inicia el for 0. printf("\n **********************************************************************\n"); printf(" * Hola que tal, te puedo ayudar a calcular la opcion que tu elijas *\n"); printf(" **********************************************************************\n"); printf("\n A.- Calcular el area de un triangulo.\n"); printf("\n B.- Calcular los dias de un mes cualquiera.\n"); printf("\n C.- Salir.\n\n "); scanf("%c",&menu); switch(menu) {//Inicia switch 1. case 'A': printf("\n ********************************************\n"); printf(" * Introduzca los 3 lados del triangulo: *\n"); printf("\n ********************************************\n"); scanf("%d",&ladoA); scanf("%d",&ladoB); scanf("%d",&ladoC); printf(" p=(%d+%d+%d)/2\n",ladoA,ladoB,ladoC); printf(" Area=sqrt(p(p-%d)(p-%d)(p-%d))\n",ladoA,ladoB,ladoC); areat=area(ladoA,ladoB,ladoC); printf("\n El area del triangulo es:%g \n\n",areat); getch(); return; //************************************************************************* case 'B': printf(" ********************************************\n"); printf(" * Introduce el numero del mes *\n"); printf(" ********************************************\n"); scanf("%d",&nmes); switch(nmes) { case '1': printf("\nEl mes de enero tiene 31 dias.\n");
case '2': printf("\nEl mes de febrero tiene 28 ó 29 dias si es biciesto.\n");
case '3': printf("\nEl mes de marzo tiene 31 dias.\n");
case '4': printf("\nEl mes de abril tiene 30 dias.\n");
case '5': printf("\nEl mes de mayo tiene 31 dias.\n");
case '6': printf("\nEl mes de junio tiene 30 dias.\n");
case '7': printf("\nEl mes de julio tiene 31 dias.\n");
case '8': printf("\nEl mes de agosto tiene 30 dias.\n");
case '9': printf("\nEl mes de septiembre tiene 30 dias.\n");
case '10': printf("\nEl mes de octubre tiene 31 dias.\n");
case '11': printf("\nEl mes de noviembre tiene 30 dias.\n");
case '12': printf("\nEl mes de diciembre tiene 31 dias.\n"); return;
} case 'C': return; }//Termina switch 1 }//termina el for 0. getch(); }//termina el programa. _________________ Gracias Chido |
| | Volver arriba | |  | david_celta
Registrado: 02 Jun 2005 Mensajes: 151
| Publicado: 04/12/2007 7:23 pm | | | Título: |
| Deberias de ordenar mejor tu codigoy usar el for de buena manera hmmm, bueno simple sugerencia
Por cierto, a los cases (de los switchs) les falta el break (a todos). Para la opcion no valida, ponle un default al switch de la opcion, cuando entre al default le pones un mensaje que diga "gil, la opcion es no valida, solo a,b o c" y para lo de la minuscula ponle un toupper (ctype.h) a la opcion para que lo convierta a mayuscula
Saludo++ _________________ In all your fantasies, you always knew that man and mystery...
...were both in you... |
| | Volver arriba | |  | pacharo
Registrado: 27 Nov 2007 Mensajes: 3 Ubicación: México D.F.
| Publicado: 04/12/2007 10:31 pm | | | Título: Gracias |
| | david_celta escribió: | Deberias de ordenar mejor tu codigoy usar el for de buena manera hmmm, bueno simple sugerencia
Por cierto, a los cases (de los switchs) les falta el break (a todos). Para la opcion no valida, ponle un default al switch de la opcion, cuando entre al default le pones un mensaje que diga "gil, la opcion es no valida, solo a,b o c" y para lo de la minuscula ponle un toupper (ctype.h) a la opcion para que lo convierta a mayuscula
Saludo++ |
Muchas gracias David, lo intentare aunque no quedo muy claro pero es por mi. _________________ Gracias Chido |
| | Volver arriba | |  | | david_celta
Registrado: 02 Jun 2005 Mensajes: 151
| Publicado: 05/12/2007 12:22 pm | | | Título: |
| Tambien quitale los "return" eso hace que el programa se termine en esa linea
| Código: | printf("\n El area del triangulo es:%g \n\n",areat); getch(); return;
|
Por ejemplo ese "return" despues del "getch" debes quitarlo, por ahi vi otro tambien en el ultimo case, y no olvides ponerle "break" al final de cada case _________________ In all your fantasies, you always knew that man and mystery...
...were both in you... |
| | Volver arriba | |  | pacharo
Registrado: 27 Nov 2007 Mensajes: 3 Ubicación: México D.F.
| Publicado: 05/12/2007 2:16 pm | | | Título: gracias mas ayuda |
| Me puedes ayudar a revisar este codigo, ahora no se porque reconoce al segundo switch, la siguiente es para que convierta las minusculas en mayusculas en parte se pone la instruccion tolwer(), y por que no me aparecen los dias. Y en el case 3 como salir del programa.
Muchas gracias de antemano
Este ya es otro codigo
[/#include <stdio.h> #include <conio.h> #include <math.h> #include <ctype.h>
float area_triangulo(int lado1,int lado2,int lado3) { float perimetro; float area_triangulo; perimetro=(lado1+lado2+lado3)/0.5; area_triangulo=sqrt(perimetro*(perimetro-lado1)*(perimetro-lado2)*(perimetro-lado3)); return(area_triangulo); } int lado1, lado2, lado3, i; char mes; float area; void main() { int num; gotoxy( 10,1); printf("Seleccione un numero de la opcion del Menu \n\n MENU:\n 1-CALCULO DEL AREA DE UN TRIANGULO\n 2-VER DIAS DE UN MES \n 3-SALIR\n[ ]\b\b"); scanf("%d",&num); switch(num) { case 1: printf("Introduzca los lados del triangulo: \n"); scanf("%d %d %d", &lado1, &lado2, &lado3); printf(" perimetro=(%d+%d+%d)/2\n",lado1,lado2,lado3); printf(" area=sqrt(p(p-%d) (p-%d) (p-%d)\n",lado1,lado2,lado3); area=area_triangulo(lado1,lado2,lado3); printf("el area del triangulo es: %d" , area_triangulo); break; case 2: tolower(c); printf(" Seleccione el mes del cual dese saber el numero de dias\n\n A- ENERO\n B- FEBRERO\n C- MARZO\n D- ABRIL\n E- MAYO\n F- JUNIO\n G- JULIO\n H- AGOSTO\n I- SEPTIEMBRE\n J-OCTUBRE\n K-NOVIEMBRE\n L-DICIEMBRE\n[ ]\b\b"); scanf("%c",&mes); switch(mes) { case 'A': for(i=0; i<31; i++) printf("%i ",i); break; case 'B': for(i=0; i<28; i++) printf("El mes de febrero en año bisiesto %i \t",i); break; case 'C': for(i=0; i<31; i++) printf("%i \t",i++); break; case 'D': for(i=0; i<30; i++) printf("%i \t",i++); break; case 'E': for(i=0; i<31; i++) printf("%i \t",i++); break; case 'F': for(i=0; i<30; i++) printf("%i \t",i++); break; case 'G': for(i=0; i<31; i++) printf("%i \t",i++); break; case 'H': for(i=0; i<31; i++) printf("%i \t",i++); break; case 'I': for(i=0; i<30; i++) printf("%i \t",i++); break; case 'J': for(i=0; i<31; i++) printf("%i \t",i++); break; case 'K': for(i=0; i<30; i++) printf("%i \t",i++); break; case 'L': for(i=0; i<31; i++) printf("%i \t",i++); break; default: printf(" Opcion invalida \a\n"); } case 3: exit(); default: printf(" Opcion Invalida \a \n");
}
getch(); }] _________________ Gracias Chido |
| | Volver arriba | |  | digies
Registrado: 18 Nov 2005 Mensajes: 377 Ubicación: Cono Sur
| Publicado: 05/12/2007 3:13 pm | | | Título: |
| Deberías reemplazar void main() {...} (eso hace suponer que estás utilizando un compilador de Mr. Borland no?). por int main(void) {...}.
En printf("el area del triangulo es: %d" , area_triangulo); tienes que cambiarlo a printf("el area del triangulo es: %d" , area); y cambiar el código de formato de la cadena de control %d por %f.
La variable c no está declarada, y el resultado que arroja tolower debes asignarla a una variable del mismo tipo. Prototipo de tolower: int tolower(int ch);
Para salir, cuando se ejecuta el case 3:, tienes que colocarle a la función exit un "magic number" como por ejemplo 1; y mejor aun exit (EXIT_FAILURE); o return EXIT_FAILURE; Para ello debes agregarle a tu programa el header <stdlib.h>
También es conveniente colocar al final del bloque principal del programa la función de retorno return 0; o return macro_correspondiente.
Un saludo |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |