понеділок, 27 червня 2011 р.

I Wanna Win!


Наконец-то я зарелизил свою новую флеш-игру игру - I Wanna Win!


В принципе, всё было готово в конце апреля, но то одно, то другое - уже и треть лета прошла.

В игре 25 уровней, в каждом - своя миниигра на меткость, внимание, память, логику. Сейчас игра доступна по ссылке, а через неделю пойду бороться за приз от крупных порталов. Надеюсь на вашу поддержку :)

субота, 14 травня 2011 р.

Решение уравнений методом половинного деления.

Эта тема выносится на рубежный контроль и в экзаменационные вопросы.
Дано уравнение
Необходимо найти его корень с точностью до 4 знаков после запятой.
Как бы мы вычисляли корень вручную:
Оцениваем, что корень уравнения лежит между нулём и десятью, (т.к. и ). Значит 0<х<10. Находим середину интервала: (10+0)/2=5 и подставляем пятёрку в уравнение вместо х.
. Значит 0<х<5. Опять находим середину: (0+5)/2=2,5 и пробуем:
. Значит 0<х<2,5. Снова находим середину: (0+2,5)/2=1,25 и подставляем
. Т.к. теперь знак <, то двигается левая граница промежутка и 1,25<х<2,5. Теперь подставляем в равнение число (1,25+2,5)/2=1,875
и 1,25<х<1,875. Далее будем получать такие промежутки:
1,5625<х<1,875
1,5625<х<1,7188
1,6407<х<1,7188
1,6798<х<1,7188
1,6798<х<1,6993
1,6798<х<1,6896
1,6847<х<1,6896
1,6872<х<1,6896
1,6872<х<1,6884
1,6878<х<1,6884
1,6878<х<1,6881
1,6878<х<1,6880
1,6879<х<1,6880
Следовательно, x=1,6879….
Теперь запишем наше решение в виде алгоритма.
  1. Нужно найти два числа (А и В) такие, чтобы корень уравнения находился между ними. Эти числа будет вводить пользователь.
  2. Нужно определить, неравенство с каким знаком (больше или меньше) получится из уравнения, если в него подставить число А (пусть это будет переменная Z, она будет равна -1 при знаке < и 1 – при знаке >)
  3. Нужно найти точку С, середину отрезка [A;B] по формуле C=(A+B)/2 и подставить его в уравнение.
  4. Если знак получившегося неравенства будет таким же, как и при подстановке в него числа А, то корень находится на промежутке [C;B], в противном случае корень – на промежутке [A;C]. Значит, в первом случае левая граница промежутка становится равной С: А, а во втором – правая: В=С
  5. Если разность B-A больше требуемой точности (для четырёх знаков после запятой это 0,0001), то перейти к пункту 3 алгоритма, иначе – вывести решение.
Теперь можно писать программу
10 PRINT “RESHAEM URAVNENIJE X^3+9X=20”
20 PRINT “VVEDITE LEVUJU GRANICU PROMEZHUTKA”
30 INPUT A
40 PRINT “VVEDITE PRAVUJU GRANICU PROMEZHUTKA”
50 INPUT B
60 IF A^3+9*A>20 THEN Z=1 ELSE Z=-1
70 C=(A+B)/2
80 Y=C^3+9*C
90 IF (Y-20)*Z>0 THEN A=С ELSE B=C
100 PRINT A;”<х<”;B
110 IF (B-A)>0.0001 THEN GOTO 70
120 PRINT “X=”;(A+B)/2
Пояснения:
Строки 10-50 – ввод краёв интервала, где находится корень уравнения (п.1. алгоритма)
Строка 60 – находим знак неравенства в левом краю промежутка (п.2. алгоритма)
Строка 70 – находим середину отрезка
Строка 80 – подставляем это значение в уравнение (п.3. алгоритма)
Строка 90 – когда выражение (Y-20)*Z будет больше нуля? Тогда, когда Y>20 и Z=1 и когда Y<20 и Z=-1, т.е. тогда, когда знак неравенства при подстановке в него числа С такой же, как и при подстановке числа А. Это и требовалось в п.4. алгоритма
Строка 100 – выпечатываем, каким путём мы подбираемся к корню
Строка 110 – проверка, не получена ли уже требуемая точность (п.5 алгоритма)
120 – печатаем результат, ещё раз усреднив промежуток.
Для того, чтобы программа решала другое уравнение с другой точностью, нужно внести изменения в строки 10, 60, 80, 90 и 110
Задания для самостоятельной работы
№
уравнение
точность
1
x-10sinx=15
5 знаков после запятой
2
x+2cosx=3
3 знака после запятой
3
4 знака после запятой
P.S. По научному метод половинного деления называется «дихотомия», так что выполнив работу вы с полным правом можете употреблять это мудрёное слово :)

вівторок, 26 квітня 2011 р.

Лабораторная работа 2. Переборные задачи

Лабораторная работа 2. Переборные задачи. Тексты всех программ должны быть в конспекте. При защите работы нужно уметь ответить на вопросы по этим программам.

Задача 1. Задача “3Х+1”. Возьмём какое-нибудь натуральное число. Далее, если число чётное, разделим его на 2, а если нечётное – умножим на 3 и прибавим 1. Затем будем выполнять эти действия с полученным числом. Например, вот что будет происходить, если начать с тройки. 3–>3*3+1=10–>10/2=5 –>3*5+1=16 –>16/2=8 –> 8/2=4 –>4/2=2 –> 2/2=1 –>1*3+1=4 Круг замкнулся. Теперь мы будем постоянно получать значения 1 – 4 – 2. Требуется найти такое число, которое в конце преобразований не придёт к единице. Математика бьётся над решением этой задачи более 70 лет без успеха, не смотря на объявленную за её решение премию в 1000000$.

Задание 1а. Написать программу, которая производила бы числа по приведённому закону.
Начинается программа стандартно: приглашением пользователя ввести начальное число.
10 PRINT “ENTER A NUMBER”
20 INPUT N
Теперь в зависимости от чётности числа N его нужно или разделить на 2, или умножить на 3 и прибавить 1. Проверка чётности выражением N MOD 2 в данной версии бейсика работает корректно только для чисел, меньших 215, поэтому в качестве условия чётности используем другое выражение. Для чётного числа N его половина – целое число. Поэтому будет выполняться равенство N/2=INT(N/2). Здесь функция INT(X) возвращает целую часть числа X (от англ. integer – целый). Пишем третью строку
30 IF N/2=INT(N/2) THEN N=N/2 ELSE N=3*N+1
40 PRINT N
Теперь, если мы не достигли единицы, операцию нужно провести ещё раз. Пятая строка:
50 IF N<>1 THEN GOTO 30
Программа готова.

Задание 1б. Видоизменить программу так, чтобы она подсчитывала количество шагов, которое требуется для достижении единицы.
Для этого введём переменную T и будем увеличивать её на 1 каждый раз, когда значение N изменяется.
При видоизменении программ в полной мере ощущается удобство нумерации строк через 10. Чтобы задать начальное значение Т пишем:
25 T=0
Увеличение T должно происходиь после строки 30, поэтому пишем:
35 T=T+1
В конце работы программы печатаем полученное значение T
60 PRINT “STEPS: “;T

Задание 1в. Найдите с помощью полученной программы числа из первой сотни, которые приходят к единице дольше чем за 100 шагов. Какое число, большее 1000 придёт к единице быстрее всего?

Задание 1г. Видоизмените программу так, чтобы выводила в конце работы и пиковое значение N. Подсказка: понадобится ещё одна переменная, фиксирующая максимумы, Подмайте, в каком случае её значение должно изменяться.

Задание 1д. Найдите, какой самый высокий пик достигается числами из первой сотни? Из первых 200?

Задача 2. Проверка простоты числа. Простым числом называется такое число, которое имеет ровно два делителя: самого себя и единицу. Требуется для данного числа указать, является ли оно простым.
Задание 2а. Решить задачу полной проверкой делимости на все числа, меньшие N, «в лоб».
10 PRINT “ENTER A NUMBER”
20 INPUT N#
Здесь обозначение N# обозначает, что мы сможем работать с числами длиной до 16 знаков.
30 D#=1
40 D#=D#+1
Переменная D# будет пробегать значения всех чисел, меньших N#. Далее находим частное от деления N# на D# и для контроля работы программы выводим его на экран:
50 K#=N#/D#
60 PRINT N#;”/”;D#;”=”;K#
Если частное окажется целым, N# – составное число и перебор можно заканчивать.
70 IF K#=INT(K#) THEN PRINT N#; “ DIVIDES BY ”;D#: END
Здесь мы впервые используем двоеточие – для вывода несокльких операторов в одной строке.
Если делитель до сих пор меньше N#, его нужно увеличить на единицу и продолжить проверку
80 IF D#
Если же мы перебрали все числа и не нашли делителя, то число N# – простое
90 PRINT N#; “ IS PRIME”

Задание 2б. Найдите с помощью этой программы несколько номеров ближайших и прошедших лет, которые бли простыми числами

Задание 2в. Усовершенствуйте программу так, чтобы она перебирала делители быстрее. Подсказка: стоит ли продолжать перебор, если частное K оказывается меньше делителя D#? Для дополнительного увеличения быстробействия потребуется убрать вывод на экран промежуточных результатов. Для этого наберите на пустой строке номер строки, которую нужно удалить и нажмите Enter

Задание 2г. Проверьте с помощью усовершенствованной программы на простоту числа: 12659363, 2147483647, 514229, 344805047, 469718941, 87178291199, 99999900001, 1073676287, 7599983.

Задача 3. Подсчёт числа счастливых билетов. Номер автобусного билета состоит из 6 цифр: ABCDEF. Билет называется счастливым, если сумма первых трёх цифр равна сумме последних трёх: A+B+C=D+E+F.

Задание 3а. Написать программу, подсчитывающую число таких билетов.
Для нахождения общего количества таких билетов пробежим все 6-ти значные номера и проверим каждый на выполнение условия.
10 S=0
Переменная S будет хранить количество найденных билетов. Затем каждая из цифр пробегает от 0 до 9:
20 FOR A=0 TO 9
30 FOR B=0 TO 9
40 FOR C=0 TO 9
50 FOR D=0 TO 9
60 FOR E=0 TO 9
70 FOR F=0 TO 9
Чтобы быстро ввести данные 6 строк, вводим строку 20, нажимаем Enter. Затем поднимаемся к ней курсором, меняем 2 на 3 и A на B, снова нажимаем Enter. Затем меняем 3 на 4 и B на C и снова нажимаем Enter, и т.д. В результате в памяти компьютера останутся все 6 строк. Это можно проверить, вызвав полный текст программы на экран командой LIST.
80 IF A+B+C=D+E+F THEN S=S+1
Если выполняется условие равенства сумм, переменная S увеличивается на 1. Теперь закрываем циклы, это можно сделать одной строкой:
90 NEXT F,E,D,C,B,A
И выводим на экран результат:
100 PRINT S

Задание 3б. Билет называется весёлым, если суммы первых и последних трёх цифр различаются на 1. Напишите программу для подсчёта количества весёлых билетов.
Мы всё так же будем пробегать все номера билетов, изменится лишь строка 80 – условие увеличения переменной S. Вместо A+B+C=D+E+F можем записать A+B+C-D-E-F=1 OR A+B+C-D-E-F=-1. Можем сделать это короче, использовав модуль числа, функцию ABS (от англ. absolute - абсолютный).
80 IF ABS(A+B+C-D-E-F)=1 THEN S=S+1

Задание 3в. Найдите количество билетов, у которых произведение первых трёх цифр равно произведению последних трёх.

Задание 3г. Найдите количество шестизначных чисел, у которых цифра десятков в два раза больше цифры единиц, а сумма цифр сотен и тысяч на 1 меньше суммы цифр десятков тысяч и сотен тысяч. Подсказка: запишите приведённые условия в буквенном виде. В каких границах может изменяться первая цифра шестизначного числа?

пʼятниця, 22 квітня 2011 р.

Итоги конкурса по поиску 401А

Женька
lera
Настя
нас
,jlzy
sun
Попова, Балащ,Дербинёва
Аня
Маринка
Без подписи
Юля
1. Интернет-страница
12
10
8
7
6
5
2. Арал
12
6
10
7
8
5
3. Генерал
12
8
10
7
5
2
6
3
4
4. Демиурги
10
3
12
6
2
5
4
7
8
5. Отец кибернетики
2
10
8
6
4
7
3
5
12
6. Престолы
На этот вопрос с подвохом ответа найти не удалось
7. Пятиугольный флаг
10
8
7
12
4
5
7
6
3
8. Амбер
Вопос остался без ответа
9. Нафталин
12
10
10. Знак =
8
10
12
6
5
7
4
11. Кольцо
12
10
6
7
8
6
12.Евро
8
6
12
10
4
5
7
3
Всего:
76
61
79
74
26
15
47
32
26
55
16

Молодцы! :)

И ещё одно. За тему "Интернет" в вашей группе можно заработать 1 автомат и много дополнительных баллов. Для этого придумайте, на какую тему будете создавать блог, сделайте его, заполните материалом, и после майских проведём замер популярности. 

Автор блога, который окажется выше в выдаче Гугла по тематическому поисковому запросу, получает автомат по дисциплине "Информатика". Остальным за создание блога будут начислены баллы, которые пойдут в итоговый учёт.

понеділок, 4 квітня 2011 р.

Результаты чемпионата по поиску 403

Юля Dasha anna_nadia НадяАня artem
1 - пятиугольній флаг вопрос остался без ответа
2 - Николай II вопрос остался без ответа
3 -  Супер Гуппи 8 10 12
4 - Онегин 10 12 8 7
5 - династии 10 8 12
6 - чакра 10 12 7 6 8
7 - реактор 10 12
8 - метеорит 8 10 12 7
9 - гильдии 8 10 12 7
10 - воздушный шар 10 12
11 Луноход 10 12
12 - флаг Сейшел 10 8 7 12
Итого: 94 94 74 21 34

Молодцы!

И теперь ещё раз повторяю условие задания по раскрутке блога.

Придумываете тему, по которой вам хотелось бы создать блог. Придумываете поисковый запрос, по которому вы будете этот блог продвигать. Запрос должен содержать до 5 слов русского языка, в него не должны входить имена собственные.

Далее, если после майских каникул ваш блог окажется на первой странице гугла по соответствующему запросу, вы получаете автомат (в наличии 1) или дополнительные баллы в рейтинг.

Чемпионат по интернет-поиску

Сегодня с 9:20 в этом блоге будут появляться вопросы, ответы на которые нужно найти в интернете. Ответ на вопрос должен состоять из: собственно ответа, ссылки на сайт, на котором вы его нашли, и номера компьютера за которым сидите. Отправляйте ответы в комментарии к постам с вопросами.

Чтобы я знал, кому присуждать призовые баллы, в комментарий к этому посту напишите свой номер компьютера и свои фамилии.

Ваши комментарии до конца пары будут скрыты. Подсчёт очков ведётся по схеме:
1й правильный ответ - 12 баллов,
2й правильный ответ - 10 баллов,
3й и т.д.: 9, 8, 7, 6, и т.д. баллов.

середа, 23 березня 2011 р.

5 Головоломок

Моя новая флеш-игра вышла в большой интернет!


На этот раз я выпустил сборник из пяти логических задач. Сейчас она участвует в конкурсах на двух крупнейших порталах: Kongregate и Newgrounds. Очень нужна ваша поддержка в голосовании! Оно происходит по ссылкам:

5 Головоломок на Kongregate
5 Головоломок на Newgrounds

И ещё одно: В 70й и 87 ротах Сергей Тихонович согласен учитывать успешность решения задач в игре в общем рейтинге, наряду с баллами за практические и лабораторные занятия. Так что не забывайте отправлять свои результаты после прохождения уровней. :)

субота, 19 березня 2011 р.

Языки

Кто знает какие-то иностранные языки кроме английского? Напишите мне, есть интересное предложение :)

пʼятниця, 18 березня 2011 р.

Моделирование движения тел - основы

Сделаем программу, в которой цветной круг будет летать по экрану и отскакивать от краёв.
Что нужно знать для того, чтобы задать положение круга на экране?
Положение его центра (Х, Y) и радиус R. Для красоты круг можно рисовать некоторым цветом C
Что нужно знать, чтобы круг двигался?
Проекции его скорости на оси х и у: VX и VY.
На компьютере движение тела моделируется следующим образом:
Выбирается небольшой шаг времени DT, и с этим шагом каждый раз вычисляются новые координаты тела. Для прямолинейного движения формула будет:
X=X+VX*DT
Y=Y+VY*DT
Т.е. координата по оси Х будет той, что была, плюс то расстояние, на какое тело успело переместиться за время DT. Аналогично и для игрека.
Теперь как математически выразить отражение круга от края экрана?
Рассмотрим четыре его положения:
В положениях левее круга 1 и правее круга 3 происходит отражение от вертикальных границ. Это значит, что скорость VX должна поменять знак.
Если круг будет левее положения 1, то для него будет верным неравенство X<=R. Если он правее круга 3, то верно неравенство X>=600-R.
Поэтому команда отражения от вертикальных стенок будет выглядеть так:
IF X<=R OR X>=600-R THEN VX=-VX
В положениях ниже круга 2 и выше круга 4 менять знак должна скорость VY.
Поэтому, аналогично
IF Y<=R OR Y>=300-R THEN VY=-VY
Теперь сформулируем алгоритм, по которому круг будет летать по экрану
  1. Перевести экран в графический режим
  2. Инициализировать переменные
  3. Стереть старое положение круга
  4. Просчитать новое положение круга
  5. Нарисовать круг
  6. Проверить отражение
  7. Перейти к пункту 3
Сделаем на основе алгоритма программу, используя соображения, приведённые ранее.
Пункт 1 реализуется двумя стандартными строками:
10 SCREEN 9
20 CLS
Пункт 2: зададим переменным случайные стартовые значения
30 X=60+RND*400
40 Y=60+RND*200
50 R=10+RND*40
60 C=INT(1+RND*15)
70 DT=0.1
80 VX=RND*20-10
90 VY=RND*20-10
Таким образом, координата центра круга по оси х будет в пределах от 60 до 460, по оси у – от 60 до 260, радиус круга – от 10 до 50, цвет – любым целым числом от 1 до 15 (именно до 15-ти, т.к. RND всегда строго меньше единицы).
Шаг времени задаём равным 0,1 секунды, если понадобится – отрегулируем потом. Проекции скорости по осям х и у будут в пределах от -10 до 10.
Пункт3. Чтобы стереть изображение, его нужно нарисовать нулевым цветом, т.е. чёрным
100 CIRCLE(X,Y),R,0
Пункт 4. Применяем выведенные формулы
110 X=X+VX*DT
120 Y=Y+VY*DT
Пункт 5 – рисуем круг в новых координатах
130 CIRCLE(X,Y),R,C
Пункт 6 – применяем выведенные формулы отражения
140 IF X<=R OR X>=600-R THEN VX=-VX
150 IF Y<=R OR Y>=300-R THEN VY=-VY
Пункт 7 – возвращаемся к пункту 3 алгоритма, т.е. к 100й строке программы
160 GOTO 100
Запускаем программу, наблюдаем, наслаждаемся плодами труда своего J
Итак, если вы всё внимательно делали и разобрались, то удовлетворительное написание рубежа вам обеспечено. Для хороших и отличных оценок нужно уметь моделировать гравитацию и движение нескольких тел. Это вопрос будет разобран с следующей статье.

Моделирование движения тела под действием силы тяжести

На прошлой лабораторной работе мы получили программу, которая выводит на экран летающий круг, отражающийся от краёв.
10 SCREEN 9
20 CLS
30 X=60+RND*400
40 Y=60+RND*200
50 R=10+RND*40
60 C=INT(1+RND*15)
70 DT=0.1
80 VX=RND*20-10
90 VY=RND*20-10
100 CIRCLE(X,Y),R,0
110 X=X+VX*DT
120 Y=Y+VY*DT
130 CIRCLE(X,Y),R,C
140 IF X<=R OR X>=600-R THEN VX=-VX
150 IF Y<=R OR Y>=300-R THEN VY=-VY
160 GOTO 100
Теперь добавим сюда гравитацию. Вспоминаем физику. При движении брошенного тела, с ускорением g меняется вертикальная составляющая его скорости, VY. Значит, в программу нужно добавить 2 строки:
Инициализируем переменную G
75 G=1
Вычисляем новую вертикальную скорость
135 VY=VY+G*DT
Заодно отключим стирание предыдущего положення круга, чтобы он оставлял след. Это делается отключением строки 100. Её можно не удалять, а просто поставить после номера строки апостроф:
100 ‘CIRCLE(X,Y),R,0
Запускам программу, наблюдаем за изменениями в движении.
Теперь о том, как будет использоваться эта программа на рубеже.
Нужно будет в строках 30, 40, 50, 75, 80 и 90 вместо случайных значений задать некоторые числа - координаты круга, его радиус, ускорение свободного падения и начальную скорость.
Далее, запустив программу, нужно будет проследить его траекторию и зарисовать её.
Посмотрите, как ведёт себя круг при:
№
X
Y
R
G
VX
VY
1
100
120
80
1
4
-1
2
110
280
10
-1
-5
5
3
500
10
5
0
3
2
4
450
150
20
0.5
2
6
5
300
180
15
10
8
-15
С Днём студента!

четвер, 17 березня 2011 р.

Самостоятельная работа по теме Ввод данных

Задание 1.
Написать программу, которая реализует следующие функции:

На экране рисуется отрезок. Клавишами W, S, D, A можно изменять положение одного из концов отрезка, а клавишами 8, 4, 2, 6 - другого. Клавишами 1 и 3 можно изменять его цвет. По клавише 5 происходит очистка экрана.

Задание 2.
Написать программу, которая реализует следующие функции:

Программа спрашивает пользователя, сколько на экране нужно нарисовать квадратов и какой длины должна быть их сторона. Получив данные, она рисует требуемое количество квадратов вдоль диагонали монитора.



четвер, 17 лютого 2011 р.

Циклы


Часто в программе нужно выполнить много однотипных действий, например, нарисовать ряд окружностей.
Конечно, такую картинку можно было бы нарисовать, введя 15 команд CIRCLE, но это нерациональный путь. К тому же, если понадобится в такой программе что-то изменить, это будет очень сложно.

Поэтому нужно применить другой подход – зацикливание программы. Во-первых, следует ответить на 3 вопроса:
  1. Что общего в командах?
  2. Чем они отличаются?
  3. До каких пор нужно продолжать выполнять команды?

Для нашего конкретного случая общее здесь то, что рисуются окружности, у них равны радиусы и координаты Y. Различаются же они координатами X. Рисовать их нужно до тех пор, пока координата X не превышает ширину экрана, 550 пикселей.

Теперь можно приступить к написанию программы. Начинается она с двух стандартных строк:
10 SCREEN 9
20 CLS

Теперь производим инициализацию переменных, задаём их начальные значения.
30 X = 20: Y = 30: R = 15

Здесь мы в одной строке поместили несколько команд, разделив их двоеточиями.

Приступаем к рисованию собственно окружности:
40 CIRCLE(X,Y),R
Эта строка -  то основное, ради чего мы использовали цикл. Она называется телом цикла. В теле цикла может быть много строк.

Теперь производим шаг цикла – увеличиваем координату X окружности:
50 X = X+35

И проверяем, нужно ли вернуться и выполнить цикл ещё раз. Возвращаемся мы если X<550. Возвращаться нужно в 40ю строку. По-русски команда на возврат будет выглядеть так:
Если Х< 550 то перейти к 40й строке программы.
На Бейсике это выглядит так:

60 IF X<550 THEN GOTO 40

Обратите внимание, оператор GOTO пишется слитно.

Программа готова.

В шаге цикла можно изменять несколько параметров. Например, если мы хотим, чтобы окружности шли вот так:











Строка 50 должна выглядеть:
50 X = X+35: Y=Y+35: R=R+5

Пример 2.

Линия задаётся четырьмя числами: X1, Y1, X2, Y2. у всех линий координаты Y неизменны, координата X1 увеличивается, а X2 – уменьшается.

Пишем программу.
10 SCREEN 9
20 CLS
30 X1 = 0: Y1 = 0: X2 = 550: Y2 = 330
40 LINE(X1,Y1)–(X2,Y2)
50 X1 = X1+10: X2 = X2-10
60 IF X1<=550 THEN GOTO 40

Подумайте, как сделать, чтобы линии были разноцветными.

Задания для самостоятельной работы (для каждого из них в конспекте должна быть составлена программа)






середа, 16 лютого 2011 р.

Олимпиадные задания


Задания можно решить дома и принести мне или Сергею Тихоновичу до конца этой недели на листочке.

1. Программа может выполнять команды рисования прямоугольников произвольного цвета. С помощью какого наименьшего количества команд она можно нарисовать красно-белую шахматную доску?

2. Сколькими способами число 2011 можно представить в виде разности квадратов натуральных чисел?

3. Составьте алгоритм и программу, которая по введённой дате (число, месяц, год) определял, сколько дней осталось до следующего Нового года.

4. На столе лежит N спичек. Петя и Вася поочерёдно берут оттуда от 1 до 5 спичек, однако нельзя повторять число, взятое соперником на предыдущем ходу. Выигрывает тот, кто забирает последнюю спичку или лишает соперника возможности сделать ход согласно правилам. Начинает Петя, своим первым ходом может взять любое количество от 1 до 5. Найдите общий вид чисел N, при которых партию выиграет Вася.

5. В доме 36 комнат. В каждой комнате лежит определённая сумма денег (указана в таблице). В дом можно зайти через одну из шести дверей с северной стороны, пройти через 6 комнат, двигаясь только прямо или по диагонали, и выйти через одну из шести дверей с южной стороны. Как организовать свой маршрут, чтобы собрать максимальное количество денег? В примере, показанном на рисунке, итоговая сумма составит 27 долларов. Как  увеличить эту сумму?
 a.
1
3
5
1
1
2
4
5
7
6
2
7
2
4
0
2
8
10
2
1
12
5
4
3
4
3
9
0
14
7
16
10
5
11
8
6

b
23
61
71
87
70
61
5
57
85
63
22
10
91
78
47
35
13
11
94
85
34
23
79
77
80
0
39
70
47
40
33
95
73
83
85
5