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

Сортировка времени - C++

Восстановить пароль Регистрация
 
AlisherIITU
2 / 2 / 1
Регистрация: 10.09.2013
Сообщений: 129
04.10.2013, 22:05     Сортировка времени #1
Time sorting

From input your program have to read N (1<=N<=100) - the total number of time interval than have to be sorted. Each line contains data in following format HH MM SS
HH (hours) - from 0 to 23
MM (minutes) - from 0 to 60
SS (seconds) - from 0 to 60

The output have to contain time intervals in nondescending order in give format.

Input sample:
4
10 20 30
7 30 00
23 59 59
13 30 30

Output sample:
7 30 0
10 20 30
13 30 30
23 59 59
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2013, 22:05     Сортировка времени
Посмотрите здесь:

C++ Сортировка подсчетом и LSD сортировка
задержка времени C++
C++ Сортировка времени.
C++ сравнение времени
шейкерная сортировка + сортировка слиянием C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
05.10.2013, 13:20     Сортировка времени #2
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
129
130
131
132
133
134
135
136
137
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <stdexcept>
#include <algorithm>
 
struct TTime
{
    int HH;
    int MM;
    int SS;
};
 
//-----------------------------------------------------------------------------
std::istream& operator >> (std::istream& in, TTime& time)
{
    in >> time.HH >> time.MM >> time.SS;
 
    return in;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& out, const TTime& time)
{
    out << time.HH << " " << time.MM << " " << time.SS;
 
    return out;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& out, const std::vector<TTime>& list)
{
    std::vector<TTime>::const_iterator it = list.begin();
 
    for (; it != list.end(); ++it)
    {
        out << *it << std::endl;
    }
 
    return out;
}
//-----------------------------------------------------------------------------
void ReadRecords(std::ifstream& f, std::vector<TTime>& list) throw(std::runtime_error)
{
    int i = list.size();
 
    TTime time;
 
    while ((f >> time) && (i-- > 0))
    {
        list[i] = time;
    }
 
    if (i > 0)
    {
        throw std::runtime_error("unexpected end of file ...");
    }
}
//-----------------------------------------------------------------------------
std::vector<TTime> GetTimeList(const std::string& fname) throw(std::runtime_error)
{
    std::ifstream f(fname.c_str());
 
    if (f.is_open() == false)
    {
        throw (std::runtime_error(fname + ": file is not open ..."));
    }
 
    int n;
 
    if ((f >> n) == NULL)
    {
        throw (std::runtime_error(fname + ": unknow format ..."));
    }
 
    if ((n < 1) || (100 < n))
    {
        throw (std::runtime_error(fname + ": count record must be [1..100] ..."));
    }
 
    std::vector<TTime> list(n);
 
    try
    {
        ReadRecords(f, list);
    }
    catch (const std::runtime_error& error)
    {
        throw (std::runtime_error(fname + ": " + error.what()));
    }
 
    return list;
}
//-----------------------------------------------------------------------------
bool TimeCompare(const TTime& a, const TTime& b)
{
    int compare = b.HH - a.HH;
 
    if (compare == 0)
    {
        compare = b.MM - a.MM;
    }
 
    if (compare == 0)
    {
        compare = b.SS - a.SS;
    }
 
    return (compare > 0);
}
//-----------------------------------------------------------------------------
 
int main(int argc, char* argv[])
{
    if (argc != 2)
    {
        std::cerr << "Usage: program <FILE>" << std::endl;
        return 1;
    }
 
    std::vector<TTime> list;
 
    try
    {
        list = GetTimeList(argv[1]);
    }
    catch (const std::runtime_error& error)
    {
        std::cerr << error.what() << std::endl;
        return 1;
    }
 
    std::sort(list.begin(), list.end(), TimeCompare);
 
    std::cout << list << std::endl;
 
    return 0;
}


Сортировка времени
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
05.10.2013, 14:12     Сортировка времени #3
Уже было. Только там в олимпиадном стиле, всё по минимуму, без проверок на ошибки.
AlisherIITU
2 / 2 / 1
Регистрация: 10.09.2013
Сообщений: 129
05.10.2013, 20:02  [ТС]     Сортировка времени #4
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
#include <iostream>
using namespace std;
 
int main ()
{
    int n;
    int **mas;
    cin >> n;
    mas = new int*[n];
    for (int i=0; i<n; i ++)
    {
        mas[i] = new int[3];
    }
 
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<3; j++)
        {
            cin >> mas[i][j];
        }
    }
    for (int i=0; i<n-1; i++)
    {
        for (int j=i; j<n; j++)
        {
            if (mas[i][0] > mas[j][0])
            {
                swap(mas[i][0], mas[j][0]);
                swap(mas[i][1], mas[j][1]);
                swap(mas[i][2], mas[j][2]);
            }
            else if (mas[i][0] == mas[j][0])
            {
                if (mas[i][1] > mas[j][1])
                {
                    swap(mas[i][0], mas[j][0]);
                    swap(mas[i][1], mas[j][1]);
                    swap(mas[i][2], mas[j][2]);
                }
                else if (mas[i][1] == mas[j][1])
                {
                    if (mas[i][2] > mas[j][2])
                    {
                        swap(mas[i][0], mas[j][0]);
                        swap(mas[i][1], mas[j][1]);
                        swap(mas[i][2], mas[j][2]);
                    }
                }
            }
        }
    }
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<3; j++)
        {
            cout << mas[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}
Что обозначают в 7 и 9 строке, объясните и как можно по-другому записать более понятнее

Добавлено через 1 минуту
Цитата Сообщение от anmartex Посмотреть сообщение
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
129
130
131
132
133
134
135
136
137
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <stdexcept>
#include <algorithm>
 
struct TTime
{
    int HH;
    int MM;
    int SS;
};
 
//-----------------------------------------------------------------------------
std::istream& operator >> (std::istream& in, TTime& time)
{
    in >> time.HH >> time.MM >> time.SS;
 
    return in;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& out, const TTime& time)
{
    out << time.HH << " " << time.MM << " " << time.SS;
 
    return out;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& out, const std::vector<TTime>& list)
{
    std::vector<TTime>::const_iterator it = list.begin();
 
    for (; it != list.end(); ++it)
    {
        out << *it << std::endl;
    }
 
    return out;
}
//-----------------------------------------------------------------------------
void ReadRecords(std::ifstream& f, std::vector<TTime>& list) throw(std::runtime_error)
{
    int i = list.size();
 
    TTime time;
 
    while ((f >> time) && (i-- > 0))
    {
        list[i] = time;
    }
 
    if (i > 0)
    {
        throw std::runtime_error("unexpected end of file ...");
    }
}
//-----------------------------------------------------------------------------
std::vector<TTime> GetTimeList(const std::string& fname) throw(std::runtime_error)
{
    std::ifstream f(fname.c_str());
 
    if (f.is_open() == false)
    {
        throw (std::runtime_error(fname + ": file is not open ..."));
    }
 
    int n;
 
    if ((f >> n) == NULL)
    {
        throw (std::runtime_error(fname + ": unknow format ..."));
    }
 
    if ((n < 1) || (100 < n))
    {
        throw (std::runtime_error(fname + ": count record must be [1..100] ..."));
    }
 
    std::vector<TTime> list(n);
 
    try
    {
        ReadRecords(f, list);
    }
    catch (const std::runtime_error& error)
    {
        throw (std::runtime_error(fname + ": " + error.what()));
    }
 
    return list;
}
//-----------------------------------------------------------------------------
bool TimeCompare(const TTime& a, const TTime& b)
{
    int compare = b.HH - a.HH;
 
    if (compare == 0)
    {
        compare = b.MM - a.MM;
    }
 
    if (compare == 0)
    {
        compare = b.SS - a.SS;
    }
 
    return (compare > 0);
}
//-----------------------------------------------------------------------------
 
int main(int argc, char* argv[])
{
    if (argc != 2)
    {
        std::cerr << "Usage: program <FILE>" << std::endl;
        return 1;
    }
 
    std::vector<TTime> list;
 
    try
    {
        list = GetTimeList(argv[1]);
    }
    catch (const std::runtime_error& error)
    {
        std::cerr << error.what() << std::endl;
        return 1;
    }
 
    std::sort(list.begin(), list.end(), TimeCompare);
 
    std::cout << list << std::endl;
 
    return 0;
}


Вложение 313685
Спасибо тебе, но мне такой код не понятен
Yandex
Объявления
05.10.2013, 20:02     Сортировка времени
Ответ Создать тему
Опции темы

Текущее время: 15:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru