мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
java:elective [21/02/2013 16:24] nbazhenovjava:elective [12/03/2014 15:54] (текущий) nbazhenov
Строка 1: Строка 1:
-====== Полезные ссылки ======+====== Семинары (2013-2014) ======
  
-  * [[java:basics|Справочник по Яве]] +===== Первый семестр =====
-  * [[http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip|Bruce Eckel, Thinking in Java, 3rd edition (zip archive)]] +
-  * [[http://parallels.nsu.ru/~kuznecov/JavaDoc/index.html|Зеркало JavaDoc]]+
  
-====== Семинар 1 ======+  * [[java:elective:lesson_10_02_13|Занятие 1 (введение)]] 
 +  * [[java:elective:lesson_10_09_13|Занятие 2 (задача о датах)]] 
 +  * [[java:elective:lesson_10_16_13|Занятие 3 (римская система счисления)]] 
 +  * [[java:elective:lesson_11_06_13|Занятие 4 (позиционные системы счисления)]] 
 +  * [[java:elective:lesson_11_20_13|Занятие 5 (палиндромы)]]
  
-Перед началом работы рекомендуется прочитать уроки 1 и 2 из [[java:basics|Справочника по Яве]].+===== Второй семестр =====
  
-===== Пример 1.1 =====+  * [[java:elective:lesson_01_29_14|Занятие 1 (двусвязный список)]] 
 +  * [[java:elective:lesson_03_12_14|Занятие 2 (двоичные деревья поиска)]]
  
-Программа "Hello world"+====== Семинары (2012-2013) ======
  
-<code java> +  * [[java:elective:lesson1|Семинар 1 (введение)]] 
-package com.nsunc.wiki.nbazhenov;+  * [[java:elective:lesson2|Семинар 2 (задача о датах)]] 
 +  * [[java:elective:lesson3|Семинар 3 (быстрая сортировка)]] 
 +  * [[java:elective:lesson4|Семинар 4 (двусвязный список и задача Иосифа Флавия)]] 
 +  * [[java:elective:lesson5|Семинар 5 (двоичные деревья поиска)]] 
 +  * [[java:elective:lesson6|Семинар 6 (неориентированные графы и поиск в ширину)]]
  
-public class HelloWorld { +====== Полезные ссылки ======
- public static void main (String[] args){ +
- System.out.println("Hello, World!"); +
-+
-+
-</code> +
- +
-===== Пример 1.2 ===== +
- +
-В лекции 1 был показан пример класса, являющегося представлением электрической лампочки. Приведем здесь упрощенный вариант этого примера: +
-<code java> +
-package com.nsunc.wiki.nbazhenov; +
- +
-public class SimpleLight { +
- boolean state; +
- +
- boolean getState(){ +
- return state; +
-+
-  +
- void on(){ +
- state = true; +
-+
-  +
- void off(){ +
- state = false; +
-+
-+
-</code> +
- +
-===== Задание 1.1.A ===== +
- +
-Создайте пакет ''com.nsunc.wiki.вашЛогин''. В этом пакете создайте класс ''SimpleLight'', приведенный выше, и новый класс ''TestClass''. С помощью ''TestClass'' протестируйте работу методов класса ''SimpleLight''. Убедитесь в том, что Java присваивает значение полю ''state'' по умолчанию. +
- +
-===== Задание 1.1.B ===== +
- +
-Модифицируйте реализацию ''SimpleLight'' следующим образом: +
- +
-  - Добавьте в класс ''SimpleLight'' новые целочисленные поля ''brightness'' (яркость) и ''step'' (шаг). Сделайте так, чтобы значение поля ''step'' было по умолчанию равным 100. +
-  - Измените код существующих методов так, чтобы при включении лампочки ее яркость принимала значение 1000, а при выключении - 0. +
-  - Напишите метод ''dim()'' (терять яркость), производящий следующие действия: если яркость лампочки больше значения ''step'', то яркость уменьшается на ''step''; в противном случае лампочка выключается и в консоли печатается соответствующее сообщение. +
-  - Напишите метод ''brighten()'' (делать ярче), производящий следующие действия: если яркость лампочки не превосходит значения ''(1000-step)'', то яркость увеличивается на ''step''; в противном случае в консоли печатается сообщение об ошибке. +
- +
-Протестируйте работу методов класса ''SimpleLight''+
- +
-//Замечание:// Лампочка считается включенной если и только если ее яркость больше нуля. +
- +
-===== Задание 1.1.С ===== +
- +
-Модифицируйте реализацию ''SimpleLight'' следующим образом: +
-  - Добавьте новое статическое целочисленное поле ''maxBrightness'' (максимальная яркость). Сделайте так, чтобы по умолчанию ''maxBrightness'' принимало значение 1000. +
-  - Измените код метода ''brighten()'', заменив 1000 на ''maxBrightness''+
-  - Напишите 2 статических метода: ''getMaxBrightness()'' - возвращает значение ''maxBrightness''; и ''setMaxBrighness(int a)'' - устанавливает значение ''maxBrightness''+
- +
-Продемонстрируйте работу статических методов. +
- +
-====== Семинар 2 ====== +
- +
-===== Арифметические операторы ===== +
-Основные арифметические операторы: сложение (''+''), вычитание (''-''), умножение (''*''), деление (''/''), остаток от деления нацело (''%''). +
- +
-Можно использовать сокращенную форму записи операторов: +
-<code java> +
-a += b; // a = a + b +
-a -= b; // a = a - b +
-a *= b; // a = a * b +
-a /= b; // a = a / b +
-a %= b; // a = a % b +
-</code> +
- +
-===== Операторы инкремента и декремента ===== +
- +
-Оператор инкремента записывается в виде ''++'' и означает "увеличить на единицу". Оператор декремента записывается в виде ''%%--%%'' и означает "уменьшить на единицу". Для каждого из операторов есть две версии: префиксная и постфиксная. +
- +
-<code java> +
-++a; // префиксная версия оператора инкремента +
-a++; // постфиксная версия оператора инкремента +
-</code> +
- +
-В префиксном варианте сначала выполняется операция, а затем выдается значение. В постфиксном варианте сначала выдается значение, и лишь затем выполняется операция. +
- +
-<code java> +
-int a = 0; +
-System.out.println("1. a = " + ++a); // напечатается: 1. a = 1 +
-System.out.println("2. a = " + a++); // напечатается: 2. a = 1 +
-</code> +
- +
-===== Операторы сравнения ===== +
- +
-Операторы сравнения: меньше (''<''), больше (''>''), меньше или равно (''%%<=%%''), больше или равно (''>=''), равно (''==''), не равно (''!=''). ''=='' и ''!='' применимы для всех примитивных типов данных, остальные не применимы к типу ''boolean''+
- +
-===== Логические операторы ===== +
- +
-Основные логические операторы: ''&&'' (конъюнкция, AND), ''||'' (дизъюнкция, OR), ''!'' (отрицание, NOT). Логические операторы применимы только к значениям типа ''boolean''+
- +
-===== Задание 2.1 ===== +
- +
-С клавиатуры вводится четыре натуральных числа: ''d'' (номер дня), ''m'' (номер месяца), ''y'' (номер года) и ''n''. Напечатайте в консоли дату, которая наступит через ''n'' дней после даты ''d.m.y''+
- +
-//Пример:// Ввели следующие 4 числа: 2, 1, 2012, 58. Через 58 дней после 2 января 2012 года наступает 29 февраля 2012 года, поэтому в консоли должна быть напечатана следующая дата: ''29.02.2012''+
- +
-//Замечание:// Год с номером ''y'' является високосным, если либо ''y'' кратно 4, но не кратно 100; либо ''y'' кратно 400. Например, 2000 -- високосный год, а 2100, 2200 и 2300 -- не високосные годы. +
- +
-====== Семинар 3 ====== +
- +
-===== Задание 3.1 ===== +
- +
-Реализовать алгоритм быстрой сортировки массива. +
- +
-Описание алгоритма можно найти [[http://algolist.manual.ru/sort/quick_sort.php|здесь]]. +
- +
-===== Указания к оформлению решения ===== +
- +
-  * Метод, реализующий быструю сортировку, должен быть записан в отдельном классе. Например, так: +
-<code java> +
-class MySort { +
- static void quickSort (/* Ваш список параметров */){ +
- // Ваш код  +
-+
-+
-</code> +
-  * В методе ''public static void main(String[] args)'' //другого// класса в том же пакете создайте массив, заполните его случайными числами, напечатайте его, проведите сортировку и затем снова напечатайте массив. Например, так: +
-<code java> +
-import java.util.*; +
- +
-public class TestClass { +
- public static void main(String[] args){ +
- int size = 20; +
- int m[] = new int[size]; +
- +
- Random rand = new Random(); +
- for(int i = 0; i < size; i++) +
- m[i] = rand.nextInt(100); +
- +
- System.out.println(Arrays.toString(m)); +
-  +
- MySort.quickSort(/* нужные параметры */); +
- System.out.println(Arrays.toString(m)); +
-+
-+
-</code> +
- +
-====== Семинар 4 ====== +
- +
-Классы и интерфейсы в языке Java могут быть шаблонными (generic), т.е. иметь типовые параметры. При создании объекта такого класса нужно указывать конкретные значения его типовых параметров. +
- +
-Пример использования generic-ов: классы, предназначенные для хранения упорядоченной пары и упорядоченной тройки объектов +
- +
-<code java> +
-public class TwoTuple<A,B>+
- public final A first; +
- public final B second; +
- public TwoTuple(A a, B b) { first = a; second = b; } +
- public String toString() { +
- return "(" + first + ", " + second + ")"; +
-+
-+
- +
-public class ThreeTuple<A,B,C> extends TwoTuple<A,B>+
- public final C third; +
- public ThreeTuple(A a, B b, C c) { +
- super(a, b); +
- third = c; +
-+
- public String toString() { +
- return "(" + first + ", " + second + ", " + third +")"; +
-+
-+
-</code> +
- +
-Пример работы с этими классами: +
- +
-<code java> +
-TwoTuple<Integer, String> tuple0 = new TwoTuple<Integer, String>(new Integer(10), "text"); +
-System.out.println(tuple0.toString()); // напечатается (10, text) +
-ThreeTuple<Integer, String, Double> tuple1 = new ThreeTuple<Integer, String, Double>(new Integer(10), "text", new Double(0.1)); +
-System.out.println(tuple1.toString()); // напечатается (10, text, 0.1) +
-</code> +
- +
-===== Задание 4.1 ===== +
- +
-Приведем одну из возможных реализаций двусвязного списка: +
- +
-<code java> +
-public class MyLinkedList<E>+
- private static class Node<E>+
- E element = null; +
- Node<E> next = null; +
- Node<E> previous = null; +
-  +
- Node (E element){ +
- this.element = element; +
-+
-+
-  +
- private Node<E> head = null; +
- private Node<E> tail = null; +
-  +
- private int size = 0; +
-  +
- public void addLast(E element){// добавляет новый элемент в конец списка +
- Node<E> tmpNode = new Node<E>(element); +
- if(tail == null){ +
- head = tmpNode; +
- tail = head; +
- } else{ +
- tail.next = tmpNode; +
- tmpNode.previous = tail; +
- tail = tmpNode; +
-+
-+
- +
- public String toString(){// "преобразует" список в строку +
- if(head == null) +
- return null; +
-  +
- Node<E> tmpNode = head; +
- String tmpString = "[" + tmpNode.element.toString(); +
-  +
- while (tmpNode != tail){ +
- tmpNode = tmpNode.next; +
- tmpString = tmpString.concat(", " + tmpNode.element.toString()); +
- }; +
- tmpString = tmpString.concat("]"); +
-  +
- return tmpString; +
-+
-+
-</code> +
- +
-Пример использования: +
- +
-<code java> +
-MyLinkedList<Integer> list = new MyLinkedList<Integer>(); +
-for (int i = 0; i < 10; i++) +
- list.addLast(new Integer(i)); +
-System.out.println(list.toString());// напечатается [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +
-</code> +
- +
-Допишите следующие методы: +
-  - Добавление нового элемента в начало списка. +
-  - Удаление первого/последнего элемента. +
-  - Получение значения первого/последнего элемента. +
-  - Получение размера списка. +
-  - Получение значения ''i''-го элемента списка. +
-  - Удаление ''i''-го элемента списка. +
- +
-===== Указание к оформлению решения ===== +
- +
-Новые методы должны называться в соответствии с методами класса [[http://parallels.nsu.ru/~kuznecov/JavaDoc/api/java/util/LinkedList.html|java.util.LinkedList<E>]]. +
- +
-===== Задание 4.2 ===== +
- +
-С помощью получившегося двусвязного списка напишите решение [[http://www.cse.sc.edu/~maxal/josephus.pdf|задачи Иосифа Флавия]].+
  
 +  * [[java:basics|Справочник по Яве]]
 +  * [[http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip|Bruce Eckel, Thinking in Java, 3rd edition (zip archive)]]
 +  * [[http://parallels.nsu.ru/~kuznecov/JavaDoc/index.html|Зеркало JavaDoc]]