Hola, tengo que realizar un programa en C++ que invocando las siguientes funciones sea capaz de comparar fechas. no se como hacer para la salida me suelte lo que necesito.
//Considere que se le proveen 2 funciones con el siguiente perfil:
int comparar_fechas(int d1, int m1, int a1, int d2, int m2, int a2) : Esta función recibe 2 fechas y retorna 1 si la primera es posterior a la segunda, 0 si son iguales o -1 si la primera es anterior a la segunda.
void imprimir_fecha(int d, int m, int a) : Este procedimiento imprime por pantalla la fecha pasada como parámetro con el siguiente formato "d/m/a"
Escriba un programa que solicite al usuario el ingreso de 2 fechas. Cada fecha se ingresará proporcionando un valor entero para el día, mes y año de cada una de las fechas. Deberá almacenar los valores propuestos en variables enteras. A continuación, su programa deberá decidir cuál de las 2 fechas es mayor e informarlo apropiadamente tal como se muestra en los ejemplos de ejecución. Para ello debe utilizar las funciones provistas.
#include <iostream>
using namespace std;
void imprimir_fecha(int d, int m, int a)
{
cout<< d << "/" << m << "/" << a;
}
int comparar_fechas(int d1, int m1, int a1, int d2, int m2, int a2)
{
if (a1 < a2)
return -1;
else if (a1 > a2)
return 1;
else
if (m1 < m2)
return -1;
else if (m1 > m2)
return 1;
else
if (d1 < d2)
return -1;
else if (d2 > d1)
return 1;
else
return 0;
}
int main()
{
int d1,m1,a1,d2,m2,a2;
//Solicito ingreso primer fecha
cout << "Ingrese dia de la primer fecha: "<<endl;
cin >> d1;
cout << "Ingrese mes de la primer fecha: "<<endl;
cin >> m1;
cout << "Ingrese año de la primer fecha: "<<endl;
cin >> a1;
//Solicito ingreso segunda fecha
cout << "Ingrese dia de la segunda fecha: "<<endl;
cin >> d2;
cout << "Ingrese mes de la segunda fecha: "<<endl;
cin >> m2;
cout << "Ingrese año de la segunda fecha: "<<endl;
cin >> a2;
}
Esto puede que te sirva échale un ojo.
#include <iostream>
using namespace std;
struct fecha{
int dia, mes, año;
}d1,d2;
void pedirFecha();
fecha mayor();
void mostrarMayor(fecha);
int main(){
pedirFecha();
fecha fechaMayor = mayor();
mostrarMayor(fechaMayor);
cin.get();
return 0;
}
void pedirFecha(){
cout<<"Defina Fecha[1] --- dia/mes/año: ";
cin>>d1.dia>>d1.mes>>d1.año;
cout<<"\nDefina Fecha[2] --- dia/mes/año: ";
cin>>d2.dia>>d2.mes>>d2.año;
}
fecha mayor(){
fecha m;
if(d1.año == d2.año){
if(d1.mes == d2.mes){
if(d1.dia == d2.dia){
cout<<"Lo 2 son el mismo dia";
}
else{
if(d1.dia > d2.dia){
m = d1;
}
else{
m = d2;
}
}
}
else{
if(d1.mes > d2.mes){
m = d1;
}
else{
m = d2;
}
}
}
else{
if(d1.año > d2.año){
m = d1;
}
else{
m = d2;
}
}
return m;
}
void mostrarMayor(fecha mayor){
cout<<"\n-------------------------------------------";
cout<<"\nLa mayor fecha es: "<<mayor.dia<<"/"<<mayor.mes<<"/"<<mayor.año<<endl;
}
/*PD: usa [code=cpp]*Tu Codigo aquí*
así se vera mucho mejor el código. Saludos*/[/code]
Cita de: 98Fran en 31 Agosto 2019, 19:46 PM
Esto puede que te sirva échale un ojo.
#include <iostream>
using namespace std;
struct fecha{
int dia, mes, año;
}d1,d2;
void pedirFecha();
fecha mayor();
void mostrarMayor(fecha);
int main(){
pedirFecha();
fecha fechaMayor = mayor();
mostrarMayor(fechaMayor);
cin.get();
return 0;
}
void pedirFecha(){
cout<<"Defina Fecha[1] --- dia/mes/año: ";
cin>>d1.dia>>d1.mes>>d1.año;
cout<<"\nDefina Fecha[2] --- dia/mes/año: ";
cin>>d2.dia>>d2.mes>>d2.año;
}
fecha mayor(){
fecha m;
if(d1.año == d2.año){
if(d1.mes == d2.mes){
if(d1.dia == d2.dia){
cout<<"Lo 2 son el mismo dia";
}
else{
if(d1.dia > d2.dia){
m = d1;
}
else{
m = d2;
}
}
}
else{
if(d1.mes > d2.mes){
m = d1;
}
else{
m = d2;
}
}
}
else{
if(d1.año > d2.año){
m = d1;
}
else{
m = d2;
}
}
return m;
}
void mostrarMayor(fecha mayor){
cout<<"\n-------------------------------------------";
cout<<"\nLa mayor fecha es: "<<mayor.dia<<"/"<<mayor.mes<<"/"<<mayor.año<<endl;
}
/*PD: usa [code=cpp]*Tu Codigo aquí*
así se vera mucho mejor el código. Saludos*/[/code]
PD: No uso año sino ani-o (sin el -) pero el foro lo cambia automaticamente por que le da la gana xD. No se puede usar el caracter Ñ en C++. Saludos.
Si son más de 2 fechas se pueden usar vectores y es más fácil la verdad pero hice este programa cuando no tenía mucha idea de C++ solo lo básico.
Voy a decirte un par de cosas del código para que veas algunos fallos (ya que yo también estoy aprendiendo y me están ayudando por aquí en el foro)
Lo primero:
void imprimir_fecha(int d, int m, int a)
{
cout<< d << "/" << m << "/" << a;
}
int comparar_fechas(int d1, int m1, int a1, int d2, int m2, int a2)
{
if (a1 < a2)
return -1;
else if (a1 > a2)
return 1;
else
if (m1 < m2)
return -1;
else if (m1 > m2)
return 1;
else
if (d1 < d2)
return -1;
else if (d2 > d1)
return 1;
else
return 0;
}
Has creado 2 funciones y no las has llamado en el main(), por tanto cuando inicialices el programa, este va ir a buscar la función main(), va a leer todas las instrucciones de main(), (que en este caso solo es meter valores a las variables) y se va a terminar y no va a hacer nada más.
Para que funcione tus funciones tienes que llamarlas con:
int main(){
int d1,m1,a1,d2,m2,a2;
//Solicito ingreso primer fecha
cout << "Ingrese dia de la primer fecha: "<<endl;
cin >> d1;
cout << "Ingrese mes de la primer fecha: "<<endl;
cin >> m1;
cout << "Ingrese año de la primer fecha: "<<endl;
cin >> a1;
//Solicito ingreso segunda fecha
cout << "Ingrese dia de la segunda fecha: "<<endl;
cin >> d2;
cout << "Ingrese mes de la segunda fecha: "<<endl;
cin >> m2;
cout << "Ingrese año de la segunda fecha: "<<endl;
cin >> a2;
// y
int x = comparar_fecha(d1,m1,a1,d2,m2,a2); //Todo esto importante después de los cout/cin de las variables.
if(x == 0)
cout<<"Son el mismo dia";
if(x == 1)
imprimir_fecha(d1,m1,a1); //En el caso de la fecha 1;
if(x == -1)
imprimir_fecha(d2,m2,a2); //En el caso de la fecha 2;
}
Y
{
if (a1 < a2)
return -1;
else if (a1 > a2)
return 1;
else
if (m1 < m2)
return -1;
else if (m1 > m2)
return 1;
else
if (d1 < d2)
return -1;
else if (d2 > d1)
return 1;
else
return 0;
}
esta mál, el ultimo else if es lo mismo.
d1 <d2 == d2 > d1.
Me acabo de dar cuenta de que puede que no sepas que es una estructura xD.
ignora:
struct fecha{
int dia, mes, año;
}d1,d2;
Cambia:
d1.dia por d1
d1.mes por m1
d1.an-io por a1
------------------
d2.dia == d2
d2.mes == m2
d2.año == a2
y
int main()
{
int d1,m1,a1,d2,m2,a2;