• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

heads_1268

subrair dias

4 mensagens neste tópico

boas eu tenho de fazer um programa que me diga quantos dias se passaram entre duas datas ex 13-1-2008  15-1-2008  resposta  2 dias.

eu já fiz isto mas esta a dar erro. claro que ainda falta as validações anos bissextos dias de cada mês etc.

#include <stdio.h>

struct data{

int dia;
int mes;
int ano;

};



struct actualdata{

int dia1;
int mes2;
int ano3;

};

struct dif{

int dif_dia4;
int dif_mes5;
int dif_ano6;

};

int main()
 {
	 struct data data1;
	 struct actualdata data2;
	 struct dif data3;


	 printf("qual e a data de hoje?");
	 scanf("%02d-%02d-%4d",data2.dia1,data2.mes2,data2.ano3);

printf("introduza a data que vosse quer saber os minutos ate hoje");
scanf("%02d-%02d-%4d",data1.dia,data1.mes,data1.ano);

(data1.dia + data2.dia1) = data3.dif_dia4;
data1.mes + data2.mes2 = data3.dif_mes5;
data1.ano + data2.ano3 = data3.dif_ano6;

printf("passaram se %d dias %d meses %d anos");



 }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não precisas de criar 3 estruturas, dado que o conteúdo é igual em todas; bastava teres criado a struct data e utilizavas  a mesma para as variáveis data1, data2 e data3;

No último printf não estás a passar os argumentos devidos. Faltam as variáveis cujos valores queres que substituam os %d na string de formatação.

Por último, isto:

	(data1.dia + data2.dia1) = data3.dif_dia4;
data1.mes + data2.mes2 = data3.dif_mes5;
data1.ano + data2.ano3 = data3.dif_ano6;

não é concerteza o que queres fazer. Não tenho a certeza, mas penso que isso nem compila, pelo menos a 1ª linha. Pensa em algo do género data3.dif = data2.dia - data1.dia;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O teu professor ainda não te falou do time.h?

#include <time.h>

Se já falou, aconselho-te a usares as funções e estruturas de dados que o time.h declara.

Se não falou ... vais no bom caminho :D

Tenho três pontos para apontar:

1) Não precisas de três estruturas de dados iguais. Podes usar a mesma estrutura para três variáveis diferentes:

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

int main(void)
{
  struct data data1;
  struct data data2;
  struct data data3;
  /* ... */
}

2) As tuas contas de somar os dias, meses e anos estão ao contrário. Tens de por no lado esquerdo do igual a variável que vai ser alterada e no lado direito as contas que vão dar o que pretendes

/* usando variáveis da mesma struct data */
data3.dia = data1.dia + data2.dia;
data3.mes = data1.mes + data2.mes;

3) O teu programa, se funcionasse, não calcula o número de dias entre duas datas.

Tens que rever o algoritmo que calcula esse número.

Hint: <número de dias entre duas datas> = <data maior> - <data mais pequena>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se não for preciso muita precisão, eu convertia as duas datas para o nº de segundos desde 1970, subtraía e dividia o resultado pelo nº de segundos num dia, num mês e num ano.

p.s. É "você" que se escreve.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora