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

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

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

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

30.03.2011, 18:28. Просмотров 3500. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2011, 18:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка времени. (C++):

Сортировка времени - C++
Time sorting From input your program have to read N (1&lt;=N&lt;=100) - the total number of time interval than have to be sorted. Each line...

Проверка на правильность времени, и показ времени - C++
Подскажите, что нужно возвращать в функцию bool is_correct(TIME t); и как эту функцию коректности времени всунуть в функцию void...

Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется - C++
Программа создает динамический массив с рандомным заполнением. Дальше выбор сортировок, пузырьком или сортировка Шелла. Вот она то и не...

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом? - C++
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким именно образом? #include &lt;iostream&gt; ...

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива - C++
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

Быстрая сортировка (сортировка Хоара) для связных списков - C++
есть у кого готовый алгоритм? или подскажите как реализовать

12
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
30.03.2011, 19:18 #2
а в чем проблема? сосчитать для каждого случая количество секунд, прошедшее с 00-00. отсортировать.
0
Temirlan90
133 / 133 / 8
Регистрация: 30.09.2010
Сообщений: 333
30.03.2011, 20:00  [ТС] #3
А как потом выводить?

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

Добавлено через 2 минуты
no0ker, Я не могу понять как Вы хотите...
0
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;
}
2
Temirlan90
133 / 133 / 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
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
30.03.2011, 20:25 #6
через матрицы... что то сложновато для меня. =(

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

Не по теме:

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

0
Temirlan90
133 / 133 / 8
Регистрация: 30.09.2010
Сообщений: 333
30.03.2011, 20:27  [ТС] #8
no0ker, Я Ваш пример не понял вообще много непонятного с векторами пока трудно)))
ага отуда)
0
Mr.X
Эксперт С++
3051 / 1696 / 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();
}
2
no0ker
31.03.2011, 15:30
  #10

Не по теме:

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

0
KuKu
31.03.2011, 15:55
  #11

Не по теме:

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

0
Temirlan90
133 / 133 / 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
0
Mr.X
Эксперт С++
3051 / 1696 / 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();
}
0
31.03.2011, 20:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2011, 20:34
Привет! Вот еще темы с ответами:

Сортировка Шелла и пирамидальная сортировка для символов - C++
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки для символов, а то ничего не могу ...

Сортировка вектора по полю(Сортировка вставками) - C++
Здравствуйте! Нужно написать сортировку вектора по полю weight класса tomato. Вот класс: #pragma once #include &lt;iostream&gt; ...

C/C++ FAQ :: Быстрая сортировка (сортировка Хоара) - C++
Вопрос, скорее академический, по мотивам реализации. Вот в faq приведена реализация этого метода сортировки на C++. В коде есть следующий...

2 сортировки: пирамидальная сортировка и сортировка слиянием - C++
Реализовать два улучшенных алгоритма сортировки. Для каждого алгоритма вычислить показатель качества сортировки (количество операций, т.е....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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