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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
java:basics [19/01/2015 09:22] ybezrukovjava:basics [19/01/2015 09:23] (текущий) ybezrukov
Строка 3: Строка 3:
 [[Второй семестр]] [[Второй семестр]]
  
- 
-====== Первый семестр ====== 
- 
- 
- 
-===== Урок 1 ===== 
- 
-==== Начало работы ==== 
- 
-  - Запустите Eclipse 
-  - Создайте новый проект (Правой кнопкой по левой вкладке Package Explorer, New, Project) 
-  - Создайте новый пакет (Правой кнопкой по имени проекта New, Package) 
-  - Создайте новый класс (Правой кнопкой по имени пакета, New, Class) 
- 
-В результате в редакторе должнен быть результат, похожий на: 
-<code java> 
-package ru.nsunc.lskywalker; 
- 
-class Privet { 
- 
-} 
-</code> 
- 
-===== Вывод на экран ===== 
- 
-Чтобы напечатать строчку на экране, можно воспользоваться функциями System.out.print (напечатает строку) или System.out.println (напечатает строку и перейдет на начало следующей строки). Например: 
- 
-<code java> 
-package ru.nsunc.lskywalker; 
- 
-class Privet { 
-   public static void main (String[] args){ 
-     System.out.println("Привет"); 
-   } 
-} 
-</code> 
- 
-===== Объявление переменных ===== 
- 
-Чтобы объявить переменную в Яве, нужно сначало указать ее тип (множество значений, которые может принимать переменная) и ее имя. 
- 
-Например: 
-<code java> 
-int userID; 
-</code> 
-Описывает переменную целого типа (int) имеющую имя userID. 
- 
-<code java> 
-double multiplicationResult; 
-</code> 
-Описывает вещественную переменную (double) имеющую имя multiplicationResult. 
- 
-<code java> 
-package ru.nsunc.lskywalker; 
- 
-class Privet { 
-   public static void main (String[] args){ 
-     int a; 
-     a = 5; 
-     int b = 10; 
-     double c, d; 
-     c = 10.2; 
-     d = a * b * c; 
-     System.out.println("d = " + d); 
-   } 
-} 
-</code> 
- 
-===== Ветвления ===== 
- 
-Если вы хотите, чтобы поведение вашей программы изменялось в зависимости от состояния переменных, можно воспользоваться оператором ветвления. 
- 
-<code java> 
-if (условие) { 
-   выражения, которые выполняются если условие истинно 
-} else { 
-   выражения, которые выполняются если условие ложно 
-}    
-</code> 
- 
-Ветвь else в операторе ветвления необязательна и может быть пропущена. 
-<code java> 
-class Privet { 
-   public static main (String[] args){ 
-     int a; 
-     a = 5; 
-     int b = 10; 
-     double c, d; 
-     c = 10.2; 
-     d = a * b * c; 
-     System.out.println("d = " + d); 
-     if (d > 100) { 
-        System.out.println("d > 100"); 
-     } else { 
-        System.out.println("d <= 100"); 
-     } 
-   } 
-} 
-</code> 
- 
- 
-===== Циклы ===== 
- 
-Если какой-то участок кода надо выполнить несколько раз, можно воспользоваться следующим оператором: 
- 
-<code java> 
-for (начальное условие; ограничение; способ изменения){ 
- 
-} 
-</code> 
-Например: 
- 
-<code java> 
-class Privet { 
-   public static main (String[] args){ 
-     int a; 
-     a = 5; 
-     for (int i = 0; i < a; i++) { 
-        System.out.println(a); 
-     } 
-   } 
-} 
-</code> 
- 
-Напечатает переменную a a раз. 
- 
-====== Урок 2 ====== 
- 
-===== Оператор выбора ===== 
- 
-Когда в программе требуется проверить много однотипных вариантов, пользоваться цепочками операторов if..else нерационально. Упростить задачу помогает вот такая конструкция: 
- 
-<code java> 
-switch (переменная){ 
-   case значение1: выражения; break; 
-   case значение2: выражения; break; 
-   case значение3: выражения; break; 
-   case значение4: выражения; break; 
-   case значение5: выражения; break; 
-   case значение6: выражения; break; 
-   case значение7: выражения; break; 
-   default: выражения; break; 
-} 
-</code> 
- 
-===== Чтение данных с клавиатуры ===== 
-<code java> 
-package ru.nsesc.lskywalker; 
- 
-import java.io.BufferedReader; 
-import java.io.IOException; 
-import java.io.InputStreamReader; 
- 
-public class Privet { 
-     
-    public static void main(String[] args) throws IOException { 
-      
-        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
-         
-        System.out.println("Введите первое число: "); 
-        int input = Integer.parseInt(reader.readLine()); 
-        System.out.println("Введите второе число: "); 
-        int input2 = Integer.parseInt(reader.readLine()); 
-        System.out.println("Введите третье число: "); 
-        double input3 = Double.parseDouble(reader.readLine()); 
-        System.out.println(input + input2 + input3); 
-  
-    } 
-} 
-</code> 
- 
-===== Заполнение массива случайными числами ===== 
-<code java> 
- 
-int size = 10; 
-int[] arr = new int[size]; 
- 
-for(int i = 0; i < size; i++) 
-{ 
-   arr[i] = (int)Math.round(Math.random() * 10); 
-} 
-</code> 
- 
-====== Урок 3 ====== 
- 
-===== Работа с графикой ===== 
-<code java> 
-package ru.nsunc.lskywalker; 
-import java.awt.*; 
-import java.awt.font.FontRenderContext; 
-import java.awt.font.TextLayout; 
-import java.awt.geom.*; 
-import javax.swing.*; 
-  
-public class Graph extends JPanel { 
-    private static final long serialVersionUID = 1L; 
- 
-    public int getWindowWidth() { 
-        return windowWidth; 
-    } 
- 
-    public void setWindowWidth(int windowWidth) { 
-        this.windowWidth = windowWidth; 
-    } 
- 
-    public int getWindowHeight() { 
-        return windowHeight; 
-    } 
- 
-    public void setWindowHeight(int windowHeight) { 
-        this.windowHeight = windowHeight; 
-    } 
-     
-    private int windowWidth = 400; 
-    private int windowHeight = 400; 
- 
-    
-      @Override 
-    public void paintComponent(Graphics gr) { 
-        Graphics2D g = (Graphics2D) gr; 
-  
-        Color oldColor = g.getColor(); 
-        Paint paint = g.getPaint(); 
-        Stroke oldStroke = g.getStroke(); 
-  
-        float[] shtrich = {14, 5}; 
-        BasicStroke bs = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 3, shtrich, 0); 
-        g.setStroke(bs); 
-        g.draw(new Line2D.Float(20, 20, 360, 20)); 
-        g.setStroke(oldStroke); 
-  
-        g.draw(new Rectangle2D.Float(20, 40, 340, 20)); 
-  
-        g.draw(new RoundRectangle2D.Float(20, 70, 340, 30, 20, 15)); 
-  
-        g.draw(new Ellipse2D.Float(20, 110, 150, 60)); 
-  
-        g.draw(new Ellipse2D.Float(200, 110, 60, 60)); 
-  
-        g.draw(new Arc2D.Float(280, 110, 80, 60, 0, 180, Arc2D.OPEN)); 
-        g.draw(new Arc2D.Float(280, 150, 80, 50, 0, 80, Arc2D.CHORD)); 
-        g.draw(new Arc2D.Float(240, 150, 80, 60, 0, 90, Arc2D.PIE)); 
-  
-        int[] arrayX = {20, 100, 100, 250, 250, 20, 20, 50}; 
-        int[] arrayY = {180, 180, 200, 200, 220, 200, 200, 190}; 
- 
-        GeneralPath genPath = new GeneralPath(); 
-        genPath.moveTo(arrayX[0], arrayY[0]); 
-        for (int inn = 1; inn < 8; inn++) { 
-            genPath.lineTo(arrayX[inn], arrayY[inn]); 
-        } 
-        genPath.closePath(); 
-        g.draw(genPath); 
-  
-        Color newColor = new Color(0, 0, 255); 
-        g.setColor(newColor); 
-        Font font = new Font("Tahoma", Font.BOLD | Font.ITALIC, 50); 
-        Font oldFont = g.getFont(); 
-        g.setFont(font); 
-        bs = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 3); 
-        g.setStroke(bs); 
-        FontRenderContext fontCont = g.getFontRenderContext(); 
-        TextLayout tLayout = new TextLayout("SBP", font, fontCont); 
-        AffineTransform affTrans = new AffineTransform(); 
-        affTrans.setToTranslation(270, 220); 
-        g.draw(tLayout.getOutline(affTrans)); 
-        g.setFont(oldFont); 
-        g.setColor(oldColor); 
-        g.setStroke(oldStroke); 
-  
-        // Draw axes; 
-        g.drawLine(20, 220, 20, 350); 
-        g.drawLine(20, 350, 360, 350); 
-        g.drawString("Y", 25, 230); 
-        g.drawString("X", 350, 346); 
-        // Draw a curve; 
-        int[] xArray = {20, 40, 60, 80, 100, 120, 130, 140, 280, 332}; 
-        int[] yArray = {350, 345, 340, 310, 290, 280, 275, 273, 271, 269}; 
-        g.setColor(newColor); 
-        genPath = new GeneralPath(); 
-        genPath.moveTo(xArray[0], yArray[0]); 
-        for (int inn = 1; inn < 10; inn++) { 
-            genPath.lineTo(xArray[inn], yArray[inn]); 
-        } 
-        //genPath.closePath(); 
-        g.draw(genPath); 
-        g.setColor(oldColor); 
-        g.drawString("y = f(x)", 180, 267); 
-  
-        GradientPaint gradPaint = 
-                new GradientPaint(20, 50, Color.green, 200, 50, Color.yellow); 
-        g.setPaint(gradPaint); 
-        g.fillRect(21, 41, 339, 19); 
-        g.setPaint(paint); 
-  
-        gradPaint = 
-                new GradientPaint(20, 110, Color.blue, 96, 110, Color.white, true); 
-        g.setPaint(gradPaint); 
-        g.fill(new Ellipse2D.Float(21, 111, 149, 59)); 
-        g.setPaint(paint); 
-  
-        gradPaint = 
-                new GradientPaint(230, 100, Color.black, 230, 113, Color.white, true); 
-        g.setPaint(gradPaint); 
-        g.fill(new Ellipse2D.Float(200, 110, 60, 60)); 
-        g.setPaint(paint); 
-  
-        g.fill(new RoundRectangle2D.Float(20, 70, 340, 30, 20, 15)); 
-        g.setPaint(paint); 
-    } 
-  
-    public static void main(String[] args) { 
-         
-        JFrame f = new JFrame(); 
-        Graph window = new Graph(); 
-        window.setWindowHeight(1000); 
-        window.setWindowWidth(1000); 
-        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
-        f.add(window); 
-        f.setSize(window.getWindowWidth(), window.getWindowHeight()); 
-        f.setLocation(200,200); 
-        f.setVisible(true); 
-    } 
- 
- 
-} 
- 
-</code> 
-То же, только без шахмат и первокурсниц: 
-<code java> 
-import java.awt.*; 
-import java.awt.font.FontRenderContext; 
-import java.awt.font.TextLayout; 
-import java.awt.geom.*; 
-import javax.swing.*; 
-  
-public class Graph extends JPanel { 
-    private static final long serialVersionUID = 1L; 
-  
-    public int getWindowWidth() { 
-        return windowWidth; 
-    } 
-  
-    public void setWindowWidth(int windowWidth) { 
-        this.windowWidth = windowWidth; 
-    } 
-  
-    public int getWindowHeight() { 
-        return windowHeight; 
-    } 
-  
-    public void setWindowHeight(int windowHeight) { 
-        this.windowHeight = windowHeight; 
-    } 
-  
-    private int windowWidth = 640; 
-    private int windowHeight = 640; 
-  
-  
-      @Override 
-    public void paintComponent(Graphics gr) { 
-        Graphics2D g = (Graphics2D) gr; 
-  
-        Color oldColor = g.getColor(); 
-        Paint paint = g.getPaint(); 
-        Stroke oldStroke = g.getStroke(); 
-  
-        float[] shtrich = {14, 5}; 
- BasicStroke bs = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 3, shtrich, 0); 
-        g.setStroke(bs); 
-        GeneralPath genPath = new GeneralPath(); 
-        g.draw(genPath); 
-  
-        Color newColor = new Color(0, 0, 255); 
-        g.setColor(newColor); 
-        Font font = new Font("Tahoma", Font.BOLD | Font.ITALIC, 50); 
-        Font oldFont = g.getFont(); 
-        g.setFont(font); 
-        bs = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 3); 
-        g.setStroke(bs); 
-        FontRenderContext fontCont = g.getFontRenderContext(); 
- //        TextLayout tLayout = new TextLayout("SBP", font, fontCont); 
- //   AffineTransform affTrans = new AffineTransform(); 
-        //affTrans.setToTranslation(270, 220); 
- //        g.draw(tLayout.getOutline(affTrans)); 
-        g.setFont(oldFont); 
-        g.setColor(oldColor); 
-        g.setStroke(oldStroke); 
-  
-        // Draw axes; 
-        g.drawLine(20, 220, 20, 350); 
-        g.drawLine(20, 350, 360, 350); 
-        g.drawString("Y", 25, 230); 
-        g.drawString("X", 350, 346); 
-        // Draw a curve; 
-        double[] xArray; 
-        double[] yArray; 
-        double left = -4; 
-        double right = 4; 
-        double step = 0.1; 
-        int size = (int)((right-left)/step); 
-        xArray = new double[size]; 
-        yArray = new double[size];         
-         
-        xArray[0] = left; 
-        yArray[0] = Math.sin(xArray[0]); 
-         
-        for(int i = 1; i < size; i++) 
-        { 
-            xArray[i] = xArray[i - 1] + step; 
-            yArray[i] = Math.sin(xArray[i]); 
-        } 
-         
-        long xArrayLong[] = new long[size]; 
-        long yArrayLong[] = new long[size]; 
- 
-        for(int i = 0; i < size; i++) 
-        { 
-            xArrayLong[i] = Math.round(xArray[i]); 
-            yArrayLong[i] = Math.round(yArray[i]); 
-        } 
-         
-        g.setColor(newColor); 
-        genPath = new GeneralPath(); 
-        genPath.moveTo(xArrayLong[0], yArrayLong[0]); 
-        for (int inn = 1; inn < size; inn++) { 
-            genPath.lineTo(xArrayLong[inn], yArrayLong[inn]); 
-        } 
-        //genPath.closePath(); 
-  
-        g.draw(genPath); 
-        g.setColor(oldColor); 
-        g.drawString("y = f(x)", 180, 267); 
-    } 
-  
-    public static void main(String[] args) { 
-  
-        JFrame f = new JFrame(); 
-        Graph window = new Graph(); 
-        window.setWindowHeight(640); 
-        window.setWindowWidth(640); 
-        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
-        f.add(window); 
-        f.setSize(window.getWindowWidth(), window.getWindowHeight()); 
-        f.setLocation(200,200); 
-        f.setVisible(true); 
-    } 
-  
-  
-} 
-</code> 
- 
-====== Урок 4 ====== 
-===== Работа с файлами, чтение строками ===== 
-<code java> 
-package ru.nsesc.lskywalker; 
-import java.io.*; 
- 
-public class Reader { 
- 
-    public void readData() 
-    { 
-        // описываем входной файловый поток 
-        FileInputStream inputFileStream; 
-        // описываем входной читатель из потока 
-        InputStreamReader inputFileReader = null; 
-        try { 
-            // сопоставляем входной поток файлу 
-            inputFileStream = new FileInputStream("superfile.txt"); 
-            // и открываем его на чтение  
-            inputFileReader = new InputStreamReader(inputFileStream, "UTF-8"); 
-        } 
-        catch (FileNotFoundException ex) 
-        { 
-            System.out.println(ex); 
- 
-        } 
-        catch (UnsupportedEncodingException ex) 
-        { 
-            System.out.println(ex); 
- 
-        } 
-        // создаем читатель из файла 
-        BufferedReader inputFile = new BufferedReader(inputFileReader); 
-        // переменная, в которой будет храниться прочитанная из файла строка 
-        String str; 
-        // массив строк, в котором будет храниться результат деления нашей свежепрочитанной строки на куски 
-        String[] splitted = null; 
-        try { 
-            // пока можем читать из файда 
-            while ((str = inputFile.readLine()) != null) { 
-                // делим прочитанную строку на массив строк, по разделителю ";" 
-                splitted = str.split(";"); 
-            } 
-        } catch (IOException ex) { 
-            System.out.println(ex); 
-        }  
-    } 
-} 
- 
-</code> 
- 
-===== Работа с файлами, чтение посимвольно ===== 
-<code java> 
-package ru.nsesc.lskywalker; 
-import java.io.*; 
- 
-public class Reader { 
- 
-    public void readData() 
-    { 
-        // описываем входной файловый поток 
-        FileInputStream inputFileStream; 
-        // описываем входной читатель из потока 
-        InputStreamReader inputFileReader = null; 
-        try { 
-            // сопоставляем входной поток файлу 
-            inputFileStream = new FileInputStream("superfile.txt"); 
-            // и открываем его на чтение 
-            inputFileReader = new InputStreamReader(inputFileStream, "UTF-8"); 
-        } 
-        catch (FileNotFoundException ex) 
-        { 
-            System.out.println(ex); 
- 
-        } 
-        catch (UnsupportedEncodingException ex) 
-        { 
-            System.out.println(ex); 
- 
-        } 
-        // создаем читатель из файла 
-        BufferedReader inputFile = new BufferedReader(inputFileReader); 
-        // переменная, в которой будет храниться прочитанная из файла строка 
-        String str; 
-        //переменная, в которую сохраним номер прочитанного символа 
-        int c = 0; 
-        // массив строк, в котором будет храниться результат деления нашей свежепрочитанной строки на куски 
-        String[] splitted = null; 
-        try { 
-            // пока можем читать из файда 
-            while ((c = inputFile.read()) != -1) { 
-                if((char)c != '.') 
-                { 
-                    System.out.println((char) c); 
-                } 
-                else 
-                { 
-                    break; 
-                } 
-            } 
-        } catch (IOException ex) { 
-            System.out.println(ex); 
-        } 
-    } 
-} 
- 
-</code> 
- 
-===== Как выбрать только четные числа из строки? ===== 
-<code java> 
-package ru.nsesc.lskywalker; 
-import java.io.*; 
- 
-public class Reader { 
- 
-    public void readData() 
-    { 
-        // описываем входной файловый поток 
-        FileInputStream inputFileStream; 
-        // описываем входной читатель из потока 
-        InputStreamReader inputFileReader = null; 
-        try { 
-            // сопоставляем входной поток файлу 
-            inputFileStream = new FileInputStream("superfile.txt"); 
-            // и открываем его на чтение 
-            inputFileReader = new InputStreamReader(inputFileStream, "UTF-8"); 
-        } 
-        catch (FileNotFoundException ex) 
-        { 
-            System.out.println(ex); 
- 
-        } 
-        catch (UnsupportedEncodingException ex) 
-        { 
-            System.out.println(ex); 
- 
-        } 
-        // создаем читатель из файла 
-        BufferedReader inputFile = new BufferedReader(inputFileReader); 
-        // переменная, в которой будет храниться прочитанная из файла строка 
-        String str; 
-        //переменная, в которую сохраним номер прочитанного символа 
-        int c = 0; 
-        // массив строк, в котором будет храниться результат деления нашей свежепрочитанной строки на куски 
-        String[] splitted = null; 
-        try { 
-            // пока можем читать из файла 
-            while ((c = inputFile.read()) != -1) { 
-                if((char)c != '.') 
-                { 
-                    if(c % 2 != 0) 
-                    { 
-                        System.out.println(c); 
-                    } 
-                } 
-                else 
-                { 
-                    break; 
-                } 
-            } 
-        } catch (IOException ex) { 
-            System.out.println(ex); 
-        } 
-    } 
-} 
- 
-</code> 
- 
- 
-===== Запись текстовых данных в файл ===== 
- 
-<code java> 
-package ru.nsesc.lskywalker; 
-import java.io.*; 
- 
-public class Writer { 
-public static void writeData(String text) 
-    { 
-        BufferedWriter writer = null; 
-        try 
-        { 
-            FileOutputStream outputFileStream = new FileOutputStream("filename.txt"); 
-            OutputStreamWriter outputFileWriter = new OutputStreamWriter(outputFileStream); 
-            writer = new BufferedWriter(outputFileWriter); 
-            writer.write(text); 
-             
-            // ВАЖНО. Так как мы используем буферзованный вывод, то выходной поток необходимо закрывать, чтобы  
-            // сохраненные там данные были записаны на диск 
-            writer.close(); 
-        } 
-        catch (FileNotFoundException e) 
-        { 
-            e.printStackTrace(); 
-        } 
-        catch (IOException e) 
-        { 
-            e.printStackTrace(); 
-        } 
-    } 
-}     
- 
-</code> 
- 
-====== Литература ====== 
-|[[http://www.nsunc.com/docs/Java/Heads_first_Java.djvu|Изучаем Java]]| Учебник для курса | 
- 
-|[[http://sourceforge.net/projects/djvu/files/DjVuLibre_Windows/3.5.25%2B4.9/|DjView]] | Программа для чтения DjVu| 
- 
-====== Задачи ====== 
- 
-===== Задача 6 ===== 
- 
-Файл представляет собой набор произвольного количества строк разнообразной длины. Строки разбиты на слова пробелами. Требуется обработать содержимое файла таким образом, чтобы ширина строк в символах была не больше наперед заданного числа. 
- 
-Пример: 
- 
-Дан файл 
-<code> 
-aaa bb ccccc dd e f 
-gg hhh 
-</code> 
- 
-Заданная длина строки: 4 
- 
-<code> 
-aaa 
-bb 
-ccccc 
-dd e 
-f gg 
-hhh 
-</code> 
- 
-===== Задача 7 ===== 
-Удалить из файла все лишние пробелы. Пробелы считаются лишними если: 
- 
-  * Повторяются более чем 1 раз подряд 
-  * Стоят перед знаком препинания 
-  * Стоят после открывающей или перед закрывающей кавычками 
-  * Стоят после открывающей или перед закрывающей скобками 
- 
-===== Списки ===== 
- 
-По приведенному наброску написать все упомянутые функции для реализации списков на языке Java. В результате программа должна как минимум уметь (на тройку): 
- 
-  * создать список 
-  * добавить туда элемент 
-  * удалить элемент 
-  * вывести список на экран 
- 
-<code java> 
-class List 
-{ 
-private: 
-  int data; 
-  List next; 
-public:   
-  // возвращает значение, которое хранится в элементе списка 
-  int getData(); 
-  // устанавливает значение, которое хранится в элементе списка 
-  void setData(int data) 
-  { 
-    this.data = data; 
-  } 
-  // возвращает ссылку на следующий элемент списка 
-  List getNext() 
-  {}; 
-  // устанавливает ссылку на следующий элемент 
-  void setNext(List next) 
-  {}; 
-  // добавляет элемент списка с данными data после элемента с номером index 
-  void addElement(int data, int index) 
-  {}; 
-  // добавляет элемент списка с данными data в конец списка 
-  void addElement(int data) 
-  { 
-     List tmp = new List(); 
-     tmp.setData(data); 
-     tmp.setNext(NULL); 
-     List current = this.next; 
-     while(current != NULL) 
-     { 
-       next = next.getNext(); 
-     } 
-     next.setNext(tmp); 
-  }; 
-  // удаляет элемент с номером index 
-  void removeElement(int index) 
-  {}; 
-  // возвращает голову списка (первый элемент) 
-  List head() 
-  {}; 
-  // возвращает хвост списка (последний элемент) 
-  List tail() 
-  {}; 
-  // возвращает истину, если список пуст 
-  boolean isEmpty() 
-  {}; 
-  // очищает список 
-  void emptyList() 
-  {}; 
-  // считает количество элементов в списке 
-  int size() 
-  {}; 
-  // выводит список на экран 
-  void print() 
-  {}; 
-  public static void main() 
-  { 
-    List list; 
-    // заполним список элементами 
-    for(int i = 0; i < 10; i++) 
-    { 
-      list.addElement(i); 
-    } 
-    // выведем его на экран 
-    list.print(); 
-     
-    return 0; 
-  } 
-} 
-</code> 
- 
-===== Первое задание на оценку ===== 
- 
-Реализовать программу, управляющую библиотекой. В ней должно быть создано необходимое количество классов, которые описывают нужные структуры данных (например, классы Book и Library) 
- 
-В программе должна присутствовать следующая функциональность: 
- 
-  * Добавление книги в библиотеку 
-  * Выдача книги читателю 
-  * Получение книги обратно 
-  * Если книга просрочена, читателя нужно оштрафовать. 
- 
-Пример главного класса программы: 
- 
-<code java> 
-public class Ex { 
-    public static void main(String[] argc) { 
-         
-        // Количество книжек около 10 штук, в качестве примера напишу лишь две 
-        Book book1 = new Book(); 
-        // задание знаений с помощью сеттеров 
-        book1.setAuthor("Пушкин"); 
-        book1.setTitle("Руслан и Людмила"); 
-        book1.setYear(2011); 
-        book1.setPrice(500); 
-        // задание значений полей с помощью конструктора (не обязательно) 
-        Book book2 = new Book("Лермонтов", "Мцыри", 2010, 398); 
-         
-        Library lib = new Library(); 
-         
-        lib.addBook(book1); 
-        lib.addBook(book2); 
-         
-        lib.giveToReader("Сергей", "Руслан и Людмила", 25, 10, 2014); // Выдать книжку читателю Сергей 25 октября 2014 года 
-        lib.giveToReader("Николай", "Руслан и Людмила", 24, 10, 2014); // Вывести сообщение об ошибке, так как эта книжка уже выдана 
-        lib.giveToReader("Марина", "Мцыри", 30, 12, 2014); 
-         
-        lib.getBack("Сергей", "Руслан и Людмила", 14, 12, 2014); // Сдал в срок, просто получить книжку 
- 
-        lib.getBack("Марина", "Мцыри", 10, 9, 2015); // Просрочила, выписать штраф 
-    } 
-} 
- 
-</code> 
- 
-===== Второе задание на оценку ===== 
- 
-Написать программу, реализующую следующие структуры данных: 
- 
-  - Список преподавателей 
-  - Список предметов 
-  - Список соответствия преподавателя предмету (один преподаватель может вести несколько предметов) 
-  - Написать методы: 
-    - Вывести список преподавателей с теми предметами, которые они ведут в формате <code>имя преподавателя предмет1, предмет2, предмет3</code> 
-    - Вывести список предметов <code>предмет имя преподавателя</code> 
-    - Вывести преподавателя с наибольшим количеством предметов 
- 
-<code java> 
-    HashMap<String, String> teachers = new HashMap<String, String>(); 
-    // где-то тут заполняется карта teachers 
-    Iterator it = teachers.entrySet().iterator(); 
-    while (it.hasNext()) { 
-        Map.Entry pairs = (Map.Entry)it.next(); 
-        System.out.println(pairs.getKey() + " = " + pairs.getValue()); 
-        it.remove(); 
-    } 
-</code> 
- 
-===== Итоговая контрольная работа ===== 
- 
-[[https://drive.google.com/file/d/0B88BcoMr40VINTJIX1VuSlAxSTA/view?usp=sharing|Задание]] 
- 
-==== Второй семестр ==== 
- 
-===== Задание 1. Тур де Франс ===== 
- 
-Наша задача состоит в том, чтобы написать красивую объектно-ориентированную программу, которая будет заниматься обработкой данных результатов велогонки Тур де Франс. Данные гонки хранятся в трех текстовых файлах. 
- 
-Файл 1. tdf14_teams.txt 
- 
-В нем перечислены участники и команды. В каждой строке файла хранится запись вида: 
- 
-<code> 
-национальность фамилия имя год_рождения номер команда 
-</code> 
- 
-Например 
- 
-<code> 
-SUI ALBASINI Michael 1980 182 ORICA GREENEDGE 
-</code> 
- 
-Каждый участник однозначно идентифицируется по своему имени, а команда по названию (т.е. дубликатов нет) 
- 
-Файл 2. tdf14_stage.txt 
- 
-В нем перечислены этапы гонки в виде: 
- 
-<code> 
-номер_этапа дата место_отправления место_прибытия дистанция 
-</code> 
- 
-Например 
- 
-<code> 
-1 05/07/14 Leeds Harrogate 190 
-</code> 
- 
-Файл 3. tdf14_ranks.txt 
- 
-В этом файле содержатся рейтинги участников на разных этапах. Каждая строка содержит следующее: 
- 
-<code> 
-Номер_этапа место_участника номер_участника время_участника 
-</code> 
- 
-Участники, сошедшие с дистанции во время этапа с номером i, где (1 ≤ i ≤ 21) исключены из рейтингов для всех последующих этапов. 
- 
-Класс-обертка для чтения из файла прилагается. 
- 
-<code java> 
-import java.io.*; 
- 
-public class ReadData { 
- private BufferedReader reader; // читатель из файла 
- 
- /** 
- * Конструктор. 
- */ 
- public ReadData() { 
- reader = null; 
- } 
- 
- /** 
- * открывает текстовый файл 
- * @param fileName имя файла 
- * @return true если открыли успешно, false иначе. 
- */ 
- public boolean open(String fileName) { 
- try { 
- FileReader fr = new FileReader(fileName); 
- reader = new BufferedReader(fr); 
- return true; 
- } 
- catch(IOException ex) { 
- return false; 
- } 
- } 
- 
- /** 
- * Читает строку из файла, открытого методом open() 
- * @return прочитанная строка или null, если прочитать не удалось 
- */ 
- public String readLine() { 
- try { 
- return reader.readLine(); 
- } 
- catch(IOException ex) { 
- return null; 
- } 
- } 
- 
- /** 
- * Закрывает файл 
- */ 
- public void close() { 
- if (reader != null) { 
- try { 
- reader.close(); 
- } 
- catch(IOException ex) { 
- } 
- } 
- } 
-} 
- 
-</code> 
- 
-Работа делится на две части. Первая заключается в создании системы классов и объектов для представления данных и начальном заполнении их информацией из файла. Вторая в статистической обработке данных. 
- 
-Часть 1. 
- 
-Наша задача состоит в обработке файла tdf14_teams.txt. Для этого требуется создать следующие 4 класса. 
- 
-1. Racer. У нашего участника есть имя, фамилия, национальность, год рождения и номер участия. В классе должны быть необходимые геттеры и сеттеры, а так же метод int age(int year), который позволяет вычислить возраст участника, год передается в качестве параметра (например 2014) 
-2. Team. Команда имеет название и список участников. Должны быть реализованы следующие методы: 
-- Team(String name) конструктор, который принимает в качестве аргумента название команды. Список гонщиков инициализируется пустным списком 
-- void insert(Racer racer) добавляет гонщика в команду 
-- String getName() геттер для названия команды 
-- int numberOfRacers() возвращает количество гонщиков в команде 
-- Racer getRacers(int i) возвращает гонщика по номеру. Нумерация идет с нуля. 
-- int totalAge(int year) возвращает суммарный возраст участников. Год передается в качестве параметра. 
-3. TeamsList. Класс для списка команд. Должны быть реализованы следующие методы: 
-- TeamsList() конструктор, инициализирующий список команд пустым списком. 
-- void insert(Team team) добавляет команду в общий список. 
-- Team getTeam(String teamName) возвращает команду по ее названию. Если такой команды не найдено, должен возвращаться null. 
-- int numberOfTeams() возвращает количество команд 
-- Team getTeam(int i) возвращает i-ю команду. Нумерация с нуля. 
-4. TourDeFrance главный класс программы, содержащий метод main. В этом классе должны выполнятся вызовы методов для чтения данных о велосипедистах, создаваться необходимые объекты (участники, команды, список команд), показываться информация о командах и их участниках. После чтения данных и заполнения объектов нужно ответить на вопрос: каков средний возраст участников Тур де Франс 2014. Ответ округлить до двух знаков после запятой. Набросок для этого класса приведен далее. 
- 
-<code java> 
- 
-public class TourDeFrance { 
- /** 
- * Метод для создания гонщика, на основани файла с списком гонщиков/команд 
- * @param line одна строка из файла 
- * @param teamsList список команд, который заполняется на основании строки из файла 
- */ 
- public static void parceTeamLine(String line, ListeEquipe teamsList) { 
- // Элементы в строках нашего файла разделени знаками табуляции, их мы 
- // и будем использовать чтобы отличить один элемет от другого.  
- String[] elem = line.split("\t"); 
- 
- // Информация о гонщике 
- String nat = elem[0]; 
- String racerFamilyName = elem[1]; 
- String racerName = elem[2]; 
- int year = Integer.parseInt(elem[3]); 
- int number = Integer.parseInt(elem[4]); 
- String teamName = elem[5]; 
- 
- // TODO Найти команду по имени в списке 
- // TODO Если не найдено, то создать команду и добавить в список 
- // TODO Создать гонщика и добавить в команду 
- } 
- 
- /** 
- * Метод для создания команд 
- * @param  fileName Имя файла для команд 
- * @param  teamsList список команд 
- * @return если чтение данных прошло успешно, то возвращается true (это значит, 
- *    что все команды/участники прочитаны и занесены в список) 
- *    В противном случае возвращается false 
- */ 
- public static boolean createTeams(String fileName, ListeEquipe teamsList) { 
- // Объект, связанный с файлом, откуда мы будем построчно читать данные 
- ReadData reader = new ReadData(); 
- 
- if (reader.open(fileName)) { 
- // Пропустим заголовок 
- String line = reader.readLine(); 
- 
- // Обработаем строку для добавления в список 
- while ((line = reader.readLine()) != null) { 
- parceTeamLine(line, teamsList); 
- } 
- reader.close(); 
- return true; // все прошло хорошо 
- } 
- else { 
- return false; // или плохо 
- } 
- } 
- 
- /** 
- * Главный метод  
- * @param args аргументы командной строки 
- */ 
- public static void main(String[] args) { 
- final int currentYear = 2014; 
- final String teamsFileName = "tdf14_teams.txt"; 
- 
- // TODO Создать список команд (и инициализировать!) 
- 
- // Обработка файла с командами 
- boolean res = createTeams(teamsFileName, temsList); 
- if (!res) { 
- System.out.println("Произошла ошибка с чтением списка команд"); 
- } 
- else { 
- // TODO Оставшаяся часть программы (вывести данные, чтобы удостовериться в корректном чтении файла, 
- // вычислить средний возраст участников и т.д. 
- } 
- } 
-} 
- 
-</code>