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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.80
Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
#1

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

30.03.2011, 18:28. Просмотров 3282. Ответов 12
Метки нет (Все метки)

Требуется выполнить сортировку временных моментов, заданных в часах, минутах и секундах.
Входные данные

Во входном файле INPUT.TXT в первой строке записано число N (1<=N<=100), а в последующих N строках N моментов времени. Каждый момент времени задается 3 целыми числами - часы (от 0 до 23), минуты (от 0 до 59) и секунды (от 0 до 59).
Выходные данные

В выходной файл OUTPUT.TXT выведите моменты времени, упорядоченные в порядке неубывания без ведущих нулей.
Пример:
INPUT.TXT
4
10 20 30
7 30 00
23 59 59
13 30 30
OUTPUT.TXT
7 30 0
10 20 30
13 30 30
23 59 59
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2011, 18:28     Сортировка времени.
Посмотрите здесь:

C++ Сортировка подсчетом и LSD сортировка
C/C++ FAQ :: Быстрая сортировка (сортировка Хоара) C++
шейкерная сортировка + сортировка слиянием C++
2 сортировки: пирамидальная сортировка и сортировка слиянием C++
C++ Сортировка времени
Быстрая сортировка (сортировка Хоара) для связных списков C++
C++ Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
30.03.2011, 19:18     Сортировка времени. #2
а в чем проблема? сосчитать для каждого случая количество секунд, прошедшее с 00-00. отсортировать.
Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
30.03.2011, 20:00  [ТС]     Сортировка времени. #3
А как потом выводить?

Добавлено через 35 минут
Я думаю через матрицу, а потом сортировать столбцы...но Я не могу сделать что бы строки были динамичные(через указатель), а колонки константа в данном случае 3, но не получается ошибки пишет.

Добавлено через 2 минуты
no0ker, Я не могу понять как Вы хотите...
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
30.03.2011, 20:19     Сортировка времени. #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
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
class t{
    public:
        t (int hh, int mm, int ss){ // конструктор
            h = hh;
            m = mm;
            s = ss;
        }
        void show(){
            cout<<h<<":"<<m<<":"<<s<<endl; // вывод времени
        }
        int abs(){
            return 60*60*h + 60*m + s; // кол во секунд с 00-00
        }
    private:
        int h, m, s;
};
 
bool compare(t a, t b){ // функция сравнения двух t
    return b.abs() > a.abs();
}
 
 
int main(){
    t a(10,20,30);
    t b(7,30,00);
    t c(23,59,59);
 
    vector<t> in;
    vector<t>::iterator in_i;
 
    in.push_back(a);
    in.push_back(b);
    in.push_back(c);
 
    // до сортировки
    for (in_i=in.begin(); in_i!=in.end(); ++in_i){
        (*in_i).show();
    }
    
    // сортировка
    sort( in.begin(), in.end(), compare);
 
    // после сортировки
    for (in_i=in.begin(); in_i!=in.end(); ++in_i){
        (*in_i).show();
    }
 
    return 0;
}
Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
30.03.2011, 20:21  [ТС]     Сортировка времени. #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
const int column = 3;
 
int main() {
    int *arr;
    int row;
    std::cin >> row;
    arr = new int[row];
    for(int i = 0; i < row; i++) {
        for(int j = 0; j < column; j++) {
            std::cin >> arr[i][j];
            std::cout << arr[i][j];
        }
    }
    return 0;
}
почему так нельзя?

Добавлено через 1 минуту
error C2109: subscript requires array or pointer type
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
30.03.2011, 20:25     Сортировка времени. #6
через матрицы... что то сложновато для меня. =(

Добавлено через 37 секунд
если только делать три колонки - час мин сек - а четвертую колонку - секунды с начала суток. но как их потом сортировать...
iama
30.03.2011, 20:26
  #7

Не по теме:

а задачка-то с acmp

Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
30.03.2011, 20:27  [ТС]     Сортировка времени. #8
no0ker, Я Ваш пример не понял вообще много непонятного с векторами пока трудно)))
ага отуда)
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
30.03.2011, 22:20     Сортировка времени. #9
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
/////////////////////////////////////////////////////////////////////////////////////////
//Требуется выполнить сортировку временных моментов, заданных в часах, минутах и секундах.
//Входные данные
//
//Во входном файле INPUT.TXT в первой строке записано число N (1<=N<=100), а в последующих 
//N строках N моментов времени. Каждый момент времени задается 3 целыми числами - 
//часы (от 0 до 23), минуты (от 0 до 59) и секунды (от 0 до 59).
//Выходные данные
//
//В выходной файл OUTPUT.TXT выведите моменты времени, упорядоченные в порядке неубывания 
//без ведущих нулей.
//Пример:
//INPUT.TXT
//4
//10 20 30
//7 30 00
//23 59 59
//13 30 30
//OUTPUT.TXT
//7 30 0
//10 20 30
//13 30 30
//23 59 59 
/////////////////////////////////////////////////////////////////////////////////////////
#include <fstream>
#include <iostream>
#include <set>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_time
{
    int  h_;
    int  m_;
    int  s_;
    //-----------------------------------------------------------------------------------
    T_time
        (
            int h = 0, 
            int m = 0, 
            int s = 0
        )
        : h_(h),
          m_(m),
          s_(s)
    {}
    //-----------------------------------------------------------------------------------
    operator int() const
    {
        const int  S_PER_MIN = 60;
        return  (s_ * S_PER_MIN + m_) * S_PER_MIN + h_;
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string            T_str;
typedef std::multiset<T_time>  T_times;
/////////////////////////////////////////////////////////////////////////////////////////
std::istream&  operator>> (std::istream&  is, T_time&  t)
{
    is >> t.h_;
    is >> t.m_;
    is >> t.s_;    
    return  is;
}
/////////////////////////////////////////////////////////////////////////////////////////
std::ostream& operator<<(std::ostream& os, const T_time&  t)
{
    os << t.h_
       << ' '
       << t.m_
       << ' '
       << t.s_;       
    return  os;
}
/////////////////////////////////////////////////////////////////////////////////////////
std::istream&  operator>> (std::istream&  is, T_times&  times)
{
    size_t  times_total = 0;
    is >> times_total;
    is.ignore();
        
    for(size_t  i = 0; i < times_total; ++i)
    {
        T_time   time;    
        is >> time;
        is.ignore();
        times.insert(time);
    }
    return  is;
}
/////////////////////////////////////////////////////////////////////////////////////////
std::ostream& operator<<(std::ostream& os, const T_times&  times)
{
    os << times.size()
       << std::endl;
 
    for(T_times::const_iterator  time_it = times.begin();
        time_it != times.end(); ++time_it)
    {
        os << *time_it
           << std::endl;
    }
    return  os;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    const T_str  INPUT_FILE_NAME   = "INPUT.TXT";
    const T_str  OUTPUT_FILE_NAME  = "OUTPUT.TXT";
 
    std::ofstream  o_ifile(INPUT_FILE_NAME.c_str());
    o_ifile << "4"
            << std::endl
            << "10 20 30"
            << std::endl
            << "7 30 00"
            << std::endl
            << "23 59 59"
            << std::endl
            << "13 30 30"
            << std::endl;
 
    std::ifstream  i_ifile(INPUT_FILE_NAME.c_str());
    T_times  times;
    i_ifile >> times;
    
    std::ofstream  o_ofile(OUTPUT_FILE_NAME.c_str());
    o_ofile << times;
    
    std::ifstream  i_ofile(OUTPUT_FILE_NAME.c_str());
    std::cout << "Содержимое файла "
              << OUTPUT_FILE_NAME
              << ":"
              << std::endl
              << i_ofile.rdbuf();
}
no0ker
31.03.2011, 15:30
  #10

Не по теме:

интересно, смогу ли я когда нибудь читать и понимать код Mr.X =(

KuKu
31.03.2011, 15:55
  #11

Не по теме:

имхо, у него просто довольно специфическое понимание красоты кода, читабельности и его компактности)

Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
31.03.2011, 19:01  [ТС]     Сортировка времени. #12
Mr.X, не совсем корректно Ваше решение...
INPUT.TXT
4
11 0 0
9 01 00
23 59 59
13 30 30
OUTPUT.TXT
4
11 0 0
9 1 0
13 30 30
23 59 59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2011, 20:34     Сортировка времени.
Еще ссылки по теме:

C++ Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется
Быстрая сортировка (сортировка методом Хоара) C++
C++ Сортировка Хоара / Быстрая сортировка
C++ Проверка на правильность времени, и показ времени
C++ Сортировка Шелла и пирамидальная сортировка для символов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
31.03.2011, 20:34     Сортировка времени. #13
Пардон, в предыдущее решение вкралась опечатка.
Вот так правильно:
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
/////////////////////////////////////////////////////////////////////////////////////////
//Требуется выполнить сортировку временных моментов, заданных в часах, минутах и секундах.
//Входные данные
//
//Во входном файле INPUT.TXT в первой строке записано число N (1<=N<=100), а в последующих 
//N строках N моментов времени. Каждый момент времени задается 3 целыми числами - 
//часы (от 0 до 23), минуты (от 0 до 59) и секунды (от 0 до 59).
//Выходные данные
//
//В выходной файл OUTPUT.TXT выведите моменты времени, упорядоченные в порядке неубывания 
//без ведущих нулей.
//Пример:
//INPUT.TXT
//4
//10 20 30
//7 30 00
//23 59 59
//13 30 30
//OUTPUT.TXT
//7 30 0
//10 20 30
//13 30 30
//23 59 59 
/////////////////////////////////////////////////////////////////////////////////////////
#include <fstream>
#include <iostream>
#include <set>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_time
{
    int  h_;
    int  m_;
    int  s_;
    //-----------------------------------------------------------------------------------
    T_time
        (
            int h = 0, 
            int m = 0, 
            int s = 0
        )
        : h_(h),
          m_(m),
          s_(s)
    {}
    //-----------------------------------------------------------------------------------
    operator int() const
    {
        const int  S_PER_MIN = 60;
        return  (h_ * S_PER_MIN + m_) * S_PER_MIN + s_;        
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string            T_str;
typedef std::multiset<T_time>  T_times;
/////////////////////////////////////////////////////////////////////////////////////////
std::istream&  operator>> (std::istream&  is, T_time&  t)
{
    is >> t.h_;
    is >> t.m_;
    is >> t.s_;    
    return  is;
}
/////////////////////////////////////////////////////////////////////////////////////////
std::ostream& operator<<(std::ostream& os, const T_time&  t)
{
    os << t.h_
       << ' '
       << t.m_
       << ' '
       << t.s_;       
    return  os;
}
/////////////////////////////////////////////////////////////////////////////////////////
std::istream&  operator>> (std::istream&  is, T_times&  times)
{
    size_t  times_total = 0;
    is >> times_total;
    is.ignore();
        
    for(size_t  i = 0; i < times_total; ++i)
    {
        T_time   time;    
        is >> time;
        is.ignore();
        times.insert(time);
    }
    return  is;
}
/////////////////////////////////////////////////////////////////////////////////////////
std::ostream& operator<<(std::ostream& os, const T_times&  times)
{
    os << times.size()
       << std::endl;    
    
    for(T_times::const_iterator  time_it = times.begin();
        time_it != times.end(); ++time_it)
    {       
        os << *time_it
           << std::endl;
    }
    return  os;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    const T_str  INPUT_FILE_NAME   = "INPUT.TXT";
    const T_str  OUTPUT_FILE_NAME  = "OUTPUT.TXT";
 
    std::ofstream  o_ifile(INPUT_FILE_NAME.c_str());
    
    o_ifile << "4"
            << std::endl
            << "11 0 0"
            << std::endl
            << "9 01 00"
            << std::endl
            << "23 59 59"
            << std::endl
            << "13 30 30"
            << std::endl;   
 
    std::ifstream  i_ifile(INPUT_FILE_NAME.c_str());
    T_times  times;
    i_ifile >> times;
    
    std::ofstream  o_ofile(OUTPUT_FILE_NAME.c_str());
    o_ofile << times;
    
    std::ifstream  i_ofile(OUTPUT_FILE_NAME.c_str());
    std::cout << "Содержимое файла "
              << OUTPUT_FILE_NAME
              << ":"
              << std::endl
              << i_ofile.rdbuf();
}
Yandex
Объявления
31.03.2011, 20:34     Сортировка времени.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru