#include<stdio.h>
#include<stdlib.h>
#define MAX 25
struct appuntamento{
int mese;
int giorno;
int num;
int ora;
char descrizione[ 20 ] ;
} ;
void inserisciApp( struct appuntamento **, int * ) ;
void visualizzaApp( struct appuntamento **, int ) ;
void scambia( struct appuntamento **, struct appuntamento ** ) ;
int main( ) {
struct appuntamento * A[ MAX] ;
int num= 0 , scelta;
char c;
do {
printf ( "1) Inserisci appuntamento\n " ) ; printf ( "2) Visualizza tutti gli appuntamenti\n " ) ; printf ( "3) Visualizza appuntamenti in un dato periodo\n " ) ; printf ( "0) Termina programma\n " ) ; switch ( scelta) {
case 1 :
inserisciApp( A, & num) ;
break ;
case 2 :
visualizzaApp( A, num) ;
break ;
//case 3:
//break;
default :
break ;
}
} while ( scelta!= 0 ) ;
return 0 ;
}
void inserisciApp( struct appuntamento ** pA, int * n) {
int ind;
char c= 's' ;
do {
pA
[ * n
] = ( struct appuntamento
* ) malloc ( sizeof ( struct appuntamento
) ) ; printf ( "Appuntamento n.%d\n " , * n
+ 1 ) ; do {
printf ( "Specificare mese [min.1(Gennaio), max.12(Dicembre)]: " ) ; scanf ( "%d" , & ( pA
[ * n
] -> mese
) ) ; } while ( ( pA[ * n] -> mese) < 1 || ( pA[ * n] -> mese) > 12 ) ;
do {
printf ( "Specificare giorno [min.1, max.31]: " ) ; scanf ( "%d" , & ( pA
[ * n
] -> giorno
) ) ; } while ( ( pA[ * n] -> giorno) < 1 || ( pA[ * n] -> giorno) > 31 ) ;
pA[ * n] -> num= 1 ;
for ( int j= 0 ; j<* n; j++ ) {
if ( pA[ j] -> mese== pA[ * n] -> mese && pA[ j] -> giorno== pA[ * n] -> giorno) {
( pA[ * n] -> num) ++;
( pA[ j] -> num) ++;
}
}
do {
printf ( "Specificare ora [min.0, max.23]: " ) ; scanf ( "%d" , & ( pA
[ * n
] -> ora
) ) ; } while ( ( pA[ * n] -> ora) < 0 || ( pA[ * n] -> ora) > 23 ) ;
printf ( "Specificare descrizione: " ) ; scanf ( "%s" , pA
[ * n
] -> descrizione
) ; ind=* n;
while ( ind> 0 ) {
if ( pA[ ind] -> mese== pA[ ind- 1 ] -> mese) {
if ( pA[ ind] -> giorno< pA[ ind- 1 ] -> giorno)
scambia( & pA[ ind] , & pA[ ind- 1 ] ) ;
} else if ( pA[ ind] -> mese< pA[ ind- 1 ] -> mese)
scambia( & pA[ ind] , & pA[ ind- 1 ] ) ;
ind--;
}
printf ( "\n Continuare con l'inserimento? (s/n) " ) ; ( * n) ++;
} while ( c!= 'n' && * n<= MAX) ;
return ;
}
void visualizzaApp( struct appuntamento ** pA, int n) {
int i= 0 ;
while ( i< n) {
printf ( "Appuntamento n.%d\n " , i
+ 1 ) ; printf ( "Mese: %d\n " , pA
[ i
] -> mese
) ; printf ( "Giorno: %d\n " , pA
[ i
] -> giorno
) ; printf ( "Ora: %d\n " , pA
[ i
] -> ora
) ; printf ( "Descrizione: %s\n " , pA
[ i
] -> descrizione
) ; printf ( "Num. appuntamento: %d\n \n " , pA
[ i
] -> num
) ; i++;
}
return ;
}
void scambia( struct appuntamento ** A, struct appuntamento ** B) {
struct appuntamento ** temp;
temp= A;
A= B;
B= temp;
return ;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNkZWZpbmUgTUFYIDI1CgpzdHJ1Y3QgYXBwdW50YW1lbnRvewoJaW50IG1lc2U7CglpbnQgZ2lvcm5vOwoJaW50IG51bTsKCWludCBvcmE7CgljaGFyIGRlc2NyaXppb25lWzIwXTsKfTsKCnZvaWQgaW5zZXJpc2NpQXBwKHN0cnVjdCBhcHB1bnRhbWVudG8gKiosIGludCAqKTsKdm9pZCB2aXN1YWxpenphQXBwKHN0cnVjdCBhcHB1bnRhbWVudG8gKiosIGludCk7CnZvaWQgc2NhbWJpYShzdHJ1Y3QgYXBwdW50YW1lbnRvICoqLCBzdHJ1Y3QgYXBwdW50YW1lbnRvICoqKTsKCmludCBtYWluKCl7CglzdHJ1Y3QgYXBwdW50YW1lbnRvICpBW01BWF07CglpbnQgbnVtPTAsIHNjZWx0YTsKCWNoYXIgYzsKCWRvewoJICAgcHJpbnRmKCJ8LU1FTlUnIFNDRUxUQS18XG4iKTsKCSAgIHByaW50ZigiMSkgSW5zZXJpc2NpIGFwcHVudGFtZW50b1xuIik7CgkgICBwcmludGYoIjIpIFZpc3VhbGl6emEgdHV0dGkgZ2xpIGFwcHVudGFtZW50aVxuIik7CgkgICBwcmludGYoIjMpIFZpc3VhbGl6emEgYXBwdW50YW1lbnRpIGluIHVuIGRhdG8gcGVyaW9kb1xuIik7CgkgICBwcmludGYoIjApIFRlcm1pbmEgcHJvZ3JhbW1hXG4iKTsKCSAgIHByaW50ZigiXG5TY2VsdGE6ICIpOwoJICAgc2NhbmYoIiVkIiwgJnNjZWx0YSk7CgkgICBwcmludGYoIlxuIik7CgkgICBzd2l0Y2goc2NlbHRhKXsKCSAgIAkJY2FzZSAxOgoJICAgCQkJaW5zZXJpc2NpQXBwKEEsICZudW0pOwoJICAgCQkJYnJlYWs7CgkgICAJCWNhc2UgMjoKCSAgIAkJCXZpc3VhbGl6emFBcHAoQSwgbnVtKTsKCQkJCSAgIGJyZWFrOwoJICAgCQkvL2Nhc2UgMzoKCQkJICAgLy9icmVhazsJICAgCQkKCQkJZGVmYXVsdDoKCSAgIAkJCWJyZWFrOwoJICAgfQoJfXdoaWxlKHNjZWx0YSE9MCk7CglyZXR1cm4gMDsKfQoKdm9pZCBpbnNlcmlzY2lBcHAoc3RydWN0IGFwcHVudGFtZW50byAqKnBBLCBpbnQgKm4pewoJaW50IGluZDsKCWNoYXIgYz0ncyc7Cglkb3sKCSAgIHBBWypuXT0oc3RydWN0IGFwcHVudGFtZW50byopbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXBwdW50YW1lbnRvKSk7CgkgICBwcmludGYoIkFwcHVudGFtZW50byBuLiVkXG4iLCAqbisxKTsKCSAgIGRvewoJICAgCSAgcHJpbnRmKCJTcGVjaWZpY2FyZSBtZXNlIFttaW4uMShHZW5uYWlvKSwgbWF4LjEyKERpY2VtYnJlKV06ICIpOwoJICAgICAgc2NhbmYoIiVkIiwgJihwQVsqbl0tPm1lc2UpKTsKCSAgIH13aGlsZSgocEFbKm5dLT5tZXNlKTwxIHx8IChwQVsqbl0tPm1lc2UpPjEyKTsKCSAgIGRvewoJICAgCSAgcHJpbnRmKCJTcGVjaWZpY2FyZSBnaW9ybm8gW21pbi4xLCBtYXguMzFdOiAiKTsKCSAgICAgIHNjYW5mKCIlZCIsICYocEFbKm5dLT5naW9ybm8pKTsKCSAgIH13aGlsZSgocEFbKm5dLT5naW9ybm8pPDEgfHwgKHBBWypuXS0+Z2lvcm5vKT4zMSk7CgkgICBwQVsqbl0tPm51bT0xOwoJICAgZm9yKGludCBqPTA7IGo8Km47IGorKyl7CgkJICAgaWYocEFbal0tPm1lc2U9PXBBWypuXS0+bWVzZSAmJiBwQVtqXS0+Z2lvcm5vPT1wQVsqbl0tPmdpb3Jubyl7CgkJICAgCSAgIChwQVsqbl0tPm51bSkrKzsKCQkgIAkgICAocEFbal0tPm51bSkrKzsKCQkgICB9CgkgICB9CgkgICBkb3sKCSAgIAkgIHByaW50ZigiU3BlY2lmaWNhcmUgb3JhIFttaW4uMCwgbWF4LjIzXTogIik7CgkgICAgICBzY2FuZigiJWQiLCAmKHBBWypuXS0+b3JhKSk7CgkgICB9d2hpbGUoKHBBWypuXS0+b3JhKTwwIHx8IChwQVsqbl0tPm9yYSk+MjMpOwoJICAgcHJpbnRmKCJTcGVjaWZpY2FyZSBkZXNjcml6aW9uZTogIik7CgkgICBzY2FuZigiJXMiLCBwQVsqbl0tPmRlc2NyaXppb25lKTsKCSAgIGZmbHVzaChzdGRpbik7CgkgICBpbmQ9Km47CgkgICB3aGlsZShpbmQ+MCl7CgkgICAJCWlmKHBBW2luZF0tPm1lc2U9PXBBW2luZC0xXS0+bWVzZSl7CgkgICAJCQlpZihwQVtpbmRdLT5naW9ybm88cEFbaW5kLTFdLT5naW9ybm8pCgkgICAJCQkJc2NhbWJpYSgmcEFbaW5kXSwgJnBBW2luZC0xXSk7CgkgICAJCX1lbHNlIGlmKHBBW2luZF0tPm1lc2U8cEFbaW5kLTFdLT5tZXNlKQoJICAgCQkJCXNjYW1iaWEoJnBBW2luZF0sICZwQVtpbmQtMV0pOwoJICAgCQlpbmQtLTsJCQkJCQoJICAgfQoJICAgcHJpbnRmKCJcbkNvbnRpbnVhcmUgY29uIGwnaW5zZXJpbWVudG8/IChzL24pICIpOwoJICAgc2NhbmYoIiVjIiwgJmMpOwoJICAgKCpuKSsrOwoJICAgcHJpbnRmKCJcbiIpOwoJfXdoaWxlKGMhPSduJyAmJiAqbjw9TUFYKTsKCXJldHVybjsKfQoKdm9pZCB2aXN1YWxpenphQXBwKHN0cnVjdCBhcHB1bnRhbWVudG8gKipwQSwgaW50IG4pewoJaW50IGk9MDsKCXdoaWxlKGk8bil7CgkJcHJpbnRmKCJBcHB1bnRhbWVudG8gbi4lZFxuIiwgaSsxKTsKCQlwcmludGYoIk1lc2U6ICVkXG4iLCBwQVtpXS0+bWVzZSk7CgkJcHJpbnRmKCJHaW9ybm86ICVkXG4iLCBwQVtpXS0+Z2lvcm5vKTsKCQlwcmludGYoIk9yYTogJWRcbiIsIHBBW2ldLT5vcmEpOwoJCXByaW50ZigiRGVzY3JpemlvbmU6ICVzXG4iLCBwQVtpXS0+ZGVzY3JpemlvbmUpOwoJCXByaW50ZigiTnVtLiBhcHB1bnRhbWVudG86ICVkXG5cbiIsIHBBW2ldLT5udW0pOwoJCWkrKzsKCX0KCXJldHVybjsKfQoKdm9pZCBzY2FtYmlhKHN0cnVjdCBhcHB1bnRhbWVudG8gKipBLCBzdHJ1Y3QgYXBwdW50YW1lbnRvICoqQil7CglzdHJ1Y3QgYXBwdW50YW1lbnRvICoqdGVtcDsKCXRlbXA9QTsKCUE9QjsKCUI9dGVtcDsKCXJldHVybjsKfQ==