Задания по программированию для 2018в

Работа в классе: задачи AEGILONP.

Критерий Поста

Те, кто не слушал рассказ про критерий Поста, почитайте о нём тут или тут.

Затем надо написать программу, которая считывает
а) восемь ноликов/единичек - таблицу истинности функции от трёх переменных;
б) число n, а затем 2n ноликов/единичек - таблицу истинности функции от n переменных.

Программа должна вывести, является ли эта функция: сохраняющей 0, сохраняющей 1, монотонной, самодвойственной и линейной. И если функция не принадлежит ни одному из этих классов, заодно вывести фразу, что функция сама по себе уже "полный набор".

Метод отжига

Задача о ферзях

Задача коммивояжера

Для справки: текст-1, текст-2.

"Музыка" от Яши, частота: 44100 точек в секунду, задача: построить график преобразования Фурье, применённого к этим данным, видео по теме.

Сайт в Heroku с базой данных

Код с доски.

В ваш_сайт/weather записывать логи питерской погоды:

http://openweathermap.org/data/2.5/weather?q=Saint%20Petersburg,ru&appid=b6907d289e10d714a6e88b30761fae22

Сайт в Heroku

Пройти java tutorial и добиться того, чтобы yourname.heroku.com/hello выдавал надпись, которая генерируется кодом на Java, а не является статической страницей.

Сайт в Google App Engine

Черновик с экрана.

Если вы готовы ввести свой или родительский номер карты, то сделайте всё это выложив на ваше_название.appspot.com, если нет, просто показывайте на локальном компьютере.

(Если сможете) Создайте проект в Google App Engine: https://console.cloud.google.com/home/dashboard

Залогиньтесь в ваш google-аккаунт в Eclipse. Создайте проект в Eclipse (new Google Project), укажите id проекта, созданного на предыдущем шаге. Если делаете локально, то не указывайте id.

Теперь, собственно, задания. Вместо your_site.appspot.com может быть localhost:8888.

1) В your_site.appspot.com/homework1.html должна лежать любая корректная html-страница, в которой использованы любые три новые тега, которых нет в созданном за вас index.html и которые не обсуждались на уроке (найдите что угодно в интернете).

2) Страница your_site.appspot.com/homework1 (без html) должна быть не статической, а генерироваться Java-кодом (вперед вручную править web.xml). Выведите посетителю в text- или html-виде текущую дату и время, желательно в приятном человеко-читаемом виде, а также случайное число от 0 до 999.

3) В your_site.appspot.com/homework2.html должна лежать форма, в которой есть текстовое поле, "чекбокс" и несколько "радиобаттонов", из которых можно выбрать только один (как обычно. Выясните, как это сделать средставами html). При отправке формы посетитель попадает на your_site.appspot.com/homework2 и видит результат обработки его запроса. Текст из текстого поля переводится в ВЕРХНИЙ РЕГИСТР, нижний регистр или Смешанный Регистр в зависимости от выбора "радиобаттона". Если же была поставлена галочка в "чекбоксе", то все последовательности из более чем одного пробела заменяются на один пробел ("a    b" -> "a b")

Пиксельная картинка

...............*..............
..............***.............
.............*..**............
............**..**............
...........**....**...........
...........*......*...........
..........**......**..........
.........**..*****.**.........
........**.**....**.**........
........*.**.........*........
.......**.**.........**.......
......**..**..........**......
.....**...**...........**.....
.....*....**............**....
....**.....**............**...
...**......***..******....**..
...*.......*****......***.**..
..**.....**.**...*.*.*..**.*..
.**....**....***.*.*.*..**.**.
**....**.....***.*****.**...**
.*...**..***..***.....**....*.
.**.**....*....**...***....**.
..**.*....*....*****......**..
...**.**.....*****........*...
...**...*****....***.....**...
....**............**....**....
.....**...........**...**.....
......*...........**...*......
......**..........**..**......
.......**.........**.**.......
........*.........**.*........
........**.***...**.**........
.........**.******.**.........
..........**......**..........
...........*......*...........
...........**....**...........
............**..**............
.............**.*.............
..............***.............
...............*..............

VK API + json

Код с доски, Json simple.

1) Пользователь вводит id (или screenname) пользователя VK.

Ваша программа обращается к VK API и выдает на экран фамилию пользователя с этим id (или screenname).

Например, 7373 -> Dvorkin, rezniko -> Reznik.

2) Пользователь вводит id (или screenname) пользователя VK и строку s.

Ваша программа обращается к VK API и выдает на экран имена и фамилии друзей пользователя с этим id (или screenname), фамилии которых начинаются на s. Но если таковых больше 5, то выводит только 5 из них (любых).

Например, 7373 Rez -> Ivan Reznik, Yury Reznik, Denis Reznichenko.

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

Например, 7373 Korotk -> Maxim Korotkov NO, Anton Korotkov NO, Fyodor Korotkov NO, Gennady Korotkevich YES.

Забираем данные из интернета

Код с доски.

Научитесь забирать данные со стороннего сервера данные html-страницы.

(Сделать URL, открыть у него openConnection, взять у соединения inputStream, обернуть в какой-нибудь читатель — Scanner или BufferedReader, считать всё в строку или поумнее в StringBuilder. Это гуглится, "java http get".)

Напишите программу, которая считывает с клавиатуры имя человека на английском языке (например, "Albert Einstein"), формирует url статьи в англоязычной Википедии про этого человека, подключается к Википедии, забирает содержимое этой статьи, и выводит все четырехзначные числа, которые присутствуют в статье. (Ожидается получить годы, важные в биографии этого человека, но куча посторонних чисел тоже будет встречаться.)

Движение частиц

Код с доски.

Реализовать моделирование и визуализацию движения материальных точек в прямоугольном контейнере в поле тяжести. Отражение частиц от стенок — упругое, поля тяжести — постоянное вниз.

Бонус: добавить силу гравитации между частицами (притягивание каждой пары друг к другу) ИЛИ упругое столкновение частиц друг с другом.

Игра на чекбоксах: аккуратная версия

Реализовать игру с галочками (правила см. ниже) с кодом, разбитым на Model, View, Controller.

У модели должны быть (примерно) следующие методы:

В папке test должны быть написаны тесты, проверяющие модель (при четном размере поля): метод setUp() должен создавать пустое поле, а также должны быть методы, проверющие правильность работы модели:

Примеры с доски:

JUnit
Controller
Model
View

Игра на прогрессбарах

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

Рядом с каждым есть кнопочка повышения его уровня на несколько пунктов.

Работа в классе: LayoutManager

Задание со сжатыми сроками: иногда нужно и такое.

Нужно за 2 урока разобраться, как устроен интерфейс LayoutManager.

Можно пользоваться интернетом, чтобы искать справочные материалы, но нельзя напрямую копировать из интернета код.

Задание: написать свой LayoutManager, который можно использовать в апплете:

applet.setLayout(new YourLayout());

Считаем, что все компоненты имеют одинаковый константный размер (S*S, константа S=30).

1) Написать свой LayoutManager, который располагает компоненты как цифры на циферблате (гарантируется, что ему подадут не более 12 объектов)

2) Написать свой LayoutManager, который располагает каждый новый компонент в произвольной позиции апплета, но не выходя за его границы, и что более сложно, чтоб он не перекрывался с ранее уже добавленными компонентами. Если компонентов добавлено уже очень много, и место для очередного не находится, то менеджер должен кинуть RuntimeException.

Игра на чекбоксах

Пользователю показывается прямоугольник из чекбоксов. В начале поле заполняется произвольным образом (каждый чекбокс либо выбран, либо нет, с вероятностью 50%). При нажатии на любой чекбокс, содержащий его крестик (его строка + его столбец) инвертируется (выбранные становятся невыбранными и наоборот). Если все чекбоксы стали выбранными, игрок выиграл, и надо его поздравить с этим.

Квадрат из кнопок

Создать апплет, в котором отображается квадрат 8×8 из кнопок, на которых написаны их координаты в шахматной нотации, от "a1" до "h8". При нажатии на любую кнопку на кнопках, доступных из нее ходом шахматного коня, должна пропасть надпись.

Подсчет слов

Во входном файле input.txt, лежащей в папке input, содержится текст на английском языке.

В папке output.txt создайте файлы a.txt, b.txt, ..., z.txt, в которые положите все слова из входного файла, начинающие на соответствующую букву, упорядоченные по убыванию частоты вхождений. Например, t.txt:

the 566
that 239
this 30
...

При этом постарайтесь максимально аккуратно отождествить разныее формы одного и того же слова.

Гипотеза "3n+1"

1) Напишите программу, которая вначале спрашивает у пользователя натуральное число n, а затем производит следующую операцию над числом n:

Эта операция производится много-много раз, и каждое очередное полученное число выводится на экран. Остановиться следует после получения единицы.

(Например, из семёрки получится последовательно: 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1)

2) Верно ли, что начиная с любого n от 2 до 5000, эта операция приведёт к получению единицы? Проверьте это вручную, вводя в программу из пункта 1 все натуральные числа от 2 до 5000. Шутка! Наоборот, напишите программу, которая сама проверяет, верно ли это утверждение.

Результатом работы этой программы должен стать следующий текст, выведенный ею на экран:

Starting from 2: received 1 after 1 operation.
Starting from 3: received 1 after 7 operations.
Starting from 4: received 1 after 2 operations.
Starting from 5: received 1 after 5 operations.
(и так далее)

Цифры числа

Заметим, что последняя цифра целого числа n — это (n % 10), а остальные числа — это (n / 10).

Решите задачи A-C отсюда.

Кто быстро справился ними, тем сюда.

Вложенные циклы

Хозяйке на заметку: символ "\" можно вывести командой System.out.print("\\");

Пользователь вводит с клавиатуры число n. Программа должна вывести на экран вот такой набор изображений (это просто пример для n=5, программа же должна работать для произвольного n):

*****
*****
*****
*****
*****
(квадрат n*n)

    .
   / \
  /   \
 /     \
/       \
("горка" высоты n)

*****
*   *
*   *
*   *
*****
("полый" квадрат n*n)

***** *****
*\  * *  /*
* \ * * / *
*  \* */  *
***** *****
(именно так, два квадрата с диагоналями рядом по горизонтали, а не друг под другом)

*********************
*   *   *   *   *   *
*   *   *   *   *   *
*   *   *   *   *   *
*********************
(это n квадратов n*n, у которых "слиплись" соседние стороны)

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

И ещё 1 любая картинка на ваше усмотрение :)

Установка JDK и Eclipse, написание первой программы

0) Установить Java Development Kit (JDK) и Eclipse. Создать проект, создать класс с методом main, в методе main написать вывод на экран надписи "Hello, world!". Запустить эту программу, убедиться, что она сработала.

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

1) Исследовать, как работают операторы деления ("/") и остатка ("%"), если один или оба аргумента . отрицательные. Каков знак результата? В какую стороную происходит округление?

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