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

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

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

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

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

Отсортировать массив по убыванию, затем добавить недостающий элемент и отсортировать массив по возрастанию - C++
2) В массиве a ...a встречаются по одному разу все целые числа от 0 до n, кроме одного. За n действий найти пропущенное число с конечной...

Заданы 3 целых числа, отсортировать в порядке возрастания. - C++
Задание: Задано три целых числа. Необходимо вывести их в порядке возрастания. Числа не превышают 109 по модулю. Входные данные: Три...

Вывести в формате даты K тый четверг в N-ом году - C++
Определите в N ом годе K тое четверг. Входные данные: Два целых числа, N и K (1 ≤ N ≤ 9999), (1≤K≤ 50) Выходные данные: ...

Вычесть 3 часа из даты, заданной в формате string - C++
Есть, напримерstring mydate = "01.01.13"; string mytime = "02:14:26";Как вычесть из этой даты 3 часа, с учетом переноса дня\месяца\года,...

Дан строковый файл, содержащий даты в формате - C++
Дан строковый файл, содержащий даты в формате, описанном в зада- нии File67. Создать новый строковый файл, в котором даты из исходного ...

Написать программу, которая вводит две даты в формате «дд.мм.гг» - C++
Написать программу, которая вводит две даты в формате «дд.мм.гг» и выводит старшую дату.

11
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 373
Завершенные тесты: 2
06.08.2016, 14:37 #2
представить каждую дату в виде числа
год*100000 + месяц*100 + день
и отсортировать
1
HighPredator
5541 / 1854 / 346
Регистрация: 10.12.2010
Сообщений: 5,468
Записей в блоге: 2
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;
}
1
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;
}
1
fire_Rising
10 / 11 / 2
Регистрация: 11.05.2016
Сообщений: 113
08.08.2016, 10:09 #5
Realmucho, сортировку сам доделал или сделать?
0
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 373
Завершенные тесты: 2
08.08.2016, 12:17 #6
Цитата Сообщение от fire_Rising Посмотреть сообщение
DATE *abba = new DATE[];
сложно, почему в [] нет 100000 ?
0
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;
0
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 373
Завершенные тесты: 2
08.08.2016, 13:25 #8
fire_Rising, но ведь этот массив размера 0, и у вас неопределённое поведение в программе
скорее всего, пи попытке ввести больше 2х значений у вас перезапишутся переменные i,k,ch и всё будет плохо

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

подумал, и правда, ведь new DATE[] вызывает operator new[](size_t cnt), который не существует от 0 параметров
0
obivan
Падаван С++
403 / 223 / 58
Регистрация: 11.11.2014
Сообщений: 775
Завершенные тесты: 2
08.08.2016, 13:25 #9
fire_Rising, ну к коменту выше если хотите сделать чтобы размер скажем так, саморасширялся, то я думаю
C++
1
std::vector<Date>
было бы удобнее
0
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 373
Завершенные тесты: 2
08.08.2016, 13:28 #10
Справка на cplusplus.com
справка на cppreference.com
везде требуется параметр size в operator new[]
у вас этого нет, так что ваш код даже не скомпилируется на "правильном" компиляторе
0
jurok_85
241 / 224 / 77
Регистрация: 21.02.2013
Сообщений: 519
Завершенные тесты: 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;
}
0
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 373
Завершенные тесты: 2
08.08.2016, 13:52 #12
[] допустимы, на сколько я помню, только при объявлении статических массивов с явным присвоением константному массиву
Date d[] = {};// работает
но у d размер будет 0;
проверить можно с помощью sizeof(d);

код на ideone

видно, что получается Runtime Error при попытке записать 270-280 дату
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2016, 13:52
Привет! Вот еще темы с ответами:

Заданы два натуральных числа. Вычислить порядковый номер даты, начиная отсчет с начала года - C++
Заданы два натуральных числа a,b которые обозначают число и месяц не високосного года. Вычислить порядковый номер даты, начиная отсчет с...

Создать класс Date, который может выводить даты в формате DD YYYY и MM/DD/YY - C++
помогите создать класс Date, который может выводить даты в формате DD YYYY и MM/DD/YY. Создайте конструктор Date, который читает...

Отсортировать массив по возрастанию - C++
Помогите пожалуйста написать программку! Заполнение динамического целочисленного массива длинной N(рандомно). Отсортировать массив по...

отсортировать массив по возрастанию - C++
#include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #define N 10 БУДУ ПРЕМНОГО БЛАГОДАРЕН ЕСЛИ ПОМОЖЕТЕ решить 3...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
08.08.2016, 13:52
Ответ Создать тему
Опции темы

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