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

Янв 28
2010

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

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

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

Построить треугольник, описать и вписать окружность на 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) – это координаты начала и конца отрезка. Read the rest of this entry »

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

Ноя 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”. Функция возращает массив с числами из строки. Read the rest of this entry »

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

Ноя 16
2009

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

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

Ноя 04
2009

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

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

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

Реализовать алгоритм сжатия данных 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;

Read the rest of this entry »

Получить последовательность 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”. Read the rest of this entry »

В данном тексте найти наиболее часто встречающуюся последовательность символов максимальной длины

Май 12
2009

Для написания программы, которая будет искать в тексте последовательность символов максимальной длины, встречающуюся чаще всех остальных последовательностей, необходимо составить историю действий. Программа будет делить строку на равные части, сначала на 2, потом на 3 и так до длины строки, и сравнивать первую часть последовательности со второй.

Например, строку “aabb” при делении на 2 получаем две последовательности: “aa” и “bb”, затем “aa” сравниваем с “bb”. Если первая последовательность равна второй, то указываем, что последовательность “aa” встречается в тексте 2 раза, иначе 1 раз. В данном случае “aa” встречается 1 раз. В конце выполняем поиск из последовательностей символов, которые встречаются наиболее часто, и выбираем последовательность максимальной длины.
Запоминать последовательности и количество вхождений этих последовательностей будем в структуре, создадим ее:

public struct Symbols
{
string words;
int kolvo;

public Symbols(string w, int k)
{
words = w;
kolvo = k;
}
public string Words
{
get { return words; }
set { words = value; }
}
public int Kolvo
{
get { return kolvo; }
set { kolvo = value; }
}
};

Чтобы не добавлять в структуру одинаковые последовательности, напишем функцию, которая будет возвращать логическую “ложь” в том случае, если последовательность уже имеется в структуре: Read the rest of this entry »

Поиск чисел Пифагора в заданном диапазоне

Апр 23
2009

Статья посвящена числам Пифагора, научимся находить их, используя программу на C#, которую мы сейчас напишем. Сначала мы должны знать, что такое число Пифагора? Число Пифагора – это число в квадрате, которое равно сумме квадратов других двух чисел.

Начнем реализацию программы с создания формы.
cisla_piphagora
Сразу можно создать событие выхода из программы, для этого два раза кликните по кнопке “Выход” и пропишите в процедуру следующий:

this.Dispose(); //Принудительно завершаем работу программы

Таким же образом создайте событие клика по кнопке “Найти”. Начинаем писать программный код для поиска чисел Пифагора.
Очистим поле результатов поиска и объявим нужные переменные.

lstFinds.Items.Clear(); //очищаем результаты поиска
int i1, i2, i3, a, b; //первое, второе и третье числа, диапазон поиска

Выполним проверку на заполнение полей диапазона.

if (txtDiapFirst.Text != "" && txtDiapSecond.Text != "") //если диапазон указан

Read the rest of this entry »

Работа со структурами в C++

Апр 11
2009

В этой статье вы узнаете, что такое структура и как с ней работать на C++. И так, начнем с определения структуры.
Структура – это тип данных, который состоит из одного или множества других типов. Чтобы обратиться к этим типам, присвоить или взять значение, нужно иметь доступ к структуре.

Сначала инициализируем структуру, делаем все границ всех процедур и функций:

struct STRUCTURA
{
char* PEREM1;
int PEREM2;
};

Здесь мы инициализировали структуру с именем “STRUCTURA” и двумя переменами (символьного типа и числового). Для работы со структурой нужно создать ее с заданием длины структуры и переменной, которая будет работать с ней:

STRUCTURA str[5];

Для ввода данных в структуру необходимо обращаться к нужному элементу структуры. Для этого создадим процедуру, в которой будет происходить заполнения структуры:

void input(STRUCTURA * str)
{
for (int i = 0; i < 5; i++)
{
cout << i+1 << "элемент структуры - PEREM1";
cin >> str[i]. PEREM1;
cout < < i+1 << "элемент структуры – PEREM2";
cin >> str[i]. PEREM2;
cout< }
}

Read the rest of this entry »

Как найти все цифры числа 100!.

Апр 10
2009

Как найти все цифры числа 100!?

Вы никогда не задавали себе этот вопрос? Это очень интересный вопрос, ведь используя, стандартный калькулятор Windows вы получите укороченную версию этого числа. Даже написав функцию вычисления факториала просто нельзя поместить ни в одну числовую переменную все цифры факториала 100, т.к. оно состоит из 158 цифр. О каких цифрах идет речь и как их получить, мы поговорим в этой статей.

Начнем с того, нам нужно написать собственную функцию умножения, так как мы умножаем на простом листке бумаги. Она будет умножать числа вида [999] * [9], т.е. числа, которые содержать одну или несколько цифр на числа, содержащие одну цифру.

string mnog(string s, int i)
{
string res = "";
int x = 0, d, cifra = 0;
for (int j = s.Length - 1; j >= 0; j--)
{
cifra = Convert.ToInt32(s.Substring(j, 1)) * i + x;
if (j != 0)
{
d = cifra % 10;
x = cifra / 10;
}
else
d = cifra;
res = Convert.ToString(d) + res;
}
return res;
}

Входные параметры s и i – это числа, которые необходимо перемножить, соответствует выражению s * i. Алгоритм работы данной функции заключается в следующем:

  1. Извлекаем j-ю цифру из строки s (в начале это последняя цифра), умножаем ее на i и прибавляем значение полученное в пункте №3;
  2. Получаем остаток от деления вычисленного значения на число 10;
  3. Получаем результат от целочисленного деления вычисленного значения на 10;
  4. Добавляем вычисленное значение из пункта №2 к результату;
  5. Повторяем пункты №1 – №4 пока не дойдем до первой цифры из строки s. Переходим к пункту №6;
  6. Повторяем пункты №1 и №4, завершаем выполнение операции умножения.

Read the rest of this entry »

Поиск чисел, равных сумме факториалов своих цифр

Апр 08
2009

В этой статье вы узнаете, как решить и написать следующую задачу на C#:

  • Найти числа, равные сумме факториалов своих цифр. Например, 1!+4!+5! = 145

Как эта задача решается? Мы устанавливаем диапазон чисел, среди которых будем искать такие числа, которые равны сумме факториалов своих цифр. Дальше находим факториал каждой цифры данного числа, суммируем суммы факториалов и проверяем на равенство: [сумма] = [число], где [сумма] – это, найденная сумма факториалов всех цифр данного числа, а [число] – данное число в диапазоне. Read the rest of this entry »

Получить все числа в диапазоне от 1 до kkk…kkk (всего n цифр) в системе счисления k

Апр 06
2009

В этой статье я хочу рассмотреть задачу:
Получить все числа в диапазоне от 1 до kkk…kkk (всего n цифр) в системе счисления k. K и n вводятся с клавиатуры.

Основное, что должны сделать – это найти общее количество чисел, которые нужно декодировать в систему счисления k и саму декодировку чисел. Количество чисел должно вычисляться по формуле: max = k в степени n – 1, где max – общее количество чисел. Декодировка должна быть универсальна, т.е. переводить десятичное число в любую систему счисления. Read the rest of this entry »

Переставить числа 0, 1 и 2 в порядке возрастания, используя перестановку 2-х элементов

Апр 05
2009

В данной статье будет разобрано решение следующей задачи:
В массиве стоят числа 0, 1 и 2. Переставить их в порядке возрастания, если единственной разрешенной операцией (помимо чтения) над массивом является перестановка двух элементов.

Реализовать программный код будем на C# в среде разработки Visual Studio 2008 как Windows приложение с формами.
Начинаем, конечно, с создания проекта с формой. На форме нужно разместить следующие объекты: Read the rest of this entry »

Вычислить сумму каждой рядом стоящей группы чисел на C#

Апр 04
2009

В данной статье будет разобрано решение следующей задачи:
Дан массив a[1]..a[n] и число m <= n. Для каждой группы из m стоящих рядом членов (таких групп, очевидно, n-m+1) вычислить ее сумму.

Как мы решим эту задачку? Сразу хочу скачать, реализовать программу будем на C# в среде разработки Visual Studio 2008 как Windows приложение с формами.

Так что необходимо сначала создать проект с формой, разместить на ней все объекты как показано на картинке ниже Read the rest of this entry »

Статистика