mardi 31 mars 2015

If statement omits a condition

So I am trying to create a program in C that takes in any date and returns the zodiac sign.I have a function that is supposed to validate if the date is possible (day >0,month>0, if month ==x ,day <31 etc ) Thing is that on the part where it is supposed to validate the month and determine if it is a 30 month or a 31 month it only accepts one part of the conditions making it either a definite 30 day for all months or a 31 day for all months. the function name is fnValidacion()



#include <stdio.h>
#include <math.h>
#include <stdlib.h>

/*
Programa : Signo Zodiaco.
Autor : Samir Fersobe 1063021
Fecha : Marzo 28, 2015
*/
const char *signo[12] = {"Aries","Tauro","Geminis","Cancer","Leo","Virgo","Libra","Escorpio",
"Sagitario","Capricornio","Acuario","Piscis"};//Arreglo de Signos Zodiacales


int Ano,Mes,Dia ;//Variables de Ano , Mes y Dia.
int aprovacion = 0;//Determina si la funcion sigue o no.
int bisiesto = 1 ;//determina si el año es bisiesto.
int type ;//determina la estacion.
//Funciones
void fnFecha() ;//Consigue la fecha
void fnBisiesto() ;//Define si el año es bisiesto.
void fnValidacion();//Determina si la fecha es valida.
void fnSigno() ;//Determina el signo zodiacal.
void fnDevuelta() ;//Devuelve la respuesta.
int main(int argc, char** argv)
{
fnFecha();
fnBisiesto();
fnValidacion();
fnSigno();
fnDevuelta();

}
void fnDevuelta()
{/*determinar si la funcion sigue o no, y devuelve el resultado al usuario */
switch (aprovacion){
case 1:
printf("El Signo Zodiacal es %s",signo[type]);
break;
default:
printf("\n Intente de nuevo con otra fecha.");
break;
}
}
void fnSigno()
{/*Determina el signo zodiacal*/
switch(Mes){
case 12:
if (Dia < 22)
type = 8;
else
type = 9;
break;
case 1:
if (Dia < 20)
type = 9;
else
type = 10;
break;
case 2:
if (Dia < 18)
type = 10;
else
type = 11;
break;
case 3:
if (Dia < 20)
type = 11;
else
type = 0;
break;
case 4:
if (Dia < 20)
type = 0;
else
type = 1;
break;
case 5:
if (Dia < 21)
type = 1;
else
type = 2;
break;

case 6:
if (Dia < 21)
type = 2;
else
type = 3;
break;
case 7:
if (Dia < 23)
type = 3;
else
type = 4;
break;
case 8:
if (Dia < 28)
type = 4;
else
type = 5;
break;
case 9:
if (Dia < 23)
type = 5;
else
type = 6;
break;
case 10:
if (Dia < 23)
type = 6;
else
type = 7;
break;
case 11:
if (Dia < 22)
type = 7;
else
type = 8;
break;

}
}
void fnBisiesto()
{/*determina si el ano es bisiesto */
if ((Ano%4 != 0) || ((Ano%100 == 0) && (Ano%400 != 0)))
bisiesto = 0;
}
void fnValidacion()
{/*Esta parte determina si la fecha es valida*/
if (
(Ano < 0) || (Dia <0) || (Mes < 1) || (Mes > 12) ||//Ano,Dia,Mes No negativo.Mes entre 1 y 12.
(Dia > 31) || ((Mes == 4,6,9,11) && (Dia > 30)) ||//Dia no mayor que 31.Si mes es de 30, Dia no mayor que 30.
((bisiesto == 0) && (Mes == 2) && (Dia > 28)) ||//Si no es bisiesto febrero no mayor que 28.
((bisiesto == 1) && (Mes == 2) && (Dia > 29)) //Si es bisiesto febrero no mayor que 29.
)
printf("Esta fecha no es Valida."); //Explica al usuario que fecha no es valida.
else
return aprovacion = 1;
}
void fnFecha()
{/*Adquiere la fecha del usuario */
printf("Inserte el Ano: ");
scanf("%d", &Ano);
printf("Inserte el Mes: ");
scanf("%d", &Mes);
printf("Inserte el Dia: ");
scanf("%d", &Dia);
return ;
}

Aucun commentaire:

Enregistrer un commentaire