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

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

Войти
Регистрация
Восстановить пароль
 
Realmucho
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
#1

Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. - C++

06.08.2016, 13:15. Просмотров 309. Ответов 11
Метки нет (Все метки)

Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. Количество дат отдельно не задается.


примеры

1) 10/12/2005
2) 11/03/2050
3) 28/01/1912
4) 11/12/2005
5) 10/11/2005
6) 15/11/2005

ответы

1) 28/01/1912
2) 10/11/2005
3) 15/11/2005
4) 10/12/2005
5) 11/12/2005
6) 11/03/2050
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2016, 13:15     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию.
Посмотрите здесь:

отсортировать массив по возрастанию C++
C++ Отсортировать матрицу по возрастанию
Заданы 3 целых числа, отсортировать в порядке возрастания. C++
C++ Дан строковый файл, содержащий даты в формате
Отсортировать массив по возрастанию C++
C++ Написать программу, которая вводит две даты в формате «дд.мм.гг»
Отсортировать массив по убыванию, затем добавить недостающий элемент и отсортировать массив по возрастанию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 371
Завершенные тесты: 2
06.08.2016, 14:37     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #2
представить каждую дату в виде числа
год*100000 + месяц*100 + день
и отсортировать
HighPredator
5429 / 1812 / 332
Регистрация: 10.12.2010
Сообщений: 5,362
Записей в блоге: 3
06.08.2016, 16:54     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #3
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
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <sstream>
 
std::time_t DateToSeconds(const std::string& date)
{
    std::istringstream stream(date);
    std::tm time = {};
    stream >> std::get_time(&time, "%d/%m/%Y");
    
    if (stream.fail())
        std::cout << "Failed to parse " << date << std::endl;
    
    std::time_t seconds = std::mktime(&time);
    return seconds;
}
 
bool DateCmp(std::string date1, std::string date2)
{
    std::time_t seconds1 = DateToSeconds(date1);
    std::time_t seconds2 = DateToSeconds(date2);
    return (seconds1 < seconds2);
}
 
int main()
{
    std::vector<std::string> dates;
    
    std::string input;
    
    do
    {
        std::cin >> input;
        
        if (input != "stop")
            dates.push_back(input);
    }
    while (input != "stop");
    
    std::sort(dates.begin(), dates.end(), DateCmp);
    
    for (auto it = dates.begin(); it < dates.end(); ++it)
        std::cout << *it << std::endl;
    
    return 0;
}
fire_Rising
10 / 11 / 2
Регистрация: 11.05.2016
Сообщений: 113
06.08.2016, 21:33     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
struct DATE {
    int day, month, year;
};
 
int main() {
    DATE *abba = new DATE[];
    int i, k;
    char ch;
    cout << "Заполните список: " << endl;
    for (i = 0; i < 100000; i++) {
        cout << "Введите дату -> ";
        cout << "День -> ";
        cin >> abba[i].day;
        cout << "Месяц -> ";
        cin >> abba[i].month;
        cout << "Год -> ";
        cin >> abba[i].year;
        cout << endl;
        k++;//это и будет количество элементов для дальнейшей сортировки
        cout << "Еще? Y - ДА, N - НЕТ";
        cin >> ch;
        if (ch == 'N') break;
    }
 
 
return 0;
}
fire_Rising
10 / 11 / 2
Регистрация: 11.05.2016
Сообщений: 113
08.08.2016, 10:09     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #5
Realmucho, сортировку сам доделал или сделать?
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 371
Завершенные тесты: 2
08.08.2016, 12:17     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #6
Цитата Сообщение от fire_Rising Посмотреть сообщение
DATE *abba = new DATE[];
сложно, почему в [] нет 100000 ?
fire_Rising
10 / 11 / 2
Регистрация: 11.05.2016
Сообщений: 113
08.08.2016, 12:46     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #7
C++
1
DATE *abba = new DATE[];
этой строкой я выделяю память и говорю, что это будет массив типа DATE
C++
1
for (i = 0; i < 100000; i++)
здесь, т.к. вы в условии написали, что количество дат отдельно не вводится, я просто поставил большое число, до которого вы можете заполнять список или выйти из заполнения этой командой
C++
1
2
3
cout << "Еще? Y - ДА, N - НЕТ";
cin >> ch;
if (ch == 'N') break;
C++
1
k++;
это я сделал счетчик, чтобы уже при сортировке не затрачивать лишние ресурсы, а точно знать, сколько элементов вы заполнили
и еще я забыл обнулить счетчик, в строке 12 будет так:
C++
1
int i, k = 0;
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 371
Завершенные тесты: 2
08.08.2016, 13:25     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #8
fire_Rising, но ведь этот массив размера 0, и у вас неопределённое поведение в программе
скорее всего, пи попытке ввести больше 2х значений у вас перезапишутся переменные i,k,ch и всё будет плохо

Добавлено через 3 минуты
пробую скомпилировать ваш код, все компиляторы ругаются на то, что в [] ничего нет

подумал, и правда, ведь new DATE[] вызывает operator new[](size_t cnt), который не существует от 0 параметров
obivan
Падаван С++
387 / 207 / 54
Регистрация: 11.11.2014
Сообщений: 731
Завершенные тесты: 2
08.08.2016, 13:25     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #9
fire_Rising, ну к коменту выше если хотите сделать чтобы размер скажем так, саморасширялся, то я думаю
C++
1
std::vector<Date>
было бы удобнее
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 371
Завершенные тесты: 2
08.08.2016, 13:28     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #10
Справка на cplusplus.com
справка на cppreference.com
везде требуется параметр size в operator new[]
у вас этого нет, так что ваш код даже не скомпилируется на "правильном" компиляторе
jurok_85
238 / 221 / 76
Регистрация: 21.02.2013
Сообщений: 515
Завершенные тесты: 1
08.08.2016, 13:49     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #11
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
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
struct Date{
 
int day, month, year;
char  date[10];
bool isset;
Date(){}
Date(char* input){
 
    if(strlen(input)!= 10)
    isset = false;
    else
    {
        strcpy(date, input);
        char * pch;
        pch = strtok (date,"/");
        day = atoi(pch);
        pch = strtok (NULL,"/");
        month = atoi(pch);
        pch = strtok (NULL,"/");
        year = atoi(pch);
    }
 
}
   void show(){
        cout << day << "/" << month << "/" << year << endl;
   }
};
bool compare(const Date & d1,  const Date& d2){
       if(d1.year != d2.year) return d1.year < d2.year;
        if(d1.month != d2.month) return d1.month < d2.month;
        if(d1.day != d2.day) return d1.day < d2.day;
}
int main()
{
    char* dates[6] =  {"10/12/2005",
        "11/03/2050",
        "28/01/1912",
        "11/12/2005",
        "10/11/2005",
        "15/11/2005"};
        vector<Date> vec;
        Date d;
    for(int i = 0; i != 6; i++){
        d = Date(dates[i]);
        vec.push_back(d);
 
    }
    sort(vec.begin(), vec.end(), compare);
    for(int i = 0; i != 6; i++)vec[i].show();
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2016, 13:52     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию.
Еще ссылки по теме:

Вычесть 3 часа из даты, заданной в формате string C++
Заданы два натуральных числа. Вычислить порядковый номер даты, начиная отсчет с начала года C++
Создать класс Date, который может выводить даты в формате DD YYYY и MM/DD/YY C++
Отсортировать по возрастанию 3 переменные C++
Вывести в формате даты K тый четверг в N-ом году C++

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

Или воспользуйтесь поиском по форуму:
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 371
Завершенные тесты: 2
08.08.2016, 13:52     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию. #12
[] допустимы, на сколько я помню, только при объявлении статических массивов с явным присвоением константному массиву
Date d[] = {};// работает
но у d размер будет 0;
проверить можно с помощью sizeof(d);

код на ideone

видно, что получается Runtime Error при попытке записать 270-280 дату
Yandex
Объявления
08.08.2016, 13:52     Заданы даты в формате дд/мм/гггг. Отсортировать их по возрастанию.
Ответ Создать тему
Опции темы

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