Подвернулась интересная задача. Написать программу, которая по заданной любой дате выводит день недели. Первый вариант алгоритма:
1. Посчитать сколько дней прошло до заданной даты с момента начала отсчета.
2. Взять остаток от деления на 7 (количество дней в неделе).
3. Полученный результат и соответствует дню недели. 0 – воскресение, 1 – понедельник, 2 – вторник и т.д.
По сути, всего-то 2 шага. Третий уже обработка результатов. Предлагаю реализовать.
Итак, первый шаг – посчитать сколько прошло дней до заданной даты. Что для этого нужно? Что бы было проще возьмем какой-нибудь пример. Пусть это будет 31.12.2011. Сразу можем сказать, что до 2011 года прошло 2010 полных лет. Знаем так же, что в году 365 дней. Значит умножим 2010 на 365. Но сразу же возникает проблема, Каждый високосный год содержит не 365, а 366 дней.
Что же делать? Конечно, проще всего 2010 разделить на 4 (мы же знаем, что каждый четвертый год високосный), взять целое от деления, и это число прибавить к результату умножения 2010*365. Получим 2 010 / 4 = 502, 5; 2 010 * 365 = 733 650; 733 650+502 = 734 152;
LITTLE BIG – GENERATION CANCELLATION (Official Music Video)
Значит до начала 2011 года прошло 734 152 дня. Теперь нужно прибавить к этому числу сколько дней пошло в 2011 году до 31 декабря. Мы, конечно же, сразу понимаем, что рас это последний день в году и год не високосный, то он 365й. Но нам же нужен алгоритм в общем виде, поэтому забудем о том что мы это знаем и будем считать.
Количество дней в месяцах не постоянно , значит, просто 30*12 не поучится. Единственный выход – завести массив, где индексу массива соответствует номер месяца, а соответствующий элемент равен количеству дней в этом месяце. Значения массива приведены в таблице. Нас интересует из нее только второй и третий столбец. Нумерация начинается с 0, что соответствует языкам программирования С и др.
Тогда алгоритм выглядит следующим образом. Складываем количество дней в месяце до заданного месяца, не включая его. Значит в нашем случае: 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 = 334.
Осталось только прибавить к этой сумме номер введенного дня и это все прибавить к количеству дней до нового года. В нашем случае: 734 152 + 334 + 31 = 734 517. Это число должно соответствовать количеству дней с начал отсчета до 31 декабря 2011 года. Не думаю, что мы сможем это как то проверить. Если только найти все календари за 2011 лет и посчитать.
Думаю, у нас не получится.
Возьмемся за следующий шаг. Разделим это число на 7 и возьмем остаток. В нашем случае остаток 0. Значит, новый год в 2011 году выпадает на воскресение. Вот и всё! Задача решена.
Но давайте проверим. Не составит труда открыть календарь 2011 и посмотреть.
Выходит, мы ошиблись. Просмотрев еще раз ход решения, понимаем, что ошибиться мы могли только в вычислении количества дней прошедших до этой даты. Более того, Скорее всего ошибка в подсчете дней до 2011 года, потому что в 2011 мы очевидно посчитали все верно. И это тоже можно проверить. Тогда возьмемся за пересчет дней до 2011 года. Обратимся в Сети.
Как Заработать Деньги
Оказывается, что все не так просто. Современный григорианский календарь накладывает больше требований к високосным годам, чем мы думали. А именно: високосным считаются годы, номера которых кратны 400 и номера которых кратны 4 и не кратны 100. А так же в момент принятия этого календаря текущая дата сдвигалась на 10 дней вперед. В России этот сдвиг произошел в 1918 году.
После 31 января следовало 14 февраля. Другие страны переходили на Григорианский календарь в другое время. Например Испания Италия Португалия и Речь Посполитая в 1582году, а Египет в 1928 году. Это значит, что в ряде стран, в том числе, например, в России 1900 году был день 29 февраля, а в ряди других стран не было. В Интернете полно информации по этой теме. Кому интересно – читайте.
Я не специалист по календарям, поэтому будем полагаться на википедию и другие первые результаты запросов в гугле.
Итак, у нас есть новое правило определения високосного года. Високосный год если его номер кратен 400 или если номер кратен 4 и не кратен 100. И это действует только… будем считать, с 1918 года.
Приведу сразу код. Эта проверка не самая быстрая, но точно работает.
Здесь реализован совсем другой подход. Теперь мы не прибавляем количество високосных лет до заданной даты, а считаем сумму в дней в цикле. Если год високосный, то прибавляем 366, иначе – 365. Теперь sum равно количество дней до года year .
Прибавляем количество дней прошедших с начала года и номер введенного дня. Для этого сначала проверим является ли введенный год високосным, а так введенный месяц больше 2. Ведь даже если год високосный, но месяц январь, то прибавлять 1 не надо, а если месяц больше января, то надо. В приведенном листинге i означает введенный месяц.
Источник: leshka-d.blogspot.com
Программирование на C, C++, C#
//a) int max=0; do < const int q=6; int A[q][q]; srand(time(NULL)); for(int i=0;i
setlocale(LC_ALL, «Russian»); int a, b; cout << «Введите первое число:»; cin >> a; cout << «.
void init(int *a, int size); void out(int *a, int size); void out_c(int *a, int size); void main() < setlocale(LC_ALL, «Russian.
int a, b; setlocale(0, «rus»); cout << «Введите начало диапазона:»; cin >> a; cout << «Введи.
unsigned int time=86399; ////cout << «Enter time:»; ////cin >> time; //int day = time / 24 / 3600; //.
int s, hours, min; cout << «Enter distance (km):»; cin >> s; cout << «Enter hours and min: int res(); void main() < char brosok; do < setlocale(LC_ALL, «Russian»); srand(time(NULL)); co.
int a, b; setlocale(0, «rus»); cout << «Введите начало диапазона:»; cin >> a; cout << «Введи.
int begin_hours, begin_min, begin_sec; int end_hours, end_min, end_sec; cout
double gb, bit; cout << «Enter the size of the movie(Gb):»; cin >> gb; cout << «Enter speed co.
Архив блога
- ▼2016 (145)
- ►апреля (48)
- ►февраля (44)
- ▼января (53)
- К введенному числу(от 0 до 1000) приписать слово «.
- К введенному числу (от 0 до 99) приписать слово «к.
- Сумма двух чисел.
- Пользователь вводит число, программа должна написа.
- Вводится время (часы и минуты) – программа выводит.
- К введенному числу (от 0 до 10…0.99) приписать сло.
- Разработать систему передвижения 2D персонажа. Пол.
- Программа суммирует введенные числа, пока пользова.
- Пользователь вводит символ. Если это буква – перев.
- Дан круг радиуса r и квадрат со стороной h. Помест.
- Три числа являются длинами трех отрезков. Могут ли.
- Рассчитать время пути в метро. До каждой станции о.
- Посещение 7-ми чудес света.
- Создать программу конвертер. Пользователю отобража.
- Вывод строки из любого символа.
- Написать программу, которая предлагает пользовател.
- Ввести с клавиатуры символ. Определить является ли.
- Ввести пятизначное число. Проверить, состоит ли эт.
- Ввести координаты точки (x, y) и определить номер .
- Ввести с клавиатуры номер трамвайного (троллейбусн.
- Написать программу перевода денежной суммы из грив.
- Ввести дату и время (каждая компонента вводится от.
- Программа подсчета идеального веса к росту. Ввести.
- Ввести возраст человека и определить пора ли ему н.
- Ввести порядковый номер карты(от 0 до 35) и опреде.
- Вводится время (часы и минуты) – программа выводит.
- Ввести любую дату (день, месяц, год вводятся по от.
- Ввести год и проверить является ли он высокосным. .
- Вывести на экран только четные числа из указанного.
- Вывести на экран горизонтальную линию из звёздочек.
- Напечатать таблицу соответствия между весом в фунт.
- Проверить, есть ли во введенном числе одинаковые ц.
- Посчитать сумму чисел в заданном диапазоне. Границ.
- Пользователь циклично вводит числа, программа на к.
- В первый день спортсмен пробежал 10 км.Каждый след.
- С клавиатуры вводится целое число. Определить, явл.
- Вычислить сумму чисел в заданном диапазоне.
- Напечатать последовательность чисел Фибоначчи 1, 1.
- Проверить, имеет ли введенное дробное число вещест.
- Программа расчета скидок. Вводится количество това.
- Определить, параллельна ли прямая оси ординат либо.
- Определить модуль введённого числа.
- Вычислить сумму четных чисел и произведение нечетн.
- Ввести с клавиатуры число. Проверить, что цифры эт.
- Вывести на экран таблицу символов в формате «ASCII.
- Написать игру «Угадай число!».
- Написать программу, выводящую на экран только четн.
- Вывести на экран горизонтальную линию из звёздочек.
- Определить знак введённого числа.
- Ввести два числа и найти меньшее из них.
- Определить четность вводимого с клавиатуры числа.
- калькулятор
- Решить систему уравнений (дробные коэффициенты a и.
- ►2015 (182)
- ►декабря (30)
- ►сентября (13)
- ►июня (13)
- ►мая (23)
- ►апреля (44)
- ►марта (59)
Источник: prog88.blogspot.com
Помогите написать программу,которая по номеру дня недели выводит в качестве результата колличество уроков в этот день! плиииз! вопрос жизни и смерти! В понедельник:6,во вторник:6,в среду:6,в четверг:6, в пятницу 5, в субботу:3
Var a:string;
begin
writeln (‘Введите день недели с большой буквы’);
read (a);
if a=’Понедельник’ then writeln (‘В этот день 6 уроков’);
if a=’Вторник’ then writeln (‘В этот день 6 уроков’);
if a=’Среда’ then writeln (‘В этот день 6 уроков’);
if a=’Четверг’ then writeln (‘В этот день 6 уроков’);
if a=’Пятница’ then writeln (‘В этот день 5 уроков’);
if a=’Суббота’ then writeln (‘В этот день 3 урока’);
if a=’Воскресенье’ then writeln (‘В этот день уроков нет’);
if (a<>’Понедельник’) and (a<>’Вторник’) and (a<>’Среда’) and (a<>’Четверг’) and (a<>’Пятница’) and (a<>’Суббота’) and (a<>’Воскресенье’) then
writeln (‘День недели введен неправильно’);
end.
Источник: globuss24.ru