Поиск по этому блогу

четверг, 19 апреля 2012 г.

Шаблон проектирования

На одном сайте нашёл вот такой интересный проект. На примере Макдональдса показывается как нужно конструировать программу.
На таких примерах и стараюсь нацчиться программировать)))
Цитата с того сайта.
А теперь, чтобы лучше понять суть паттерна Builder, рассмотрим практический пример, в котором вы будете собирать объект HappyMeal — знаменитый детский набор, предлагаемый в сети закусочных McDonald’s. В первом случае вы соберете бюджетный вариант HappyMeal (маленькая порция пепси-колы, гамбургер, картошка и игрушка), а во втором — BigHappyMeal (гамбургер вы замените на бигмак и увеличите порцию напитка).
И сам код программы:

class HappyMeal
 
  {
 
    // содержит информацию о  составе HappyMeal
 
    ArrayList parts = new ArrayList();
 
    // Добавляете информацию  о новой составной части
 
    public void Add(string part)
 
    {
 
      parts.Add(part);
 
    }
 
    // Выводите информацию о  всем наборе
 
    public void Show()
 
    {
 
      Console.WriteLine(" Happy Meal Parts ——-");
 
      foreach (string part in parts)
 
      Console.WriteLine (part);
 
    }
 
  }


среда, 18 апреля 2012 г.

Кнопка STOP

Иногда нужно сделать кнопку, которая останавливала какой-нибудь процесс. (кнопку делал в Win Form' е и WPF) В моём случае я писал генератор случайных последовательностей с бесконечным циклом генерации, мне нужно было остановить генерацию. Самый просто способ создания кнопки Stop:
1 - нужно создать глобальную переменную (булевскую) 

private bool stop = false;

2 - прописать эту переменную перед циклом, который нужно остановить. Пример:

stop = false;
for (int i = 0; i < 10; i++)
            {

                тело цикла
            }

3 - вставить проверку на true или false данной переменной в тело цикла

stop = false;
for (int i = 0; i < 10; i++)
            {

                if (stop == true) break;
            }

4 - сделать кнопку, которая будет изменять значение нашей переменной. Пример:


        private void button2_Click(object sender, RoutedEventArgs e)
        {
            stop = true;
        }

Кнопка готова к работе)

Кнопка очистки всех TextBox' ов на форме в WPF

Задача: на форме есть n - колличество TextBox'ов, их нужно очистить все одновременно нажатием одной кнопки.
Делаем функцию:

void LoopVisualTree(DependencyObject obj)//обнуление текст боксов
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {

                if (obj is TextBox)
                {
                    ((TextBox)obj).Text = null;
                }
                // РЕКУРСИЯ
                LoopVisualTree(VisualTreeHelper.GetChild(obj, i));
            }

        }

Потом нажимаем на кнопку на форме 2 раза, чтобы перейти в её обработчик и прописываем там(пример!!!!):

private void button10_Click(object sender, RoutedEventArgs e)
        {
           
            LoopVisualTree(this);
                        
        }

Application.DoEvents в WPF

В Win Form есть матод Application.DoEvents, который обрабатывает все сообщения Windows, которые в данный момент находятся в очереди сообщений.
Но в WPF его нет. Его можно создать сделав вот такой метод:


public static void DoEvents()//Реализация DoEvents в WPF
        {
            if (Application.Current != null)
                Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
        }

Затем, в тело самой программы просто нужно добавить DoEvents(), и бедет работать так же, как если бы это был  Application.DoEvents в Win Forme.

вторник, 10 апреля 2012 г.

Полезные ссылки

Список полезных ссылок:
  1. http://www.manoli.net/csharpformat/ - форматирование исходного кода, можно шарп вставить в блог через html
  2. surfingbird.ru/  - сайт для поиска информации по личным интересам
  3. http://blogcoding.ru/ - сайт полезных вещей для Blogger
  4. http://qr-coder.net/ - QR генератор
  5. http://android-mobile.ru/qr-code/generator - QR герератор
  6. http://gskinner.com/RegExr/ - для тестирования регулярных выражений

воскресенье, 8 апреля 2012 г.

Пузырьковая сортировка

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

namespace BubbleSort
{
    class Program
    {
        public static void OutputStudentArray(Student[] students) 
        {
            foreach(Student s in students)
            {
                Console.WriteLine(s.GetString());
            }
        }
        static void Main(string[] args)
        {
            Student[] students = new Student[5];
            students[0] = Student.NewStudent("Homer", 0);
            students[1] = Student.NewStudent("Lisa", 4.0);
            students[2] = Student.NewStudent("Bart", 2.0);
            students[3] = Student.NewStudent("Marge", 3.0);
            students[4] = Student.NewStudent("Maggie", 3.5);
            Console.WriteLine("До сортировки");
            OutputStudentArray(students);
            Console.WriteLine("Сортировка");
            Student.Sort(students);
            Console.WriteLine("Вывод отсортированного списка");
            OutputStudentArray(students);
            Console.WriteLine("Нажмите <Enter>");
            Console.ReadLine();
        }
    }
}
namespace BubbleSort
{
    class Student
    {
        public string sName;
        public double dGrade = 0.0;
        public static Student NewStudent(string sName, double dGrade) 
        {
            Student student = new Student();
            student.sName = sName;
            student.dGrade = dGrade;
            return student;
        }
        public string GetString() 
        {
            string s = "";
            s += dGrade;
            s += " - ";
            s += sName;
            return s;
        }
        public static void Sort(Student[] students) 
        {
            bool bRepeatLoop;
            do
            {
                bRepeatLoop = false;
                for (int index = 0; index < (students.Length - 1); index++)
                {
                    if (students[index].dGrade < students[index + 1].dGrade)
                    {
                        Student to = students[index];
                        Student from = students[index + 1];
                        students[index] = from;
                        students[index + 1] = to;
                        bRepeatLoop = true;
                    }
                }
            } while (bRepeatLoop);
        }
    }
}

JavaScript числа Фибоначчи

Начал изучать JavaScript. Потехоньку балаюсь с кодом. Сделал вычисление чисел Фибоначчи.
Вот  код:

<html>
<head>
<p>
Проба чисел фибоначи
</p>
</head>
<body>
<script>
var a, b, c; //создаются 3 переменные
a = 1;
b = 0;
for(var i = 0; i < 20; i++){
//здесь меняем/сдвигаем значения a и b, чтобы получить число из суммы двух предыдущих
c=a+b;
a=b;
b=c;
alert(c);
}
</script>
</body>
</html>

суббота, 31 марта 2012 г.

Число Фибоначчи

Данный код программы реализует последовательность Фибоначчи. Каждое следующее число равно сумме двух предыдущих.

int a, b, c; //создаём 3 переменные

a = 1;

b = 0;

//инициализируем 2 из 3х переменные

for (int j = 0; j < 20; j++)

{

   c = a + b;

   a = b;

   b = c;

// меняем значения местами, это даст нам возможность высчитывать

// каждое следующее число из суммы 2х предыдущих

   Console.WriteLine(c);

}

 Console.ReadLine(); 

пятница, 30 марта 2012 г.

Пара простых генераторов случайных последовательностей.


Первый:

int passwordLength = 10;
string allChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-";
char[] chars = new char[passwordLength];
Random rd = new Random();

for (int i = 0; i < passwordLength; i++)
{
chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
}

Второй:

List<char> chars = new List<char>();
for(int b = 0; b<10; b++)
{
for (int i = 97; i < 123; i++)
{
chars.Add(Convert.ToChar(i));
}
for (int i = 65; i < 91; i++)
{
chars.Add(Convert.ToChar(i));
}
for (int i = 48; i < 58; i++)
{
chars.Add(Convert.ToChar(i));//генерируем символы заглавные, строчные и цифры
}

string s = chars;

Третий:

Char[] pwdChars = new Char[62] {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q',
'r','s','t','u','v','w','x','y','z','Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G',
'H','J','K','L','Z','X','C','V','B','N','M','1','2','3','4','5','6','7','8','9','0'};
char[] pass = new char[32];
Random rnd= new Random();
for(int i = 0; i < pass.Length; i++)
{
pass += pwdChars[rnd.Next(0, 62)];
}


вторник, 27 марта 2012 г.

электронные часы на C#

Блог создал исключительно для себя в первую очередь, чтобы не забыть важные вещи.

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

Первая запись будет посвящена написанию электронных часов на C#.
Для начала нужно создать новый проект WPF.
На форму кидаем Label и Timer. Устанавливаем размер формы 800/300 (ширина и высота).
Затем дважды нажимаем мышкой на форму, чтобы перейти к написанию кода.
Вот сам код:

namespace Clock
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            nastroiki_formi();//вызываем функцию, чтобы всё работало
        }

        public void nastroiki_formi() 
        {
            label1.Text = "";
            FontFamily Label_shrift = new FontFamily("Digit");//шрифт
            System.Drawing.Color cvet_formi;
            cvet_formi = System.Drawing.Color.Black;//цвет формы
            this.BackColor = cvet_formi;//фон(за цвет отвечает BackColor)
            label1.Font = new Font(Label_shrift, 80, FontStyle.Regular);//присвоили Лэйблу шрифт
            this.Text = "Clock";
            System.Drawing.Color label_shrift_color;
            label_shrift_color = System.Drawing.Color.White;
            label1.ForeColor = label_shrift_color;//цвет лейбла (за цвет отвечает ForeColor)
            //две переменные для размещения в центре формы часов
            int x = this.Size.Width / 3;
            int y = this.Size.Height / 3;
            //Значения передаем в свойство Location (отвечает за координаты верхнего левого угла Label)
            label1.Location = new System.Drawing.Point(x, y);
            //указываем максимальный и минимальный размер формы
            this.MaximumSize = new Size(1000, 350);
            this.MinimumSize = new Size(1000, 350);
            //активируем таймер
            timer1.Enabled = true;
            timer1.Interval = 1;
            
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //Заносим в Label текущее время используя свойства Now и DateTime
            //Чтобы присвоить время Label нужно воспользоваться ToLongTimeString()
            label1.Text = DateTime.Now.ToLongTimeString();
        }
    }
}

Часы готовы!
На youtube есть видео с точно такими же часами. Ссылка http://www.youtube.com/watch?v=yVpFxqiIgcw