четверг, 26 марта 2015 г.

FORMATIVE: Нашлась причина вопроса, из предыдущего поста

Вопрос из предыдущего поста появился на занятиях после проведения десятиминутной самостоятельной работы. Когда фантазия по вариантам на "летучку" иссякла, я сделала заготовку для вершины двусвязного списка.
using System;

public class Node {
    double weigth; // вес вершины
    Node next; // следующая вершина
    Node prev; // предыдущая вершина
    // свойства

    public double Weigth { get { return weigth; } }
    // конструктор с параметром - вес вершины
    public Node(double weigth) {
        if (weigth >= 0) {
            this.weigth = weigth;
            next = null;
            prev = null;
        }
        else throw new ArgumentOutOfRangeException("Должен быть не меньше нуля!");
    }
    
    // добавить вершину после текущей addAfter
    
}

class Program {
    static void Main(string[] args) {
        Node head = new Node(0);
        Node curr = head;
        int N = 33;
        // добавляем N вершин с случайными 
        // весами из диапазона от [0;1)
        Random rnd = new Random();
        for (int i = 0; i < N; i++) {
            curr.addAfter(new Node(rnd.NextDouble()));
            curr = curr.Next;
        }
        curr.addAfter(new Node(1));
        curr = head;
        // вывод списка на экран
        do {
            Console.WriteLine("{0:f3}", curr.Weigth);
            curr = curr.Next;
        } while (curr != null);
    }
}

И задание: В файле HandOuts_56.4.1.cs Класс Node представляет вершину двусвязного списка, поля класса – следующая и предыдущая вершина (Справка: у первой вершины списка ссылка на предыдущую вершину равна null, у последней ссылка на следующую равна null). Вершины связаны между собой отношением агрегации. Дополните описание класса: 1. кодом свойств Next и Prev, возвращающих ссылки на предыдущую и следующую вершину 2. методом addAfter() с параметром – Node – вершиной добавляемой после текущей. Остальной код консольного приложения оставьте без изменений.

четверг, 19 марта 2015 г.

MEMO: ссылки и значения

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

Есть код на C#:
using System;

class Program {
    static void Display(int[] ar, string name) {
Console.Write(name + ":");
        foreach (int i in ar)
            Console.Write(i + " ");
        Console.WriteLine();
    }
    static void Main(string[] args) {
        int[] a = new int[3];
        a[0] = 1;
        a[1] = 2;
        a[2] = 3;
        Display(a, "a");
        int[] b;
        b = a;
        Display(b, "b");
        a[1] = 5; // изменили значение
        Display(a, "a");
        Display(b, "b");
        b = new int[2]; // изменили ссылку
        Display(a, "a");
        Display(b, "b");
    }
}
почему два последних вывода различны, если была команда b = new int[2]; ?

четверг, 12 марта 2015 г.

Let's get loud

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