Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/43: Рейтинг темы: голосов - 43, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142

Определить, является ли введенный автомобильный государственный регистрационный номер верным

21.04.2019, 16:29. Показов 9020. Ответов 40

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, написать программу по данной задаче:

Основная часть автомобильного государственного регистрационного номера состоит из 6 символов: трех букв и трех цифр. Сначала идет буква, затем 3 цифры и еще 2 буквы заканчивают запись. В качестве цифр могут использоваться любые цифры от 0 до 9, а в качестве букв только заглавные буквы, обозначения которых присутствуют как в английском, так и в русском алфавите, т.е. только следующие символы: A, B, C, E, H, K, M, O, P, T, X, Y. Например, «P204BT» - правильный номер, а «X182Yx» и «ABC216» - нет.
Определить, является ли введенный номер верным.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2019, 16:29
Ответы с готовыми решениями:

Определить является ли введенный шестизначный номер «счастливым»
Помогите кому не сложно) Язык Си. Составить программу, определяющую является ли введенный шестизначный номер «счастливым» (совпадает ли у...

Запросить у пользователя e-mail и определить является ли он верным
Запросить у пользователя e-mail и определить является ли он верным У кого-то есть код на с++

При поселении в гостиницу каждый участник конференции указал свой регистрационный номер, дату и время приезда и отъезда, номер комнаты и номер телефон
При поселении в гостиницу каждый участник конференции указал свой регистрационный номер, дату и время приезда и отъезда, номер комнаты и...

40
454 / 278 / 163
Регистрация: 17.04.2019
Сообщений: 1,637
25.04.2019, 19:35
Студворк — интернет-сервис помощи студентам
llatibro, попробуйте эти методы, это с использованием регулярных выражений:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Boolean^ ValidateRegistrationPlateEngLetters(String^ registrationPlate)
{
    return Regex::Match(registrationPlate, "^[ABCEHKMOPTXY]\\d{3}[ABCEHKMOPTXY]{2}$")->Success;
}
    
Boolean^ ValidateRegistrationPlateRusLetters(String^ registrationPlate)
{
    return Regex::Match(registrationPlate, "^[АВСЕНКМОРТХУ]\\d{3}[АВСЕНКМОРТХУ]{2}$")->Success;
}
    
Boolean^ ValidateRegistrationPlate(String^ registrationPlate)
{
    registrationPlate = registrationPlate->Trim();
        
    return (ValidateRegistrationPlateEngLetters(registrationPlate) || ValidateRegistrationPlateRusLetters(registrationPlate));
}
Вызывать проверку так:
C++
1
2
3
4
if (ValidateRegistrationPlate("А291ВВ"))
{
    //номерной знак правильный
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
25.04.2019, 19:45  [ТС]
повар1, ругается на значение в скобках массива letter. Значение типа const char[13] нельзя использовать для инициализации сущности типа char[12]. Если поменять значение на 13, то всё ок.
Ваше решение кажется мне каким-то странным) Да, перенести его на Форму не составит особого труда, но как-то глаз режет, когда каждую конструкцию приходится дублировать для заглавных и прописных букв.

Добавлено через 1 минуту
Если кто-то сможет внедрить в код ProgItEasy IndexOf, либо же написать прогу через регулярки, то буду очень благодарен
0
454 / 278 / 163
Регистрация: 17.04.2019
Сообщений: 1,637
25.04.2019, 20:03
llatibro, посмотрите выше, я написал через регулярки.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
25.04.2019, 20:11
llatibro, переписал код ProgItEasy
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <regex>
 
int main()
{
    std::locale::global(std::locale(".866"));
    std::wregex eng_pat{ L"^[ABCEHKMOPTXY]\\d{3}[ABCEHKMOPTXY]{2}$" };
    std::wregex rus_pat{ L"^[АВСЕНКМОРТХУ]\\d{3}[АВСЕНКМОРТХУ]{2}$" };
 
    std::wstring num;
    std::wcin >> num;
    std::cout << std::boolalpha << (std::regex_match(num, eng_pat) || std::regex_match(num, rus_pat));
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
25.04.2019, 20:15  [ТС]
ProgItEasy, не понимаю в какое место кода это писать....
Миниатюры
Определить, является ли введенный автомобильный государственный регистрационный номер верным  
0
454 / 278 / 163
Регистрация: 17.04.2019
Сообщений: 1,637
25.04.2019, 20:20
zayats80888, человеку нужен код на C++/CLI.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
25.04.2019, 20:22

Не по теме:

ProgItEasy, уже понял

0
454 / 278 / 163
Регистрация: 17.04.2019
Сообщений: 1,637
25.04.2019, 20:26
llatibro,
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
private:
System::Boolean^ ValidateRegistrationPlateEngLetters(System::String^ registrationPlate)
{
    return Regex::Match(registrationPlate, "^[ABCEHKMOPTXY]\\d{3}[ABCEHKMOPTXY]{2}$")->Success;
}
    
System::Boolean^ ValidateRegistrationPlateRusLetters(System::String^ registrationPlate)
{
    return Regex::Match(registrationPlate, "^[АВСЕНКМОРТХУ]\\d{3}[АВСЕНКМОРТХУ]{2}$")->Success;
}
    
System::Boolean^ ValidateRegistrationPlate(System::String^ registrationPlate)
{
    registrationPlate = registrationPlate->Trim();
        
    return (ValidateRegistrationPlateEngLetters(registrationPlate) || ValidateRegistrationPlateRusLetters(registrationPlate));
}
    
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
    if (ValidateRegistrationPlate(textBox1->Text))
        textBox2.Text = "Верный";
    else
        textBox2.Text = "Неверный";
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
25.04.2019, 20:45  [ТС]
Не считает за класс почему-то
Миниатюры
Определить, является ли введенный автомобильный государственный регистрационный номер верным  
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
25.04.2019, 22:15
Лучший ответ Сообщение было отмечено llatibro как решение

Решение

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
#include <iostream>
using namespace std;
 
int main(){
    string namber,format="000000";
    size_t len;
    char letter[6]={'A','B','C',128,130,145};//128,130,145 коды русских букв
 
    getline(cin, namber);
    len=namber.length();
    if(len!=6){
      cout<<"invalid number format";
      system("pause");
      return 0;
     }
     for(int i=1;i<4;i++)
       if(isdigit(namber[i]))
            format[i]=namber[i];
 
     for(int i=0;i<6;i++){
           if(letter[i]==namber[0])format[0]=namber[0];
           if(letter[i]==namber[4])format[4]=namber[4];
           if(letter[i]==namber[5])format[5]=namber[5];
           }
 
     namber==format ? cout<<"correct number" : cout<<"invalid number";
     system("pause");
     return 0;
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
26.04.2019, 19:58  [ТС]
повар1, похоже это самое оптимальное решение из всех, спасибо большое)
0
454 / 278 / 163
Регистрация: 17.04.2019
Сообщений: 1,637
26.04.2019, 20:07
llatibro, не видит этот класс, потому как нужно подключить пространство имен RegularExpressions:
C++
1
using namespace System::Text::RegularExpressions;
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
28.04.2019, 09:00  [ТС]
Перенес в винформс всё что смог, но с этим не знаю что делать.
1 - код
2 - ошибки
3 - измененный код выдает другие ошибки (чисто ради интереса)
Миниатюры
Определить, является ли введенный автомобильный государственный регистрационный номер верным   Определить, является ли введенный автомобильный государственный регистрационный номер верным   Определить, является ли введенный автомобильный государственный регистрационный номер верным  

0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
28.04.2019, 09:21  [ТС]
ProgItEasy, Теперь в коде не подчеркивает, но при компиляции ошибки всё равно выдает...
Миниатюры
Определить, является ли введенный автомобильный государственный регистрационный номер верным  
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
28.04.2019, 19:33  [ТС]
С типами разобрался, сделал так

String^ nom;
String^ format = "000000";

Добавлено через 5 часов 30 минут
Из ошибок осталось только isdigit

Добавлено через 1 час 53 минуты
повар1, сделал такой код. Единственная ошибка "isdigit: идентификатор не найден". Думаю это из-за того что isdigit относится к char, а nom относится к String. Если можно как-то исправить, чтобы сохранить String^ nom, то было бы очень неплохо. Если так нельзя и придется nom присваивать char, то ладно, хоть так...
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
28.04.2019, 20:55
замени
C++
1
if(isdigit(namber[i]))
на
C++
1
 if(namber[i]>='0' && namber[i]<='9' )
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
29.04.2019, 09:43  [ТС]
повар1, Код почему-то не прикрепил, но вот он. Сейчас выскакивает ошибка при нажатии кнопки определить в винформс

C++ (Qt)
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
#pragma endregion
/*Основная часть автомобильного государственного регистрационного номера состоит из 6 символов: трех букв и трех цифр.
Сначала идет буква, затем 3 цифры и еще 2 буквы заканчивают запись.
В качестве цифр могут использоваться любые цифры от 0 до 9, а в качестве букв только прописные буквы,
обозначения которых присутствуют как в английском, так и в русском алфавите, т.е. только следующие символы: A, B, C, E, H, K, M, O, P, T, X, Y.
Например, «P204BT» - правильный номер, а «X182Yx» и «ABC216» - нет.
Определить, является ли введенный номер верным.*/
 
    private: System::Void MyForm_Load(System::Object^  sender, System::EventArgs^  e) {
    }
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 
        String^ nom; 
        char format[7] = "000000";
        char buk[24] = { 'A','B','C','E','H','K','M','O','P','T','X','Y',128,130,145,133,141,138,140,142,144,146,149,147 };
            
        textBox1->Text;
 
        if (nom->Length != 6)
        {
            String^ k = "Неверный";
            textBox2->Text = System::Convert::ToString(k);
        }
        for (int i = 1; i < 4; i++)
            if (nom[i] >= '0' && nom[i] <= '9')
                format[i] = nom[i];
 
        for (int i = 0; i < 24; i++)
        {
            if (buk[i] == nom[0])
                format[0] = nom[0];
            if (buk[i] == nom[4])
                format[4] = nom[4];
            if (buk[i] == nom[5])
                format[5] = nom[5];
        }
        for (int i = 0; i < 6; i++) 
            if (format[i] == nom[i])
        {
            String^ k = "Верный";
            textBox2->Text = System::Convert::ToString(k);
        }
        else
        {
            String^ k = "Неверный";
            textBox2->Text = System::Convert::ToString(k);
        }
    }
    };
Миниатюры
Определить, является ли введенный автомобильный государственный регистрационный номер верным  
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
29.04.2019, 10:27  [ТС]
ProgItEasy, теперь ошибок в регулярках нет, форма запускается, все вводится и нажимается, НО что бы я ни ввел, пишет что номер Верный. Что с этим делать?
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
29.04.2019, 10:50
Цитата Сообщение от llatibro Посмотреть сообщение
for (int i = 0; i < 6; i++)
* * * * * * if (format[i] == nom[i])
* * * * {
* * * * * * String^ k = "Верный";
* * * * * * textBox2->Text = System::Convert::ToString(k);
* * * * }
* * * * else
* * * * {
* * * * * * String^ k = "Неверный";
* * * * * * textBox2->Text = System::Convert::ToString(k);
* * * * }
Похоже это не правильно работает. попробуй if - else в скобки взять. Строка 48 похоже лишняя
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
29.04.2019, 16:03  [ТС]
повар1, не лишняя. Просто это не весь код. Там сверху еще больше сотни строк, относящихся к самой форме. Если Вы про фигурные скобки, то не, не исправилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2019, 16:03
Помогаю со студенческими работами здесь

Определить, является ли введенный символ числом
Написать программу, которая вводит один символ с клавиатуры и выводит сообщение, является ли введенный символ числом (Коды числовых...

Определить, является ли введенный текст палиндромом
Ввести строку , содержащую некоторый текст. Определить, является ли данный текст палиндромом, т.е. читается ли он слева направо так же, как...

Определить, является ли введенный год високосным
&lt;html&gt; &lt;script type=&quot;text/javascript&quot;&gt; ,,, function isLeapYear (year) { return new Date(year, 1, 29).getMonth() == 1; } ,,,...

Определить, является ли введённый год високосным
3.Дано целое положительное число, соответствующее номеру года. Напишите программу, позволяющую определить является ли введённый год...

Определить, является ли введенный пользователем год високосным
3)На языке программирования С++ напишите программу, определяющую, является ли введенный пользователем год високосным, используя правило:...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru