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
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
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
Publicar un comentario