Skip to content

Repository for students of 11-102 studying Informatics (Fall 2021)

Notifications You must be signed in to change notification settings

lPeresvet/itis-102-info-fall-2021

 
 

Repository files navigation

Домашние задания

1

2/P2.java

Дедлайн: 2021-11-05.

Вводятся вещественные координаты x,y точки

Вывести INSIDE, если точка находится внутри многоугольника (или на границе) с вершинами (0,1) (3,0) (-2,0) (-10,-10) (0,-1) и OUTSIDE, если точка вне многоугольника.

3/P3.java

Дедлайн: 2021-11-05.

Вводится целое положительное число. Если в нём три цифры, вывести их сумму, иначе вывести само число.

4/P4.java

Дедлайн: 2021-11-05.

Вводится целое положительное число N (1 <= N <= 10000). Вывести сумму первых N простых чисел.

5
28
(2+3+5+7+11 = 28)

5/P5.java

Дедлайн: 2021-11-05.

Вводится целое положительное число N (1 <= N <= 10000). Вывести сумму первых N совершенных чисел.

6/P6.java

Дедлайн: 2021-11-05.

Вводится число K. Вводятся целые положительные числа, ввод заканчивается 0. Вывести YES, если есть число, сумма степеней в разложении на простые которого больше K. Иначе NO

4
2 108 3 0
YES 
-----------
5
2 108 3 0
NO

7/P7.java

Вводятся целые числа, ввод завершается 0.

Вывести второй по величине элемент (элемент, не меньше всех остальных, но строго меньше максимального)

Если такого нет, вывести NO.

1 2 3 2 3 1 0
2
---
-4 -2 -1 -2 -1 -2 -3 0
-2

8/P8.java

Вводятся целые числа, ввод завершается 0.

Вывести сумму чисел между первым максимумом и вторым максимумом. Если таких нет, вывести NO

1 2 3 2 3 1 1 1 3 -1 0
2

9/P9.java

Вводятся целые числа, ввод завершается 0.

Вывести сумму чисел между первым максимальным и последним минимальным, включая сами минимум и максимум. Если таких нет, вывести NO. Если минимум находится до максимума, вывести 0

1 3 2 3 -1 2 -1 1 2 0
8
---
-1 1 2 3 0
0
---
0
NO

10/P10.java

Вводится целое число N.

Вывести N+1 число через пробел: биномиальные коэффициенты C_N^K для K=0, 1, ..., N.

Биномиальные коэффициенты вычислять используя рекуррентные соотношения

C_N^0 = C_N^N = 1
C_N_K = C_{N-1}^K + C_{N-1}^{K-1}

11/P11.java

Вводятся целые числа N и M.

Заполнить двумерный массив размера N x M по спирали, начиная с 1 по часовой стрелке от левого верхнего угла (см. пример).

Вывести его элементы построчно через пробел

3 4
-------------
 1  2  3  4
10 11 12  5
 9  8  7  6
=============
4 5
-------------
 1  2  3  4  5
14 15 16 17  6
13 20 19 18  7
12 11 10  9  8
=============
2 2
-------------
1 2
4 3

12/P12.java

Клетки на шахматной доске обозначаются парой координат (каждая от 0 до 7).

Вводится N. Вводятся N фигур в виде тройки "вертикаль, горизонталь, вид фигуры" (2 - ладья, 3 - слон, 4 - конь). Вводится M. Вводится M клеток в виде пары "вертикаль, горизонталь".

Для каждой клетки вывести YES, если она под боем, и NO, если нет

Клетка, занятая фигурой считается находящейся под боем.

2
1 2 2
6 2 4
3
0 0
7 2
5 4
-------
NO
NO
YES

13/P13.java

Написать функцию int convert(int q, int[] a), которая получает массив a с цифрами числа в системе счисления с основанием q (младший разряд - в элементе с индексом 0) и возвращает число.

(не использовать встроенные функции преобразования)

convert(10, new int[]{1,2,3}) 
  == 321
convert(2, new int[]{1,0,1,1})
  == 13

14/P14.java

Написать функцию int compare(int q, int[] a, int[] b), которая получает два числа (в виде массивов цифр в q-чной системе счисления, младший разряд - в элементе с индексом 0), и возвращает:

  • число -1, если число a меньше числа b;
  • число 0, если число a равно числу b;
  • число 1, если число a больше числа b.

Нужно сравнивать цифры числа, не переводя всё число в int.

15/P15.java

Написать функцию int[] remainder(int q, int[] a, int[] b), которая получает два неотрицательных числа (в виде массивов цифр в q-чной системе счисления, младший разряд - в элементе с индексом 0), и возвращает остаток от деления числа a на число b.

Нужно выполнять деление, не переводя всё число в int. Числа a не превосходит 10000000.

16/Cake.java

Написать класс Cake (торт на день рождения):

  • конструктор Cake(int n) с параметром - количеством свечей; конструктор должен создавать массив из свечей Candle нужного количества с длинами от 1 до n, по одной свече каждой длины;
  • метод void turnOn() - зажигает все свечи;
  • метод void turnOff() - задувает все свечи;
  • метод int getState() - возвращает, сколько свечей горит.

Вам нужно отправить в репозиторий только Cake.java с единственном классом Cake внутри.

Класс Candle будет доступен, но он не обязательно будет таким же, как в классе. У него будут методы:

  • Candle(int length) - создать свечу заданной длины
  • void turnOn() - зажечь свечу
  • void turnOff() - погасить свечу
  • boolean getState() - горит ли свеча?

17

Реализуйте указанные ниже классы и интерфейсы (если вы создаёте класс в отдельном файле F.java, его лучше описать как public class F { ... })

Класс Creature - живое

Реализуйте класс Creature - живое существо. У живого существа есть имя name, очки жизни hp и уровень level. Живое существо может:

  • атаковать противника: void attack(Creature other), при этом hp противника уменьшаются на level живого существа, а в консоль выводится <name> attacks <other_name>: <other_hp> left.
  • быть создано конструктором с параметрами (String name, int hp), при этом начальный уровень равен 1

Унаследуйте от Creature следующие классы.

Класс Elf - эльф

Эльфы могут:

  • лечить себя void heal() или друга void heal(Creature friend), при этом соответствующий hp увеличивается на уровень эльфа, а в консоль выводится, соответственно, <name> heals self: <hp> или <name> heals <friend_name>: <friend_hp>
  • быть созданы конструктором с параметрами (String name), начальный hp равен 250

Класс Dwarf - гном

Гномы могут:

  • улучшать чужое оружие void upgrade(Creature friend), при этом уровень друга увеличивается на 1, а в консоль выводится <name> upgrades <friend_name> to <friend_level>
  • быть созданы конструктором с параметрами (String name), начальный hp равен 150

Класс Human - человек

Люди могут:

  • размножаться Human reproduce(), при этом свой уровень делится на два нацело, и половина передаётся потомку, а половина остаётся у родителя. Очки жизни hp копируются, имя строится как <name>, son of <name>. В консоль выводится <name> gives birth to <son_name>: <level>
  • быть созданы конструктором с параметрами (String name), начальный hp равен 100;
  • знают, сколько всего людей, при помощи метода static int getPopulation().

Реализуйте также следующие интерфейсы.

Интерфейс IRider - возможность ездить на лошади

На лошади могут ездить эльфы и люди.

В интерфейсе есть метод void ride(), который выводит на экран <name> rides.

Интерфейс IMiner - возможность работать в шахте

В шахте могут работать гномы и люди.

Интерфейс предоставляет метод void mine(), который выводит на экран <name> digs.

Интерфейс IMagic - возможность использовать магию

Магию могут использовать эльфы и гномы.

Метод void spell() интерфейса выводит на экран <name> casts a spell.

Пример ввода-вывода

Пример программы и её вывода на консоль:

// заходят как-то эльф, гном и человек в бар...
Elf elf = new Elf("Finrod");
Dwarf dwarf = new Dwarf("Gimli");
Human human1 = new Human("Aragorn");

dwarf.upgrade(human1);
dwarf.upgrade(human1);
Human human2 = human1.reproduce();
dwarf.upgrade(elf);
dwarf.upgrade(elf);
elf.heal();
elf.heal(human1);
elf.heal(human2);
Human human3 = human2.reproduce();
System.out.println(Human.getPopulation());

Creature[] friends = new Creature[5];
friends[0] = elf;
friends[1] = dwarf;
friends[2] = human1;
friends[3] = human2;
friends[4] = human3;

Creature orc = new Creature("Unnamed Orc 43134", 10);

for (int i=0; i<2; i++) {
    for (Creature friend : friends) {
        friend.attack(orc);
    }
}
elf.ride();
human1.ride();
human1.mine();
dwarf.mine();
dwarf.spell();
elf.spell();
// объявляется конкурс на лучшую текстовую и киноадаптацию 
// (не меньше, чем в трёх сериях) программы на Java и 
// её вывода на консоль

Вывод на консоль:

Gimli upgrades Aragorn to 2
Gimli upgrades Aragorn to 3
Aragorn gives birth to Aragorn, son of Aragorn: 1
Gimli upgrades Finrod to 2
Gimli upgrades Finrod to 3
Finrod heals self: 253
Finrod heals Aragorn: 103
Finrod heals Aragorn, son of Aragorn: 103
Aragorn, son of Aragorn gives birth to Aragorn, son of Aragorn, son of Aragorn, son of Aragorn: 0
3
Finrod attacks Unnamed Orc 43134: 7 left
Gimli attacks Unnamed Orc 43134: 6 left
Aragorn attacks Unnamed Orc 43134: 5 left
Aragorn, son of Aragorn attacks Unnamed Orc 43134: 5 left
Aragorn, son of Aragorn, son of Aragorn, son of Aragorn attacks Unnamed Orc 43134: 5 left
Finrod attacks Unnamed Orc 43134: 2 left
Gimli attacks Unnamed Orc 43134: 1 left
Aragorn attacks Unnamed Orc 43134: 0 left
Aragorn, son of Aragorn attacks Unnamed Orc 43134: 0 left
Aragorn, son of Aragorn, son of Aragorn, son of Aragorn attacks Unnamed Orc 43134: 0 left
Finrod rides
Aragorn rides
Aragorn digs
Gimli digs 
Gimli casts a spell 
Finrod casts a spell

About

Repository for students of 11-102 studying Informatics (Fall 2021)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%