M
maryfly009
Здравствуйте. Помогите пожалуйста дорешать задачу:
Дан текстовый файл, содержащий даты в формате «день/месяц/год», причем под день месяц отводится по две позиции, а под год – четыре (например, «16/04/2001»). Сформировать очередь содержащую весенние даты, упорядоченные только по месяцу и числу.
Задача почти решена:
Из условия не могу понять, вот этот фрагмент Сформировать очеред содержащую весенние даты, упорядоченные только по месяцу и числу.
Насколько я знаю над очередью можно выполнять три операции: добавление элементов, удаление элемент и очищать её.
А как реализовать упорядочивание элементов очереди по месяцу и числу?
спасибо за ответы!
Дан текстовый файл, содержащий даты в формате «день/месяц/год», причем под день месяц отводится по две позиции, а под год – четыре (например, «16/04/2001»). Сформировать очередь содержащую весенние даты, упорядоченные только по месяцу и числу.
Задача почти решена:
C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Put(int, int, int);
int Get(int*, int*, int*);
int main()
{
int day, month, year;
char filename[50] = "data.txt";
char str[50];
FILE *f;
if((f = fopen(filename, "r")) == NULL)
{
puts("Nevozmozhno otkrit fail!");
return 0;
}
printf("Soderhimoe faila:\n");
while(!feof(f))
{
if(fgets(str,100,f) == NULL) break;
if(str[strlen(str)-1] == '\n') str[strlen(str)-1] = 0;
printf("%s\n", str);
sscanf(str, "%d/%d/%d", &day, &month, &year);
if(month > 2 && month < 6)
{
if(Put(day, month, year))
{
//Помещение в очередь
//и проверка результата
puts("Nehvataet pamyati!");
break;
}
}
}
fclose(f);
printf("\nRezultat:\n");
//Цикл пока в очереди есть значения
while(!Get(&day, &month, &year))
(day < 10 && month < 10) ? printf("0%d/0%d/%d\n", day, month, year) : (day < 10 && month > 9) ? printf("0%d/%d/%d\n", day, month, year) : printf("%d/0%d/%d\n", day, month, year);
return 0;
}
/* ----- Описание структуры и указателей на очередь ---- */
typedef struct _Element{
int day;
int month;
int year;
struct _Element *next;
} Element;
Element *head = NULL, *tail = NULL;
/* --------- Функция помещения значения в очередь --------- */
int Put(int day, int month, int year)
{
//Выделение памяти под новый элемент
Element *tmp = (Element *)malloc(sizeof(Element));
if(!tmp) return 1; //Если память не выделилась, то выход
//Инициализация ссылки на следующий элемент в очереди
tmp->next = NULL; //нулевым значением
tmp->day = day; //Запись значения в новый элемент
tmp->month = month; //Запись значения в новый элемент
tmp->year = year; //Запись значения в новый элемент
//Связывание последнего элемента в очереди с новым
if(tail) tail->next = tmp; //элементом
tail = tmp; //Установка указателя на конец очереди
//Если это первый элемент, то установка указателя
if(!head) head = tmp; //на начало очереди
return 0; //Успешное завершение
}
/* --------- Функция получения значения из очереди --------*/
int Get(int* day, int* month, int* year)
{
if(!head) return 1; //Если очередь пуста, то выход
Element *tmp = head; //Установка локального указателя
*day = tmp->day;//Запись значения в параметр
*month = tmp->month;//Запись значения в параметр
*year = tmp->year;//Запись значения в параметр
head = head->next; //Установка нового начала очереди
free(tmp);
//Если это последний элемент, то инициализация указателя
if(!head) tail=NULL; //на конец очереди нулевым значением
return 0; //Успешное завершение
}
Из условия не могу понять, вот этот фрагмент Сформировать очеред содержащую весенние даты, упорядоченные только по месяцу и числу.
Насколько я знаю над очередью можно выполнять три операции: добавление элементов, удаление элемент и очищать её.
А как реализовать упорядочивание элементов очереди по месяцу и числу?
спасибо за ответы!