Skip to content

Commit 1687005

Browse files
committed
init repo
0 parents  commit 1687005

15 files changed

+816
-0
lines changed

Diff for: .gitignore

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.idea/
2+
out/
3+
*.iml
4+
.DS_Store
5+
plan1*.md
6+
plan2*.md

Diff for: README.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
To see how the lesson will look like:
2+
- go to lesson.html and press the icon of browser where you want to see the page
3+
- add to the path in the browser following string (don't forget to modify `lesson_example` with the required lesson)
4+
`&file=/basic_programming/lesson_example/metadata.json`
5+
6+
You can view any lesson on the prod server with the following link
7+
(don't forget to modify `lesson_example` with the required lesson)
8+
https://ait-tr.github.io/lesson.html?&file=https://raw.githubusercontent.com/ait-tr/cohort39.1/main/basic_programming/lesson_example/metadata.json
9+
10+
You can also view any lesson from any group with lessons explorer: https://lms.ait-tr.de/#/lessons
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
public class Homework22_0 {
8+
9+
// Все задачи надо решить с использованием `ArrayList`. В задачах со звёздочками необходимо
10+
// обработать возможные исключения.
11+
//
12+
// На вход программе подается натуральное число `n` - количество чисел, а затем и сами числа,
13+
// каждое с новой строки.
14+
// Напишите программу, которая прочитает эти числа, сохранит в список, а затем выведет только
15+
// чётные элементы списка.
16+
public static void main(String[] args) throws IOException {
17+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
18+
int n = Integer.parseInt(br.readLine());
19+
List<Integer> numbers = new ArrayList<>();
20+
for (int i = 0; i < n; ++i) {
21+
numbers.add(Integer.parseInt(br.readLine()));
22+
}
23+
24+
// в массиве это было бы: int x = numbers[i];
25+
// for each - для каждого
26+
// для каждого элемента из коллекции или массива
27+
// для каждого x из numbers
28+
for (int x : numbers) {
29+
if (x % 2 == 0) {
30+
System.out.println(x);
31+
}
32+
}
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
public class Homework22_1 {
8+
9+
// Все задачи надо решить с использованием `ArrayList`. В задачах со звёздочками необходимо
10+
// обработать возможные исключения.
11+
//
12+
// На вход программе подается натуральное число `n` - количество чисел, а затем и сами числа,
13+
// каждое с новой строки.
14+
// Напишите программу, которая прочитает эти числа, сохранит в список, а затем выведет только
15+
// чётные элементы списка.
16+
public static void main(String[] args) throws IOException {
17+
List<Integer> numbers = readArrayList();
18+
19+
// в массиве это было бы: int x = numbers[i];
20+
// for each - для каждого
21+
// для каждого элемента из коллекции или массива
22+
// для каждого x из numbers
23+
for (int x : numbers) {
24+
if (x % 2 == 0) {
25+
System.out.println(x);
26+
}
27+
}
28+
}
29+
30+
public static List<Integer> readArrayList() throws IOException {
31+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
32+
int n; // размер списка
33+
try {
34+
n = Integer.parseInt(br.readLine());
35+
} catch (NumberFormatException e) {
36+
System.out.println("Неправильный формат числа: " + e.getMessage());
37+
return new ArrayList<>(); // возвращаем пустой список - не смогли прочитать размер
38+
}
39+
if (n <= 0) {
40+
System.out.println("Некорректный размер списка: " + n);
41+
return new ArrayList<>(); // возвращаем пустой список
42+
}
43+
List<Integer> list = new ArrayList<>(n); // выделяем память заранее - индексов НЕ будет,
44+
// но программа будет работать чуть-чуть быстрее
45+
while (list.size() < n) {
46+
try {
47+
list.add(Integer.parseInt(br.readLine())); // NumberFormatException
48+
} catch (NumberFormatException e) {
49+
System.out.println("Неправильный формат числа: " + e.getMessage());
50+
}
51+
}
52+
return list;
53+
}
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
public class Homework22_2 {
8+
9+
// Все задачи надо решить с использованием `ArrayList`. В задачах со звёздочками необходимо
10+
// обработать возможные исключения.
11+
//
12+
// На вход программе подается натуральное число `n` - количество чисел, а затем и сами числа,
13+
// каждое с новой строки.
14+
// Напишите программу, которая прочитает эти числа, сохранит в список, а затем выведет только
15+
// чётные элементы списка.
16+
public static void main(String[] args) throws IOException {
17+
List<Integer> numbers = readArrayList();
18+
19+
// в массиве это было бы: int x = numbers[i];
20+
// for each - для каждого
21+
// для каждого элемента из коллекции или массива
22+
// для каждого x из numbers
23+
for (int x : numbers) {
24+
if (x % 2 == 0) {
25+
System.out.println(x);
26+
}
27+
}
28+
}
29+
30+
public static List<Integer> readArrayList() throws IOException {
31+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
32+
int n; // размер списка
33+
try {
34+
n = Integer.parseInt(br.readLine());
35+
} catch (NumberFormatException e) {
36+
System.out.println("Неправильный формат числа: " + e.getMessage());
37+
return new ArrayList<>(); // возвращаем пустой список - не смогли прочитать размер
38+
}
39+
return readArrayList(n);
40+
}
41+
42+
public static List<Integer> readArrayList(int size) throws IOException {
43+
if (size <= 0) {
44+
System.out.println("Некорректный размер списка: " + size);
45+
return new ArrayList<>(); // возвращаем пустой список
46+
}
47+
48+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
49+
50+
List<Integer> list = new ArrayList<>(size); // выделяем память заранее - индексов НЕ будет,
51+
// но программа будет работать чуть-чуть быстрее
52+
while (list.size() < size) {
53+
try {
54+
list.add(Integer.parseInt(br.readLine())); // NumberFormatException
55+
} catch (NumberFormatException e) {
56+
System.out.println("Неправильный формат числа: " + e.getMessage());
57+
}
58+
}
59+
return list;
60+
}
61+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import java.util.ArrayList;
2+
import java.util.LinkedList;
3+
import java.util.List;
4+
5+
public class Task1 {
6+
// ArrayList - внутри массив - состав поезда с вагонами
7+
// LinkedList - двусвязный список - элементы в разных местах, связанные ссылками - доска
8+
// детектива - бумажки, связанные протянутыми ниточками
9+
// и там, и там переменная списка - ссылка на НАЧАЛО списка
10+
11+
// Создание:
12+
// список - List<Тип> переменная = new ArrayList<>()
13+
// список - List<Тип> переменная = new LinkedList<>()
14+
15+
// Размер:
16+
// список.size() - сколько элементов там прямо сейчас; этот размер может меняться
17+
// ArrayList - быстро (хранится заранее)
18+
// LinkedList - быстро (хранится заранее)
19+
20+
// Получить существующий элемент по его индексу
21+
// список.get(индекс)
22+
// ArrayList - быстро (голова + сдвиг)
23+
// LinkedList - медленно (идём от начала и считаем)
24+
25+
// Изменить существующий элемент с нужным индексом
26+
// список.set(индекс, значение)
27+
// ArrayList - быстро (голова + сдвиг)
28+
// LinkedList - медленно (идём от начала и считаем)
29+
30+
// Добавить новый элемент в конец списка - список.add(значение)
31+
// ArrayList - быстро (голова + размер)
32+
// LinkedList - быстро (кроме начала, сразу хранится и конец)
33+
34+
// Добавить новый элемент куда-то в середину списка по индексу - список.add(новыйИндекс, значение)
35+
// ArrayList - медленно (двигать элементы)
36+
// LinkedList - быстро (вешаем на свободное место, перецепляем ниточки)
37+
38+
// Добавить новый элемент в начало списка - список.add(0, значение)
39+
// ArrayList - медленно (двигать элементы)
40+
// LinkedList - быстро (вешаем на свободное место, перецепляем ниточки)
41+
42+
// Удалить элемент (индексы сдвинутся) - список.remove(индекс)
43+
// ArrayList - медленно (двигать элементы)
44+
// LinkedList - быстро (убираем, перецепляем ниточки)
45+
public static void main(String[] args) {
46+
List<Integer> list1 = new ArrayList<>();
47+
list1.add(1);
48+
list1.add(2);
49+
list1.add(3);
50+
51+
// (глубокое (deep)) копирование списка - все элементы копируются
52+
List<Integer> list2 = new ArrayList<>(list1);
53+
for (int x : list2) {
54+
System.out.println(x);
55+
}
56+
}
57+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
public class Task2_1 {
8+
9+
// Переставить соседние элементы попарно
10+
// 0 1 2 3 4
11+
// левые индексы - 0 и 2
12+
// правые индексы - 1 и 3
13+
// пары - 0 и 1, 2 и 3
14+
// меняем на 1 и 0, 3 и 2
15+
// 1 0 3 2 4
16+
17+
18+
// 1 2 3 4 5 6
19+
// 2 1 4 3 6 5
20+
public static void main(String[] args) throws IOException {
21+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
22+
23+
int n = Integer.parseInt(br.readLine());
24+
List<Integer> numbers = new ArrayList<>();
25+
for (int i = 0; i < n; ++i) {
26+
numbers.add(Integer.parseInt(br.readLine()));
27+
}
28+
printList(numbers);
29+
30+
for (int leftIndex = 0; leftIndex < numbers.size() - 1; leftIndex += 2) {
31+
// leftIndex - левый индекс в паре (место левого)
32+
// leftIndex не может быть последним индексом, только предпоследним (до (numbers.size() - 1))
33+
34+
// последняя пара, если чётное количество:
35+
// numbers.size() - 2, numbers.size() - 1 - предпоследний и последний
36+
37+
// последняя пара, если нечётное количество:
38+
// numbers.size() - 3, numbers.size() - 2 - предпредпоследний и предпоследний
39+
// последний остался без пары
40+
41+
int rightIndex = leftIndex + 1; // правый индекс в паре (место правого)
42+
43+
// меняем местами левый и правый
44+
int left = numbers.get(leftIndex);
45+
int right = numbers.get(rightIndex);
46+
// System.out.println("leftIndex = " + leftIndex + ", rightIndex = " + rightIndex);
47+
// System.out.printf("numbers[%d] = %d, numbers[%d] = %d%n", leftIndex, numbers.get(leftIndex),
48+
// rightIndex, numbers.get(rightIndex));
49+
numbers.set(leftIndex, right); // на место левого (leftIndex) поставили правый
50+
numbers.set(rightIndex, left); // на место правого (rightIndex) поставили левый
51+
// System.out.printf("numbers[%d] = %d, numbers[%d] = %d%n", leftIndex, numbers.get(leftIndex),
52+
// rightIndex, numbers.get(rightIndex));
53+
}
54+
55+
printList(numbers);
56+
}
57+
58+
public static void printList(List<Integer> list) {
59+
for (int i = 0; i < list.size() - 1; ++i) {
60+
System.out.print(list.get(i) + " ");
61+
}
62+
System.out.println(list.get(list.size() - 1));
63+
}
64+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.LinkedList;
5+
import java.util.List;
6+
7+
public class Task2_2 {
8+
9+
// Переставить соседние элементы попарно
10+
// 0 1 2 3 4
11+
// левые индексы - 0 и 2
12+
// правые индексы - 1 и 3
13+
// пары - 0 и 1, 2 и 3
14+
// меняем на 1 и 0, 3 и 2
15+
// 1 0 3 2 4
16+
17+
18+
// 1 2 3 4 5 6
19+
// 2 1 4 3 6 5
20+
public static void main(String[] args) throws IOException {
21+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
22+
23+
int n = Integer.parseInt(br.readLine());
24+
List<Integer> numbers = new LinkedList<>();
25+
for (int i = 0; i < n; ++i) {
26+
numbers.add(Integer.parseInt(br.readLine()));
27+
}
28+
printList(numbers);
29+
30+
for (int leftIndex = 0; leftIndex < numbers.size() - 1; leftIndex += 2) {
31+
int rightIndex = leftIndex + 1;
32+
33+
int left = numbers.get(leftIndex);
34+
int right = numbers.get(rightIndex);
35+
numbers.set(leftIndex, right); // на место левого (leftIndex) поставили правый
36+
numbers.set(rightIndex, left); // на место правого (rightIndex) поставили левый
37+
}
38+
39+
printList(numbers);
40+
}
41+
42+
public static void printList(List<Integer> list) {
43+
for (int i = 0; i < list.size() - 1; ++i) {
44+
System.out.print(list.get(i) + " ");
45+
}
46+
System.out.println(list.get(list.size() - 1));
47+
}
48+
}

Diff for: basic_programming/lesson_example/homework.md

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Задача 1
2+
3+
Напишите программу, которая:
4+
- прочитает размер списка
5+
- будет добавлять элементы в список, но каждый раз **в начало**, а не в конец списка, как обычно
6+
- выведет получившийся список
7+
8+
# Задача 2* (не обязательно)
9+
10+
Напишите программу, которая:
11+
- прочитает размер списка
12+
- прочитает элементы списка
13+
- выведет прочитанный список
14+
- "перевернёт" элементы (поменяет местами первый с последним, второй с предпоследним и т.д.)
15+
- выведет изменённый список
16+
17+
# Задача 3**** (не обязательно)
18+
19+
Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били друг друга. Вам дана расстановка 8 ферзей на доске, определите, есть ли среди них пара бьющих друг друга.
20+
21+
Программа получает на вход восемь пар чисел, каждое число от 1 до 8 — координаты 8 ферзей. Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES.

Diff for: basic_programming/lesson_example/metadata.json

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"plan": "plan.md",
3+
"theory": "theory.md",
4+
"homework": "homework.md",
5+
"code": [
6+
"code/linked_list/src/Homework22_0.java",
7+
"code/linked_list/src/Homework22_1.java",
8+
"code/linked_list/src/Homework22_2.java",
9+
"code/linked_list/src/Task1.java",
10+
"code/linked_list/src/Task2_1.java",
11+
"code/linked_list/src/Task2_2.java"
12+
],
13+
"video": ""
14+
}

Diff for: basic_programming/lesson_example/plan.md

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
1. Повторение, разбор домашнего задания
2+
1. Разновидности списков, сравнение `LinkedList` и `ArrayList`
3+
1. Работа со списками, `List` при объявлении переменных
4+
1. Решение задач

0 commit comments

Comments
 (0)