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

Сформировать очеред содержащую весенние даты, упорядоченные только по месяцу и числу. - 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... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
15.07.2010, 14:37
mary_fly, вот вся програмка, вроде работает...
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <stdio.h>
#include <stdlib.h>
 
typedef struct tagDATE {
    int day;
    int month;
    int year;
    struct tagDATE * prev;
    struct tagDATE * next;
} date_t;
 
typedef struct tagDATEQUEUE {
    date_t * first;
    date_t * last;
} datequeue_t;
 
void clear_queue(datequeue_t * queue){
    date_t * tmp;
    while ( queue->first ){
        tmp = queue->first->next;
        free(queue->first);
        queue->first = tmp;
    }
}
 
int cmp_dates(const date_t * a, const date_t * b){
    if ( a->month == b->month )
        return a->day - b->day;
    return a->month - b->month;
}
 
date_t * dup_date(const date_t * od){
    date_t * nd;
    if ( ( nd = (date_t*)malloc(sizeof(date_t)) ) == NULL )
        return NULL;
    nd->day = od->day;
    nd->month = od->month;
    nd->year = od->year;
    nd->prev = nd->next = NULL;
    return nd;
}
 
date_t * insert_before(date_t * existing, const date_t * newone){
    date_t * toAdd;
    if ( ( toAdd = dup_date(newone) ) == NULL )
        return NULL;
    if ( existing->prev )
        existing->prev->next = toAdd;
    toAdd->prev = existing->prev;
    toAdd->next = existing;
    existing->prev = toAdd;
    return toAdd;
}
 
int add_to_queue(datequeue_t * dq, const date_t * date){
    date_t * curDate;
    if ( dq->first == NULL ){
        if ( ( dq->first = dup_date(date) ) == NULL )
            return -1;
        dq->last = dq->first;
        return 0;
    }
    else {
        for ( curDate = dq->first; curDate != NULL && cmp_dates(curDate, date) < 0; curDate = curDate->next )
            ;
        if ( curDate == NULL ){
            if ( ( curDate = dup_date(date) ) == NULL )
                return -1;
            curDate->prev = dq->last;
            dq->last->next = curDate;
            dq->last = curDate;
            return 0;
        }
        else if ( curDate == dq->first ){
            if  ( ( dq->first = insert_before(dq->first, date) ) == NULL )
                return -1;
            return 0;
        }
        else
            return ( insert_before(curDate, date) ) ? 0 : -1;
    }
}
 
void print_dates(const datequeue_t * dq){
    const date_t * curDate;
    for ( curDate = dq->first; curDate != NULL; curDate = curDate->next )
        printf("%02d/%02d/%04d\n", curDate->day, curDate->month, curDate->year);
}
 
int date_from_file(FILE * fin, date_t * date){
    return fscanf(fin, "%d/%d/%d", &date->day, &date->month, &date->year) - 3;
}
 
#define FILE_NAME "dates.txt"
#define LO_MONTH 3
#define HI_MONTH 5
 
int main(void){
    FILE * fin;
    date_t oneDate;
    datequeue_t dq;
 
    dq.first = dq.last = NULL;
 
    if ( ( fin = fopen(FILE_NAME, "r") ) == NULL ){
        perror("fopen");
        exit(EXIT_FAILURE);
    }
    while ( date_from_file(fin, &oneDate) == 0 ){
        if ( oneDate.month >= LO_MONTH && oneDate.month <= HI_MONTH ){
            if ( add_to_queue(&dq, &oneDate) ){
                fprintf(stderr, "Can't insert date in queue!\n");
                exit(EXIT_FAILURE);
            }
        }
    }
    fclose(fin);
 
    if ( dq.first == NULL ){
        fprintf(stderr, "No dates in queue!\n");
        exit(EXIT_FAILURE);
    }
 
    print_dates(&dq);
 
    clear_queue(&dq);
    exit(EXIT_SUCCESS);
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.