1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Sub rotina em c

Discussão em 'Programação' iniciada por will94, 29 de Maio de 2012. (Respostas: 6; Visualizações: 1332)

  1. 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:
     
  2. dagas46

    dagas46 Power Member

    Coloca aqui o que fizeste para te ajudarmos a corrigir os erros
     
  3. #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.
     
  4. Crazy*Killer

    Crazy*Killer Power Member

    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: 30 de Maio de 2012
  5. xpro

    xpro Power Member

    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
     
  6. dagas46

    dagas46 Power Member

    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: 3 de Junho de 2012
  7. xpro

    xpro Power Member

    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: 6 de Junho de 2012

Partilhar esta Página