0% encontró este documento útil (0 votos)
39 vistas5 páginas

Cálculo de Días y Jueves Santo

tp en grupo algoritmos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
39 vistas5 páginas

Cálculo de Días y Jueves Santo

tp en grupo algoritmos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

UTN – FACULTAD REGIONAL BUENOS AIRES

Materia: Algoritmos y Estructura de Datos – 2023


CURSO K1002

TRABAJO PRÁCTICO
GRUPAL NÚMERO 1

GRUPO N°: 2

MATERIA: ALGORITMOS Y ESTRUCTURAS DE DATOS K1002

PROFESOR: DR. OSCAR BRUNO

APELLIDOS Y NOMBRES DE LOS ALUMNOS: LEGAJO:

-FRIEDRICH, MARTIN AYAX -208.377-2

- -

- -

- -

- -

FECHA DE PRESENTACIÓN: 22/06/2023 FIRMA PROFESOR


TP Nro.: 1 Grupo N°: 2 Curso: K1002

1) dadas 2 fechas validas, entre el 1/1/1900 y el 31/12/2050, determinar cantidad de días


entre las fechas

#include <iostream>
#include <locale.h>

using namespace std;

struct Fecha {
int dia;
int mes;
int anio;
};

bool esFechaValida(Fecha);
int contarDias(Fecha,Fecha);

int main() {
setlocale(LC_ALL, "");
Fecha fechaInicio;
Fecha fechaFin;
cout<<" Ingrese 2 fechas validas entre entre el 1/1/1900 y el 31/12/2050: "<<endl;
cout << "Ingrese la fecha de inicio (formato: dia mes año): ";
cin >> fechaInicio.dia >> fechaInicio.mes >> fechaInicio.anio;

cout << "Ingrese la fecha de fin (formato: dia mes año): ";
cin >> fechaFin.dia >> fechaFin.mes >> fechaFin.anio;

int dias = contarDias(fechaInicio, fechaFin);


cout << "La cantidad de días entre las fechas ingresadas es: " << dias << endl;

return 0;
}

bool esFechaValida(const Fecha fecha){


if (fecha.anio < 1900 || fecha.anio > 2050)
return false;

if (fecha.mes < 1 || fecha.mes > 12)


return false;

int diasEnMes = 31;

if (fecha.mes == 4 || fecha.mes == 6 || fecha.mes == 9 || fecha.mes == 11)


diasEnMes = 30;
else if (fecha.mes == 2) {
if ((fecha.anio % 4 == 0 && fecha.anio % 100 != 0) || (fecha.anio % 400 == 0))
diasEnMes = 29;
else
diasEnMes = 28;
Algoritmos y Estructura de Datos Hoja 1 de 1
TP Nro.: 1 Grupo N°: 2 Curso: K1002

if (fecha.dia < 1 || fecha.dia > diasEnMes)


return false;

return true;
}

int contarDias(Fecha fechaInicio,Fecha fechaFin) {


if (!esFechaValida(fechaInicio) || !esFechaValida(fechaFin)) {
cout << "Una o ambas fechas son inválidas." <<endl;
return 0;
}

int dias = 0;
Fecha fechaActual = fechaInicio;

while (fechaActual.anio != fechaFin.anio || fechaActual.mes != fechaFin.mes || fechaActual.dia !=


fechaFin.dia) {
dias++;
fechaActual.dia++;

int diasEnMes = 31;

if (fechaActual.mes == 4 || fechaActual.mes == 6 || fechaActual.mes == 9 || fechaActual.mes == 11)


diasEnMes = 30;
else if (fechaActual.mes == 2) {
if ((fechaActual.anio % 4 == 0 && fechaActual.anio % 100 != 0) || (fechaActual.anio % 400 == 0))
diasEnMes = 29;
else
diasEnMes = 28;
}

if (fechaActual.dia > diasEnMes) {


fechaActual.dia = 1;
fechaActual.mes++;
}

if (fechaActual.mes > 12) {


fechaActual.mes = 1;
fechaActual.anio++;
}
}

return dias;
}

Algoritmos y Estructura de Datos Hoja 2 de 1


TP Nro.: 1 Grupo N°: 2 Curso: K1002

2) desarrollar una función que dado un año entre 1900 y 2050 retorne la fecha (dia y
mes) de jueves santo de ese año:

#include <iostream>
#include <locale.h>

using namespace std;

void calcularJuevesSanto(int, int&, int&);

int main()
{
setlocale(LC_ALL, "");
int anio, dia, mes;

cout << "Ingrese el año: ";


cin >> anio;

if(anio<=2050 && anio>=1900){


calcularJuevesSanto(anio, dia, mes);
cout << "El Jueves Santo en el año " << anio << " es el día " << dia << "/" << mes <<endl;
return 0;
}
while(anio>2050 || anio<1900){
cout << "\nVuelva a ingresar un año entre 1900 y 2050: ";
cin >> anio;
}
calcularJuevesSanto(anio, dia, mes);
cout << "El Jueves Santo en el año " << anio << " es el día " << dia << "/" << mes <<endl;

return 0;
}

// Función para calcular el día de Jueves Santo en formato DD/MM


void calcularJuevesSanto(int anio, int& dia, int& mes)
{
int a = anio % 19;
int b = anio / 100;
int c = anio % 100;
int d = b / 4;
int e = b % 4;
int f = (b + 8) / 25;
int g = (b - f + 1) / 3;
int h = (19 * a + b - d - g + 15) % 30;
int i = c / 4;
int k = c % 4;
int L = (32 + 2 * e + 2 * i - h - k) % 7;
int m = (a + 11 * h + 22 * L) / 451;
int n = h + L - 7 * m + 114;
Algoritmos y Estructura de Datos Hoja 3 de 1
TP Nro.: 1 Grupo N°: 2 Curso: K1002

mes = n / 31;
dia = (n % 31) + 1; //El algoritmo implementado (Butcher, 1876) calcula la fecha del domingo de pascua
cristiana, y sólo es válido para fechas entre 1700 y 2300.

// Ajuste para obtener el Jueves Santo


dia -= 3;
}

Algoritmos y Estructura de Datos Hoja 4 de 1

También podría gustarte