Determinar que fecha es la mas antigüa de un arreglo.

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
imulator
Mensajes: 15
Registrado: 05/12/2018 1:03 pm

Determinar que fecha es la mas antigüa de un arreglo.

#1 Mensaje por imulator » 12/01/2019 4:31 am

El código solicita la cantidad de fechas que se van a guardar en el array y luego se solicitan las fechas así:
Introduce la dimensión de la tabla: 3
Introduce día de la fecha 1: 23
Introduce mes de la fecha 1: 10
Introduce año de la fecha 1: 2018
etc..

una vez almacenadas las fechas el programa debe mostrar la fecha mas antigüa de todas las introducidas, esto es lo que tengo por el momento:

Código: Seleccionar todo

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

typedef struct {
    int dia;
    int mes;
    int anyo;
} Fecha;

int main(){
	int i, j, dim, temp[3];
	
	Fecha *fechas;
	
	printf("Introduce la dimensión de la tabla: ");
	scanf("%i", &dim);
	
	fechas = (Fecha *) malloc(dim * sizeof(Fecha));
	
	for(i=0;i<dim;i++){
		printf("Introduce día de la fecha %i: ", i+1);
		scanf("%i", &fechas[i].dia);
		printf("Introduce mes de la fecha %i: ", i+1);
		scanf("%i", &fechas[i].mes);
		printf("Introduce año de la fecha %i: ", i+1);
		scanf("%i", &fechas[i].anyo);
	}
		

	printf("%i/%i/%i", temp[0], temp[1], temp[2]);
 	
	return 0;
}
Me falta la parte donde compruebe la fecha mas antigüa, encontré este código que ordena las fechas de un array, pero es para C++:

Código: Seleccionar todo

// C++ program to sort an array of dates 
#include<bits/stdc++.h> 
using namespace std; 
  
// Structure for date 
struct Date 
{ 
    int day, month, year; 
}; 
  
// This is the compare function used by in-built sort 
// function to sort the array of dates. 
// It takes two Dates as parameters (const is 
// given to tell the compiler that the value won't be 
// changed during the compare - this is for optimisation..) 
  
// Returns true if dates have to be swapped and returns 
// false if not. Since we want ascending order, we return 
// true if first Date is less than second date 
bool compare(const Date &d1, const Date &d2) 
{ 
    // All cases when true should be returned 
    if (d1.year < d2.year) 
        return true; 
    if (d1.year == d2.year && d1.month < d2.month) 
        return true; 
    if (d1.year == d2.year && d1.month == d2.month && 
                              d1.day < d2.day) 
        return true; 
  
    // If none of the above cases satisfy, return false 
    return false; 
} 
  
// Function to sort array arr[0..n-1] of dates 
void sortDates(Date arr[], int n) 
{ 
    // Calling in-built sort function. 
    // First parameter array beginning, 
    // Second paramter - array ending, 
    // Third is the custom compare function 
    sort(arr, arr+n, compare); 
} 
  
// Driver Program 
int main() 
{ 
    Date arr[] = {{20,  1, 2014}, 
                  {25,  3, 2010}, 
                  { 3, 12, 1676}, 
                  {18, 11, 1982}, 
                  {19,  4, 2015}, 
                  { 9,  7, 2015}}; 
    int n = sizeof(arr)/sizeof(arr[0]); 
  
    sortDates(arr, n); 
  
    cout << "Sorted dates are\n"; 
    for (int i=0; i<n; i++) 
    { 
        cout << arr[i].day << " " << arr[i].month 
             << " " << arr[i].year; 
        cout << endl; 
    } 
}  
Como lo puedo adaptar para C? se que cout equivale a printf pero el resto ni idéa.
Última edición por imulator el 12/01/2019 10:21 am, editado 1 vez en total.

mollok
Mensajes: 413
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: Determinar que fecha es la mas antigüa de un arreglo.

#2 Mensaje por mollok » 12/01/2019 7:33 am

Ese código está incompleto:
En C hay una función para ordenar arrays, se llama qsort y usa el algoritmo de quicksort para ordenar. Al igual que en tu ejemplo, el tercer argumento es una función tipo int función(const void *elem1, const void *elem2)
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

imulator
Mensajes: 15
Registrado: 05/12/2018 1:03 pm

Re: Determinar que fecha es la mas antigüa de un arreglo.

#3 Mensaje por imulator » 12/01/2019 8:18 am

He actualizado el código de C++ que no estaba completo.
Sería algo así, aúnque este programa es para ordenar números:

Código: Seleccionar todo

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

#define MAX_NUMBERS 5

int compare(const void *_a, const void *_b) {
 
        int *a, *b;
        
        a = (int *) _a;
        b = (int *) _b;
        
        return (*a - *b);
}

int main () {

        int numbers[MAX_NUMBERS];
        int i, size = 0;
        
        while( (scanf("%d",&numbers[size]) != EOF) && (size < MAX_NUMBERS) ){
                size ++;
        }

        for (i = 0; i < size; i ++) {
                printf("%d ", numbers[i]);
        }
        printf ("\n");
        
        qsort(numbers, size, sizeof(int), &compare);
        
        printf ("size:%d\n", size);
        for (i = 0; i < size; i ++) {
                printf("%d ", numbers[i]);
        }
       
        /* Check if numbers is actually sorted */
        for (i = 0; i < size-1; i ++) {
                if (numbers[i] > numbers[i+1]) {
                        printf("Failed !!!!!");
                        break;
                }
        }     
       
        return 0;
}
Como puedo adaptarlo para que ordene fechas? Estoy un poco perdido en esto.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 10 invitados