Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверка : нажал ли пользователь клавишу http://www.cyberforum.ru/cpp-beginners/thread153542.html
Извиняюсь за тупой вопрос. Нужна функция которая проверяет, нажал ли пользователь какую то клавишу или нет. Знаю только наподобие getch() cin.get() cin.peek() но это не то.. если пользователь ничего не нажимал то функции ЖДУТ нажатия, а мне нужно чтоб цикл продолжался без остановок.
C++ Поиск самой быстрой сортировки Ищу быструю реализацию быстрого алгоритма сортировки массива для среднего случая на С/С++ под Win32. Остальные параметры не имеют значения. Пока что самая быстрая реализация которую я нашел - простой quicksort из книги Седжвика. Вот прога, где реализована быстрая сортировка : #include<algorithm> #include<stdlib.h> #include<time.h> #include<iostream> #include<stack> using namespace std; 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 matrix; } я сделал так: подробнее

Показать сообщение отдельно
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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);
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru