Ir ao conteúdo

Ajuda com Datas em C


FgvR

Posts recomendados

Postado

Fala Galera...

Preciso comparar 4 datas e mostrar qual tem o maior prazo...como posso fazer isso sem usar comando de repetição?

lembnrando que a data atual não faz diferença...preciso comprar 4 datas DD/MM/AAAA e ver qual é a "maior"

ex:

20/03/2011

25/03/2014

01/01/2001

12/12/2018<maior data

Obrigado.

Postado

Faz um algoritmo cara, um fluxograma... desenvolva sua própria ideia e mostre para que possamos dar dicas para torná-la melhor. Não dá pra pensar num algoritmo e te dar o codigo pronto tudo de mão beijada....

Postado

Converta dd/mm/aaaa para números e calcule um número único que representada a data.

Por exemplo, se sua data é 17/04/2013 você vai obter um número como 20130417 (note que você tem o ano nos 4 primeiros dígitos, o mês no quinto e sexto, e no 2 últimos você tem a informação do dia.

Um trecho do programa poderia ser como segue abaixo:

unsigned short dia= dd*10;

unsigned short mes=mm*100;

unsigned int ano= aaaa*10000;

long unsigned data=ano+mes+dia;//Converte a data para um único número.

Crie 4 variáveis ou um vetor para guardar as 4 datas (por exemplo "long unsigned data[4]") e compare a datas usando "if". Como disseram para você não usar estrutura de repetição (eu não sei porque) você pode usar a recurção para obter a maior data. Assim você escreveria uma função recursiva que recebe um vetor de N elementos e encontra o maior valor da seguite maneira:

#include<stddef.h>/*Para "size_t"*/

unsigned long maior(unsigned long*data,size_t ultimo_indice)

{

if(ultimo_indice)

{

unsigned long xi=maior(data,ultimo_indice-1);

return xi>data[ultimo_indice]?xi:data[ultimo_indice];

};

return data[0];

};

Assim para obter o maior elemento do vetor de 4 elementos você faria "valor=maior(data,3);". Note que se o vetor é de 4 elementos, o parâmetro ultimo_indice precisa receber um valor igual a 3 (índice do último elemento do vetor de 4 elementos).

Se as datas estiverem sendo lidas como cadeia de caracteres, use a função "atoi" do arquivo de cabeçalho "stdlib.h" se seu programa for em C ou "cstdlib" se for C++ para converter os dígitos dd, mm e aaaa para números inteiros. Para converter string em números, se você precisar de mais flexibilidade também pode usar sscanf (em C) ou a classe stringstream (em C++). Você não explicou como é a sua entrada de dados (numérica, literal, etc) e não apresentou nenhum algoritmo para que possamos auxiliá-lo, assim fica difícil. Ajudar é uma coisa, fazer algoritmos inteiros para alguém é outra.

Postado

Dá pra fazer a comparação mais básica:

- Verifique o maior ano;

- Se houver repetição, verifique o mês;

- Se houver repetição, verifique o dia;

- Se houver repetição, teremos datas iguais.

Postado

Basta converter o input para inteiro. O usuário entra com a data no formato string dd/mm/aaaa e função vai quebrando o texto com strtok. Após esse processo, para retornar a data no forma inteiro, bastaria concatenar os dados e converter para long int. Ficaria interessante também retornar separadamente dia, mês e ano no formato inteiro, segue.


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

typedef struct data{
int dia;
int mes;
int ano;
long int amd;
}DATA;

void data_str(DATA *d, char *data_txt_ddmmaaaa){
char str_ano[5], str_mes[3], str_dia[3];
char concatena[9], texto[11];

strcpy(texto, strtok(data_txt_ddmmaaaa, "/"));
strcpy(str_dia, texto);
d->dia = atoi(str_dia);

strcpy(texto, strtok(NULL, "/"));
strcpy(str_mes, texto);
d->mes = atoi(str_mes);

strcpy(texto, strtok(NULL, "/"));
strcpy(str_ano, texto);
d->ano = atoi(str_ano);

strcpy(concatena, str_ano);
strcat(concatena, str_mes);
strcat(concatena, str_dia);

d->amd = atol(concatena);
}

int main(void){
char texto[11];
DATA *d = malloc(sizeof(DATA));

printf("Entre com a data (DD/MM/AAAA): ");
scanf("%s", texto);
data_str(d, texto);

printf("Dia = %d\n", d->dia);
printf("Mes = %d\n", d->mes);
printf("Ano = %d\n", d->ano);
printf("AAAAMMDD = %ld\n", d->amd);

return 0;
}

Postado

Poderia fazer também:

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

int main()
{

int dia, mes, ano;
long int amd;
char data[9] = {'\0'};

printf("Entre com a data (DD/MM/AAAA): ");
scanf("%d/%d/%d", &dia, &mes, &ano);

printf("\n\n");

sprintf(data, "%d%02d%02d", ano, mes, dia);
amd = atol(data);

printf("Dia = %d\n", dia);
printf("Mes = %d\n", mes);
printf("Ano = %d\n", ano);
printf("AAAAMMDD = %ld\n", amd);

return 0;
}

[]'s

LNW

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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