Sub rotina em c

will94

Membro
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 :confused:
 
#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"
 
Última edição:
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
 
Última edição:
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
 
Última edição:
Back
Topo