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

Сделать так, чтоб программа разрешала использовать только русский алфавит

07.10.2014, 16:52. Показов 2743. Ответов 23
Метки нет (Все метки)

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

Вот код программы. "Tabliza[j].Z" хранит фамилию работника. Как мне сделать так, чтоб программа разрешала использовать только русский алфавит и только с большой буквы при вводе фамилии. А в остальных случаях необходимо выдавать предупреждение. Помогите разобраться.

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            int i;
            Console.WriteLine("Сколько строк в таблице?");
            i = int.Parse(Console.ReadLine());
            Line[] Tabliza = new Line[i];           
            for (int j = 0; j < i; j++)
            {
                Tabliza[j] = new Line();
            }
            for (int j = 0; j < i; j++)
            {
                Console.WriteLine("Введите фамилию работника");
                Tabliza[j].Z = Console.ReadLine();
                Console.WriteLine("Введите кол-во изготовленных им деталей");
                Tabliza[j].P = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Введите кол-во небракованных");
                Tabliza[j].F = Convert.ToDouble(Console.ReadLine());
            }
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("№\t Фамилия\t Деталей всего\t Принято");
            Console.WriteLine();
            for (int j = 0; j < i; j++)
            {
                Console.WriteLine("{0}\t {1}\t\t {2}\t\t {3}\t\t", j + 1, Tabliza[j].Z, Math.Round(Tabliza[j].P, 2), Math.Round(Tabliza[j].F, 2));
            }
            Console.ReadKey();
        }
    }
    class Line
    {
        string z;
        double p, f;
 
        public string Z
        {
            get { return z; }
            set { z = value; }
        }
 
        public double P
        {
            get { return p; }
            set { p = value; }
        }
 
        public double F
        {
            get { return f; }
            set { f = value; }
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.10.2014, 16:52
Ответы с готовыми решениями:

Шифр Цезаря. Использовать только русский алфавит
Нужно написать в Windows Form шифр Цезаря. Использовать только русский алфавит, сделать защиту на ввод цифр.

Не получается использовать русский алфавит
Работаю в Rad studio 10.2 и 10.1 подключаю алфавит через текстовой файл в программе. С английским алфавитом на всех компьютерах программа...

как сделать так чтоб менялся только ul.menu li a
есть такой CSS ul.menu li a { font-family: Tahoma, Geneva, sans-serif; text-decoration: none; background: #556A73; ...

23
 Аватар для meksik
202 / 171 / 67
Регистрация: 04.10.2014
Сообщений: 839
07.10.2014, 20:57
Студворк — интернет-сервис помощи студентам
что за тип возвращает вот это вот Tabliza[j].Z
и почему, если на вход ты подаешь Tabliza[j].Z, то выводишь это?
C#
1
Console.WriteLine(Tabliza[j]);
Добавлено через 1 минуту
C#
1
if (Regex.IsMatch(Tabliza[j].Z, @"[А-Яа-яЁё]+(?:-[А-Яа-яЁё]+)?") && Tabliza[j].Length > 0)
такая же фигня
0
07.10.2014, 21:26

Не по теме:

я не настолько силен в регулярках
Да я тоже, в общем-то, не профи..

0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
08.10.2014, 04:47  [ТС]
С задачей в конце концов справился самостоятельно, всем спасибо)
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
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
 
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.BackgroundColor = ConsoleColor.Gray;
            Console.Clear();
            Console.SetWindowSize(120, 32);
            Console.Title = "Відомість випуску деталей робітниками цеху";
            int Schetchik = 0;
            string YorN;
            int i = 999;
            double aSum = 0, bSum = 0, cSum = 0;
            Line[] Tabliza = new Line[i];
            Console.WriteLine("Введите значения в таблицу в таком порядке: фамилия работника, кол-во изготовленных им деталей и кол-во принятых\n");
            for (int j = 0; j < i; j++)
            {
                Tabliza[j] = new Line();
            }
            for (int j = 0; j < i; j++)
            {
                Schetchik++;
                YorN = "";
                Console.WriteLine("Введите фамилию работника №{0}:", j + 1);
 
                Tabliza[j].Z = Console.ReadLine();
                string lastname = Tabliza[j].Z;
                string qqq = lastname;
                string ln = lastname;
                char zxc = lastname[0];
                char zxc1 = zxc;
 
                zxc1 = char.ToLower(zxc1);
                if (zxc == zxc1)
                {
                    Console.WriteLine("Введите фамилию с большой буквы!");
                    goto b;
                }
                if (Regex.IsMatch(lastname, @"[^A-Za-z]+[^0-9]") && lastname.Length > 0)
                {
                    goto a;
                }
                else
                {
                    Console.WriteLine("Строка содержала недопустимые символы. Введите фамилию работника на русском языке.");
                    goto b;
                }
            a:
                Console.WriteLine("Введите кол-во произведённых им деталей:");
                Tabliza[j].P = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Введите кол-во НЕ бракованных деталей:");
                Tabliza[j].F = Convert.ToDouble(Console.ReadLine());
 
                Console.WriteLine("Продолжить ввод данных? Введите 'y' для продолжения и 'n' для построения таблицы");
                YorN = Console.ReadLine();
                if (YorN == "n") j = i;
            }
            Console.WriteLine();
            Console.WriteLine("|_______________________________________________________________________________|");
            Console.WriteLine("| №\t Фамилия\t Деталей всего\t Принято\t Брак шт.\t Брак % |");
            Console.WriteLine("|_______________________________________________________________________________|");
            for (int j = 0; j < Schetchik; j++)
            {
                Console.WriteLine("| {0}\t {1}\t\t {2}\t\t {3}\t\t {4}\t\t {5}\t|", j + 1, Tabliza[j].Z, Math.Round(Tabliza[j].P, 2), Math.Round(Tabliza[j].F, 2), Math.Round(Tabliza[j].B1, 2), Math.Round(Tabliza[j].B2, 2));
                aSum = aSum + Tabliza[j].P;
                bSum = bSum + Tabliza[j].F;
                cSum = cSum + Tabliza[j].B1;
            }
            Console.WriteLine("|_______________________________________________________________________________|");
            Console.WriteLine("|\t Сумма\t\t {0}\t\t {1}\t\t {2}\t\t\t|", aSum, bSum, cSum);
            Console.WriteLine("|_______________________________________________________________________________|");
        b:
            Console.ReadKey();
        }
    }
    class Line
    {
        string z;
        double p, f, b1, b2;
 
        public string Z
        {
            get { return z; }
            set { z = value; }
        }
 
        public double P
        {
            get { return p; }
            set { p = value; }
        }
 
        public double F
        {
            get { return f; }
            set { f = value; }
        }
 
        public double B1
        {
            get
            {
                b1 = p - f;
                return b1;
            }
        }
 
        public double B2
        {
            get
            {
                b2 = b1 * 100 / p;
                return b2;
            }
        }
 
        public int Length { get; set; }
    }
}
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.10.2014, 16:12

Не по теме:

какая прелесть, goto :yes2:


Цитата Сообщение от BsSlayer Посмотреть сообщение
C#
1
if (Regex.IsMatch(lastname, @"[^A-Za-z]+[^0-9]")
Извините, а чем вы руководствовались при составлении данного регулярного выражения?
Данное выражение означает "Один или более любой символ, кроме символов от A до Z (в любом регистре), после которого следует любой символ, отличный от цифр".
Это неверно, как со стороны логики, так и со стороны проверки.

Со стороны проверки: например, строка "--" отлично подходит под ваше выражение. Да и даже строка из двух или более пробелов. Пробел является буквой латиницы? Не является, значит, первый символ прошел проверку на [^A-Za-z]. Второй пробел является цифрой? Нет, не является, следовательно, вторую проверку [^0-9] пробел также прошел. Следовательно, два пробела - вполне нормальная фамилия, если следовать вашему коду.

Со стороны логики:
Представьте, что у вас есть корзина с фруктами. Допустим, вам надо узнать, есть ли в ней яблоки. Ваши действия, следуя алгоритму вашего кода:
Если в корзине нет, к примеру, груш и если в корзине нет, к примеру, абрикосов - то значит, что в ней лежат яблоки.
И как-то не учитывается, что помимо груш, абрикосов и яблок есть еще куча разных видов фруктов. Можно, конечно, попробовать перечислить все их.... Но ведь куда логичнее и проще было бы просто посмотреть, есть ли там яблоки, и только они, разве нет?
Именно тоже самое и требуется сделать вам - не перечислять груши, абрикосы и т.д., а проверить наличие яблок и только их.
Следовательно, выражение должно быть таким
C#
1
@"[А-ЯЁ][а-яё]+(?:-[А-ЯЁ][а-яё]+)?"
И условие инвертированное, соответственно. Подобная проверка проверяет, написана ли фамилия с заглавной буквы и состоит ли она только из кириллицы. Ну и да, еще она допускает двойные фамилии вида "Салтыков-Щедрин".
Цитата Сообщение от BsSlayer Посмотреть сообщение
public double F
разве нельзя сделать также, как и
Цитата Сообщение от BsSlayer Посмотреть сообщение
public int Length { get; set; }
? Ведь и там, и там, операции однотипные - получить и установить, без всяких изощрений.. Судя по коду, подобные свои геттеры вам требуются только для B1 и B2.
Цитата Сообщение от BsSlayer Посмотреть сообщение
int i = 999;
переменную с подобным названием обычно используют как переменную-счетчик цикла (increment). Возникает недоумение при виде использования ее несколько в другом контексте. Ну и, исходя из кода, опять же, напрашивается то, что это число должно быть константным.

З.Ы. Использовать goto редко когда возникает необходимость, и ваш случай явно не из них. Лучше разбейте соответствующие действия по разным методам и вызывайте нужные методы вместо перехода по меткам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.10.2014, 16:12

А как сделать так, чтоб ubuntu был только на новом пользователе?
:cry: простите если тупой вопрос, но я совсем новенькая. Помогите пожалуйста моего пользователя не стирать, а на нового пользателя...

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

Как сделать так чтоб программа читала файлы
как сделать так чтоб программа читала файлы с расширением dcm buk krg nrm nru prs pru spr spu trm CBX NMR NMU NTV помогите нужен...

Как можно сделать так чтоб программа работала быстрее?
Как можно сделать так чтоб программа работала быстрее?Думаю сделать через seek, чтобы при проверке файла программа проверяла ту позицию, из...

Сделать так чтоб программа с сигнатурами файла работала быстрее
Как можно сделать так чтоб программа работала быстрее?Думаю сделать через seek, чтобы при проверке файла программа проверяла ту позицию, из...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru