Ejercicio fechas

Consigna 0:

Hacer un programa que lea dos fechas, leyendo 3 enteros día, mes, año.
Debe indicar cuál es la menor.




SOLUCION en C


#include <stdio.h>

int main() {
    int d1, m1, a1;
    int d2, m2, a2;

    printf("Ingrese la primera fecha (dia mes año): ");
    scanf("%d %d %d", &d1, &m1, &a1);

    printf("Ingrese la segunda fecha (dia mes año): ");
    scanf("%d %d %d", &d2, &m2, &a2);

    if (a1 < a2) {
        printf("La primera fecha es menor.\n");
    } else if (a1 > a2) {
        printf("La primera fecha es mayor.\n");
    } else { // mismo año
        if (m1 < m2) {
            printf("La primera fecha es menor.\n");
        } else if (m1 > m2) {
            printf("La primera fecha es mayor.\n");
        } else { // mismo mes
            if (d1 < d2) {
                printf("La primera fecha es menor.\n");
            } else if (d1 > d2) {
                printf("La primera fecha es mayor.\n");
            } else {
                printf("Las dos fechas son iguales.\n");
            }
        }
    }

    return 0;
}

 


Consigna 1:

Hacer un programa que lea una fecha, leyendo 3 enteros día, mes, año.
Debe indicar si es válida.


DETALLES A TENER EN CUENTA


- Pseudocódigo

- Un año es bisiesto si es múltiplo de 4 y no múltiplo de 100, y en tal caso existe el 29 de Febrero.

- El esquema es LEER VALIDAR IMPRIMIR

- Validar debe ser una función aparte.

- Como el if tiene muchos casos se debe usar el switch-case.

- Bisiesto puede ser una función aparte.


PSEUDOCODIGO


Leer día mes y año

Si año en el rango 

    y Si mes entre 1 y 12

        y Si día entre 1 y 31

            y Si Para el mes, día dentro del rango

                y Si el día fuere 29/2  y año  bisiesto

                    Entonces válida

Sino no válida


Versión 1 sin switch 


#include <stdio.h>

#include <stdbool.h>


// Función que determina si un año es bisiesto

// Retorna true si lo es, false en caso contrario

bool es_bisiesto(int anio) {

    return (anio % 4 == 0 && anio % 100 != 0) || (anio % 400 == 0);

}


// Función que valida la fecha completa

bool validar_fecha(int d, int m, int a) {

    // 1. Validaciones básicas: año positivo y mes entre 1 y 12

    if (a < 1 || m < 1 || m > 12) {

        return false;

    }


    // 2. Determinar el límite de días según el mes

    int dias_maximos;


    if (m == 2) {

        // Usamos la función auxiliar para febrero

        dias_maximos = es_bisiesto(a) ? 29 : 28;

    } else if (m == 4 || m == 6 || m == 9 || m == 11) {

        // Meses de 30 días

        dias_maximos = 30;

    } else {

        // El resto tiene 31 días

        dias_maximos = 31;

    }


    // 3. El día debe estar entre 1 y el máximo permitido para ese mes

    return (d >= 1 && d <= dias_maximos);

}


int main() {

    int dia, mes, anio;


    printf("Ingrese fecha (dd mm aaaa): ");

    if (scanf("%d %d %d", &dia, &mes, &anio) != 3) {

        printf("Error: Formato de entrada no valido.\n");

        return 1;

    }


    if (validar_fecha(dia, mes, anio)) {

        printf("La fecha %02d/%02d/%d es CORRECTA.\n", dia, mes, anio);

    } else {

        printf("La fecha %02d/%02d/%d es INVALIDA.\n", dia, mes, anio);

    }


    return 0;

}



Versión 2 CON SWITCH


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

// Función para determinar si un año es bisiesto
bool es_bisiesto(int anio) {
    return (anio % 4 == 0 && anio % 100 != 0) || (anio % 400 == 0);
}

// Función para validar la fecha usando switch
bool validar_fecha(int d, int m, int a) {
    // Validaciones preliminares
    if (a < 1 || m < 1 || m > 12) {
        return false;
    }

    int dias_maximos;

    switch (m) {
        case 2: // Febrero: depende de si es bisiesto
            dias_maximos = es_bisiesto(a) ? 29 : 28;
            break;

        case 4: // Abril
        case 6: // Junio
        case 9: // Septiembre
        case 11: // Noviembre
            dias_maximos = 30;
            break;

        default: // Enero, Marzo, Mayo, Julio, Agosto, Octubre, Diciembre
            dias_maximos = 31;
            break;
    }

    return (d >= 1 && d <= dias_maximos);
}

int main() {
    int dia, mes, anio;

    printf("Ingrese la fecha (dd mm aaaa): ");
    if (scanf("%d %d %d", &dia, &mes, &anio) != 3) {
        printf("Error: Datos de entrada no validos.\n");
        return 1;
    }

    if (validar_fecha(dia, mes, anio)) {
        printf("Resultado: La fecha %02d/%02d/%d es VALIDA.\n", dia, mes, anio);
    } else {
        printf("Resultado: La fecha %02d/%02d/%d es INVALIDA.\n", dia, mes, anio);
    }

    return 0;
}


Consigna 2


Hacer un programa que lea 10 números y devuelva, de dichos números el menor de los números pares que estén entre 0 y 100.


Pseudocódigo


min=+infinito

para cada vez de las 10 veces

    leer número

     si es par y está en el rango 

        entonces 

            si n < min entonces min=n finsi

    finsi

finpara

print min




Detalles:


a es par sii (x mod 2)==0

a en el rango sii (a>=0) y a<=100)


Implementación en C


#include <stdio.h>


int main() {

    int numero;

    int menorPar = 9999; // Inicializamos con un valor fuera del rango válido

    int i;


    printf("Ingrese 10 numeros:\n");

    for (i = 0; i < 10; i++) {

        scanf("%d", &numero);


        // Verificar si es par y está en el rango 0-100

        if (numero % 2 == 0 && numero >= 0 && numero <= 100) {

            if (numero < menorPar) {

                menorPar = numero;

            }

        }

    }


    if (menorPar == 9999) {

        printf("No se ingresaron numeros pares entre 0 y 100.\n");

    } else {

        printf("El menor numero par entre 0 y 100 es: %d\n", menorPar);

    }


    return 0;

}



Comentarios

Entradas populares de este blog