Форум программистов, компьютерный форум, киберфорум
Наши страницы

Сформировать очеред содержащую весенние даты, упорядоченные только по месяцу и числу. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверка : нажал ли пользователь клавишу http://www.cyberforum.ru/cpp-beginners/thread153542.html
Извиняюсь за тупой вопрос. Нужна функция которая проверяет, нажал ли пользователь какую то клавишу или нет. Знаю только наподобие getch() cin.get() cin.peek() но это не то.. если пользователь ничего...
C++ Поиск самой быстрой сортировки Ищу быструю реализацию быстрого алгоритма сортировки массива для среднего случая на С/С++ под Win32. Остальные параметры не имеют значения. Пока что самая быстрая реализация которую я нашел -... http://www.cyberforum.ru/cpp-beginners/thread153532.html
Поиск в тексте C++
Помогите пожалуйста В файле имеется текст. Найти отсутствие пробелов после точки в конце предложения, исправить ошибки и сохранить файл. Предложением считать часть текста, что кончается "." или...
bool в параметрах функции C++
можно ли использовать тип bool в параметрах функции? void draw(char ch, int width, bool vline, bool hline ); или лучше использовать что-то другое?
C++ Невозможно найти или открыть файл pdb http://www.cyberforum.ru/cpp-beginners/thread153471.html
я написал по учебнику прогу //Первая программа на C++ #include "stdafx.h" #include <iostream> int main () { std::cout << "Добро пожаловать в С++!\n"; return 0; }
C++ шаблон функции Здрасти. Как правильно написать шаблон ,например, этой функции? int **newmatrix(int row, int col){ int **matrix=new int*; for (int i=0; i<row; ++i) matrix=new int; return... подробнее

Показать сообщение отдельно
mary_fly
0 / 0 / 0
Регистрация: 14.04.2010
Сообщений: 8

Сформировать очеред содержащую весенние даты, упорядоченные только по месяцу и числу. - C++

14.07.2010, 09:34. Просмотров 574. Ответов 4
Метки (Все метки)

Здравствуйте. Помогите пожалуйста дорешать задачу:
Дан текстовый файл, содержащий даты в формате «день/месяц/год», причем под день месяц отводится по две позиции, а под год – четыре (например, «16/04/2001»). Сформировать очередь содержащую весенние даты, упорядоченные только по месяцу и числу.

Задача почти решена:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#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;   //Успешное завершение
}
Из условия не могу понять, вот этот фрагмент Сформировать очеред содержащую весенние даты, упорядоченные только по месяцу и числу.
Насколько я знаю над очередью можно выполнять три операции: добавление элементов, удаление элемент и очищать её.
А как реализовать упорядочивание элементов очереди по месяцу и числу?

спасибо за ответы!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.