ola, preciso criar uma sub rotina, especificamente um procedimento, em c, que tenha como entrada o mes e o dia, ambos inteiros, e como saida a estação do ano. lembrando que outono começa no dia 23/03, inverno 21/06, primavera 21/09 e verao 21/12. Tentei fazer esse procedimento através de varios if's e me veio à cabeça também usar o switch, só que toda vez que eu tento fazer o compilador não acuda erro, mas na hora de rodar o programa não da certo. Desde já obrigado
#include <stdio.h> #include <stdlib.h> void estacao(int dia, int mes) { if (mes=12) { if (dia>=21) printf ("eh verao"); else printf ("eh primavera"); } else { if (mes=11) printf("eh primavera"); else { if(mes=10) printf("eh primavera"); else { if (mes=9) { if (dia>=21) printf("eh primavera"); else printf("eh inverno"); } else { if (mes=8) printf("eh inverno"); else { if (mes=7) printf("eh inverno"); else { if (mes=6) { if (dia>=21) printf("eh inverno"); else printf("eh outono"); } else { if (mes=5) printf("eh outono"); else { if (mes=4) printf("eh outono"); else { if (mes=3) { if (dia>=23) printf("eh outono"); else printf("eh verao"); } else { if(mes=2) printf("eh verao"); else { if (mes=1) printf("eh verao"); else printf("data invalida"); } } } } } } } } } } } } int main () { int d, m; printf("Digite uma data (dia e mes), respectivamente: "); scanf("%d %d", &d, &m); estacao(d,m); return 0; } Essa foi uma das formas que eu tentei fazer.
Tens a operação de verificação de igualdade mal, tens que por if(mes == 12) e não if(mes = 12) , porque só com "=" estás a atribuir um valor e não a efectuar uma comparação como com "==". Além disto com o printf vai fazendo newlines à medida que vais escrevendo, ou seja por exemplo printf("eh outono") passa a ser printf("eh outono\n"). Aconselho isto para imprimires o buffer desde logo. btw escreve-se "é" e não "eh"
void estacao(int dia, int mes) { if (mes==12){ if(dia=>21){ printf("É Verão \n"); }else{ printf("É Primavera \n"); } } if( 9<mes<12){ printf("É Primavera\n"); } if (mes==9){ if(dia>=21){ printf("É Primavera\n"; }else{ printf("É Inverno\n"); } } if (6<mes<9){ printf("É Inverno"); } if (mes==6){ ´ if(dia>=21){ printf("É Inverno/n"); }else{ printf("É Outono/n"); } } if (6<mes<3){ printf("É Outono/n"); } if (mes==3){ if(dia>=23){ printf("É Outono"); }else{ printf("É Verão"); } } else{ printf("É Verão\n"); } } Não compilei mas penso que deve funcionar
Mas olha que devias compilar. 1 - if(dia => 21) não é válido. O que tu queres é if(dia >= 21) 2 - Falta fechar parenteses no printf quando o mes é o mes 9 e quando o dia é superior ou igual a dia 21. 3 - if (6<mes<9) não produz o que tu estás à espera. Deves substituir isso por if((mes>6)&&(mes<9)) 4 - Tens mais 2 casos iguais ao caso 3 5 - Em alguns printf tens /n no final do printf e noutros tens \n. O que tu queres é \n em todos para que imprimindo a cadeia de caracteres que tem a imprimir passe para a linha seguinte
Peço desculpa não compilei porque não estava no meu computador, de qualquer forma obrigado pela correcção e vou aproveitar para testar como sugeriste. void estacao(int dia, int mes) { int cas; if (mes==12){ if(dia>=21){ printf("É Verão \n"); }else{ printf("É Primavera \n"); } } if( (mes>9) && (mes<12)){ printf("É Primavera\n"); } if (mes==9){ if(dia>=21){ printf("É Primavera\n"); }else{ printf("É Inverno\n"); } } if ((mes>6) && (mes<9)){ printf("É Inverno"); } if (mes==6){ if(dia>=21){ printf("É Inverno\n"); }else{ printf("É Outono\n"); } } if ((mes>3) && (mes<6)){ printf("É Outono\n"); } if (mes==3){ if(dia>=23){ printf("É Outono"); }else{ printf("É Verão"); } } else{ printf("É Verão\n"); } scanf("%d",&cas); } int main () { int d, m; printf("Digite uma data (dia e mes), respectivamente: "); scanf("%d %d", &d, &m); estacao(d,m); return 0; } ja compilado espero que desta vez esteja tudo direito xp