KostyeFromHelen



20. Программа
15.05.2014 12:33:26

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

a) abcd – четырехзначное число;

b) a, b, c, d - разные цифры;

c) ad - cd = a + b + c + d;

В ответе укажите только число.

Хитровымученный способ:

class Program
{
static void Main(string[] args)
{
int a;
int b;
int c;
int d;
string e;
string g;
int x;
int z;
int k = 0;
int m = 0;
for (int i = 1000; i < 10000; i++)
{
a = i / 1000;
b = (i / 100) % 10;
c = (i / 10) % 10;
d = i % 10;

if (a != b & a != c & a != d & b != c & b != d & c != d)
{
e = Convert.ToString(a) + Convert.ToString(d);
g = Convert.ToString(c) + Convert.ToString(d);

x = Convert.ToInt32(e) - Convert.ToInt32(g);
z = Convert.ToInt32(a) + Convert.ToInt32(b) + Convert.ToInt32(c) + Convert.ToInt32(d);
if (x == z)
{
Console.WriteLine(i);
k = k + 1;
}
}
}
Console.Write("Количество чисел: ");
Console.WriteLine(k);

}
}



Теги:

Просмотров: 2626 | Подробнее...


 
19. Шифрование SHA на C#
23.03.2012 07:10:11

using System.Security.Cryptography;
namespace ConsoleApplication1
{   
class Program   
{       


static void Main(string[] args)       
{           
Console.WriteLine(HashCode("Hello World"));       
}


public static string HashCode(string str)       
{           
string rethash = "";           
try           
{
System.Security.Cryptography.SHA1 hash = System.Security.Cryptography.SHA1.Create();     
System.Text.ASCIIEncoding encoder = new System.Text.ASCIIEncoding();               
byte[] combined = encoder.GetBytes(str);               
hash.ComputeHash(combined);               
rethash = Convert.ToBase64String(hash.Hash);           
}           
catch (Exception ex)           
{               
string strerr = "Error in HashCode : " + ex.Message;           
}           
return rethash;       
}    
}
}



Теги: SHA на C# | шифрование на C#

Просмотров: 4223 | Подробнее...


 
18. Шифр Цезаря на C#
03.03.2012 14:48:46

Шифр Цезаря - это шифр, когда-то каждая буква в тексте заменяется другой, сдвинутой по алфавиту на некоторый шаг. 

Форма выглядит так:

В ЛистБокс мы будем помещать новый алфавит, для наглядности. В текстовые поля вбивать текст и шаг. Один метод будет шифровать другой расшифровывать.

Собственно код:

 private void button1_Click(object sender, EventArgs e) 
        {
listBox1.Items.Clear();
textBox3.Text = "";
int move = 0;
string[] array = new string[] { "а", "б", "в",
"г", "д", "е", "ё", "ж",
"з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с",
"т", "у", "ф", "х",
"ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я" };
 try
{
 move = Convert.ToInt32(textBox1.Text);
}
catch
{
MessageBox.Show("Установите шаг шифрования!"); 
return;
}

string[] array2;
 array2 = array.Skip(move).Concat(array.Take(move)).ToArray(); 
//Данная функция 
смещает по кругу ячейки массива. Для расшифровки стоит
просто поменять move на 33-move
foreach (string element in array2)
 {
listBox1.Items.Add(element.ToString()); //добвляем
в ЛистБокс новый алфавит } string text = textBox2.Text; foreach (char bykva in text) { for (int i = 0; i < array.Length; i++) { if (bykva.ToString().ToLower() == array[i])
{ textBox3.Text += array2[i]; break; } else { if (bykva.ToString() == " " || bykva.ToString() == "." ||
bykva.ToString() == "," || bykva.ToString() == ":" ||
bykva.ToString() == ";" || bykva.ToString() == "?" ||
bykva.ToString() == "!") // эти знаки печатаются без зашифровки
                        {
                            textBox3.Text += " ";
                            break;
                        }
                    }
                }
            }
        }
Несложное шифрование, если не использовать какие-то дополнительные алгоритмы.

Теги: шифрование на C# | шифр цезаря на C#

Комментариев 4 | Просмотров: 23317 | Подробнее...


 
17. Отправить письмо на C#
28.12.2011 09:26:58

Напишем программку, которая будет отправлять письмо на почтовый ящик. Для этого нам понадобится следующая ссылка на сборку: using System.Net.Mail; И для того, чтобы можно было использовать потоки: using System.Threading;

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

string mailBody = string.Format("Здравсвуйте {0}, вы добавили статью на сайт Земля для тебя! За что мы вас благодарим. Если ваша статья проходит по требованиям, то вскором времени вы сможете увидеть её на нашем сайте. Спасибо!", author); // это текст письма. Ничего необычного. Переменная author = TextBox1.Text;

String smtpHost = "SMTP.mail.RU"; //Адрес SMTP-сервера. Я использовал smtp сервер mail.ru

int smtpPort = 25; //Порт SMTP-сервера. Стандартный для mail.ru

String smtpUserName = "****@mail.ru"; //Логин. Моя ящик, от лица которого будет приходить письмо.

String smtpUserPass = "*******"; //Пароль к моему ящику.

SmtpClient client = new SmtpClient(smtpHost, smtpPort);//Создание подключения

client.Credentials = new NetworkCredential(smtpUserName, smtpUserPass); //Дословно - удостоверение личности. Мол подходит ли пароль к ящику и так далее.

String msgFrom = "*****@mail.ru"; //Адрес для поля "От"

String msgTo = email; //Адрес для поля "Кому" (адрес получателя). Переменная email, это тоже textbox, где написал ящик автора.

String msgSubject = "Спасибо за статью!"; //Тема письма

String msgBody = mailBody; //Текст письма, который писали выше(для удобства)

MailMessage message = new MailMessage(msgFrom, msgTo, msgSubject, msgBody); //Создание сообщения автору.

MailMessage message2 = new MailMessage(msgFrom, msgFrom, "Добавлена статья", "На earth4you.ru добавлена статья"); //Создание сообщение самому себе, чтобы узнать, что кто-то добавил статью.

try

{

//Отсылаем сообщение, если всё удачно.

client.Send(message);

Thread.Sleep(1000); // Между сообщениями ждём 1 секунду

client.Send(message2);

}

catch

{

Label2.Text = "Письмо не отправлено."; //Если по каким-то причинам произошёл сбой.

}

 

 

Вот и всё, ничего сложного. Куда сложнее отправлять письма напрямую через прокси :)

 



Теги: письмо на C# | C# | smtpmail

Просмотров: 5971 | Подробнее...


 
16. Разработка налогового калькулятора на C#
18.11.2011 07:28:34

Давайте более профессионально разберём как создаются программы на C#, а именно, мы ответим на следующие вопросы:

 

  1. Составим функциональные требования и бизнес требования к программе
  2. Выберем модель жизненного цикла, составим календарный график, оценим трудоъёмкость
  3. Составим техническое задание к программе по ГОСТ 19.201-78
  4. Разработаем программу "налоговый калькулятор"
Ну и пока хватит, более точное задание можно скачать по ссылке. Советую всем скачать, ибо полное задание очень большое.
И так начнём.

 
15. Листы, foreach, goto - поиск простых чисел
12.05.2011 05:32:49

Читал недавно одну книгу про простые числа. Это числа, которые делятся только на себя и на единицу. Все остальные числа составные, их можно представить как произведение простых чисел.Вот и решил написать программу, чтобы она искала простые числа.
Пояснения к коду смотри ниже.

static void Main(string[] args)
{
List prCh  = new List();
prCh.Add(2);
for (int i = 3; i < 17000; i++)
{
foreach(int ch in prCh)
{
if (i % ch == 0)
{
goto L;
}

}
prCh.Add(i);
L:  continue;
}

foreach (int ch in prCh)
{
Console.Write(ch + " ");
}
}

Лист представляет собой строго типизированный список объектов. В лист prCh будем добавлять найденные простые числа. Алгоритм такой: мы каждое число делим на простые числа в листе, если ни на одно из чисел не делится, значит наше число простое. Для этого добавим первое простое число в лист. Это число 2.

Мы будем использовать цикл foreach, этот цикл используется только для чтения. Мы не можем изменять наш лист в цикле, поэтому добавление нового числа(prCh.Add(i);) мы вынесли за цикл. Поэтому, если наше текущее число не является простым, мы должны перепрыгнуть строчку добавления. Для этого мы используем конструкцию goto L; L - это любая метка в коде, на которую мы перепрыгиваем. Около метки стоит ключевое слово continue, которое говорит о том, что мы перейдём к следующей итерации нашего основного цикла for.

В самом конце мы просто выводим все объекты нашего листа.

P.S. Знак % вычисляет остаток от деления.



Теги: List C# | goto C# | поиск простых чисел C# | foreach C#

Комментариев 11 | Просмотров: 3798 | Подробнее...


 
5. Оператор if в C# и реализация решения квадратного уравнений (перезалито, см. по номерам)
06.05.2011 08:46:47

Оператор if мы будем рассматривать прямо в ходе реализации решения квадратного уравнения.
А чтобы реализовать данную задачу, нам надо подумать ход действий. Для начала вспомним, что такое квадратное уравнение:

Квадратное уравнение, это уравнение вида a*x^2 + b*x + c = 0, где a,b,c коэффициенты при иксах.(^2 - возведение в квадрат)

Чтоб найти корни квадратного уравнения, надо найти дискриминант. Обозначим его буквой d:

d = b^2 - 4*a*c

Так же как мы помним из школьной программы, если дискриминант меньше 0, то решений нет. Если равен 0, то имеется одно решение, если больше 0, то имеем 2 корня.

Корни находятся по формуле:

x = (-b ± √d)/(2*a)

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

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

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите первый коэффициент");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите второй коэффициент");
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите третий коэффициент");
int c = Convert.ToInt32(Console.ReadLine());

double d;
d = b * b - 4 * a * c;

if (d < 0)
{
Console.WriteLine("Дискриминант отрицательный, корней нет");

}
if (d == 0)
{
double x1 = -b / (2 * a);
Console.WriteLine("Дискриминант = 0, x = {0}", x1);

}
if (d > 0)
{
double x1 = (-b + Math.Sqrt(Convert.ToDouble(d)))/(2*a);
double x2 = (-b - Math.Sqrt(Convert.ToDouble(d))) / (2 * a);
Console.WriteLine("Дискриминант = {0}, x1 = {1}, x2 ={2}",d, x1,x2);
}
}
}
}

Я думаю тут всё ясно, как-раз таки кроме оператора if:

if(d<0), оператор if дословно переводится как "если". В скобках написано условие. То есть Если d меньше 0 и дальше в { } мы пишем, что надо делать если условие выполняется.

Так же существует оператор else(иначе) и else if, он выполняется, если условие в if не выполняется, то выполняется else. Программно это выглядит так:

if(условие)
{
код
}
else
{
код
}
else if(условие)
{
код
}

Ну вот и всё. Следующие несколько уроков мы будем работать над этой задачей, улучшать её программный код, так как он на данный момент не идеальный.



Теги:

Комментариев 2 | Просмотров: 11584 | Подробнее...


 
14. Несколько видов сортировок массивов
20.04.2011 08:29:49

int[] a = { 1, 5, 3, 6, 2, 4 };
int min = 0;
int x;
int m = 0; //счётчик проходов

//сортировка выбором

for (int i = 0; i < a.Length; i++)
{ // i - номер текущего шага
min = i; x = a[i];
for (int j = i + 1; j < a.Length; j++) // цикл выбора наименьшего элемента
{
if (a[j] < x)
{
min = j; x = a[j]; // k - индекс наименьшего элемента
}
m = m + 1;
}
a[min] = a[i]; a[i] = x; // меняем местами наименьший с a[i]

}
for (int i = 0; i < a.Length; i++)
{
Console.Write(a[i] + " ");
}
Console.WriteLine("Количество проходов сортировкой выбором: " + m);


//сортировка пузырьком

int[] b = { 1, 5, 3, 6, 2, 4 };
m = 0;

for (int i = 0; i < b.Length; i++)
{            // i - номер прохода
for (int j = b.Length - 1; j > i; j--)
{     // внутренний цикл прохода
if (b[j - 1] > b[j])
{
x = b[j - 1]; b[j - 1] = b[j]; b[j] = x;
}
m = m + 1;
}
}
for (int i = 0; i < b.Length; i++)
{
Console.Write(b[i] + " ");
}
Console.WriteLine("Количество проходов сортировкой пузырьком: " + m);

//сортировка вставками

int[] c = { 1, 5, 3, 6, 2, 4 };
m = 0;

for (int i = 1; i < c.Length; i++)
{
x = c[i];
int j = i - 1;
while (j >= 0 & c[j] > x)
{
c[j + 1] = c[j];
j--;
m = m + 1;
}
c[j + 1] = x;
}

for (int i = 0; i < c.Length; i++)
{
Console.Write(c[i] + " ");
}
Console.WriteLine("Количество проходов сортировкой вставками: " + m);


//Сортировка Шелла


int[] arr = { 1, 5, 3, 6, 2, 4 };
int step = arr.Length / 2;
m = 0;

while (step > 0)
{
for (int i = 0; i < (arr.Length - step); i++)
{
int j = i;
while ((j >= 0) && (arr[j] > arr[j + step]))
{
int tmp = arr[j];
arr[j] = arr[j + step];
arr[j + step] = tmp;
j--;
m = m + 1;
}
}
step = step / 2;
}
for (int i = 0; i < c.Length; i++)
{
Console.Write(arr[i] + " ");
}
Console.WriteLine("Количество проходов сортировкой Шелла: " + m);

 

На википедии есть хорошая теория по всем видам сортировок. А на викибукс реализация этих сортировок на различных языках программирования. Там же можно посмотреть и о более сложных сортировках. Ссылка на перечень сортировок.

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



Теги: сортировка массивов C#

Комментариев 2 | Просмотров: 4955 | Подробнее...


 
13. Тренинг. Вывод комплексных чисел.
11.04.2011 07:20:53

Любое комплексное число может быть представлено как формальная сумма x + iy, где x и y — вещественные числа, i — мнимая единица. [сслыка]

Задача: написать класс, который будет в зависимости от значения x и y выводить комплексное число. Например, если оба значения равны нулю, то мы должны вывести ноль, а не 0 + 0i, если значение x = 0, а y = 5, то мы должны вывести  5i, а не 0 + 5i, и так далее.

Решение:

Создадим отдельный класс Complex:

class Complex
{
double Re; \значение x
double Im; \значение y
public Complex(double x, double y)\банальный конструктор
{
Re = x;
Im = y;
}
public string toString()\метод, который будет решать, как именно нам надо будет выводить число.
{
String s=""; //результат сразу будем помещать в переменную типа стринг
if (Re == 0 & Im == 0)//смотри сноску 1
{
s = "0";
}
else if (Re < 0 & Im < 0)//смотри сноску 2

{
Im = -Im;
s = Re.ToString() + " - " + Im.ToString() + " * i";
}
else if (Re > 0 & Im > 0)//смотри сноску 3

{
s = Re.ToString() + " + " + Im.ToString() + " * i";
}
else if (Re == 0 & Im != 0)//смотри сноску 4
{
s = Im.ToString() + " * i";
}
else if (Re != 0 & Im == 0)//смотри сноску 5
{
s = Re.ToString();
}


return s;//не забываем ключевое слово return
}
}

 

Сноска 1. Если и x и y равны нулю, то нам просто надо вывести ноль. Поэтому не долго думая, приравниваем переменной s текстовое значение равно "0".

Сноска 2. Иначе, если оба значения меньше нуля, то x мы оставляем так же, а у переменной y меняем знак на +, и в нашем шаблоне x + yi - меняем + на -. Это сделано для того, чтобы выражение не получилось вида x + - yi и не было перегружено лишними знаками.

Сноска 3. Иначе, если оба выражения больше нуля, то мы всё оставляем как есть.

Сноска 4. Если x равен нулю, а y не равен нулю, то мы просто убираем x и выводим только y.

Сноска 5. Если же x не равен нулю, а y равен нулю, то мы оставляем только x.

Заметьте, что мы поставили else if, а не просто if. Иначе мы будет проходить по всем 5 if, для чего будет задействовано лишне время. Для нас это конечно не критично, но всё же.

Ну а в main просто перебираем и смотрим, что получается.

Complex a = new Complex(2, 3);

Console.WriteLine(a.toString());//toString название метода класса Complex, а не преобразование типов.



Теги: комплексные числа C#

Просмотров: 4721 | Подробнее...


 
12. Классы, конструкторы, методы в C#. Транспонирование матриц.
20.03.2011 14:28:01

В этом уроке быстренько пробежимся по классам, конструкторам классов и методов.

Класс — это конструктор, который позволяет создавать свои собственные пользовательские типы путем группирования переменных других типов, методов и событий. Ссылка. Если говорить человеческим языком, класс это что-то наподобие шаблона, в котором мы описываем его внутренние переменные. Потом мы сможем создать любое кол-во экземпляров класса, что позволит нам по сто раз не писать одно и то же, а использовать всего один шаблон.

Класс содержит в себе конструктор, который называется по названию класса. Если мы имеем public class myClass, то и конструктор , будет выглядить так же: public myClass(int arg) {...}. Конструктор может не принимать переменных, а может принимать и ни одну. Ничто не мешает нам создать множество различных конструкторов.

public class myClass
{
private int m;
private int n;

myClass()//конструтор не принимает значения
 {

}
myClass(int m)
//конструтор принимает одно значение
  {
this.m = m;
}
myClass(int m, int n)
//конструтор принимает два значения
{
this.m = m;
this.n = n;
}

}


Важно сказать, что конструктор не возвращает значения.

 

Метод представляет собой блок кода, содержащий набор инструкций. Программа инициирует выполнение операторов, вызывая метод и задавая необходимые аргументы метода. Ссылка. В отличие от конструктора, метод может возвращать значение, для этого используется ключевое слово return;

Разберём всё это на простом примере.  Задание: создадим класс, который будет содержать конструктор и 3 метода. Конструктор будет заполнять нашу матрицу. Первый метод будет печатать матрицу, второй метод будет транспонировать матрицу, третий метод будет считать сумму элементов на диагонали матрицы и выдавать нам это значение.

public class matrica //создаём класс matrica

{

private int n;

private double[ , ] a;

public matrica(int n) //конструктор примает значение n, которое является размерностью.

{                           

this.n = n;

a = new double[n, n];

for (int i = 0; i < n; i++)

{

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

{

a[i,j] = i+2*j+(i*j); //заполняем матрицу с помощью простого линейного уравнения

}

}

}

 

public void print() //первый метод, который печатает матрицу.

{

for (int i = 0; i < n; i++)

{

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

{

Console.Write(" {0}",a[i, j]);

}

Console.WriteLine();

}

}

public void transp()//второй метод, который транспонирует матрицу.

{

double tmp;

for (int i = 0; i < n; i++)

{

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

{

tmp = a[i, j];

a[i, j] = a[j, i];

a[j,i] = tmp;

}

 

}

}

public double diag()//третий метод, который возвращает сумму элементов ноа диагонали.

{                              

double s = 0;

for (int i = 0; i < n; i++)

{

s = s + a[i, i];

}

return s;//не забываем ключевое слово return.

}

}

Ну вот и весь код класса matrica.

Теперь заполним основной класс Program:

class Program

{

static void Main(string[] args)

{

matrica a = new matrica(4); //создаём экземпляр класса, передаём размер - 4 на 4.

a.print();//печатаем матрицу, смотрим.

a.transp();//транспонируем матрицу.

Console.WriteLine();//выводим пустую строчку, чтоб данные слитно неписались

a.print();//печатаем матрицу, смотрим.

Console.WriteLine();//печатаем пустую линию.

Console.WriteLine(a.diag());//печатаем сумму элементов на диагонали.

}

}

 

Вот и всё.

Прошу прощения, что код выглядит не совсем структурировано. Технические проблемы:)




Теги: транспонирование матрицы на C# | конструкторы в C# | методы в C# | классы в C#

Комментариев 1 | Просмотров: 23996 | Подробнее...


 
11. Открыть\закрыть CD-ROM на C#.
14.02.2011 13:20:54

Управление дисководом дело не хитрое.

Только стоит немного разобраться, что тут да как.

[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)] //подключаем библиотеку, которая позволяет управлять CD-ROM'om. Функция mciSendStringA позволяет отправлять мудьтимидийным устройствам сообщения.
protected static extern int mciSendString (string mciCommand, StringBuilder returnValue, int returnLength, IntPtr callback); //создаём экземпляр класса

static void Main(string[] args)
{

int result = mciSendString("set cdaudio door open", null, 0, IntPtr.Zero); //шлём команду открыться
result = mciSendString("set cdaudio door closed", null, 0, IntPtr.Zero);// ну а здесь - закрыться. 

 

Вы наверно подумаете, как это можно знать, как это учить. Скажу вам, что это просто надо понимать. И в нужный момент иметь на вооружение.



Теги: закрыть CD-ROM | открыть CD-ROM | C#

Просмотров: 5606 | Подробнее...


 
10. Сложение одномерных матриц
26.01.2011 09:56:19

В впродолжение темы - простая задача: сложение одномерных матриц.

int[] array = new int[5]; //входной массив
int[] array2 = new int[5]; //входной массив
int[] array3 = new int[5]; //выходной массив

for (int i = 0; i != 5; i++) //заполняем массив
{
Console.WriteLine("Введите {0} элемент массива", i);
array[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i != 5; i++) //заполняем массив
{
Console.WriteLine("Введите {0} элемент массива", i);
array2[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i != 5; i++) //складываем массивы
{
array3[i] = array[i] + array2[i];
}

 ну а дальше печатаем массив
Console.WriteLine("Массив состоит из чисел:");
for (int i = 0; i != 5; i++)
{
Console.Write("{0} ", array3[i]);
}

 

Дело 2ух мину. Вместо сложения можно использовать что угодно, умножение, деление и так далее.



Теги: Массивы в C# | матрицы в c# | сложение матриц в c# | сложение массивов

Просмотров: 4247 | Подробнее...


 
9. Массивы. Нахождение максимального и минимального числа в массиве.
02.01.2011 17:16:21

Давно я ничего не писал, честно говоря просто лень. Ну да ладно. Кстати говоря всех с новым годом! А теперь к делу.

Массивы бывают разные: одномерные массивы, многомерные массивы и масивы масивов(когда элементами массива являются так же массивы).

Важно помнить, что индекс в массивах начинается с 0 и до n-1(а не с 1 до n).

Для примера напишем программу, в которой мы определим одномерный массив и найдём в нём максимальное и минимальное число:

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] array = new int[10]; //объявили одномерный массив из 10 интенджеровских чисел.
int min; // здесь будет храниться минимальное число массива
int max; //ну а здесь максимальное
for (int i = 0; i != 10; i++) сделаем так, чтобы массив заполнял пользователь с клавиатуры.
{
Console.WriteLine("Введите {0} элемент массива", i);
array[i] = Convert.ToInt32(Console.ReadLine());
}
max = array[0];//и максимальное и минимальное значение в начале равно первому элементу массива. Это логично я думаю и понятно всем.
min = array[0];
for (int i = 1; i != 10; i++)
{
if (array[i] > max)//если текущий элемент больше максимального, то он становится максимальным.
{
max = array[i];
}
if (array[i] < min)//если текущий элемент меньше минимального, то он становится минимальным.

{
min = array[i];
}

}
Console.WriteLine("Максимальное число в массиве: {0}", max);
Console.WriteLine("Минимальное число в массиве: {0}", min);

//ну и выводим их.
}
}
}

 

Вот и всё. Я не стал использовать try-catch для отлова ошибок, когда вводишь не int число, а другое. Сделаете это сами, можете прислать в комментарии код исправленный :)



Теги: поиск максимальноозначения в массив | поиск минимального значения в масси | работа с массивами в C# | Массивы в C#

Комментариев 4 | Просмотров: 73713 | Подробнее...


 
8. Работа с папками и файлами
27.10.2010 16:57:46

Написал мне тут как-то друг, что ему надо создать 1000 папок, в каждой из этих папок ещё 1000 папок. Ручками естественно такое не сделаешь, ну и сделал он это на языке C++.

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

Для начало нам нужно подключить новое пространство имён, для это просто в самый вверх к имеющемуся списку добавим строчку:
using System.IO;

Ну а дальше собственно код:

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string activeDir = @"D: estdir2"; //
просто переменная типа стринг, которая хранит некий путь.
string newFileName;//
ещё одна стринговская переменная, которая будет хранить имя файла, который мы будем создавать.
Directory.CreateDirectory(activeDir);//Эта строчка как раз и создаёт нашу директорию(папку), ключевое слово тут Create.
for (int i = 0; i < 1000000; i++)//цикл мы будем использовать для того, чтобы создать много файлов, а не один.
{

newFileName = Convert.ToString(i+".txt");//
имя файла у нас будет равно просто порядковому числу - i + "txt", чтобы он был текстового формата. Конечно можно и не писать формат, тогда файл будет без формата.
activeDir = Path.Combine(activeDir, newFileName);//В этой строчке ключевым является метод Combine, не трудно догадаться, что он просто соединяет две строки в путь.

StreamWriter sw = new StreamWriter(activeDir);
Этой строчкой создаём новый файл для записи. О классе StreamWriter почитать лучше на msdn.

sw.WriteLine("dddddddd");
//Записываем в файл пару буковок :)
sw.Close();//Закрываем файл(!!!). Не забывайте это делать, распространенная ошибка.

activeDir = @"D: estdir2";//"
Переходим" обратно в корень созданного каталога.
}

}
}
}

Вот и весь код. Как вы видите в цикле у нас написано i<1000000, так мы создадим миллион файлов - не советую :) Но пошутить над кем нибудь можно, только правильно укажите директорию.



Теги: записать в файлC# | открыть файл С# | создать файл C# | создать папку C# | Класс StreamWriter C#

Просмотров: 3735 | Подробнее...


 
7. Инструкция try-catch и дополнение к 6 уроку.
16.10.2010 16:38:01

Инструкция try-catch отлавливает различные исключения(exception).
На основе решения квадратного уравнения, еак я говорил, нам понадобится эта инструкция в этой часте кода:

Console.WriteLine("Введите первый коэффициент");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите второй коэффициент");
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите третий коэффициент");
int c = Convert.ToInt32(Console.ReadLine());

Попробуйте ввести вместо обычного числа - букву, дабловское число или символ. программа виснет. Оно нам так не надо, по-этому мы и будем использовать инструкцию try-catch. Вот как это будет выглядеть:

int a = 0; //Перепишем определение переменной типа integer таким образом, чтобы не возникло синтексической ошибки.
int n = 0; //Эта перемеренная будет служить нам как счётчик
for (int i = 0; i == n; i++)//Цикл for: расскажу ниже.
{
try
{
Console.WriteLine("Введите первый коэффициент");
a = Convert.ToInt32(Console.ReadLine());
}

catch (Exception e) //Если блок try не смог правильно сработать, то програма идёт в блок Catch. Создаём исключение(exception) e
{
Console.WriteLine(e.Message);//И выводим стандартное сообщение ошибки, можете проверить какое. Конечно можно создать своё сообщение вместо стандартного, используя метод Throw new exception, но нам он не понадобится.
n++;//увеличиваем переменную n на 1.
}
}

P.S с остальными переменными делаем тоже самое.

Быстренько расскажу про цикл for, там ничего сложного. Выглядит примерно так:

for(вводим переменную и даём значение;делаем цикл пока не произойдёт данное условие;в конце цикла делаем то, что здесь написано)
{
Собственно, сам код, выполняемый в цикле.
}

В нашем случаем мы вводим переменную i равную 0; Делаем цикл пока переменная не равна n, а в конце увеличиваем n до тез пор, пока пользователь не введёт корректно число. Таким образом получается, когда пользователь всё сделал правильно - переменная n будет равна переменной i и мы выйдем из цикла и пойдём дальше. Всё легко и просто. И да, кстати, мы увеличиваем в конце так же переменную i на 1.

Теперь расскажу немного о инструкции try-catch, выглядит она:
try
{
Собственно, что мы пробуем сделать.
}
catch(Exceprion e)
{
Если не получилось, то выводим исключение.
}

Ничего сложного. Скажу так, инструкция try-catch полезна и интересна, но в больших программах, при частом использование инструкции она может тормозить программу, по-этому её часто заменяют банальным оператором if. Вам решать :)

 



Теги: for пример | цикл for | квадратное уравнение | try-catch пример | инструкция try-catch

Комментариев 3 | Просмотров: 4295 | Подробнее...


 
6. Решение квадратного уравнения на C#, убираем ошибки.
05.10.2010 16:17:39

Честно говоря, когда я нашёл время поискать ошибки, которые могут возникать в программе, мне так хотелось спать, что я нашёл только 2 или 3 из них. Смотрим улучшенный код программы по решению квадратного уравнения:

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

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите первый коэффициент");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите второй коэффициент");
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите третий коэффициент");
int c = Convert.ToInt32(Console.ReadLine());
if (a == 0) Ошибка 1
{
Console.WriteLine("Уравнение не является квадратным:{0}*x+{1}=0", b,c );
if (b == 0) Ошибка 2
{
Console.WriteLine("Извините товарищ, но это уже не уравнение!");
}
else
{
double x = 0;
x = -c / b;
Console.WriteLine("x={0}", x);
}
}
else
{
double d;
d = b * b - 4 * a * c;

if (d < 0)
{
Console.WriteLine("Дискриминант отрицательный, корней нет");

}
if (d == 0)
{
double x1 = b / (2 * a);
Console.WriteLine("Дискриминант = 0, x = {0}", x1);

}
if (d > 0)
{
double x1 = (-b + Math.Sqrt(Convert.ToDouble(d))) / (2 * a);
double x2 = (-b - Math.Sqrt(Convert.ToDouble(d))) / (2 * a);
Console.WriteLine("Дискриминант = {0}, x1 = {1}, x2 ={2}", d, x1, x2);
}
}
}
}
}

 

В первом случае если коэффициент а равен 0, то  в данной строчке  double x2 = (-b - Math.Sqrt(Convert.ToDouble(d))) / (2 * a); мы делим на 0, что недопустимо. По-этому мы  и вставляем код проверки, после которого либо выполняем код дальше, либо решаем уравнение другим, простым методом.

Ошибка 2 возникает если коэффициент а равен 0 и b равен 0. Тогда получается даже не уравнение, что мы и сообщаем пользователю.

Так же есть ошибка, если мы вместо цифр вобьём буквы в переменные a, b и c. Но такую ошибку надо отлавливать с помощью инструкции try-catch, её рассмотрим в следующем уроке.



Теги: C# | реализация квадратного уравнения на | решение квадратного уравнения | .

Комментариев 5 | Просмотров: 27316 | Подробнее...


 
4. Операторы в C#
25.07.2010 08:14:22

C# обладает большим набором различных операторов:

+ - сложение.

- - вычитание.

* - умножение.

/ - деление.

% - оператор вычисления остатка после деления.

== - сравнение. Возвращает true или false.

!= - оператор неравенства. Возвращает true или false.

> - оператор больше.

< - оператор меньше.

<= - оператор меньше или равно.

>= - оператор больше или равно.

&(&&) - логическое И.

^ - логическое XOR.

|(||) - логическое ИЛИ.

Это далеко не весь список различных операторов в C#. Это минимум, который вы должны знать.



Теги: Операторы в C#

Просмотров: 9008 | Подробнее...


 
3. Типы данных в C#
20.06.2010 13:44:32

Перечислим все типы данных в C# и как они объявляются:

byte a; может быть целым числом от 0 до 255

int b; int32(От -2 147 483 648 до 2 147 483 647)

short c;
int16(От -32 768 до 32 767)

long d; int64(От -922 337 203 685 477 508 до 922 337 203 685 477 507)

float e; Число одинарной точности с плавающей запятой(От -3,402 823e38 до 3,402 823e38)

double f; Число двойной точности с плавающей запятой(От -1,797 693 134 862 32e308 до 1,797 693 134 862 32e308)

char g; Знак юникода

bool h; Логический тип, принимающий значения true или false

string i; Текст. Даже если вы положите в переменную типа String число 5, оно будет являться строкой, а не числом.

decimal j; Тип данных decimal может хранить не более 38 разрядов, все из которых могут бытьсправа от десятичного разделителя. Тип данных decimal хранит точное представление числа. Нет понятия приближенности для хранимого значения.

object v;
Базовый тип для всех остальных типов

b = 5; Присвоение значение. Когда мы объявляем переменную, мы можем сразу задать ей значение: int b = 5;

Если переменная не была объявлена, то и присвоить ей ничего нельзя.

Что бы проверить правда ли переменной b пресвоилось значение, можно её вывести на экран:

Console.WriteLine(b);

i = "Привет!)";

Чтобы вывести две переменных сразу, нам надо показать, где именно мы хотим, чтоб они вывелись. Делается это с помощью специального обозначение - {0}, {1}, {2} и так далее.

Console.WriteLine("{0}, {1}", b, i);

 

Добавлю, что так же есть типы uint, ulong, sbyte.

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

У sbyte наоборот, появляются отрицательные значение, заместо половины положительных.

Вот и всё:)



Теги: Типы данных в C# | C# | размеры данных в C#

Просмотров: 15582 | Подробнее...


 
2. Пишем первую программу, печатающую Hello World
18.06.2010 16:34:21

Открываем C#, создаём консольное приложение и видим:

 

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

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{


}
}
}


Первые строчки Using - это сборки. Первые 4 вставляются автоматически, их удалять не стоит. Но в некоторых случаях надо будет добавлять и другие.

namespace - это пространство имён в котором мы работаем. К примеру если Дима работает в Санкт-Петербурге, но ещё один Дима работает в Москве, мы не можем сказать, что это один и тот же Дима, так как пространство имён у них разное. Подробнее можете почитать на википедии или других сайтах.

Класс - это конструктор, который позволяет создавать свои собственные пользовательские типы путем группирования переменных других типов, методов и событий. К примеру если описывать человека, то можно выделить фамилию, имя, возраст и прочие свойства. А можно всё это объединить в один класс, так будет намного удобнее.

Static void Main - это метод, но что выделяет этот метод, это то, что он является входной точкой для всех приложений написанных на C#. В любой программе должен быть метод Main.

Так как же нам напечатать Hello World. Всё очень просто.
За это отвечает метод Console.WriteLine("Hello World"), который печатает на новой строчке. Или просто Console.Write("Hello World"), который будет печатать всё на одной строчке
В итоге код получится таким:

 

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

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
}

 



Теги: напечатать слово в C# | class Main C# | Hello World | C# | пространство имён в C#

Просмотров: 4698 | Подробнее...


 
1. Вступление.
18.06.2010 09:35:48

C#  — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET.

Чтобы программировать на C# надо скачать Visual C# 2008 Express Edition с официального сайта Майкрософта, хотя уже есть 2010 версия, но у меня стоит 2008, это пока не принципиально.

Язык C# один из самых новых языков. Появился он как усовершенствованный C++, хотя многие программисты предпочитают остаться с С++, и поспорят с вами, если вы скажете, что C# лучше. Да это собственно это не так. Просто кому что удобно.



Теги: C# | немного о C Sharp

Просмотров: 3470 | Подробнее...


 
Программируем на C#, интересные статьи, книги, музыка; Костя Карпов.