Бінарні дерева і фракали

Бінарне дерево може також виступати у ролі конструктивного фрактала. Він будується за наступним прин

Бінарне дерево може також виступати у ролі конструктивного фрактала. Він будується за наступним принципом: на кожному рівні вертикальна лінія розділяється на дві з деяким показником зменшення. Такі розгалужені фрактали називаються дендритами (в перекладі з грецької « δένδρον» — дерево).

Код для побудови такого фракталу:

private void DrawTTree(int x, int y, int lenght, int level)
        {
            if (lenght < 4) return;
            var l = lenght / 2;
            var pen = new Pen(Colors[level % 5], (5-level)>1?(5-level):1);
            _graphics.DrawLine(pen,x, y, x, y - l);
            _graphics.DrawLine(pen,x, y - l, x - l, y - l);
            _graphics.DrawLine(pen,x, y - l, x + l, y - l);
            DrawTTree(x - l, y - l, l, level + 1);
            DrawTTree(x + l, y - l, l, level + 1);
        }
Існують і інші подання двійкового дерева: H-дерево і V-дерево.
 
H-дерево будується наступним чином: беремо одиничний відрізок, і на першому кроці два коротших відрізка поміщаємо перпендикулярно кінцях початкового так, щоб утворилася буква H, повторюємо дії.

 

Код для побудови такого фракталу:

 {            
            if (lenght < 20) return; 
            var l = lenght/2;            
            int x1=centerX-l, x2=centerX+l, y1=centerY-l/2, y2=centerY+l/2;
            var pen = new Pen(Colors[level], 4-level/2);            
            _graphics.DrawLine(pen, x1, centerY, x2, centerY);
            _graphics.DrawLine(pen, x1, y1, x1, y2);
            _graphics.DrawLine(pen, x2, y1, x2, y2);          
            DrawHTree(x1, y1, l, level + 1);
            DrawHTree(x1, y2, l, level + 1);
            DrawHTree(x2, y1, l, level + 1);
            DrawHTree(x2, y2, l, level + 1);
        }

 

V-дерево будується аналогічно:

 private static void DrawVTree(int centerX, int centerY, int lenght, int level)
{
            if (lenght < 2) return;
            var delta= Convert.ToInt32(lenght * Math.Sqrt(2)/2.0);
            var x1 = centerX - delta;
            var x2 = centerX + delta;
            var y = centerY - delta;
            var pen = new Pen(Colors[level%5], 2);
            _graphics.DrawLine(pen, centerX, centerY, x1, y );
            _graphics.DrawLine(pen, centerX, centerY, x2, y );
            DrawVTree(x1, y, 2*delta/3, level + 1);
            DrawVTree(x2, y, 2*delta/3, level + 1);            
}

 

Урок 02. Робота з поштовим сервісом Outlook Web Access

Outlook Web Access забезпечує користувачеві можливості аналогічні настільному застосунку Microsoft O

Outlook Web Access забезпечує користувачеві можливості аналогічні настільному застосунку Microsoft Outlook 2013 чи пізнішої версії, однак є певні особливості.

Створення та надсилання листа

  1. Натисність плитку «Пошта»

Плитки сервісів Office 365

  1. У вікні Outlook натисніть «Створити» (або клавішу N на клавіатурі)  

  2. У полі «Кому» розпочніть набір імені або прізвища особи, якій збираєтесь надіслати листа.
  3. Поле «Копія» доцільно заповнювати у разі надсилання листа декільком особам
  4. У полі «Додайте тему» коротко опишіть зміст листа. Заповнення цього поля правилом гарного тону.
  5. Нижче подається зміст листа

 Отримання листа

Як і інших поштових системах листи в Outlook потрапляють у папку «Вхідні». Аналогічно іншим поштовим сервісам

Клас для роботи з Yandex Translate API

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using WindowsFormsApplication2.Properties;
 
namespace WindowsFormsApplication2
{
    public  class YandexTranslate
    {
        private readonly string _apiKey;
 
        public YandexTranslate()
        {
            _apiKey = Settings.Default.ApiKey;
        }
 
        public YandexTranslate(string key)
        {
            _apiKey = key;
        }
 
        public  List<string> GetLangs()
        {
            var requestString =
                String.Format("https://translate.yandex.net/api/v1.5/tr.json/getLangs?key={0}",
                _apiKey);
            var request = WebRequest.Create(requestString);
            var response = request.GetResponse(); 
            var yandexDataContractSerializer = new DataContractJsonSerializer(typeof(GetLangsData));
            var getLangsData = (GetLangsData)yandexDataContractSerializer.ReadObject(response.GetResponseStream());
            return getLangsData.Dirs;
        }
        public  List<string> GetLangs(string ui)
        {
            var requestString =
                String.Format("https://translate.yandex.net/api/v1.5/tr.json/getLangs?key={0}&ui={1}",
                _apiKey, ui);
            var request = WebRequest.Create(requestString);
            var response = request.GetResponse();
            var sr = new StreamReader(response.GetResponseStream());
            var json = sr.ReadToEnd();
            json = json.Remove(json.Length - 3);
            json = json.Substring(json.IndexOf("langs") + 8);
            json = json.Replace('"', ' ');            
            return json.Split(',').ToList();
        }
        public  string Detect(string text)
        {
            var requestString =
                String.Format("https://translate.yandex.net/api/v1.5/tr.json/detect?key={0}&text={1}",
                _apiKey, text);
            var request = WebRequest.Create(requestString);
            var response = request.GetResponse();
            var yandexDataContractSerializer = new DataContractJsonSerializer(typeof(DetectData));
            var detectData = (DetectData)yandexDataContractSerializer.ReadObject(response.GetResponseStream());
            return detectData.Lang;
        }
        public  List<string> Translate(string lang, string text)
        {
            var requestString =
                String.Format("https://translate.yandex.net/api/v1.5/tr.json/translate?key={0}&text={1}&lang={2}&format={3}",
                _apiKey, text, lang, "plain");
 
            var request = WebRequest.Create(requestString);
            if ((requestString.Length > 10240) && (request.Method.StartsWith("GET")))
                throw new ArgumentException("Text is too long (>10Kb)");
            var response = request.GetResponse();
 
            TranslateData translateData;
            var yandexDataContractSerializer = new DataContractJsonSerializer(typeof(TranslateData));
            try
            {
                translateData = (TranslateData)yandexDataContractSerializer.ReadObject(response.GetResponseStream());
            }
            catch (Exception exception)
            {
                translateData = new TranslateData();
                translateData.Text = new List<string>();
            }
            return translateData.Text;
        }
        [DataContract]
        internal class TranslateData
        {
            [DataMember (Name = "code")]
            internal int Code { get; set; }            
            [DataMember(Name = "lang")]
            internal string Lang { get; set; }
            [DataMember(Name = "text")]
            internal List<string> Text { get; set; }
        }
        [DataContract]
        public class GetLangsData
        {
            [DataMember(Name = "dirs")]
            internal List<string> Dirs { get; set; }
        }
        [DataContract]
        internal class DetectData
        {
            [DataMember(Name = "code")]
            internal int Code { get; set; }            
            [DataMember(Name = "lang")]
            internal string Lang { get; set; }
        }
    }
}

 

Урок 01. Підготовка роботи в Office 365

Для доступу до порталу Office 365 слід скористатися посиланням https://portal.office.com &amp;nbsp;
  1. Для доступу до порталу Office 365 слід скористатися посиланням https://portal.office.com
  2. У відповідних полях вкажіть свій логін та пароль. Рекомендуємо відмітити пункт "Не виходити", якщо ви використовуєте власний ПК чи планшет. 
    Оновлення паролю
  3. При першому вході в систему необхідно оновити пароль.
  4. При успішному оновленні паролю відбудеться перехід на головну сторінку порталу Office 365, де Вам буде запропоновано встановити Office для ПК.
  5. Прокрутивши екран головної сторінки, ми можемо побачити плитки сервісів Office 365.
  6. Для завершення початкових налаштувань потрібно натиснути плитку "Пошта". Оберіть мову та часовий пояс.

Як серіалізувати ArrayList у C#

Наведу приклад серіалізації колекції ArrayList з власних елементів MyElementClass: using Syste

Наведу приклад серіалізації колекції ArrayList з власних елементів MyElementClass:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Xml.Serialization;
using System.IO; 

namespace ConsoleApplication1
{
 class Program
 {
   static void Main(string[] args)
   {
     ArrayList al = new ArrayList();
     XmlSerializer serializer=new XmlSerializer(typeof(ArrayList),new Type[] {typeof (MyElementClass )});
     al.Add(new MyElementClass());
     al.Add (new MyElementClass (2,"AAA"));
     Console.WriteLine("Writing With Stream"); 
     try
     {
        Stream writer = new FileStream("C:\A.XML", FileMode.Create);
        serializer.Serialize(writer, al);
        writer.Close();
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.Message );
      }
  }
} 

Нижче подано код для елемента

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; 

namespace ConsoleApplication1
{
  public class MyElementClass: IComparable 
  {
    public int ID;
    public string Name;
    public MyElementClass()
    {
      ID = 1;
      Name = "ABC";
    }
    public MyElementClass(int id, string name)
    {
      ID = id;
      Name = name;
    }
    public int CompareTo(object obj)
    {
       if (obj is MyElementClass)
        {
           MyElementClass otherElement = (MyElementClass)obj;
           return this.ID.CompareTo (otherElement.ID);
        }
       else
        {
          throw new ArgumentException("object is not a MyElement");
        }
   }
 }
}