Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
Заблокирован

Как писать обычные функции?

05.02.2015, 13:33. Показов 6335. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите, только начал изучать шарп, как обычные функции писать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2015, 13:33
Ответы с готовыми решениями:

Основы VB - обычные функции
В C мы пишем return var_name и не увидим var_name в вызывающей процедуре. А в VB после вызова функции, вернувшей объект, тупо получаю два...

Как писать функции в С++ ?!
В C# на много Легче не Присваевает значение в переменную "sticksC". int sticksC; void options(int palocek) { if (palocek == 15) ...

Отличаются ли обычные функции от функций в классе?
отличаются ли они?

53
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.02.2015, 16:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Feaban Посмотреть сообщение
кому как, для меня это логично, я в плюсах даже начал собирать отдельный модуль своих функций и классов, которые можно использовать в своих программах, так и тут, рандом мой буду использовать не только тут, но и где нибудь еще
C#
1
2
3
4
    public static class RandomString
    {
        private static Lazy<int[]> Range = new Lazy<int[]>(() => Enumerable.Range(1,100).ToArray());
    }
ну вот например, значение будет высчитано один раз, в дальнейшем будет использоваться существующий массив.
0
Заблокирован
05.02.2015, 16:16  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
ну вот например, значение будет высчитано один раз, в дальнейшем будет использоваться существующий массив.
да если бы все было так просто... говорю же потому я и затеял все эту муру с массивами что символы пунктуации не по порядку располагаются в таблице символов, это конкретная функция должна возвращать именно рандомный символ пунктуации, поэтому мне приходится проходить в цикле по всей таблице символов отыскивая символы пунктуации, если бы мог их просто присвоить я бы так и сделал...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.02.2015, 16:33
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
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                char c = RandomString.RandomPunctiation.Value();
                Console.WriteLine("{0} - {1}", c, (int)c);
            }
        }
    }
 
    public static class RandomString
    {
        public static Lazy<Func<char>> RandomPunctiation = new Lazy<Func<char>>(() =>
                                                                 {
                                                                     var list = new List<char>();
                                                                     for (char c = '0'; c < char.MaxValue; c++)
                                                                     {
                                                                         if (char.IsPunctuation(c))
                                                                             list.Add(c);
                                                                     }
                                                                     var r = new Random();
                                                                     var arr = list.ToArray();
                                                                     return () => arr[r.Next(arr.Length)];
                                                                 });
    }
правда хз, зачем нужно такое извращение. Ну и да, большинство символов пунктуации принадлежит расширенной таблице юникода, поэтому в консоли будут сплошные "?"
0
Заблокирован
05.02.2015, 16:50  [ТС]
а теперь расскажите ка мне что да как... ибо я не очень понимаю ваш код...
Цитата Сообщение от Psilon Посмотреть сообщение
() =>
это лямбда чтоли? в последних стандартах плюсов тоже появились, так что узнаю
Цитата Сообщение от Psilon Посмотреть сообщение
Lazy<Func<char>>
это что еще за чудо?
Цитата Сообщение от Psilon Посмотреть сообщение
правда хз, зачем нужно такое извращение
генератор паролей
Цитата Сообщение от Psilon Посмотреть сообщение
Ну и да, большинство символов пунктуации принадлежит расширенной таблице юникода, поэтому в консоли будут сплошные "?"
я уже заметил, можно исправить как то? ну чтоб отображались они нормально

Добавлено через 2 минуты
попытался переписать...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private static Lazy<char> puncts = new Lazy<char>(() =>
    {
        var list = new List<char>();
        for (char c = char.MinValue; c < char.MaxValue; c++)
        {
            if (char.IsPunctuation(c))
                list.Add(c);
        }
    });
 
    public static char punct
    {
        get
        {
            return punct[random.value(puncts.)];
        }
    }
но че то явно не так
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.02.2015, 17:05
Цитата Сообщение от Feaban Посмотреть сообщение
это лямбда чтоли? в последних стандартах плюсов тоже появились, так что узнаю
лямбда
Цитата Сообщение от Feaban Посмотреть сообщение
это что еще за чудо?
ленивое определение делегата (указателя на функцию), которая возвращает случайный символ
Цитата Сообщение от Feaban Посмотреть сообщение
генератор паролей
его можно сделать проще, уверен. Вопрос только в том, что вы хотите сделать, а вы зацикливаетесь на реализации. Хотя шарп позволяет удовлетворить почти любую извращенную фантазию (вплоть до получения адресов и прямых указателей на служебные объекты). Тут картинка с троллейбусом из хлеба.

Цитата Сообщение от Feaban Посмотреть сообщение
я уже заметил, можно исправить как то? ну чтоб отображались они нормально
никак, это же консоль, она не рассчитана на юникод. В гуях он поддерживается.
0
Заблокирован
05.02.2015, 17:15  [ТС]
Psilon, помогите мне правильно исправить ваш код, чтобы была приватная статическая переменная (контейнер с символами) и публичное свойство как у меня возвращающее уже рандомный символ

Добавлено через 1 минуту
Цитата Сообщение от Psilon Посмотреть сообщение
никак, это же консоль, она не рассчитана на юникод. В гуях он поддерживается.
гуях? что? надо будет потом переделать под символы ansi...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.02.2015, 17:24
Лучший ответ Сообщение было отмечено Feaban как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public static class RandomString
    {
        private static readonly char[] punctiations;
        private static readonly Random Rand = new Random();
 
        static RandomString()
        {
            var list = new List<char>();
            for (char c = '0'; c < char.MaxValue; c++)
            {
                if (char.IsPunctuation(c))
                    list.Add(c);
            }
            punctiations = list.ToArray();
        }
 
        public static char GetRandomPunctuation()
        {
            return punctiations[Rand.Next(punctiations.Length)];
        }
    }
Цитата Сообщение от Feaban Посмотреть сообщение
гуях? что? надо будет потом переделать под символы ansi...
ansi в консоли поддерживается, я про юникод говорил.
1
Заблокирован
05.02.2015, 18:26  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
static RandomString()
и все так просто? да что ж за фигня такая, отвечаю я так пробовал у меня ошибки выдавало, а сейчас не выдает, просто мистика какая то...

еще вопрос как вообще в шарпе сделать ansi символы? вообще какой тип за них отвечает? потому что я так понял char тут по умолчанию это уже Unicode (а в плюсах char наоборот Ansi)

Добавлено через 28 минут
в итоге
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
static class random
{
    private static Random rnd = new Random();
 
    public static int value()
    {
        return rnd.Next();
    }
 
    public static int value(int max)
    {
        return rnd.Next(max);
    }
 
    public static int value(int min, int max)
    {
        return rnd.Next(min, max);
    }
}
 
static class RandomString
{
    private static readonly char[] puncts;
 
    static RandomString()
    {
        var list = new List<char>();
        for (char c = char.MinValue; c < char.MaxValue; c++)
        {
            if (char.IsPunctuation(c))
                list.Add(c);
        }
        puncts = list.ToArray();
    }
 
    public static char digit
    {
        get
        {
            return Convert.ToChar(random.value('0', '9'));
        }
    }
 
    public static char lat_uppercase
    {
        get
        {
            return Convert.ToChar(random.value('A', 'Z'));
        }
    }
 
    public static char lat_lowercase
    {
        get
        {
            return Convert.ToChar(random.value('a', 'z'));
        }
    }
 
    public static char rus_uppercase
    {
        get
        {
            return Convert.ToChar(random.value('А', 'Я'));
        }
    }
 
    public static char rus_lowercase
    {
        get
        {
            return Convert.ToChar(random.value('а', 'я'));
        }
    }
 
    public static char punct
    {
        get
        {
            return puncts[random.value(puncts.Length)];
        }
    }
 
    public static char chr(bool d, bool lu, bool ll, bool ru, bool rl, bool p)
    {
        var choose = new List<int>();
        if (d) choose.Add(0);
        if (lu) choose.Add(1);
        if (ll) choose.Add(2);
        if (ru) choose.Add(3);
        if (rl) choose.Add(4);
        if (p) choose.Add(5);
        switch (choose[random.value(choose.Count)])
        {
            case 0: return digit;
            case 1: return lat_uppercase;
            case 2: return lat_lowercase;
            case 3: return rus_uppercase;
            case 4: return rus_lowercase;
            case 5: return punct;
            default: return '\0';
        }
    }
 
    public static string str(int size, bool d, bool lu, bool ll, bool ru, bool rl, bool p)
    {
        var s = new StringBuilder(size);
        for (int i = 0; i < s.Length; i++)
            s[i] = chr(d, lu, ll, ru, rl, p);
        return s.ToString();
    }
}
остались вопросы:
1. почему у меня пустую строку возвращает str?
2. что там все таки с ansi символами в шарпе? хочу переделать punct

Добавлено через 7 минут
Цитата Сообщение от Feaban Посмотреть сообщение
1. почему у меня пустую строку возвращает str?
с этим разобрался
C#
1
2
3
4
5
6
7
public static string str(int size, bool d, bool lu, bool ll, bool ru, bool rl, bool p)
    {
        var s = new StringBuilder(size);
        for (int i = 0; i < size; i++)
            s.Append(chr(d, lu, ll, ru, rl, p));
        return s.ToString();
    }
вопрос с ansi остается открытым !
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.02.2015, 18:56
Feaban, все строки являются Unicode, это поведение нельзя изменить никак (да и не нужно), ну и в будущих версиях это тоже очевидно не изменится. Юникод появился в Win95, на дворе 2015 год, пора бы уже привыкнуть.
0
Заблокирован
05.02.2015, 19:03  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Feaban, все строки являются Unicode, это поведение нельзя изменить никак (да и не нужно), ну и в будущих версиях это тоже очевидно не изменится. Юникод появился в Win95, на дворе 2015 год, пора бы уже привыкнуть.
однако консоль то по прежнему не поддерживает юникод...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.02.2015, 19:07
Feaban, консоль - это дос. В досе не было юникода, да.

Добавлено через 43 секунды
Чтобы не перебирать юникодные символы в цикле достаточно вместо char.MaxValue поставить 256

Добавлено через 28 секунд
C#
1
2
3
4
5
6
7
public static string str(int size, bool d, bool lu, bool ll, bool ru, bool rl, bool p)
    {
        var s = new StringBuilder(size);
        for (int i = 0; i < size; i++)
            s.Append(chr(d, lu, ll, ru, rl, p));
        return s.ToString();
    }

Не по теме:

Сразу видно плюсплюсника :)

0
Заблокирован
05.02.2015, 20:10  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Чтобы не перебирать юникодные символы в цикле достаточно вместо char.MaxValue поставить 256
ansi char поддерживает диапазон от -256 до +255 вроде... т.е. есть же еще отрицательные символы... в частности в отрицательной части содержатся все русские символы, а в юникоде нет отрицательных символов вовсе...

Добавлено через 56 минут
хотя впрочем может оно мне и нафиг не надо... я же выводить буду на форму, а там я надеюсь unicode работает?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.02.2015, 22:32
Цитата Сообщение от Feaban Посмотреть сообщение
ansi char поддерживает диапазон от -256 до +255 вроде... т.е. есть же еще отрицательные символы... в частности в отрицательной части содержатся все русские символы, а в юникоде нет отрицательных символов вовсе...
лол, девятибайтовый чар это нонсенс... Я понимаю, что иногда и число бит в байте не равно 8, но всё же чар это 8 бит (реже 7), следовательно 0..255. НА формах всё работает, я сразу сказал.
0
Заблокирован
05.02.2015, 22:49  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
лол, девятибайтовый чар это нонсенс... Я понимаю, что иногда и число бит в байте не равно 8, но всё же чар это 8 бит (реже 7), следовательно 0..255.
упс обшибочка вышла, от -128 до 127

Добавлено через 15 секунд
спасибо помогли
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.02.2015, 22:49

Как правильно писать обращение к функции
Доброго времени суток. Ответе пожалуйста на такие вопросы: 1. Кнопка, на событии вход делаю обращение к функции, меня интересует, что...

Шаблон функции, принимающей обычные массивы и объекты
Нужно чтобы функция одинаково хорошо принимала массив long и объект vector &lt;string&gt;, чтобы затем удалить повторяющиеся элементы,...

Как правильно писать процедуру с использованием функции Windows?
Как правильно писать процедуру с использованием функции Windows? Пробую писать процедуры на FASM. Простые процедуры получаются, а...

Как правильно при определении функции писать название компоненте?
Добрый день, Перелопатил код проекта и решил засунуть повторяющиеся части кода в функции. такая штука, в unit.h перед #endif...

Где ошибка в функции или как в потоках писать файлы?
в 2 словах набросал такую функцию, но главная ее проблема - это нагрузка оперативы, чтобы вы понимали стандартное использование - 60-80 мб,...


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

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru