Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2012, 12:33   #1
kristaa
 
Регистрация: 19.10.2012
Сообщений: 3
Печаль Работа с календарем

Дана дата в виде PPXXAAAA, нужно определить день недели отвечающий дате.
Отрезок времени ограниченный : 1.01.1900 .. 1.01.3000.
Доп. инфо 1.01.1900 понедельник
Ну и конечно учитывать високосный год или нет.
Не могу понять, как отметить ограниченный отрезок и сделать так, чтобы программа выдавала ошибку в случае неправильной даты (55 июня например).
Буду очень благодарна!
Вот то, что у меня уже есть
Код C

#include <iostream>
#include <string>

using namespace std;


int Date ( int PP, int XX, int AAAA )
{

int a, y, m, R;
a = ( 14 - XX ) / 12;
y = AAAA - a;
m = XX + 12 * a - 2;
R = 7000 + ( PP + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12 );
return R % 7;
}
int main()
{
int PP, XX, AAAA;
char C;
string S[7] = { "SUN", "MON", "TUS", "WED", "THU", "FRI", "SAT" };
cin >> PP >> C >> XX >> C >> AAAA;
cout << S[ Date( PP, XX, AAAA ) ] << endl;

system("pause");
return 0;
}
kristaa вне форума Ответить с цитированием
Старый 19.10.2012, 12:57   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Отрезок времени:

Код:
if ((PP>=1)&&(XX>=1)&&(AAAA>=1900))&&((PP<=1)&&(XX<=1)&&(AAAA<=3000))
а для проверки дат предлагаю ввести массив с количеством дней:

Код:
int days[12]={31,29,31,30,31,30,31,31,30,31,30,31}

//и проверки

if (PP<=31)           //дней не более 31
if days[XX]>=PP    //Отбрасываем месяцы, в которых количество дней меньше введенного числа
if ((AAAA%4==0)&&(AAAA%100!=0))||(AAAA%400==0) //определение високосного года для pp=29 и XX=2 (29 февраля)
Как-то так...
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 19.10.2012 в 13:26.
Sciv вне форума Ответить с цитированием
Старый 19.10.2012, 13:09   #3
kristaa
 
Регистрация: 19.10.2012
Сообщений: 3
По умолчанию

А как правильно их ввести в код?
Я извиняюсь, новичок, пока тяжеловато(((
kristaa вне форума Ответить с цитированием
Старый 19.10.2012, 13:26   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Там, где вводите. И вводить для простоты проверки начинать с месяца:

Код:

do {                    //проверка корректности месяца  (1..12)
  cin >> XX;
}while (XX>12)&&(XX<1);

do {                    //проверка корректности числа (1..Макс. число дней в месяце)
  cin >> PP;
} while (PP>days[XX])&&(PP<1);

if (PP==29)&&(XX==2){          //это для проверки високосного года в диапазоне (1900..3000)
  do{
    cin >> AAAA;
  } while !(((AAAA>1900)||(AAAA<3000))&&(((AAAA%4==0)||(AAAA%100!=0))&&(AAAA%400==0)));
}
else {                                  //а это - для невисокосного в том же диапазоне
  do{
    cin >> AAAA;
  } while !((AAAA>1900)||(AAAA<3000));
}
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 19.10.2012 в 13:29.
Sciv вне форума Ответить с цитированием
Старый 19.10.2012, 14:00   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Вообще-то определить день недели очень даже просто:

день недели = остаток ( количество дней от начала отсчёта / 7)

если использовать стандартный тип даты (соответствует типу Double), то

Код:
WeekDay :=  Int(Date) mod 7;
з.ы. переделать с Паскаля в C по-моему несложно...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TDBEdit связывание его с таблицей и календарем Elka89 Помощь студентам 13 31.03.2013 22:28
Работа с календарем С# Lapochka C# (си шарп) 13 13.05.2012 20:24
ВПР с календарем не дружит. staniiislav Microsoft Office Excel 18 30.12.2010 09:13
БД связать с календарем igor1306 Помощь студентам 9 06.02.2010 15:51
Выбор дат одним календарем на форме ruavia3 Microsoft Office Excel 6 20.06.2009 16:22