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

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

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

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

15.12.2010, 12:32. Просмотров 127983. Ответов 18
Метки 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


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

99
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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 студентов....

18
Unril
786 / 677 / 47
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
15.12.2010, 21:21 #2
Вот, решил тоже добавить несколько методов для работы с массивами.

Изменяет порядок элементов последовательности на противоположный
C#
1
2
3
4
5
6
7
8
9
10
11
        public static int[] Reverse(int[] array)
        {
            var outArray = new int[array.Length];
            int j = 0;
            for (int i = array.Length - 1; i >= 0; i--)
            {
                outArray[j] = array[i];
                j++;
            }
            return outArray;
        }


Возвращает различающиеся элементы последовательности
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
        public static int[] Distinct(int[] array)
        {
            var intermediateArray = new int[array.Length];
            int uniqueCount = 0;
            for (int index = 0; index < array.Length; index++)
            {
                bool unique = true;
                for (int intermediateIndex = 0; intermediateIndex < uniqueCount; intermediateIndex++)
                {
                    if (intermediateArray[intermediateIndex] == array[index])
                    {
                        unique = false;
                        break;
                    }
                }
                if (unique)
                {
                    uniqueCount++;
                    intermediateArray[uniqueCount - 1] = array[index];
                }
            }
            var outArray = new int[uniqueCount];
            Array.Copy(intermediateArray, 0, outArray, 0, uniqueCount);
            return outArray;
        }


Возвращает только те элементы последовательности first, которых нет в последовательности second
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
        public static int[] Except(int[] first, int[] second)
        {
            var intermediateArray = new int[first.Length];
            int resultCount = 0;
            for (int index = 0; index < first.Length; index++)
            {
                bool unique = true;
                for (int secondIndex = 0; secondIndex < second.Length; secondIndex++)
                {
                    if (first[index] == second[secondIndex])
                    {
                        unique = false;
                        break;
                    }
                }
                if (unique)
                {
                    resultCount++;
                    intermediateArray[resultCount - 1] = first[index];
                }
            }
            var outArray = new int[resultCount];
            Array.Copy(intermediateArray, 0, outArray, 0, resultCount);
            return outArray;
        }


Находит пересечение множеств, представленных двумя последовательностями
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
        public static int[] Intersect(int[] first, int[] second)
        {
            var intermediateArray = new int[Math.Min(first.Length, second.Length)];
            int resultCount = 0;
            for (int index = 0; index < first.Length; index++)
            {
                bool found = false;
                for (int secondIndex = 0; secondIndex < second.Length; secondIndex++)
                {
                    if (first[index] == second[secondIndex])
                    {
                        found = true;
                        break;
                    }
                }
                if (found)
                {
                    bool unique = true;
                    for (int resultIndex = 0; resultIndex < resultCount; resultIndex++)
                    {
                        if (first[index] == intermediateArray[resultIndex])
                        {
                            unique = false;
                            break;
                        }
                    }
                    if (unique)
                    {
                        resultCount++;
                        intermediateArray[resultCount - 1] = first[index];
                    }
                }
            }
            var outArray = new int[resultCount];
            Array.Copy(intermediateArray, 0, outArray, 0, resultCount);
            return outArray;
        }


Проецирует матрицу в последовательность
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public static int[] Flatten(int[,] matrix)
        {
            int[] outArray = new int[matrix.Length];
            int count = 0;
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    outArray[count] = matrix[i, j];
                    count++;
                }
            }
            return outArray;
        }


Находит объединение множеств, представленных двумя последовательностями
C#
1
2
3
4
5
6
7
8
9
        public static int[] Union(int[] first, int[] second)
        {
            var intermediateArray = new int[first.Length + second.Length];
            for (int index = 0; index < first.Length; index++)
                intermediateArray[index] = first[index];
            for (int secondIndex = 0; secondIndex < second.Length; secondIndex++)
                intermediateArray[secondIndex + first.Length] = second[secondIndex];
            return Distinct(intermediateArray);
        }


Примеры использования
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
        private static void Main()
        {
            var arr = new[] {0, 1, 1, 2, 4, 1, 0, 6, 5, 6};
            var arr2 = new[] {1, 0, 9, 8};
 
            Console.WriteLine("Reverse");
 
            foreach (int i in Reverse(arr))
                Console.WriteLine(i);
 
            Console.WriteLine("Distinct");
 
            foreach (int i in Distinct(arr))
                Console.WriteLine(i);
 
            Console.WriteLine("Except");
 
            foreach (int i in Except(arr, arr2))
                Console.WriteLine(i);
 
            Console.WriteLine("Intersect");
 
            foreach (int i in Intersect(arr, arr2))
                Console.WriteLine(i);
 
            Console.WriteLine("Flatten");
 
            foreach (int i in Flatten(new[,] {{1, 2, 3}, {4, 5, 6}}))
                Console.WriteLine(i);
 
            Console.WriteLine("Union");
 
            foreach (int i in Union(arr, arr2))
                Console.WriteLine(i);
 
            Console.ReadKey();
        }

Заполнение массива случайными не повторяющимися числами.

Сначала создаём массив с упорядоченными числами:
C#
1
2
3
4
5
            int[] range =new int[10];
            for (int i = 0; i < 10; i++)
            {
                range[i] = i;
            }
После этого применяем к нему функцию перемешиванию массива.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public static int[] RandomShuffle(int[] list)
        {
            Random random = new Random();
            int[] shuffle = new int[list.Length];
            list.CopyTo(shuffle, 0);
            for (int i = 2; i < list.Length; ++i)
            {
                int temp = shuffle[i];
                int nextRandom = random.Next(i - 1);
                shuffle[i] = shuffle[nextRandom];
                shuffle[nextRandom] = temp;
            }
            return shuffle;
        }
Полный код метода Main:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        private static void Main()
        {
            int[] range =new int[10];
            for (int i = 0; i < 10; i++)
            {
                range[i] = i;
            }
            int[] shuffle = RandomShuffle(range);
            for (int i = 0; i < shuffle.Length; i++)
            {
                Console.WriteLine(shuffle[i]);
            } 
            Console.ReadKey();
        }
Универсальный вариант функции перемешивания с использованием шаблонов (для тех, кому нужно):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        public static IList<T> RandomShuffle<T>(this*IEnumerable<T> list)
        {
            var random = new Random();
            var shuffle = new List<T>(list);
            for (var i = 2; i < shuffle.Count; ++i)
            {
                var temp = shuffle[i];
                var nextRandom = random.Next(i - 1);
                shuffle[i] = shuffle[nextRandom];
                shuffle[nextRandom] = temp;
            }
            return shuffle;
        }
70
NightmareZ
1398 / 610 / 38
Регистрация: 31.03.2009
Сообщений: 1,978
31.12.2010, 04:40 #3
Никто не обидится, если я предложу некоторые альтернативы?

Вывод массива на экран
C#
1
foreach (int x in a) Console.Write(x + " ");
или даже так
C#
1
2
// using System.Linq;
Console.WriteLine(string.Join(" ", a.Select(x => x.ToString())));
Заполним массив случайными величинами
C#
1
2
3
// using System.Linq;
var rnd = new Random();
int[] a = Enumerable.Repeat(0, 10).Select(x => rnd.Next(0, 100)).ToArray();
Определение минимального числа в массиве
Определение максимального числа в массиве
Для этого в Linq уже есть методы Min и Max:
C#
1
2
3
// using System.Linq;
int min = a.Min();
int max = a.Max();
Определение суммы чисел в массиве
C#
1
2
// using System.Linq;
int sum = a.Sum();
если же нужна не сумма, а некая другая специфическая функция, можно использовать метод Aggregate. Например, перемножим все элементы:
C#
1
2
// using System.Linq;
int mul = a.Aggregate((result, curr) => result * curr);
Изменяет порядок элементов последовательности на противоположный
C#
1
2
// using System.Linq;
int[] reversedArray = a.Reverse().ToArray();
Возвращает различающиеся элементы последовательности
C#
1
2
// using System.Linq;
int[] uniqArray = a.Distinct().ToArray();
Возвращает только те элементы последовательности first, которых нет в последовательности second
C#
1
2
// using System.Linq;
int[] arr = first.Where(x => !second.Contains(x)).ToArray();
Находит пересечение множеств, представленных двумя последовательностями
C#
1
2
// using System.Linq;
int[] arr = first.Intersect(second).ToArray();
Проецирует матрицу в последовательность
C#
1
2
3
var tmp = new List<int>(matrix.GetLength(0)*matrix.GetLength(1));
foreach (int x in matrix) tmp.Add(x);
int[] arr = tmp.ToArray();
Находит объединение множеств, представленных двумя последовательностями
C#
1
2
// using System.Linq;
int[] arr = first.Union(second).ToArray();
76
Unril
786 / 677 / 47
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
20.01.2011, 23:21 #4
Небольшая функция для вычисления суммы ряда.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        /// <summary>
        ///   Функция суммирования ряда с заданной точностью.
        /// </summary>
        /// <param name = "func">Функция вычисления слагаемого ряда</param>
        /// <returns>Сумма ряда</returns>
        private static double Sum( Func<int, double> func ) {
            // Погрешность
            const double epsilon = 1E-10;
            double total = 0;
            int n = 0;
            double member;
            do {
                member = func( n );
                n++;
                total += member;
            }
            while ( Math.Abs( member ) > epsilon );
            return total;
        }


Пример использования
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            // Аргумент
            const double x = 0.89312d;
 
            // Функция для вычисления слагаемого ряда
            Func<int, double> atanRow = n => Math.Pow( -1, n ) * Math.Pow( x, 2 * n + 1 ) / (2 * n + 1);
 
            // Вычисляем значение суммы ряда
            double actual = Sum( atanRow );
 
            // Точное значение
            Console.WriteLine( Math.Atan( x ) );
 
            // Полученное значение
            Console.WriteLine( actual );
10
sandye51
программист С++
687 / 592 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
05.02.2011, 16:19 #5
Вычисление определителя матрицы рекурсивно

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
using System;
 
class MyCSharp
{
    // точка входа;
    static private void Main()
    {
        const int n = 5;
        const int BASE = 100;
        Random rand = new Random(); 
        double[,] matrix = new double[n, n];
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < n; ++j)
                matrix[i, j] = rand.Next() % BASE; // заполняем матрицу случайными элементами;
        printMatrix(matrix, n); // распечатываем сгенерированную матрицу;
        double det = Determinant(matrix, 5); // вычисляем определитель матрицы;
        Console.WriteLine("Определитель равен = {0}", det); 
        Console.ReadKey();
    }
    // статический метод вычисления определителя матрицы;
    static private double Determinant(double[,] matrix, int n)
    {
        if (n == 1) // если матрица первого порядка, то ее определитель есть единственный элемент;
            return matrix[0, 0]; // возвращаем его;
        if (allOfFirstElenemtAreZero(matrix, n)) // если есть нулевой столбец, то определитель равен 0;
            return 0;
        int comparisons; // число перестановок строк;
        sortArrayByFirstElenemt(matrix, n, out comparisons); // сортируем матрицу по первым элементам строк;
        for (int i = 1; i < n; ++i) // итерация методом Гаусса;
        {
            double index = matrix[i, 0] / matrix[0, 0];
            for (int j = 0; j < n; ++j)
                matrix[i, j] -= index * matrix[0, j];
        } // где зануляется первый столбец с 1 по n - 1 строки;
        //printMatrix(matrix, n);  можно распечатывать промежуточную матрицу;
        return matrix[0, 0] * Math.Pow(-1, comparisons) * Determinant(generateSubMatrix(matrix, n), n - 1);
        // возвращаем определитель рекурсивно;
    }
    // статический метод для сваппинга 2х линейных массивов; 
    static private void swapArray(double[,] matrix, int index, int lengthOfMatrix)
    {
        for (int i = 0; i < lengthOfMatrix; ++i)
            swapDouble(ref matrix[index, i], ref matrix[index + 1, i]);
    }
    // статический метод для своппинга 2х элементов;
    static private void swapDouble(ref double Buffer1, ref double Buffer2)
    {
        double Tmp = Buffer1;
        Buffer1 = Buffer2;
        Buffer2 = Tmp;
    }
    // сортировка матрицы по первым элементам строк модифицированным методом пузырька;
    static private void sortArrayByFirstElenemt(double[,] matrix, int n, out int comparisons)
    {
        comparisons = new int();
        bool flagOfSwapping = true;
        int numberOfIteration = new int();
        while (flagOfSwapping) // цикл выполняется пока есть хотя бы одна перестановка в ходе итерации;
        {
            flagOfSwapping = false;
            for (int i = 0; i < n - 1 - numberOfIteration; ++i)
                if (matrix[i, 0] < matrix[i + 1, 0])
                {
                    swapArray(matrix, i, n);
                    flagOfSwapping = true;
                    ++comparisons;
                }
            numberOfIteration++;
        }
    }
    // статический метод вывода матрицы на экран;
    static private void printMatrix(double[,] matrix, int n)
    {
        Console.WriteLine();
        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
                Console.Write("{0:f2}\t", matrix[i, j]);
            Console.WriteLine();
        }
    }
    // статический метод выделения подматрицы размера n - 1;
    static private double[,] generateSubMatrix(double[,] matrix, int n)
    {
        double[,] subMatrix = new double[n - 1, n - 1];
        for (int i = 1; i < n; ++i) // выделяется подматрица со строк [1, n);
            for (int j = 1; j < n; ++j) // .. cтолбцов [1; n);
                subMatrix[i - 1, j - 1] = matrix[i, j];
        return subMatrix;
    }
    // статический метод проверки первого столбца на равенства нулевому;
    static private bool allOfFirstElenemtAreZero(double[,] matrix, int n)
    {
        for (int i = 0; i < n; ++i)
            if (matrix[i, 0] != 0)
                return false;
        return true;
    }
}
16
Unril
786 / 677 / 47
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
21.03.2011, 13:29 #6
Основные способы сортировки списков или массивов в C#.
Показать код.

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
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplicationTest {
    public static class Program {
        private static void Main() {
            var myClasses = new List<MyClass>();
 
            // Заполним случайными элементами
            AddRandomElements( myClasses );
 
            // Сортировака по именам с использованием делегата
            myClasses.Sort( ( a, b ) => a.Name.CompareTo( b.Name ) );
 
            Print( myClasses );
 
            // Сортировка по номеру с использованием класса компаратора
            myClasses.Sort( new MyNumberComparer() );
 
            Print( myClasses );
 
            // Сортировка с использованием Linq в начале по номеру, потом по имени
            IOrderedEnumerable<MyClass> result = myClasses.OrderBy( c => c.Number ).ThenBy( c => c.Name );
 
            Print( result );
 
            Console.ReadKey();
        }
 
        private static void AddRandomElements( List<MyClass> myClasses ) {
            var r = new Random();
 
            for ( int i = 0; i < 10; i++ ) {
                var randomString = new string( Enumerable.Range( 0, 5 )
                                           .Select( n => r.Next( 'a', 'z' ) )
                                           .Select( Convert.ToChar )
                                           .ToArray() );
                myClasses.Add( new MyClass( r.Next( 3 ), randomString ) );
            }
        }
 
        private static void Print( IEnumerable<MyClass> myClasses ) {
            foreach ( MyClass myClass in myClasses ) {
                Console.WriteLine( myClass );
            }
            Console.WriteLine();
        }
    }
 
    internal class MyNumberComparer : IComparer<MyClass> {
        #region IComparer<MyClass> Members
 
        public int Compare( MyClass x, MyClass y ) {
            return x.Number.CompareTo( y.Number );
        }
 
        #endregion
    }
 
    public class MyClass {
        public MyClass( int number, string name ) {
            Number = number;
            Name = name;
        }
 
        public int Number { get; set; }
        public string Name { get; set; }
 
        public override string ToString() {
            return string.Format( "Number: {0}\tName: {1}", Number, Name );
        }
    }
}
10
m0nax
1199 / 904 / 62
Регистрация: 12.01.2010
Сообщений: 1,888
Завершенные тесты: 3
21.03.2011, 17:58 #7
Двоичный поиск (в отсортированном массиве)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        //возвращает индекс элемента в массиве или -1 если не найден
        public static int BinarySeach( int[] sortedArray, int toFind )
        {
            int low = sortedArray.GetLowerBound(0);
            int high = low + sortedArray.Length - 1;
 
            if (toFind < sortedArray[low] || toFind > sortedArray[high])
                return -1;
 
            while (low <= high)
            {
                int mid = (high + low) / 2;
 
                if (sortedArray[mid] > toFind)
                    high = mid - 1;
                else if (sortedArray[mid] < toFind)
                    low = mid + 1;
                else
                    return mid;
            }
 
            return -1;
        }



Поиск методом интерполяции (в отсортированном массиве)
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
        //возвращает индекс элемента в массиве или -1 если не найден
        public static int InterpolationSearch(int[] sortedArray, int toFind )
        {
            long low = 0;
            long high = (long)sortedArray.Length - 1;
 
            while (sortedArray[low] < toFind && sortedArray[high] >= toFind)
            {
                long mid = low + ((toFind - sortedArray[low]) * (high - low))
                           / (sortedArray[high] - sortedArray[low]) ;
 
                if (sortedArray[mid] < toFind)
                    low = mid + 1;
                else if (sortedArray[mid] > toFind)
                    high = mid - 1;
                else
                    return (int)mid;
            }
 
            if (sortedArray[low] == toFind)
                return (int)low;
 
            return -1; 
        }
9
ailia
29 / 31 / 1
Регистрация: 27.12.2009
Сообщений: 106
28.03.2011, 18:57 #8
Вычисление НОД двух чисел

Вычисление наибольшего общего делителя(НОД) двух чисел используя алгоритм Евклида
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
//Наохидт наибольший общий делитель (НОД) чисел а и b
int nod(int a,int b)
        {
            //Алгоритм Евклида: если а = bq + r, то НОД(а,b) = НОД(b,r)
            int max, min;
            if (Math.Abs(a) > Math.Abs(b)) //Находим большее число по модулю
            {
                max = Math.Abs(a);
                min = Math.Abs(b);
            }
            else
            {
                max = Math.Abs(b);
                min = Math.Abs(a);
            }
            int r = max % min; //Находим остаток от деления большего числа на меньшее
            if (r == 0) //Eсли остаток равен нулю...
            {
                return min; //...то вернуть меньшее число...
            }
            else
            {
                return nod(min, r); //...иначе найти НОД меньшего числа и остатка
            }
        }
14
CyBOSSeR
Эксперт С++
2309 / 1682 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
07.05.2011, 01:02 #9
Цитата Сообщение от NightmareZ Посмотреть сообщение
Никто не обидится, если я предложу некоторые альтернативы?
Предложу альтернативу нескольким альтернативам :

Вывод массива на экран
C#
1
Array.ForEach(array, Console.WriteLine);
Проецирует матрицу в массив
C#
1
int[] array = matrix.Cast<int>().ToArray();
Возвращает массив элементов последовательности first, которых нет в последовательности second
C#
1
int[] array = first.Except(second).ToArray();
Перемешать массив случайным образом
C#
1
int[] array = array.OrderBy(e => Guid.NewGuid()).ToArray();
32
Koran
мастер топоров
875 / 700 / 28
Регистрация: 16.08.2009
Сообщений: 1,476
11.05.2011, 02:03 #10
последнее время возникает вопрос как переводить из одной системы исчисления в другую

простой перевод
из десятичной в двоичную систему:
C#
1
string s = Convert.ToString(15, 2);
из десятичной в восьмеричную:
C#
1
string s = Convert.ToString(15, 8);
из десятичной в шестнадцатиричную:
C#
1
string s = Convert.ToString(15, 16);
справка
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        //
        // Сводка:
        //     Преобразует значение заданного 32-битового целого числа со знаком в эквивалентное
        //     представление в виде значения типа System.String в системе счисления с заданным
        //     основанием.
        //
        // Параметры:
        //   value:
        //     32-битовое целое число со знаком.
        //
        //   toBase:
        //     Основание системы счисления возвращаемого значения, равное 2, 8, 10 или 16.
        //
        // Возвращает:
        //     Представление value в виде значения типа System.String в системе счисления
        //     с основанием toBase.
        //
        // Исключения:
        //   System.ArgumentException:
        //     Значение параметра toBase не равно 2, 8, 10 или 16.
        public static string ToString(int value, int toBase);


небольшое приложение для перевода из одной системы исчисления в другую в прикрепленных файлах

Не по теме:

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

37
Вложения
Тип файла: zip Schislenie.zip (32.0 Кб, 531 просмотров)
Петррр
6149 / 3449 / 339
Регистрация: 28.10.2010
Сообщений: 5,926
16.05.2011, 19:50 #11
Класс: Вещественная матрица
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
using System;
 
/// <summary>
/// Вещественная матрица
/// </summary>
class Matrix
{
    /// <summary>
    /// Количество строк
    /// </summary>
    uint n;
    /// <summary>
    /// Количество столбцов
    /// </summary>
    uint m;
    /// <summary>
    /// Матрица
    /// </summary>
    double[,] array;
    /// <summary>
    /// Конструктор
    /// </summary>
    /// <param name="n">Количество строк в матрице</param>
    /// <param name="m">Количество столбцов в матрице</param>
    public Matrix(uint n, uint m)
    {
        this.n = n;
        this.m = m;
        Random random = new Random();
        array = new double[n, m];
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                array[i, j] = random.NextDouble();
    }
    /// <summary>
    /// Свойство, показывающее является ли матрица квадратной.
    /// </summary>
    public bool IsSquare
    {
        get
        {
            if (n == m)
                return true;
            return false;
        }
    }
    /// <summary>
    /// Свойство, показывающее является ли матрица единичной.
    /// </summary>
    public bool IsIdentity
    {
        get
        {
            if (n != m)
                return false;
            for (int i = 0; i < n; i++)
                if (array[i, i] != 1.0)
                    return false;
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                    if (i != j)
                    {
                        if (array[i, j] != 0.0)
                            return false;
                    }
                    else
                        continue;
            return true;
        }
    }
    /// <summary>
    /// Свойство, показывающее является ли матрица нулевой.
    /// </summary>
    public bool IsZero
    {
        get
        {
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                    if (array[i, j] != 0.0)
                        return false;
            return true;
        }
    }
    /// <summary>
    /// Свойство, показывающее является ли матрица диагональной.
    /// </summary>
    public bool IsDiagonalic
    {
        get
        {
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                    if (i != j)
                    {
                        if (array[i, j] != 0.0)
                            return false;
                    }
                    else
                        continue;
            return true;
        }
    }
    /// <summary>
    /// Свойство, показывающее является ли матрица симметричной.
    /// </summary>
    public bool IsSimmetric
    {
        get
        {
            if (n != m)
                return false;
            if (this.IsDiagonalic || this.IsIdentity || this.IsZero)
                return true;
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                    if (i - j < 0)
                        if (array[i, j] != array[j, i])
                            return false;
            return true;
        }
    }
    public double this[int i, int j]
    {
        get
        {
            return array[i, j];
        }
        set
        {
            array[i, j] = value;
        }
    }
    /// <summary>
    /// Метод, создающий нулевую матрицу.
    /// </summary>
    public void MakeZero()
    {
        if (!this.IsSquare)
            throw new Exception("Матрица должна быть квадратной.");
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                array[i, j] = 0.0;
    }
    /// <summary>
    /// Метод, создающий единичную матрицу.
    /// </summary>
    public void MakeIdentity()
    {
        if (!this.IsSquare)
            throw new Exception("Матрица должна быть квадратной.");
        MakeZero();
        for (int i = 0; i < n; i++)
            array[i, i] = 1.0;
    }
    /// <summary>
    /// Вывод матрицы на экран
    /// </summary>
    /// <param name="spliter">Разделитель между элементами массива</param>
    /// <param name="d">Количество символов после запятой.</param>
    public void ShowMatrix(string spliter, uint d)
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
                Console.Write(array[i, j].ToString("F" + d.ToString()) + spliter);
            Console.WriteLine();
        }
    }
    /// <summary>
    /// Вывод матрицы на экран.
    /// </summary>
    public void ShowMatrix()
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
                Console.Write(array[i, j].ToString("F2") + " ");
            Console.WriteLine();
        }
    }
    /// <summary>
    /// Метод создающий диагональную матрицу.
    /// </summary>
    public void MakeDiagonalic()
    {
        if (!this.IsSquare)
            throw new Exception("Матрица должна быть квадратной.");
        MakeZero();
        Random random = new Random();
        for (int i = 0; i < n; i++)
            array[i, i] = random.NextDouble();
    }
    /// <summary>
    /// Метод создающий симметричную матрицу.
    /// </summary>
    public void MakeSimmetric()
    {
        if (!this.IsSquare)
            throw new Exception("Матрица должна быть квадратной.");
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                if (i - j < 0)
                    array[i, j] = array[j, i];
    }
    /// <summary>
    /// Метод, перезаполняющий исходную матрицу.
    /// </summary>
    public void MakeRandom()
    {
        Random random = new Random();
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                array[i, j] = random.NextDouble();
    }
    /// <summary>
    /// Возвращает колечество строк матрицы
    /// </summary>
    public uint RowCount
    {
        get
        {
            return n;
        }
    }
    /// <summary>
    /// Возвращает количество столбцов матрицы
    /// </summary>
    public uint ColumnCount
    {
        get
        {
            return m;
        }
    }
    public static bool operator !=(Matrix m1, Matrix m2)
    {
        if (m1.RowCount != m2.RowCount)
            return true;
        if (m1.ColumnCount != m2.ColumnCount)
            return true;
        for (int i = 0; i < m1.RowCount; i++)
            for (int j = 0; j < m2.ColumnCount; j++)
                if (m1[i, j] != m2[i, j])
                    return true;
        return false;
    }
    public static bool operator ==(Matrix m1, Matrix m2)
    {
        if (m1.RowCount != m2.RowCount)
            return false;
        if (m1.ColumnCount != m2.ColumnCount)
            return false;
        for (int i = 0; i < m1.RowCount; i++)
            for (int j = 0; j < m2.ColumnCount; j++)
                if (m1[i, j] != m2[i, j])
                    return false;
        return true;
    }
    /// <summary>
    /// Изменение размеров матрицы.
    /// </summary>
    /// <param name="n">Количество строк.</param>
    /// <param name="m">Количество столбцов.</param>
    public void Resize(uint n, uint m)
    {
        this.n = n;
        this.m = m;
        array = new double[n, m];
        MakeRandom();
    }
    /// <summary>
    /// Получение двумерного массива
    /// </summary>
    /// <returns></returns>
    public double[,] ToArray()
    {
        double[,] buf = new double[n, m];
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                buf[i, j] = array[i, j];
        return buf;
    }
    /// <summary>
    /// Получение одномерного массива.
    /// </summary>
    /// <returns></returns>
    public double[] ToArrayOne()
    {
        double[] buf = new double[n * m];
        int index = 0;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
            {
                buf[index] = array[i, j];
                index++;
            }
        return buf;
    }
    /// <summary>
    /// Максимальный элемент в матрице
    /// </summary>
    public double Maximum
    {
        get
        {
            double max = array[0, 0];
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                    if (array[i, j] > max)
                        max = array[i, j];
            return max;
        }
    }
    /// <summary>
    /// Возвращает минимальный элемент в матрице.
    /// </summary>
    public double Minimum
    {
        get
        {
            double min = array[0, 0];
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                    if (array[i, j] < min)
                        min = array[i, j];
            return min;
        }
    }
    /// <summary>
    /// Сумма элементов массива.
    /// </summary>
    public double Sum
    {
        get
        {
            double sum = 0;
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++, sum += array[i, j]) ;
            return sum;
        }
    }
}
 
class program
{
    public static void Main()
    {
        Matrix matrix = new Matrix(5, 5);
        matrix.ShowMatrix(" ", 2);
        matrix.MakeZero();
        Console.WriteLine(matrix.IsZero);
        matrix.MakeIdentity();
        matrix.ShowMatrix(" ", 2);
        Console.WriteLine(matrix.IsIdentity);
        matrix.MakeDiagonalic();
        matrix.ShowMatrix(" ", 2);
        Console.WriteLine(matrix.IsDiagonalic);
        matrix.MakeRandom();
        matrix.MakeSimmetric();
        Console.WriteLine(matrix.IsSimmetric);
        matrix.ShowMatrix();
        Matrix m2 = new Matrix(5, 5);
        if (matrix == m2)
            Console.WriteLine("Матрицы равны");
        else
            Console.WriteLine("Матрицы не равны");
        m2 = matrix;
        if (matrix == m2)
            Console.WriteLine("Матрицы равны");
        else
            Console.WriteLine("Матрицы не равны");
        Console.WriteLine(matrix.ColumnCount);
        Console.WriteLine(matrix.RowCount);
        matrix.Resize(6, 4);
        Console.WriteLine(matrix.IsSquare);
        matrix.ToArray();
        matrix.ToArrayOne();
        Console.WriteLine(matrix.Maximum);
        Console.WriteLine(matrix.Minimum);
        Console.ReadKey(true);
    }
}

Класс: Список
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
using System;
 
/// <summary>
/// Список. 
/// Автор: Петррр
/// </summary>
class GList
{
    int[] array;
    /// <summary>
    /// Констуктор
    /// </summary>
    public GList()
    {
        array = new int[0];
    }
    /// <summary>
    /// Количество элементов в списке
    /// </summary>
    public int Count
    {
        get
        {
            return array.Length;
        }
    }
    /// <summary>
    /// Добавление нового элемента в список
    /// </summary>
    /// <param name="value">Элемент который необходимо вставить</param>
    public void Add(int value)
    {
        int[] buf = new int[array.Length];
        for (int i = 0; i < buf.Length; i++)
            buf[i] = array[i];
        array = new int[buf.Length + 1];
        for (int i = 0; i < buf.Length; i++)
            array[i] = buf[i];
        array[array.Length - 1] = value;
    }
    /// <summary>
    /// Вставляет новый элемент в укзананную позицию.
    /// </summary>
    /// <param name="value">Новый элемент</param>
    /// <param name="pos">Позиция</param>
    public void Insert(int value, int pos)
    {
        if (pos > array.Length || pos < 0)
            throw new Exception("Неверная позиция");
        int[] buf = new int[array.Length];
        for (int i = 0; i < buf.Length; i++)
            buf[i] = array[i];
        array = new int[buf.Length + 1];
 
        for (int i = 0; i < buf.Length; i++)
            array[i] = buf[i];
 
        int buffer = array[pos];
        for (int i = array.Length - 2; i >= pos; i--)
        {
            int d = array[i];
            array[i + 1] = d;
        }
        array[pos] = value;
    }
    /// <summary>
    /// Вывод списка.
    /// </summary>
    public void Show()
    {
        for (int i = 0; i < array.Length; i++)
            Console.Write(array[i] + " ");
    }
    /// <summary>
    /// Удаление элемента по указанной позиции
    /// </summary>
    /// <param name="pos">Позиция. Нумерация начинается с нуля.</param>
    public void Remove(int pos)
    {
        if (pos > array.Length || pos < 0)
            throw new Exception("Неверная позиция");
 
        int[] buf = new int[array.Length];
 
        for (int i = 0; i < buf.Length; i++)
            buf[i] = array[i];
 
        array = new int[buf.Length - 1];
 
        for (int i = 0; i < pos; i++)
            array[i] = buf[i];
 
        for (int i = pos; i < buf.Length - 1; i++)
            array[i] = buf[i + 1];
    }
    /// <summary>
    /// Удаляет заданный элемент из списка.
    /// </summary>
    /// <param name="element">Элемент списка.</param>
    public void RemoveElement(int element)
    {
        for (int i = 0; i < array.Length; i++)
            if (array[i] == element)
                Remove(i);
    }
    /// <summary>
    /// Получения массива элементов.
    /// </summary>
    /// <returns></returns>
    public int[] ToArray()
    {
        return array;
    }
    /// <summary>
    /// Максимальный элемент в списке.
    /// </summary>
    public int Maximum
    {
        get
        {
            int max = array[0];
            for (int i = 0; i < array.Length; i++)
                if (array[i] > max)
                    max = array[i];
            return max;
        }
    }
    /// <summary>
    /// Максимальный элемент в списке.
    /// </summary>
    public int Minimum
    {
        get
        {
            int min = array[0];
            for (int i = 0; i < array.Length; i++)
                if (array[i] < min)
                    min = array[i];
            return min;
        }
    }
    /// <summary>
    /// Сумма элементов списка.
    /// </summary>
    public int Sum
    {
        get
        {
            int sum = 0;
            for (int i = 0; i < array.Length; i++) 
                sum += array[i];
            return sum;
        }
    }
}
 
class Program
{
    static void Main(string[] args)
    {
        GList l = new GList();
        l.Add(1);
        l.Add(2);
        l.Add(3);
        l.Insert(4, 1);
        l.Show();
        l.Remove(1);
        l.RemoveElement(1);
        Console.WriteLine();
        l.Show();
        Console.WriteLine();
        Console.WriteLine(l.Sum);
        Console.ReadKey(true);
    }
}

Программирование очереди
Динамический список
Работа со стеком
Сортировки
Пузырьковая сортировка
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
using System;
 
class Program
{
    static void Main(string[] args)
    {
        Random random = new Random();
        int[] a = new int[10];
        for (int i = 0; i < a.Length; i++)
        {
            a[i] = random.Next(0, 100);
            Console.Write(a[i] + " ");
        }
        bool flag = true;
        Console.WriteLine();
        while (flag)
        {
            flag = false;
            for(int i = 0; i < a.Length - 1; i++)
                if (a[i] > a[i + 1])
                {
                    int b = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = b;
                    flag = true;
                }
        }
        for (int i = 0; i < a.Length; i++)
            Console.Write(a[i] + " ");
        Console.ReadKey(true);
    }
}

Гномья сортировка
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
using System;
 
class Program
{
    static void Main(string[] args)
    {
        Random random = new Random();
        int[] a = new int[10];
        int i = 1;
        for (i = 0; i < a.Length; i++)
        {
            a[i] = random.Next(0, 100);
            Console.Write(a[i] + " ");
        }
        Console.WriteLine();
        i = 1;
        int j = 2;
        while (i < a.Length)
        {
            if (a[i - 1] <= a[i])
            {
                i = j;
                j++;
            }
            else
            {
                int b = a[i - 1];
                a[i - 1] = a[i];
                a[i] = b;
                i--;
                if (i == 0)
                {
                    i = j;
                    j++;
                }
            }
        }
        for (i = 0; i < a.Length; i++)
            Console.Write(a[i] + " ");
        Console.ReadKey(true);
    }
}

Сортировка вставками
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
using System;
 
class Program
{
    static void Main(string[] args)
    {
        Random random = new Random();
        int[] a = new int[10];
        int i;
        for (i = 0; i < a.Length; i++)
        {
            a[i] = random.Next(0, 100);
            Console.Write(a[i] + " ");
        }
        Console.WriteLine();
 
        int j, tmp;
        for (i = 1; i < a.Length; i++)
        {
            j = i;
            while (j > 0 && a[j - 1] > a[j])
            {
                tmp = a[j];
                a[j] = a[j - 1];
                a[j - 1] = tmp;
                j--;
            }
        }
 
        for (i = 0; i < a.Length; i++)
            Console.Write(a[i] + " ");
        Console.ReadKey(true);
    }
}

Квадратичный алгоритм сортировки подсчётом
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
using System;
 
class Program
{
    static void Main(string[] args)
    {
        Random random = new Random();
        int[] a = new int[10];
        int i;
        for (i = 0; i < a.Length; i++)
        {
            a[i] = random.Next(0, 100);
            Console.Write(a[i] + " ");
        }
        Console.WriteLine();
        int j;
        int[] b = new int[a.Length];
        for (i = 0; i < a.Length; i++)
        {
            int c = 0;
            for (j = 0; j < i; j++)
                if (a[j] <= a[i])
                    c++;
            for (j = i + 1; j < a.Length; j++)
                if (a[j] < a[i])
                    c++;
            b[c] = a[i];
        }
        for (i = 0; i < a.Length; i++)
             Console.Write(b[i] + " ");
        Console.ReadKey(true);
    }
}

Сортировка выбором
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
using System;
 
class Program
{
    static void Main(string[] args)
    {
        Random random = new Random();
        int[] a = new int[10];
        int i;
        for (i = 0; i < a.Length; i++)
        {
            a[i] = random.Next(0, 100);
            Console.Write(a[i] + " ");
        }
        Console.WriteLine();
 
        for (i = 0; i < a.Length - 1; i++)
            for (int j = i + 1; j < a.Length; j++ )
                if (a[i] > a[j])
                {
                    int b = a[i];
                    a[i] = a[j];
                    a[j] = b;
                }
        for (i = 0; i < a.Length; i++)
            Console.Write(a[i] + " ");
        Console.ReadKey(true);
    }
}

Сортировка расчёской
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
using System;
 
class Program
{
    static void Main(string[] args)
    {
        Random random = new Random();
        int[] a = new int[10];
        int i;
        for (i = 0; i < a.Length; i++)
        {
            a[i] = random.Next(0, 100);
            Console.Write(a[i] + " ");
        }
        Console.WriteLine();
 
        int jump = a.Length;
        bool swapped = true;
        while (jump > 1 || swapped)
        {
            if (jump > 1)
                jump = (int)(jump / 1.25);
            swapped = false;
            for(i = 0; i + jump < a.Length; i++)
                if (a[i] > a[i + jump])
                {
                    int b = a[i];
                    a[i] = a[i + jump];
                    a[i + jump] = b;
                }
        }
 
        for (i = 0; i < a.Length; i++)
            Console.Write(a[i] + " ");
        Console.ReadKey(true);
    }
}
36
Phat D
6 / 9 / 0
Регистрация: 12.03.2011
Сообщений: 27
23.05.2011, 08:44 #12
Способ работы с четными/нечетными элементами массива
C#
1
2
3
4
5
6
7
8
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
    if (i % 2 != 1) // 1 - нечетные элементы, 0 - четные элементы
    {
    sum += arr[i]; // Возможно также заменить сумму на умножение, деление или вычитание :)
    }
}
8
Killster
180 / 183 / 5
Регистрация: 26.11.2010
Сообщений: 511
11.06.2011, 12:09 #13
Цитата Сообщение от ailia Посмотреть сообщение
Вычисление НОД двух чисел
C#
1
2
3
4
5
6
int GCD(int a, int b)
{
    while (b != 0)
        b = a % (a = b);
    return a;
}
или даже (т.н. бинарный алгоритм)

C#
1
2
3
4
5
6
7
8
9
10
11
int GCD(int a, int b)
{
   if (a == 0) return b;
   if (b == 0) return a;
   if (a == b) return a;
   if (a == 1 || b == 1) return 1;
   if ((a % 2 == 0) && (b % 2 == 0)) return 2 * GCD(a / 2, b / 2);
   if ((a % 2 == 0) && (b % 2 != 0)) return GCD(a / 2, b);
   if ((a % 2 != 0) && (b % 2 == 0)) return GCD(a, b / 2);
   return GCD(b, (int)Math.Abs(a - b));
}
7
tezaurismosis
Администратор
Эксперт .NET
8243 / 3734 / 505
Регистрация: 17.04.2012
Сообщений: 8,422
Записей в блоге: 14
16.09.2013, 19:14 #14
Среди трёх чисел выбрать максимальное, минимальное и среднее
C#
1
2
3
int max = Math.Max(a, Math.Max(b, c));  // Максимальное
int min = Math.Min(a, Math.Min(b, c));  // Минимальное
int middle = a + b + c - min - max;  // Среднее
11
OwenGlendower
Супер-модератор
Эксперт .NET
8636 / 7641 / 2804
Регистрация: 17.03.2014
Сообщений: 15,003
Записей в блоге: 1
10.03.2016, 17:58 #15
Как определить путь к папке приложения?

Кликните здесь для просмотра всего текста
В консольном приложении, Windows Forms, WPF и ASP.NET можно использовать свойство AppDomain.BaseDirectory:
C#
1
string applicationRoot = AppDomain.CurrentDomain.BaseDirectory;
В Windows Forms можно также использовать Application.StartupPath.

В .NET Core вместо AppDomain.BaseDirectory нужно использовать AppContext.BaseDirectory.



Почему лучше не пользоваться CurrentDirectory для определения пути к папке приложения?
Кликните здесь для просмотра всего текста
Ни в коем случае не используйте так называемый «текущий каталог» который возвращают Environment.CurrentDirectory и Directory.GetCurrentDirectory() так как он не обязан совпадать с каталогом приложения. Путь к «текущему каталогу» зависит от внешней среды откуда запущена программа. Например, «текущий каталог» может не совпадать с каталогом приложения в следующих ситуациях:
  • При запуске приложения через ярлык с измененным «рабочим каталогом»
  • При запуске приложения из под планировщика Windows (Windows Scheduler)
  • При запуске приложения с помощью команды "Run as administrator" (UAC) или утилиты runas
  • При запуске из другого приложения использующего ProcessStartInfo.WorkingDirectory
  • При переделке приложения в системную службу Windows
  • При использовании OpenFileDialog/SaveFileDialog
14
10.03.2016, 17:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2016, 17:58
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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