0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
1

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

06.08.2016, 13:15. Показов 9724. Ответов 12
Метки нет (Все метки)

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


примеры

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2016, 13:15
Ответы с готовыми решениями:

Перенос даты при слиянии в Ворд не в нашей (ДД.ММ.ГГГГ), а в US(UK) формате (М/ДД/ГГГГ), как поправить?
Уважаемые Форумчане! доброго времени суток!:help: при слиянии из базы Аксесс в Ворд в поле дата...

вывод даты в формате дд.мм.гггг
здравствуйте. Я использую бд SQL 2008 там даты хранятся в формате гггг-мм-дд, как мне в делфи...

Регулярные выражения для даты в формате дд.мм.гггг
В сообщении может содержать дата в формате дд.мм.гггг. где дд - число из диапазона от 1 до 31, мм -...

Написать программу ввод даты в формате ДД.ММ.ГГГГ
которая запрашивает от пользователя ввод даты в формате ДД.ММ.ГГГГ, и не позволяет ему ввести...

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

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

подумал, и правда, ведь new DATE[] вызывает operator new[](size_t cnt), который не существует от 0 параметров
0
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
08.08.2016, 13:25 9
fire_Rising, ну к коменту выше если хотите сделать чтобы размер скажем так, саморасширялся, то я думаю
C++
1
std::vector<Date>
было бы удобнее
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
08.08.2016, 13:28 10
Справка на cplusplus.com
справка на cppreference.com
везде требуется параметр size в operator new[]
у вас этого нет, так что ваш код даже не скомпилируется на "правильном" компиляторе
0
365 / 321 / 219
Регистрация: 21.02.2013
Сообщений: 756
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
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
08.08.2016, 13:52 12
[] допустимы, на сколько я помню, только при объявлении статических массивов с явным присвоением константному массиву
Date d[] = {};// работает
но у d размер будет 0;
проверить можно с помощью sizeof(d);

код на ideone

видно, что получается Runtime Error при попытке записать 270-280 дату
0
0 / 0 / 0
Регистрация: 28.11.2022
Сообщений: 1
28.11.2022, 10:31 13
HighPredator, Организуйте ввод даты в формате – дд.мм.гггг с проверкой на правильность и соответсвие данному формату (2000<гггг<2030).
нужна помош

Добавлено через 46 секунд
jurok_85, Организуйте ввод даты в формате – дд.мм.гггг с проверкой на правильность и соответсвие данному формату (2000<гггг<2030).
помош нужна
0
28.11.2022, 10:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2022, 10:31
Помогаю со студенческими работами здесь

Как сделать преобразование даты, хранящейся в БД в формате ГГГГ-ММ-ДД?
Как сделать преобразование даты, хранящейся в БД в формате ГГГГ-ММ-ДД и правильно ее показать на...

Создать подпапки с именем текущей даты в формате ГГГГ-ММ-ДД
Добрый день. Уважаемые гуру! Прошу помочь решить задачку. Есть конкретная папка на сетевом диске,...

На диске C создать директорию с именем в виде текущей даты в формате ДД-ММ-ГГГГ, а в ней — текстовый файл
Помогите создать командный файл! 1.Создать в текущем каталоге пользователя командный файл с именем...

Нужно получать дату в формате дд.мм.гггг или гггг.мм.д
Считываю системную дату например curDate = Date Получаю значени в формате дд.мм.гг А я хочу...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru