Ir ao conteúdo

Posts recomendados

Postado

Boa tarde galera, to com duvida nesse exercicio aqui, vou mandar o que eu fiz ate agora, mais nao estou conseguindo rodar o programa, alguem poderia me ajudar a achar o que esta de errado, preciso desse exercicio pra hoje.

valeu turma

 

Crie uma struct para o tipo data, contendo os campos dia, mês e ano. Escreva uma função que receba dois structs do tipo criado, cada um representando uma data válida, e devolva o número de dias que decorreram entre as duas datas. A estrutura será: typedef struct{ int dia; int mês; int ano; }data; O protótipo da função será: int calculoDias(data d1, data d2); //o retorno será o número de dias

 

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

typedef struct dma {
int dia;
int mes;
int ano;
}data;

    bool valida(struct dma data) {
    if (data.mes < 1 || data.mes > 12)

    return false;

    else {
    if (data.mes == 2) {
    if( ((data.ano % 4 == 0) && (data.ano % 100 != 0)) || (data.ano % 400 == 0)) {
    if (data.dia < 1 || data.dia > 29)

    return false;
}
    else
    if (data.dia < 1 || data.dia > 28)

    return false;
}
    else {
    if (data.mes == 4 || data.mes == 6 || data.mes == 9 || data.mes == 11) {
    if (data.dia < 1 || data.dia > 30)

    return false;
}
    else
    if (data.dia < 1 || data.dia > 31)

    return false;
}
}
    return true;
}

    int dias_decorridos(struct dma data_ini, struct dma data_fim) {
    int dias_no_mes[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, tot_dias_ini, tot_dias_fim, i;
    tot_dias_ini = data_ini.ano * 365.2425;
    for (i=1; i<data_ini.mes; i++)
    tot_dias_ini += dias_no_mes;
    if( (((data_ini.ano % 4 == 0) && (data_ini.ano % 100 != 0)) || (data_ini.ano % 400 == 0)) && data_ini.mes > 2)
    tot_dias_ini++;
    tot_dias_ini += data_ini.dia;

    tot_dias_fim = data_fim.ano * 365.2425;
    for (i=1; i<data_fim.mes; i++)
    tot_dias_fim += dias_no_mes;
    if (((data_fim.ano % 4 == 0) && (data_fim.ano % 100 != 0) || (data_fim.ano % 400 == 0)) && data_fim.mes > 2)
    tot_dias_fim++;
    tot_dias_fim += data_fim.dia;

    return (tot_dias_fim - tot_dias_ini);
}

  • Curtir 1
  • Obrigado 1
Postado

@XIXX     os códigos na linguagem c / c++ ,  precisam ter junto deles a função int main(){} , e então seu código está faltando ela , e o enunciado disse para usar aquela  struct e aquela função ,  com aquelas variáveis mesmo , e você usou outras , lógico que vai funcionar do mesmo jeito , mas não seguiu o enunciado , e seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct{
    int dia;
    int mes;
    int ano;
}data;
bool valida(data data) {
    if (data.mes < 1 || data.mes > 12)
        return false;
    else{
        if (data.mes == 2) {
            if( ((data.ano % 4 == 0) && (data.ano % 100 != 0)) || (data.ano % 400 == 0)) {
                if (data.dia < 1 || data.dia > 29)
                    return false;
            }
            else
                if( data.dia < 1 || data.dia > 28 )
            return false;
        }
        else{
            if (data.mes == 4 || data.mes == 6 || data.mes == 9 || data.mes == 11) {
                if (data.dia < 1 || data.dia > 30)
                    return false;
            }
            else
                if (data.dia < 1 || data.dia > 31)
                    return false;
        }
    }
    return true;
}

int dias_decorridos( data d1, data d2 ) {
    int dias_no_mes[13]={ 0, 31, 28, 31, 30, 31,
                         30, 31, 31, 30, 31, 30,
                         31
                         } ,
        tot_dias_ini, tot_dias_fim, i;
    tot_dias_ini = d1.ano * 365.2425;
    for (i=1; i<d1.mes; i++)
        tot_dias_ini += dias_no_mes;
    if( (((d1.ano % 4 == 0)    &&
        (d1.ano % 100 != 0)) ||
        (d1.ano % 400 == 0)) &&
        d1.mes > 2  )
        tot_dias_ini++;
    tot_dias_ini += d1.dia;
    tot_dias_fim = d2.ano * 365.2425;
    for (i=1; i<d2.mes; i++)
        tot_dias_fim += dias_no_mes;
    if (((d2.ano % 4 == 0)    &&
        (d2.ano % 100 != 0)  ||
        (d2.ano % 400 == 0)) &&
        d2.mes > 2  )
        tot_dias_fim++;
    tot_dias_fim += d2.dia;
    return( tot_dias_fim - tot_dias_ini );
}
int main(){
    data data1;
    data data2;
    printf("a primeira data DD/MM/AA ");
    scanf("%d %d %d",&data1.dia,&data1.mes,&data1.ano);
    printf("a a segunda data DD/MM/AA ");
    scanf("%d %d %d",&data2.dia,&data2.mes,&data2.ano);
    int g = dias_decorridos(data1,data2);
    printf("total de dias -> %d\n\n\n",g);
    return 32768;
}

 

  • Obrigado 2
Postado

Reutilizar

Ao implementar uma função que retorna a quantidade de dias decorridos de uma data e fazer duas chamadas dela quando desejar a diferença entre datas,  uma operação do tipo ...

total_dias (data2) - total_dias (data1)

querendo dê uma nome a função dif_entre_datas (...):

 

Elegância

O Teste de bissexto merece uma função só pra si, assim bem como acredito que uma switch de queda intencional dará também mais legibilidade ao código, afinal essa é uma das a razões de se ter linguagens de programação.

 

 

Uma noção das minhas opiniões

 

ACtC-3dLGDJZZhjxsTvhHdo1xW-vp9huC2pECIjm

 

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!