#include <iostream>
using namespace std;
struct orario
{
int anno;
short int mese;
short int giorno;
short int ore;
};
struct appuntamento
{
char titolo[50];
orario ora;
appuntamento* succ;
};
typedef appuntamento* lista;
bool anteriore(lista a, appuntamento b)
{
if(a->ora.anno > b.ora.anno) return false;
else if(b.ora.anno > a->ora.anno) return true;
else if(a->ora.mese > b.ora.mese) return false;
else if(b.ora.mese > a->ora.mese) return true;
else if(a->ora.giorno > b.ora.giorno) return false;
else if (b.ora.giorno > a->ora.giorno) return true;
else if (((*a).ora.ore) >= (b.ora.ore)) return false;
else if(b.ora.ore < a->ora.ore) return true;
}
void trova_appuntamento_per_data(lista& inizio, appuntamento e)
{
lista p=0,q;
for(q=inizio;q!=0 && anteriore(q,e);q=q->succ) p=q;
if(q==0)cout << "Non ci sono appuntamenti!" << endl;
else
{
e=*q;
cout << "Il primo appuntamento successivo alla data e all'ora inserite e': "
<< e.titolo << endl;
cout << "e' fissato per il giorno: " << e.ora.giorno << "-" << e.ora.mese << "-"
<< e.ora.anno << endl;
cout << "alle ore: " << e.ora.ore << endl;
}
}
Il codice utile è quello sopra in particolare la seconda funzione trova_appuntamento; non capisco perchè sia necessario scrivere "
e=*q
", non dovrebbe funzionare anche dereferenziando direttamente il puntatore???
*p