С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/56: Рейтинг темы: голосов - 56, средняя оценка - 4.66
-27 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 33

Дан файл , содержащий различные даты. Каждая дата – это число, месяц и год

25.05.2013, 11:27. Показов 10980. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,я тот несчастный студент,который учился в школе где не было программирования.Поэтому нуждаюсь в вашей помощи.Теорию удалось выучить,а вот с задачами проблема...
Дан файл , содержащий различные даты. Каждая дата – это число, месяц и год. Найти:
а) год с наименьшим номером;
б) все весенние даты;
в) самую позднюю дату.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.05.2013, 11:27
Ответы с готовыми решениями:

Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год. Найти все весенние даты
Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год. Найти все весенние даты.

Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год. Найти дату с наименьшим годом
Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год. Найти дату с наименьшим годом.(с комментариями)

Дан файл f, содержащий различные даты Каждая дата - это число, месяц и год
Здравствуйте, нужна помощь с языком PascalABC: Дан файл f, содержащий различные даты. Каждая дата - это число, месяц и год. Найти: ...

9
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
25.05.2013, 11:48
x_X-x3, Попытайся просто считать из этого файла все даты и запиши их в массив. Затем выбери из массива год с наименьшим номером, выведи. Потом выбери все весенние даты, выведи те даты у которых месяцы начинаются с 3 и по 5. Потом выведи уже самую позднюю дату, у которой год будет самый больший, месяц самый больший и число самое большое.
0
-27 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 33
25.05.2013, 12:56  [ТС]
ninja2,
Думал-думал как...в итоге ничего.В этом и проблема.То что я теорию знаю,а программы писать не умею...
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
25.05.2013, 13:01
x_X-x3, Да ладно, раз писать не умеешь значит и теорию так знаешь. Если б знал теорию, то программы писались бы на ура.

Добавлено через 13 секунд
Учи еще теорию.
0
-27 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 33
25.05.2013, 13:37  [ТС]
ninja2, Не отрицаю,про теорию на 5 я и не говорю.Выучил как смог.Но видимо этого не достаточно.А лабы сдавать скоро,вот этом и загвоздка.
0
С++ Beginner
 Аватар для MarVaL
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
25.05.2013, 14:20
Исходник:
Кликните здесь для просмотра всего текста
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 <fstream>
 
struct Date {
    int d, m, y;
} dates[100];
 
int readFile();
 
int main() {
    setlocale(0, "Rus");
    int count = readFile();
    for(int i = 0; i < count; ++i)
        std::cout << i+1 << ". " << dates[i].d << ' ' << dates[i].m << ' ' << dates[i].y << std::endl;
    
    int min = dates[0].y;
    for(int i = 0; i < count; ++i) {
        if(min > dates[i].y)
            min = dates[i].y;
    }
    std::cout << "Наименьший год: " << min << std::endl;
    
    int max = dates[0].y;
    for(int i = 0; i < count; ++i) {
        if(max < dates[i].y)
            max = dates[i].y;
    }
    std::cout << "Наибольший год: " << max << std::endl;
    std::cout << "Весенние даты: " << std::endl;
    for(int i = 0; i < count; ++i)
        if(dates[i].m >= 3 && dates[i].m <= 5)
            std::cout << dates[i].d << ' ' << dates[i].m << ' ' << dates[i].y << std::endl;
    
    return 0;
}
 
int readFile() {
    const char *path = {"file.txt"};
    std::ifstream in(path);
    int counter = 0;
    
    while(!in.eof()) {
        in >> dates[counter].d;
        in >> dates[counter].m;
        in >> dates[counter].y;
        counter++;
    }
    return counter;
}


Файл:
Кликните здесь для просмотра всего текста
25 5 2005
11 3 1994
17 10 1997
11 1 2005
3 4 2006
8 5 2001
1
-27 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 33
25.05.2013, 15:52  [ТС]
MarVaL, Спасибо огромное)
0
2 / 2 / 0
Регистрация: 04.02.2019
Сообщений: 56
21.02.2019, 15:17
MarVaL, можете объяснить код?
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
21.02.2019, 15:50
MarVaL, Обычно даты пишутся через знак разделитель, боюсь что ваша программа не будет работать с файлом преподавателя, я бы посоветовал использовать регулярные выражения
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
22.02.2019, 00:36
x_X-x3, Сделал код посложнее, но старался в него впихнуть побольше примеров для вас, для сдачи наверно будет сложновато, а вот ковыряться с ним на досуге и учиться - пойдет
В примере использовал: макросы, регулярные выражения, функции, итераторы, передача массивов в функцию, конвертация из строки в число, ну и соответственно чтение из файла. Классы только не добавлял, пока думаю и этого хватит
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
#include <iostream>     // для вывода в консоль
#include <fstream>      // для работы с файлами
#include <string>       // для работы со строкой (тип string)
#include <regex>        // регулярные выражения
using namespace std;    // объявляем пространство имен std для "функций" cout, string, regex чтобы везде не писать перед "функцией" std::
#define PrintDate(name) name[0] << '/' << name[1] << '/' << name[2] << endl     // макрос для вывода, просто облегчает жизнь и для примера
 
void lastDate(int *date, int *last) {   //функция определения самой поздней даты
    if (date[2] < last[2]) return;      // если год меньше сохраненного то выходим и т.д. с месяцем и числом
    if (date[2] == last[2] && date[1] < last[1]) return;
    if (date[1] == last[1] && date[0] < last[0]) return;
    //если все проверки прошли, то копируем блок памяти из массива date в массив last,
    memcpy(last, date, sizeof(int) * 3); //sizeof определяет размер типа int и умножаем на три, т.к. три элемента в массиве
}
 
int main() {
    setlocale(0, "");   // устанавливаем поддержку русского языка для вывода
    ifstream file("in.txt");    // открываем файл in.txt на чтение
    string line;    // объявление переменной куда будем читать построчно из файла
    int minYear = INT_MAX;  // минимальный год, устанавливаем в максимально возможное значение для этого типа
    int date[3], last[3] = { 0 };   // объявляем два массива у каждого по три элемента для хранения даты, можно использовать структуры
    regex rx("(\\d){1,2}");     // регулярное выражение для поиска чисел в строках
    
    if (file.is_open()) {   // проверяем открыт ли файл
        while (!file.eof()) {   // выполняем цикл до тех пор, пока не достигнем конца файла
            getline(file, line);    // читаем строку
            sregex_iterator begin(line.begin(), line.end(), rx);    //объявляем стартовый итератор и ищем с помощью нашего регулярного выражения числа в строке
            sregex_iterator end;    //объявляем конечный итератор
            for (int i = 0; i < 3; i++) //цикл перебора числа, месяца и года
                // это сокращенный формат if, если не достигли конца то получаем число из итератора и конвертируем его из строки в число, т.к. читали в строку, так же инкрементируем итератор
                date[i] = (begin != end) ? atoi((*begin++).str().c_str()) : 0;
            // тут проверяем месяц весенний ли он, если да то выводим всю дату
            if (date[1] > 2 && date[1] < 6) cout << "Весенняя дата: " << date[0] << '/' << date[1] << '/' << date[2] << endl;
            if (date[2] < minYear) minYear = date[2];   // сверяем год если он меньше, то сохраняем его
            lastDate(date, last);   // вызываем нашу функцию, которая запишет дату если она позднее
        }
        file.close();   // закрываем файл
        cout << "Минимальный год: " << PrintDate(date);   // выводим с помощью макроса даты
        cout << "Самая поздняя дата: " << PrintDate(last);
    }
    return 0;
}
Даты в файле, специально для примера в разных форматах:
12/5/18
17-11-18
9/02/17
20-02-19
5-5-19
23/04/18
08/03/15
Добавлено через 7 минут
только сейчас заметил, что с минимальным годом не дописал, вот как раз будет для вас задание дописать самому
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2019, 00:36
Помогаю со студенческими работами здесь

Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год. Найти год с наименьшим номером.
Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год. Найти год с наименьшим номером.

Дан файл, содержащий различные даты. Каждая дата — это число, месяц и год. Найти год с наименьшим номером
Уважаемые, программисты, очень прошу помощи по данным заданиям. Нужно сделать кто какие сможет. Буду очень благодарен. Предпочитаемый язык...

Дан файл DateFile, содержащий различные даты. Каждая дата-это число,месяц и год
Найти : а) дату с наименьшим номером года; б) все весенние даты; в) самую позднюю дату; Программа почти написана.Не получается...

Дан файл, содержащий различные даты. Каждая дата - это число, месяц и год. Найти
Дан файл, содержащий различные даты. Каждая дата - это число, месяц и год. Найти: а) Год с наименьшим номером. б) Все весенние даты. ...

Дан файл, содержащий различные даты. Каждая дата — это число, месяц и год. Найти все весенние даты
,,,


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru