#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char * name;
float start_time;
} subject_t;
subject_t * subject_init( const char * name, float start_time) {
subject_t
* s
= malloc ( sizeof ( subject_t
) ) ; s-> name = strdup( name) ;
s-> start_time = start_time;
return s;
}
/* funkcja porownujaca */
int cmp_subject( const void * a, const void * b) {
subject_t * aa = * ( subject_t** ) a;
subject_t * bb = * ( subject_t** ) b;
float as = aa-> start_time;
float ab = bb-> start_time;
return ( as > ab) - ( as < ab) ;
}
void subject_print( const subject_t * s) {
printf ( "%s begins at %.2f\n " , s
-> name
, s
-> start_time
) ; }
void subject_free( subject_t * s) {
}
int main( void ) {
size_t i, nof_subjects = 6 ;
/* tablica
* alokujemy pamiec dla nof_subjects przedmiotow */
subject_t
** subjects
= malloc ( nof_subjects
* sizeof ( subject_t
* ) ) ;
printf ( "[Nazwa przedmiotu] [Godzina rozpoczecia]\n " ) ; /* wpisujemy kazdy przedmiot */
for ( i= 0 ; i< nof_subjects;++ i) {
char input[ 32 ] ;
float start_time;
subjects[ i] = subject_init( input, start_time) ;
}
/* sortujemy tablice przedmiotow */
qsort ( subjects
, nof_subjects
, sizeof ( subject_t
* ) , cmp_subject
) ;
/* wypisujemy posortowane przedmioty z tablicy */
for ( i= 0 ; i< nof_subjects;++ i)
subject_print( subjects[ i] ) ;
/* zwalniamy po sobie pamiec */
while ( nof_subjects-- )
subject_free( subjects[ nof_subjects] ) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3QgewoJY2hhciAqbmFtZTsKCWZsb2F0IHN0YXJ0X3RpbWU7Cn0gc3ViamVjdF90OwoKc3ViamVjdF90ICpzdWJqZWN0X2luaXQoY29uc3QgY2hhciAqbmFtZSwgZmxvYXQgc3RhcnRfdGltZSkgewoJc3ViamVjdF90ICpzID0gbWFsbG9jKHNpemVvZihzdWJqZWN0X3QpKTsKCXMtPm5hbWUgPSBzdHJkdXAobmFtZSk7CglzLT5zdGFydF90aW1lID0gc3RhcnRfdGltZTsKCXJldHVybiBzOwp9CgovKiBmdW5rY2phIHBvcm93bnVqYWNhICovCmludCBjbXBfc3ViamVjdChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKSB7CglzdWJqZWN0X3QgKmFhID0gKihzdWJqZWN0X3QqKilhOwoJc3ViamVjdF90ICpiYiA9ICooc3ViamVjdF90KiopYjsKCWZsb2F0IGFzID0gYWEtPnN0YXJ0X3RpbWU7CglmbG9hdCBhYiA9IGJiLT5zdGFydF90aW1lOwoJcmV0dXJuIChhcyA+IGFiKSAtIChhcyA8IGFiKTsKfQoKdm9pZCBzdWJqZWN0X3ByaW50KGNvbnN0IHN1YmplY3RfdCAqcykgewoJcHJpbnRmKCIlcyBiZWdpbnMgYXQgJS4yZlxuIixzLT5uYW1lLHMtPnN0YXJ0X3RpbWUpOwp9Cgp2b2lkIHN1YmplY3RfZnJlZShzdWJqZWN0X3QgKnMpIHsKCWZyZWUocy0+bmFtZSk7CglmcmVlKHMpOwp9CgppbnQgbWFpbih2b2lkKSB7CglzaXplX3QgaSwgbm9mX3N1YmplY3RzID0gNjsKCgkvKiB0YWJsaWNhCgkgKiBhbG9rdWplbXkgcGFtaWVjIGRsYSBub2Zfc3ViamVjdHMgcHJ6ZWRtaW90b3cgKi8KCXN1YmplY3RfdCAqKnN1YmplY3RzID0gbWFsbG9jKG5vZl9zdWJqZWN0cyAqIHNpemVvZihzdWJqZWN0X3QqKSk7CgoJcHJpbnRmKCJbTmF6d2EgcHJ6ZWRtaW90dV0gW0dvZHppbmEgcm96cG9jemVjaWFdXG4iKTsKCS8qIHdwaXN1amVteSBrYXpkeSBwcnplZG1pb3QgKi8KCWZvcihpPTA7aTxub2Zfc3ViamVjdHM7KytpKSB7CgkJY2hhciBpbnB1dFszMl07CgkJZmxvYXQgc3RhcnRfdGltZTsKCQlzY2FuZigiJTMxcyIsJmlucHV0KTsKCQlzY2FuZigiJWYiLCZzdGFydF90aW1lKTsKCQlzdWJqZWN0c1tpXSA9IHN1YmplY3RfaW5pdChpbnB1dCxzdGFydF90aW1lKTsKCX0KCgkvKiBzb3J0dWplbXkgdGFibGljZSBwcnplZG1pb3RvdyAqLwoJcXNvcnQoc3ViamVjdHMsbm9mX3N1YmplY3RzLHNpemVvZihzdWJqZWN0X3QqKSxjbXBfc3ViamVjdCk7CgoJLyogd3lwaXN1amVteSBwb3NvcnRvd2FuZSBwcnplZG1pb3R5IHogdGFibGljeSAqLwoJZm9yKGk9MDtpPG5vZl9zdWJqZWN0czsrK2kpCgkJc3ViamVjdF9wcmludChzdWJqZWN0c1tpXSk7CgoJLyogendhbG5pYW15IHBvIHNvYmllIHBhbWllYyAqLwoJd2hpbGUobm9mX3N1YmplY3RzLS0pCgkJc3ViamVjdF9mcmVlKHN1YmplY3RzW25vZl9zdWJqZWN0c10pOwoJZnJlZShzdWJqZWN0cyk7CgoJcmV0dXJuIDA7Cn0K