Написать программу которая по номеру дня

Подвернулась интересная задача. Написать программу, которая по заданной любой дате выводит день недели. Первый вариант алгоритма:

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)
Читайте также:
Какой признак формулы в строке формул в программе Microsoft excel

Источник: 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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru