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

Проверить, является ли дата правильной - C++

Восстановить пароль Регистрация
 
werand 73200593
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 6
17.05.2011, 22:59     Проверить, является ли дата правильной #1
Пожалуйста, помогите добить задачку!
Написать функцию, которая проверяет что переменная типа date содержит правильную дату.

Примечание. Год не=0, месяц - типа enum, день=от1 до 31(в большинстве месяцев).

Прога работает, но не совсем верно: например, если ввести 31 февраля (или апреля и т.п.) - выдаст, что дата верна.

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
#include "stdafx.h"
#include<iostream>
#include<clocale>
using namespace std;
 
enum month
{jan=1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec};
 
struct date
{
    unsigned day;
    month m;
    int year;
};
 
bool rightDate(date);
bool leapYear(int);
 
int main()
{
    setlocale(LC_ALL,"russian");
    date d;
    cout<<"Введите год: ";
    cin>>d.year;
    cout<<"Введите месяц: ";
    int month;
    cin>>month;
    cout<<"Введите день ";
    cin>>d.day;
    cout<<rightDate(d);
    return 0;
}
 
bool rightDate(date d) //Возможно, тут что-то неверно или в switch'e
{
    if(d.year==0)
    {
        cout<<"Дата неверна\n";
        return false;
    }
    int maxday;
    switch (d.m)
    {
        case feb: maxday=28+leapYear(d.year);
            break;
        case apr: case jun: case sep: case nov: maxday=30;
            break;
        default: maxday=31;
    }
    return (d.day>0 && d.day<=maxday);
}
 
bool leapYear(int year) //Проверка "високосности" года. Отдельно работает правильно, но к февралю 1 не добавляет
{
    bool v = year%4==0 && year%100!=0 || year%400==0;
    return v;
}
Заранее спасибо, что не поленились разобраться!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2011, 22:59     Проверить, является ли дата правильной
Посмотрите здесь:

Определить, является ли введенная строка правильной записью целого шестнадцатеричного числа без знака C++
C++ Является ли входная последовательность правильной
Строки. Определить, является ли он правильной десятичной записью вещественного числа C++
C++ Если дробь А/В является правильной, вывести true, иначе вывести false.
Задана дата в пределах года (число – от 1 до 31, месяц – от 1 до 12). Проверить корректность введенных данных C++
C++ Проверить, является ли год високосным
Проверить, является ли целое число трёхзначным, является ли оно квадратом C++
Проверить является ли массив знакочередующимся C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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