Наследование в C++: чуть глубже, чем обычно

Дата: 26th Июль 2010. Автор: Jester. Рубрика: cpp, ООП
Метки: , ,

Наследование – это один из механизмов объектно-ориентированного программирования.  Важно заметить, что в наше время практически каждый современный язык поддерживает эту парадигму. Но стоит сказать, что в C++ есть некоторые особенности в возможностях этого механизма.
Далее »

Smart GWT: первые шаги

Дата: 25th Июль 2010. Автор: Jester. Рубрика: GWT, Java
Метки: , ,

В этой статье я бы хотел рассказать о фреймворке Google Web Toolkit (GWT, а точнее о его расширении – Smart GWT, но сути не меняет). Для начала немного теории.

Далее »

HTML 5: Canvas

Дата: 7th Июль 2010. Автор: KAS. Рубрика: HTML
Метки: , , ,

В HTML 5 появилось много интересных и нужных возможностей, которых нехватало и они были реализованы например flash’ем… Собственно статья о возможности рисовать в canvas

Далее »

Иерархия объектов DOM

Дата: 4th Июль 2010. Автор: KAS. Рубрика: HTML
Метки: ,

На картинках изображены иерархии объектов DOM
js-objects.png

на данной картинке присутствуют не все объекты DOM т.к. они почти не используются (такие как images и forms).

Следующая картинка более полная

object_dom.gif

Далее »

JavaScript: случайные числа

Дата: 2nd Июль 2010. Автор: KAS. Рубрика: JavaScript
Метки: ,

Для генерации случайных (ну на самом деле псевдослучайных) чисел нам потребуется две функции: Math.random() – генерирует случайное число от 0 до 1, Math.floor() – отбрасывает дробную часть.
Генерируем случайные числа от 0 до n:

function rand(n){
	return Math.floor(Math.random()*n);
}

Генерируем случайные числа от n до m:

function rand2(n, m){
	return Math.floor(Math.random()*(m-n))+n;
}

Небольшой пример использования рандомных чисел:

function aforizm()
{
	arr=new Array();
	arr[0]="Если ты мудр, не противоречь богачу, правителю, ребенку, старику, аскету, мудрецу, женщине, дураку и учителю.";
	arr[1]="Жестокость — даже к злым — ведет в ад. Что же говорить о жестокости к добрым?";
	arr[2]="Избегай дел, зависящих от других; стремись лишь к тому, что зависит от тебя самого.";
	arr[3]="Женщины учены от природы, мужчины — от книг.";
	arr[4]="Добродетель в том, чтобы делать ближним добро и не причинять зла. А делать ближним добро — это делать для них то, чего желал бы самому себе.";
	return arr[Math.floor(Math.random()*5)];
}

Альтернативная генерация рандомных чисел:

function rand(){
	now = new Date();
	return (now.getSeconds())%10;
}

Насколько хорошо твой браузер поддерживает HTML5

Дата: 14th Июнь 2010. Автор: lollypop_69. Рубрика: Интересные_вещи
Метки:

html5test
Сайт html5test протестирует ваш браузер на совместимость с html5. Тестирование производится по различным категориям и в результате выдает сумму всех баллов.
Для примера тест 3-ех браузеров на совместимость с html5:

  • Opera 10.53 – 129 points
  • Firefox 3.6.3 – 139 points
  • Chrome 6.0.427 dev – 217 points

Алгоритм Дейкстры

Дата: 9th Июнь 2010. Автор: KAS. Рубрика: Алгоритмы
Метки: , ,

Алгоритм нахождения расстояния от источника до всех остальных вершин в графе с неотрицательными весами дуг — метод Дейкстры.
Далее »

Алгоритм Форда-Белмана

Дата: 8th Июнь 2010. Автор: KAS. Рубрика: Алгоритмы
Метки: , ,

Алгоритм Форда-Белмана для поиска кратчайшего расстояния в графе.

        private void algFordaBelmana()
        {
            int s=Convert.ToInt32(textBox5.Text) - 1;                                  //произвольная вершина графа, которая послужит началом пути
            int[] D=new int[n];
            initGraph();
            initMatrixWeight();
 
            if (s < 0 || s >= n)
                return;
 
            for (int i = 0; i < n; i++)
            {
                D[i] = A[s, i];
            }
 
            D[s] = 0;
 
            for (int k = 0; k < (n - 1); k++)
            {
                for (int v = 0; v < n; v++)
                {
                    for (int u = 0; u < n; u++)
                    {
                        if (v != s || u != s || u!=v)
                        {
                            D[v] = min(D[v], D[u] + A[u, v]);
                        }//if
 
                    }//for
 
                }//for
 
            }//for
 
            textBox6.Clear();
            for (int i = 0; i < n; i++)
            {
                textBox6.Text += "Кратчайшее расстояние от V" + (s + 1) + " до V" + (i + 1) + " = " + D[i] + "\r\n";
            }
 
        }//algFordaBelmana()

Цикл гамильтона

Дата: 6th Июнь 2010. Автор: KAS. Рубрика: Алгоритмы
Метки: , ,

Циклом Гамильтона называется путь проходящий через каждую вершину графа только 1 раз.
Псевдокод:

procedure ГАМИЛЬТ(k)
{генерация всех гамильтоновых циклов, являющихся расширением последовательности X[1], . . ., X[k – 1]: массив X — глобальный }
begin
    for y принадлежит ЗАПИСЬ [X[k – 1]] do
       if  (k = n +1) and (y = v0) then write(X[1], . . ., X[n], v0)
        else if DOP[y] then
           begin X[k] := y; DOP[y] := ложь;
                     ГАМИЛЬТ (k +1);
                     DOP[y] := истина
            end
 end; { ГАМИЛЬТ  }
 begin { главная программа }
     for  v принадлежит V  do DOP[v] := истина; { инициализация }
           X[1] := v0; { v0 = произвольная фиксированная вершина графа }
           DOP[v0] := ложь;
           ГАМИЛЬТ (2);
  end.

Далее »

Рисуем стрелку

Дата: 30th Май 2010. Автор: KAS. Рубрика: Алгоритмы
Метки: , ,

Код для отрисовки стрелочки аля вектор

//by Makar
double u = Math.Atan((double)(y2 - y1) / (x2 - x1));
if (x2 < x1)
{ u += Math.PI; }
int x = Math.Abs(x2 - x1) / 2 + Math.Min(x1, x2);
int y = Math.Abs(y2 - y1) / 2 + Math.Min(y1, y2);
if (y1 >= y2)
{
    gr.DrawLine(pen, x, y, x - 25 * (float)Math.Cos(u + 0.2), y - 25 * (float)Math.Sin(u + 0.2));
    gr.DrawLine(pen, x, y, x + 25 * (float)Math.Cos(u - 0.2 + Math.PI), y + 25 * (float)Math.Sin(u - 0.2 + Math.PI));
}
if (y2 > y1)
{
    gr.DrawLine(pen, x, y, x + 25 * (float)Math.Cos(u + 0.2 + Math.PI), y + 25 * (float)Math.Sin(u + 0.2 + Math.PI));
    gr.DrawLine(pen, x, y, x - 25 * (float)Math.Cos(u - 0.2), y - 25 * (float)Math.Sin(u - 0.2));
}