| Код | #include <stdio.h> #include <string.h> #include <stdbool.h> #include <time.h>
#define SIZE_NAME 16 #define SIZE_DATE 11
#define COUNT_RECORDS 5
// sec * min * hour * dey // 60 * 60 * 24 * 30 = 2592000 #define SECONDS_IN_30_DEYS 2592000
typedef struct _sklad { char name[SIZE_NAME]; int kolvo; int cen; char datestr[SIZE_DATE]; bool print; // Добавил поле, если истина то печатаем, иначе нет } sklad;
int main(int argc, char **argv) {
sklad sklad1[COUNT_RECORDS] = { {"plita", 24, 100001, "21/01/2011", false}, {"pizza", 24, 1000, "20/01/2011", false}, {"arbuz", 24, 10001, "25/01/2011", false}, {"pichenki", 24, 100000, "24/12/2010", false}, {"azbuka", 24, 100001, "24/01/2010", false} };
int i, j;
// Сортировка списка. // Из за того что используется ф-ия strcmp сортировка немного не такая // которая нужна, т.к. сравнение происходит в лексикографическом порядке. for (i=0; i<COUNT_RECORDS-1; ++i) for (j=i; j<COUNT_RECORDS; ++j) if (strcmp(sklad1[i].name, sklad1[j].name) > 0) { sklad buff = sklad1[i]; sklad1[i] = sklad1[j]; sklad1[j] = buff; }
// Фильтруем по цене и времени for (i=0; i<COUNT_RECORDS; ++i) { struct tm t; memset(&t, 0, sizeof(struct tm)); sscanf(sklad1[i].datestr, "%d/%d/%d", &t.tm_mday, &t.tm_mon, &t.tm_year); t.tm_mon -= 1; t.tm_year -= 1900;
if ((sklad1[i].cen > 99999) && ((int)(difftime(time(0), mktime(&t))) > SECONDS_IN_30_DEYS)) sklad1[i].print = true; }
// Печать списка for (i=0; i<COUNT_RECORDS; ++i) if (sklad1[i].print) printf("%16s | %10d | %10d | %11s\n", sklad1[i].name, sklad1[i].kolvo, sklad1[i].cen, sklad1[i].datestr);
system("pause"); return 0; }
|
http://codepad.org/a5619uim
Код с бинарником ниже |