Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 864, средняя оценка - 4.78
zalogic
146 / 142 / 2
Регистрация: 12.12.2010
Сообщений: 269
#1

FAQ для студентов или школьников - C#

15.12.2010, 12:32. Просмотров 121938. Ответов 16
Метки faq (Все метки)

Товарищи! Если у Вас есть желание что-то добавить в данный FAQ, то просьба соблюдать некоторые правила перед публикацией своего примера:
  • Не выкладывайте примеры кода, которые уже присутствует в данном FAQ (только если метод решения схож с уже предложенным).
    Не поленитесь просмотреть уже предложенные примеры.
  • Обязательно добавляйте к коду комментарии, это всё-таки FAQ для студентов или школьников.
  • Придерживайтесь приведенного ниже стиля оформления:
    Описание задачи:
    C#
    1
    
    //Решение
  • Если размер Вашего сообщения очень большой используйте тег форматирования [SPOILER] для его сжатия:
    Код
    [SPOILER="Заголовок"]Текст который будет скрыт.[/SPOILER]
    Пример:
    Описание задачи (краткое)
    Описание задачи (полное):
    C#
    1
    
    //Решение

    Исходный код этого фрагмента:
    Код
    [SPOILER="Описание задачи"][CSHARP]//Решение[/CSHARP][/SPOILER]
  • Сообщения не отвечающие вышеуказанным требованиям будут удаляться.


Часто на форуме возникают сообщения от студентов или школьников которые не могут решить задачи на массивы, текст и т.д. В этом FAQ кратко опишу основные куски когда которые можно использовать.
Создание консольного приложения
Открываем Visual Studio. Файл -> Создать проект -> Консольное приложение.
Слева написан язык программирования, выберите С#.
Оъявление одномерного и двумерного массива
-одномерный
C#
1
2
int N = 10;
int[] a = new int[N];
-двумерный
C#
1
2
int N = 10, M = 10;
int[,] a = new int[N, M];
Вывод матрицы на экран
C#
1
2
3
4
5
6
7
8
9
10
Console.WriteLine("исходная матрица:");
 
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < M; j++)
          
                    Console.Write(a[i, j] + " ");
   
                Console.WriteLine();
            }


Вывод массива на экран
C#
1
2
3
Console.WriteLine("исходный массив:");
 
            for (int i = 0; i < N; i++) Console.Write(a[i] + " ");


Заполним матрицу случайными числами
C#
1
2
3
4
5
6
7
8
9
10
            Random random = new Random();
            int rand;
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < M; j++)
                {
                    rand = random.Next(0, 100);
                    a[i, j]=rand;
                }
            }


Заполним массив случайными величинами
C#
1
2
3
4
5
6
7
            Random random = new Random();
            int rand;
            for (int i = 0; i < N; i++)
            {
                    rand = random.Next(0, 100);
                    a[i]=rand;  
            }


Сортировка пузырьком(bubble sort)
C#
1
2
3
4
5
6
7
8
9
10
11
           int  buf;
            for (int i = 0; i < N - 1; i++)
            {
                for (int j = i + 1; j < N; j++)
                {
                    if (A[i] > A[j])
                    {
                        buf = A[i];
                       A[i] = A[j];
                       A[j] = buf;
                    }
В условии меняйте знак if (A[i] > A[j]) на if (A[i] < A[j]) если нужна сортировка по убыванию.


Определение максимального числа в массиве
C#
1
2
3
4
5
6
            int max= int.MinValue;
            for (int i = 0; i < N; i++)
            {
                if (a[i] > max)
                    max = a[i];
            }


Определение минимального числа в массиве
C#
1
2
3
4
5
6
           int min= int.MaxValue;
            for (int i = 0; i < N; i++)
            {
                if (a[i] < min)
                    min = a[i];
            }


Определение суммы чисел в массиве

C#
1
2
3
int sum=0;
            for (int i = 0; i < N; i++)
            sum+=a[i];



Чуть позже выложу больше шарпокусков(других алгоритмов и тд)

Список алгоритмов в теме

Изменяет порядок элементов последовательности на противоположный
Возвращает различающиеся элементы последовательности
Возвращает только те элементы последовательности first, которых нет в последовательности second
Находит пересечение множеств, представленных двумя последовательностями
Проецирует матрицу в последовательность
Находит объединение множеств, представленных двумя последовательностями
Заполнение массива случайными не повторяющимися числами.


Вывод массива на экран
Заполним массив случайными величинами(Linq)
Определение минимального числа в массиве
Определение максимального числа в массиве
Определение суммы чисел в массиве
Изменяет порядок элементов последовательности на противоположный
Возвращает различающиеся элементы последовательности
Возвращает только те элементы последовательности first, которых нет в последовательности second
Находит пересечение множеств, представленных двумя последовательностями
Проецирует матрицу в последовательность
Находит объединение множеств, представленных двумя последовательностями


Небольшая функция для вычисления суммы ряда.

Вычисление определителя матрицы рекурсивно

Основные способы сортировки списков или массивов в C#

Двоичный поиск (в отсортированном массиве)
Поиск методом интерполяции (в отсортированном массиве)


Вычисление НОД двух чисел

Вывод массива на экран
Проекция матрицы в массив
Массив элементов последовательности first, которых нет в последовательности second


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

62
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2010, 12:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос FAQ для студентов или школьников (C#):

Примеры для книги «C# для школьников» - C#
Здравствуйте! Скачал книги C# для школьников. Вот эту http://www.intuit.ru/studies/courses/564/420/info В ней написано что по...

Не работает пример из FAQ для раздела – “C# для начинающих” - C#
Фак здесь - http://www.cyberforum.ru/csharp-beginners/thread163620.html первый же пример не работает. что делаю не так. using...

Самый главный FAQ для самых-самых начинающих))) - C#
Если вам на форуме помогли - не поленитесь и нажмите на кнопочку &quot;Спасибо&quot;, если вы хотите, что бы и в дальнейшем вам помогали...

LINQ запрос: вывести имена студентов (без повторов) и количество студентов с таким именем - C#
Помогите составить следующий LINQ запрос Вывести имена студентов (без повторов) и количество студентов с таким именем

Вычислить общий средний балл всех студентов и распечатать список студентов со средним баллом выше общего - C#
Задача следующая: вычислить общий средний балл всех студентов и распечатать список студентов со средним баллом выше общего среднего балла

Разместить в массиве номера тех студентов, чей рост меньше 180см, и подсчитать число таких студентов - C#
Извините что вторгаюсь), тут еще одна задачка, много времени не займет, поможете? Условие: &quot;Проведено измерение роста 70 студентов....

16
OwenGlendower
Модератор
Эксперт .NET
7707 / 6675 / 2477
Регистрация: 17.03.2014
Сообщений: 13,056
Записей в блоге: 1
21.03.2016, 23:52 #16
Почему класс Random иногда генерирует одинаковые последовательности чисел?
Почему класс Random иногда генерирует одинаковые последовательности чисел?

Класс Random это генератор так называемых псевдослучайных чисел. Это значит что числа получаются по некоему алгоритму, а не являются действительно случайными. Так сделано потому что для генерации действительно случайных чисел необходим источник случайной информации который есть не в каждом компьютере (таким источником может быть, например, Trusted Platform Module). Для генерации псевдослучайных чисел используется начальное число (затравка или seed по английски). В классе Random такой затравкой является количество миллисекунд прошедших с момента загрузки системы (Environment.TickCount). Данное значение имеет точность примерно от 10 до 16 миллисекунд. Поэтому при быстром создании экземпляров Random данное значение не успевает поменяться и псевдослучайные числа получаются одинаковые.
Хозяйке на заметку: Есть ли польза от затравки?
Наличие затравки имеет и положительный момент. Она дает возможность генерировать повторяющиеся последовательности чисел. Это можно применять, например, при шифровании с помощью симметричных алгоритмов.

Чтобы избежать этой проблемы нужно сделать так чтобы экземпляр Random не создавался слишком часто. Например, создать его один только раз в одной функции или сделать его полем класса (можно даже static полем).

Если необходимо генерировать случайные числа часто и в разных классах, то можно использовать класс StaticRandom.
StaticRandom
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Код взят из библиотеки MiscUtil (c) Jon Skeet
// [url]http://yoda.arachsys.com/csharp/miscutil/[/url]
 
/// <summary>
/// Thread-safe equivalent of System.Random, using just static methods.
/// If all you want is a source of random numbers, this is an easy class to
/// use. If you need to specify your own seeds (eg for reproducible sequences
/// f numbers), use System.Random.
/// </summary>
public static class StaticRandom
{
    private static Random random = new Random();
    private static object myLock = new object();
 
    /// <summary>
    /// Returns a nonnegative random number.
    /// 
    /// </summary>
    /// 
    /// <returns>
    /// A 32-bit signed integer greater than or equal to zero and less than Int32.MaxValue.
    /// </returns>
    public static int Next()
    {
        lock (StaticRandom.myLock)
            return StaticRandom.random.Next();
    }
 
    /// <summary>
    /// Returns a nonnegative random number less than the specified maximum.
    /// 
    /// </summary>
    /// 
    /// <returns>
    /// A 32-bit signed integer greater than or equal to zero, and less than maxValue;
    ///             that is, the range of return values includes zero but not maxValue.
    /// 
    /// </returns>
    /// <exception cref="T:System.ArgumentOutOfRangeException">maxValue is less than zero.</exception>
    public static int Next(int max)
    {
        lock (StaticRandom.myLock)
            return StaticRandom.random.Next(max);
    }
 
    /// <summary>
    /// Returns a random number within a specified range.
    /// 
    /// </summary>
    /// <param name="min">The inclusive lower bound of the random number returned. </param><param name="max">The exclusive upper bound of the random number returned.
    ///             maxValue must be greater than or equal to minValue.
    ///             </param>
    /// <returns>
    /// A 32-bit signed integer greater than or equal to minValue and less than maxValue;
    ///             that is, the range of return values includes minValue but not maxValue.
    ///             If minValue equals maxValue, minValue is returned.
    /// 
    /// </returns>
    /// <exception cref="T:System.ArgumentOutOfRangeException">minValue is greater than maxValue.</exception>
    public static int Next(int min, int max)
    {
        lock (StaticRandom.myLock)
            return StaticRandom.random.Next(min, max);
    }
 
    /// <summary>
    /// Returns a random number between 0.0 and 1.0.
    /// 
    /// </summary>
    /// 
    /// <returns>
    /// A double-precision floating point number greater than or equal to 0.0, and less than 1.0.
    /// </returns>
    public static double NextDouble()
    {
        lock (StaticRandom.myLock)
            return StaticRandom.random.NextDouble();
    }
 
    /// <summary>
    /// Fills the elements of a specified array of bytes with random numbers.
    /// 
    /// </summary>
    /// <param name="buffer">An array of bytes to contain random numbers.</param><exception cref="T:System.ArgumentNullException">buffer is a null reference (Nothing in Visual Basic).</exception>
    public static void NextBytes(byte[] buffer)
    {
        lock (StaticRandom.myLock)
            StaticRandom.random.NextBytes(buffer);
    }
}


Кроме этого в .NET есть класс System.Security.Cryptography.RNGCryptoServiceProvider который обеспечивает лучшее качество генерации случайных чисел. Однако он умеет генерировать только байты. Если необходимо генерировать числа типа int/double, то используйте готовый класс CryptoRandom.
CryptoRandom
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System;
using System.Security.Cryptography;
 
// Cryptographically-strong random number generator
// Source: MSDN Magazine > 2007 > September > .NET Matters: Tales from the CryptoRandom
// Source URL: [url]http://msdn.microsoft.com/en-us/magazine/cc163367.aspx[/url]
// via [url]https://gist.github.com/prettycode/5471944[/url]
// Authors: Stephen Toub & Shawn Farkas
public sealed class CryptoRandom : Random, IDisposable
{
    private RNGCryptoServiceProvider cryptoProvider = new RNGCryptoServiceProvider();
    private byte[] uint32Buffer = new byte[sizeof(uint)];
 
    /// <summary>
    /// An implementation of System.Random used for cryptographically-strong random number generation.
    /// </summary>
    public CryptoRandom() { }
 
    /// <summary>
    /// An implementation of System.Random used for cryptographically-strong random number generation.
    /// </summary>
    public CryptoRandom(int seedIgnored) { }
 
    /// <summary>
    /// Returns a nonnegative random number.
    /// </summary>
    /// <returns>
    /// A 32-bit signed integer greater than or equal to zero and less than <see cref="F:System.Int32.MaxValue"/>.
    /// </returns>
    public override int Next()
    {
        cryptoProvider.GetBytes(uint32Buffer);
        return BitConverter.ToInt32(uint32Buffer, 0) & 0x7FFFFFFF;
    }
 
    /// <summary>
    /// Returns a nonnegative random number less than the specified maximum.
    /// </summary>
    /// <returns>
    /// A 32-bit signed integer greater than or equal to zero, and less than <paramref name="maxValue"/>; that is, the range of return values ordinarily includes zero but not <paramref name="maxValue"/>. However, if <paramref name="maxValue"/> equals zero, <paramref name="maxValue"/> is returned.
    /// </returns>
    /// <param name="maxValue">The exclusive upper bound of the random number to be generated. <paramref name="maxValue"/> must be greater than or equal to zero.</param>
    /// <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="maxValue"/> is less than zero.</exception>
    public override int Next(int maxValue)
    {
        if (maxValue < 0) throw new ArgumentOutOfRangeException("maxValue");
        return Next(0, maxValue);
    }
 
    /// <summary>
    /// Returns a random number within a specified range.
    /// </summary>
    /// <returns>
    /// A 32-bit signed integer greater than or equal to <paramref name="minValue"/> and less than <paramref name="maxValue"/>; that is, the range of return values includes <paramref name="minValue"/> but not <paramref name="maxValue"/>. If <paramref name="minValue"/> equals <paramref name="maxValue"/>, <paramref name="minValue"/> is returned.
    /// </returns>
    /// <param name="minValue">The inclusive lower bound of the random number returned.</param>
    /// <param name="maxValue">The exclusive upper bound of the random number returned. <paramref name="maxValue"/> must be greater than or equal to <paramref name="minValue"/>.</param>
    /// <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="minValue"/> is greater than <paramref name="maxValue"/>.</exception>
    public override int Next(int minValue, int maxValue)
    {
        if (minValue > maxValue) throw new ArgumentOutOfRangeException("minValue");
        if (minValue == maxValue) return minValue;
 
        long diff = maxValue - minValue;
        long max = (1 + (long)uint.MaxValue);
        long remainder = max % diff;
 
        while (true)
        {
            cryptoProvider.GetBytes(uint32Buffer);
            uint rand = BitConverter.ToUInt32(uint32Buffer, 0);
            if (rand < max - remainder)
            {
                return (int)(minValue + (rand % diff));
            }
        }
    }
 
    /// <summary>
    /// Returns a random number between 0.0 and 1.0.
    /// </summary>
    /// <returns>
    /// A double-precision floating point number greater than or equal to 0.0, and less than 1.0.
    /// </returns>
    public override double NextDouble()
    {
        cryptoProvider.GetBytes(uint32Buffer);
        uint rand = BitConverter.ToUInt32(uint32Buffer, 0);
        return rand / (1.0 + uint.MaxValue);
    }
 
    /// <summary>
    /// Fills the elements of a specified array of bytes with random numbers.
    /// </summary>
    /// <param name="buffer">An array of bytes to contain random numbers.</param>
    /// <exception cref="T:System.ArgumentNullException"><paramref name="buffer"/> is null.
    public override void NextBytes(byte[] buffer)
    {
        if (buffer == null) throw new ArgumentNullException("buffer");
        cryptoProvider.GetBytes(buffer);
    }
 
    public void Dispose()
    {
        InternalDispose();
    }
 
    ~CryptoRandom()
    {
        InternalDispose();
    }
 
    void InternalDispose()
    {
        if (cryptoProvider != null)
        {
            cryptoProvider.Dispose();
            cryptoProvider = null;
        }
    }
}

15
OwenGlendower
Модератор
Эксперт .NET
7707 / 6675 / 2477
Регистрация: 17.03.2014
Сообщений: 13,056
Записей в блоге: 1
08.02.2017, 22:48 #17
Работа с XML

Работа с элементами с пространством имен
Кликните здесь для просмотра всего текста
Допустим у нас есть следующий XML документ:
test.xml
XML
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://example.com">
    <item id="1">text1</item>
    <item id="2">text2</item>
</root>

Наличие атрибута xmlns говорит о том что данный элемент и вложенные в него принадлежат данному пространству имен. Для обращения к ним нужно указывать не только имя, но и это пространство.
С помощью XmlDocument и XPath
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("test.xml");
XmlNamespaceManager xmlnsMgr = new XmlNamespaceManager(xmlDoc.NameTable);
// Регистрируем пространство имен и псевдоним для него
// Первый аргумент - псевдоним, может быть любым
// Второй аргумент - идентикатор пространства имен. Должен в точности совпадать с указанным в xml
xmlnsMgr.AddNamespace("ex", "http://example.com");
 
// Выбираем все элементы item используя ранее зарегистрированный псевдоним
// Обратите внимание что также нужно передать экхемпляр XmlNamespaceManager
XmlNodeList nodes = xmlDoc.SelectNodes("//ex:item", xmlnsMgr);
foreach (XmlElement itemElement in nodes)
{
    Console.WriteLine(
        "Id={0}, Text={1}",
        itemElement.GetAttribute("id"),
        itemElement.InnerText
    );
}

С помощью LINQ to XML
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
XDocument xdoc = XDocument.Load("test.xml");
// Ввводим пространство имен
// Присвоение строки экземпляру XNamespace возможно благодаря оператору неявного преобразования из string в XNamespace 
XNamespace xmlns = "http://example.com";
 
IEnumerable<XElement> elements = xdoc.Root.Elements(xmlns + "item");
foreach (XElement itemElement in elements)
{
    Console.WriteLine(
        "Id={0}, Text={1}",
        itemElement.Attribute("id").Value,
        itemElement.Value
    );
}

С помощью LINQ to XML и XPath
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
XDocument xdoc;
XmlNamespaceManager xmlnsMgr;
using (XmlReader reader = XmlReader.Create(File.OpenRead("test.xml")))
{
    xdoc = XDocument.Load(reader);
    XmlNameTable nameTable = reader.NameTable;
    xmlnsMgr = new XmlNamespaceManager(nameTable);
}
// Регистрируем пространство имен и псевдоним для него
// Первый аргумент - псевдоним, может быть любым
// Второй аргумент - идентикатор пространства имен. Должен в точности совпадать с указанным в xml
xmlnsMgr.AddNamespace("ex", "http://example.com");
 
IEnumerable<XElement> elements = xdoc.XPathSelectElements("//ex:item", xmlnsMgr);
foreach (XElement itemElement in elements)
{
    Console.WriteLine(
        "Id={0}, Text={1}",
        itemElement.Attribute("id").Value,
        itemElement.Value
    );
}

6
08.02.2017, 22:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2017, 22:48
Привет! Вот еще темы с ответами:

Программа в консоли для учета студентов - C#
Помогите написать программу в C# для манипуляции информацией о студентах в группе. Информация о студенте в формате: Фамилия, Имя, средний...

Инкапсуляция в базе данных для студентов - C#
есть файл StudentsBD.cs с листом List&lt;Student&gt;, также там методы, которые обрабатывают этот лист. Проблема в том, что я не знаю как...

Программа для преподавателя и учет студентов - C#
Здравствуйте! Пишу программу для учебного центра в котором много студентов распределенные по группам и т. д. Вопрос: Как лучше...

Придумать сложное задание для студентов - C#
Вот такая необычная тема :) Помогите придумать сложное задание для студентов. Тема - практическое применение программирования....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.