Пьяньчуга – Моделирование движения пьяного человека на C#

Янв 28
2010

Надоели скучные и однообразные программы? Давайте немного пофантазируем и напишем программу, которая будет моделировать движение пьяного человека, и представим все это графически.

Суть программы будет заключаться в следующем:

Будем моделировать движение пьяного человека (он пьян до того, что не знает что делает, но лежать ему не хочется). В начальный момент времени задается положение человека в некотором дворе с непроницаемыми стенками и одним выходом. Кроме того даются 5 вероятностей – остаться на месте и перемещаться в 4 стороны. Если появляется попытка переместиться через стенку, то «пьяньчуга» остается на месте. Сумма вероятностей строго равно 1. Если «пьяньчуга» нашел выход или попал в один из люков, то моделирование заканчивается и выводится соответствующее сообщение. Подробнее »

Построить треугольник, описать и вписать окружность на C#

Ноя 29
2009

В статье мы займемся рисованием, рисовать будем треугольник, вписанную и описанную окружность. Конечно, рисовать будет программа, код которой мы сейчас напишем.
Координаты вершин треугольника будут находиться в структуре “Pt”. Для этого создадим переменные для работы со структурой и саму структуру.

Pt m1, m2, v1, v2, b1, b2;
public struct Pt
{
	double x;
	double y;
	public Pt(double a, double b)
	{
		x = a;
		y = b;
	}
	public double X
	{
		get { return x; }
		set { x = value; }
	}
	public double Y
	{
		get { return y; }
		set { y = value; }
	}
};

Далее напишем функции для вычисления длин, углов треугольника и т.д. и процедуру для вывода графики на форму.
Пишем функцию нахождения длины строны треугольника по заданным координатам. Будем использовать формулу нахождения расстояния между двумя точками.
S = ((x2 – x1) ^2+ (y2-y1) ^2) ^ (1/2), где (x1, y1) и (x2, y2) – это координаты начала и конца отрезка. Подробнее »

Найти наименьшее общее кратное, используя универсальный алгоритм

Ноя 16
2009

В предшествующей статье я рассказал, как найти наибольшее общее кратное двух чисел, используя алгоритм вычисления НОД. В этой статей мы с вами напишем универсальный алгоритм нахождения НОК. Этот алгоритм позволяет найти НОК не только для двух чисел, но для множества чисел.
Начнем с создания формы проекта, примерная форма показана на рисунке:
app_find_nok_2

Форму создали, разместили необходимые объекты на ней. Теперь будем заниматься написанием кода программы. Числа, для которых будет производиться поиск НОК, будут вводиться через пробел. Для того, что их читать из поля “n_gr ” напишем функцию.

string[] nums(string str, int f_m)
{
	string[] numbers = new string[f_m + 1];
	f_m = 0;
	for (int i = 0; i < str.Length; i++)
	{
		if (str.Substring(i, 1) != " ")
			numbers[f_m] += str.Substring(i, 1);
		else
			f_m++;
	}

	return numbers;
}

Входные параметры “str” и “f_m” – это строка с числа и количество чисел соответственно. Создаем массив размерностью “f_m” и начинаем “выдирать” числа из строки и добавлять их в массив “numbers”. Функция возращает массив с числами из строки. Подробнее »

Найти наименьшее общее кратное (НОК), используя алгоритм НОД

Ноя 16
2009

Сегодня мы поговорим о наименьшем общем кратном (НОК) двух чисел и как его найти. НОК – это целое число, которое делится на два любых целых числа. Например, даны два числа 2 и 3, НОК этих чисел равен 6, т.е. число 6 делится и на 2 и на 3.
Чтобы написать данную программу на C# будем использовать ко всему прочему алгоритм Евклида нахождение НОД. Лучше всего реализовать алгоритм в рекурсивной функции. Подробнее »

Перевод десятичного числа в двоичное на VC++

Ноя 04
2009

Перевод из десятичной системы в двоичную

Как преобразовать десятичное число в двоичный вид на VC++?

Ответ на этот вопрос мы и рассмотрим в этой статье. Мы будем использовать всем известный метод, нахождения двоичного представления десятичного числа – деление числа на 2. Все эти преобразования будут находиться в процедуре “Dec2Bin(int ch)”, где “ch”- число в десятичном представлении, которое собственно мы будем декодировать в двоичное. Подробнее »

Копирование музыки у друзей в SocialEngine Excalibur (Часть 2)

Сен 13
2009

Продолжаем говорить о моде “Копирование музыки у друзей”. В предыдущей статье я рассказал, как сделать эту возможность, но недавно обнаружена недоработка в этом моде, при удалении музыки владельцем удалялась она и у всех скопировавших эту музыку.

Сейчас я расскажу, как сделать, чтобы при удалении музыки владельцем права и сама музыка копировались одному из его друзей, которые скопировали его музыку.

Здесь все просто, необходимо произвести изменения всего в одном файле. Подробнее »

Плагин музыка – копирование музыки у друзей в SocialEngine Excalibur

Авг 30
2009

В этой статье поговорим о плагине “Музыка”, а именно о копировании музыки у друзей. А что тут говорить, такой возможности в плагине “Музыка” нет, так вот я покажу, как в несколько шагов реализовать такую возможность.

Сначала необходимо добавить еще одно поле в таблицу «se_music», где хранятся записи о добавленным песнях. Выполним sql-запрос:

ALTER TABLE `se_music` ADD `owner_user_id` text AFTER `music_user_id`

Для работы функции «is_already_music()», которая возвращает логическую ложь в том случае, если у участника нет данной песни в его коллекции, пропишем ее в класс «user». Подробнее »

Вывод новых групп на главной странице (home.php) в SocialEngine

Авг 22
2009

В плагине Группы как оказалось нет поддержки вывода последних созданных групп на главной на странице home.php, при нажатии на вкладку Группы система думает, а думает о том, зачем Вы на меня кликнули, если меня НЕТ!!!

Чтобы при нажатии на эту вкладку отображались группы сначала скачиваем архив ajax_get_recentgroup.rar

Разархивируем все файлы как они находятся в архиве в каталог с установленным SocialEngine, т.е. файл ajax_get_recentgroup.php в главную папку, а ajax_get_recentgroup.tpl в каталог templates (ваш шаблон).

Все, если у Вас в файле home.tpl есть код, отвечающий за отображение вкладки «Группы» и групп, по нажатию на эту вкладку будут появляться новые группы.

Убираем знак вопроса в ромбе в блоге в SocialEngine

Авг 21
2009

Слово блог в заголовке при просмотре какой-то записи в блоге отображается некорректно, вместо буквы Б отображается знак вопроса в ромбе.
Что надо делать и как исправить данный баг?

А ошибка всего лишь в одном символе, которого нет в файле языка.
В файле языка была запись:

1500125:=%1$ Блог - %2$s

Посмотрите на

%1$

, видим, что здесь нет символа

s

.
Исправляем и у нас получается:

1500125:=%1$s Блог - %2$s

Мне понадобилось это изменить в базе данных, нашел данную запись по запросу

SELECT * FROM `se_languagevars` WHERE `languagevar_id` = 1500125

Находите и исправляете на правильную запись:

%1$s Блог - %2$s

Все! Любуемся красотой Вашего блога!

Добавление фотографии к участникам в блоке ‘Сейчас на сайте’ в SocialEngine Excalibur

Авг 21
2009

В движке SocialEngine в блоке ‘Сейчас на сайте’ отображаются имя и фамилия участников, которые в данный момент находятся на сайте. Отображение только этих данных как-то ухудшают видимость этого блока, с помощью внедрения в код нескольких строчек и в этом блоке будет отображаться и фотография участника наряду с именем и фамилией.

Что для этого нужно сделать? Подробнее »

Улучшенный поиск по группам в SocialEngine Excalibur

Авг 15
2009

В этой статье я расскажу, как сделать поиск по группам с такими параметрами как точный и приблизительный поиск с поиском по названию, описанию и лидеру группы. Сделать это очень просто: несколько строчек кода на php, пару sql-запросов и несколько полей в html.

Выполним пару действий шаг за шагом:

  1. Открыть: browse_groups.php
    Найти
    Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

    		else
    		{
    			$where .= " AND se_groups.group_groupcat_id='{$groupcat['groupcat_id']}'";
    			$groupsubcat = $groupcat;
    			$groupcat = $database->database_fetch_assoc($database->database_query("SELECT groupcat_id, groupcat_title FROM se_groupcats WHERE groupcat_id='{$groupcat['groupcat_dependency']}' LIMIT 1"));
    		}
    	}
    }

    Подробнее »

Добавление полей страна, регион и город в расширенный поиск в SocialEngine Excalibur

Авг 15
2009

В прошлой статье я рассказал Вам о решении проблемы с добавлением полей страна, регион и город в профиль в движок SocialEngine Excalibur, сегодня мы добавим эти поля в расширенный поиск – это тоже немало важный апгрейд. Написание этой статьи меня подтолкнул вопрос, зачем нужны поля страна, регион и город в профиле участника, если нет возможности найти участников, используя данные поля?

Для добавления данных полей необходимо выполнить пару шагов:

  1. Открыть: search_advanced.php
    Найти
    Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

    $search_query = "SELECT se_users.user_id, se_users.user_username, se_users.user_fname, se_users.user_lname, se_users.user_photo FROM se_profilevalues LEFT JOIN se_users ON se_profilevalues.profilevalue_user_id=se_users.user_id LEFT JOIN se_levels ON se_levels.level_id=se_users.user_level_id WHERE se_users.user_profilecat_id='{$cat_selected}' AND se_users.user_verified='1' AND se_users.user_enabled='1' AND (se_users.user_search='1' OR se_levels.level_profile_search='0')";
    if($user_online == 1) { $search_query .= " AND user_lastactive>'".(time()-10*60)."' AND user_invisible=0"; }
    if($user_withphoto == 1) { $search_query .= " AND user_photo <> ''"; }
    if($field->field_query != "") { $search_query .= " AND ".$field->field_query; }

    Заменить
    Подсказка: Произведите замену ранее найденных строк.

    $search_query = "SELECT se_users.user_id, se_users.user_username, se_users.user_fname, se_users.user_lname, se_users.user_photo FROM se_profilevalues LEFT JOIN se_users ON se_profilevalues.profilevalue_user_id=se_users.user_id LEFT JOIN se_levels ON se_levels.level_id=se_users.user_level_id LEFT JOIN cites_profilevalues ON se_profilevalues.profilevalue_user_id=cites_profilevalues.profilevalue_id WHERE se_users.user_profilecat_id='{$cat_selected}' AND se_users.user_verified='1' AND se_users.user_enabled='1' AND (se_users.user_search='1' OR se_levels.level_profile_search='0')";
    if($user_online == 1) { $search_query .= " AND user_lastactive>'".(time()-10*60)."' AND user_invisible=0"; }
    if($user_withphoto == 1) { $search_query .= " AND user_photo <> ''"; }
    if($field->field_query != "") { $search_query .= " AND se_profilevalues.".$field->field_query; }
    if(isset($_POST['dhtmlgoodies_country']) && $_POST['dhtmlgoodies_country'] > 0)
    $search_query .= " AND cites_profilevalues.profilevalue_7 = '" . $_POST['dhtmlgoodies_country'] . "'";
    if(isset($_POST['dhtmlgoodies_region']) && $_POST['dhtmlgoodies_region'] > 0)
    $search_query .= " AND cites_profilevalues.profilevalue_8 = '" . $_POST['dhtmlgoodies_region'] . "'";
    if(isset($_POST['dhtmlgoodies_city']) && $_POST['dhtmlgoodies_city'] > 0)
    $search_query .= " AND cites_profilevalues.profilevalue_9 = '" . $_POST['dhtmlgoodies_city'] . "'";

    Подробнее »

Добавление полей страна, регион и город в SocialEngine Excalibur

Авг 12
2009

SocialEngine Excalibur

Мне и моему другу захотелось создать свою социальную сеть, перебрали множество движков и остановились на SocialEngine Excalibur 3.15. По нашему мнению, SocialEngine Excalibur – это отличный движок для создания своей социальной сети, множество настроек, плагинов, но самое главное – серьезно мощный и простой в понимании код скриптов. Если имеются знания в таких языках как html, php и JavaScript, можно с легкостью переписать код скриптов SocialEngine Excalibur под свои нужды.

У нас возникла проблема, когда необходимо было добавить новые поля в профиль участника: страну, регион и город. В скрипте SocialEngine Excalibur, который имеется у нас, была база с этими данными, в файлах присутствовал код, ответственен за работу с данными полями. Но возник вопрос, почему при редактировании профиля не было этих полей?

Сначала искали ответ на этот вопрос на форуме SocialEngine Excalibur, даже создали свою тему, но ответа так и не получили. Я решил, что ответ мы не получим и если получим, то не скоро. Было принято решение сделать все своими руками, применив знания программирования.

SocialEngine Excalibur

Для того чтобы поля «Страна», «Регион» и «Город» появились в SocialEngine Excalibur в разделе «Редактировать профиль» необходимо: Подробнее »

Реализовать алгоритм сжатия данных RLE

Июн 02
2009

Перед написанием программы разберемся, в чем суть алгоритма RLE? Суть алгоритма состоит в том, что последовательность из n одинаковых символов k заменяется парой символов nk. Например, нужно закодировать строку “aaaaarooow”, после кодирования по алгоритму RLE получаем сжатую строку вида “5ar3ow”. Кодированная строка на 4 символа меньше, соответственно эффективность алгоритма доказана. Теперь можно приступить к реализации данного алгоритма в виде программного кода на C#.

Текст, который нужно будет кодировать, получим из текстового поля “text_input” и запишем в строковую переменную “str1”. Далее будем пробегать по каждому символу в этой строке, получать текущий символ в строковую переменную “ch”. В том случае, если данный символ равен следующему, продолжаем поиск количества таких символов, начиная текущей позиции в строке.

После всего этого формируем кодируемую строку равную количеству найденных символов и самому символу, которых повторяется друг за другом n-e количество раз. Если найден только один символ строка принимает значение равное этому символу.
Все выше описанные операции выполняются до тех пор, пока не будет достигнут конец файла.

string str1 = text_input.Text, str = "", ch = "";
int i, k, j;
for (i = 0; i < str1.Length; ) // от 0 до длины строки
{
ch = str1.Substring(i, 1); // получаем текущий символ из строки str1
k = 0; //счетчик количества повторяющихся символов
if (i == str1.Length - 1) // если последний символ
{
str += Convert.ToString(ch);
break; //выходим из цикла
}
if (str1.Substring(i + 1, 1) == ch)
{
for (j = i; j < str1.Length; j++)
{
if (str1.Substring(j, 1) == ch)//если текущий символ равен символу из строки ch
{
k++;//увеличиваем счетчик
}
else
break; //выходим из цикла
}
i = j;
}
else
i++;
if (k != 0)
str += Convert.ToString(k) + Convert.ToString(ch);
else
str += Convert.ToString(ch);

}
text_output.Text = str;
button2.Enabled = true;

Подробнее »

Получить последовательность a1…an цифр 0,1,2, в которой нет смежных одинаковых участков

Май 18
2009

Программа должна генерировать последовательность любой длины из цифр 0, 1 и 2, но она не должна содержать в себе одинаковых участков таких как, например, последовательность 1010 – недопустимо, т.к. участки 10 и 10 расположены один за другим; последовательность 120120 – имеются два одинаковых участка 120 и 120.

Напишем функцию “check_str”, которая будет возвращать “false” в случае если найден одинаковый участок в последовательности “s”.

Boolean check_str(string s)
{
string start, end;
for (int i = 1; i < = s.Length / 2; i++)
{
start = s.Substring(0, s.Length - i);
end = s.Substring(s.Length - i, i);
if (start.Length < end.Length)
return true;
if (start.Substring(start.Length - i, i) == end)
return false;
}
return true;
}

В функции выполняется проверка на все возможные смежные одинаковые участки. Разберем работу функции на примере последовательности 120120. Для выполнения всех проверок достаточно всего 3 прохода, при первом проходе сравниваются последние цифры 120120, если они равны, то одинаковый участок найден и выполняется завершение работы функции, в противном случае выполняется 2-й проход и уже сравниваются цифры 01 и 20. При следующем и последнем проходе сравниваются первые и последние 3 цифры 120 и 120, вот теперь они равны и производится выход из функции, возвращается значение “false”. Подробнее »

Статистика