0 / 0 / 0
Регистрация: 19.08.2019
Сообщений: 27
1

Выручайте. Перебор трех чисел двумя нажатиями! похоже на банальную рекурсию

24.08.2019, 10:11. Показов 753. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вроде бы глупая рекурсия, но все не так просто как мне казалась.

Идея заключается в следующем нажатием 4(перебор влево) 6(перебор вправо) осуществлять движение курсора (поочередного мигания) трехзначного числа (095)

В приведенном ниже коде реализовал лишь движение в одну сторону (4+4+4 влево влево влево / анологично с 6кой)

НЕОБХОДИМО реализовать возможные переборы
2+4+6
2+6+4
2+4+6+4
2+6+4+6
2+4+6+4+6
2+6+4+6+4
и так далее, что бы при любой вариации проходил пребор 4/6


Забитые действия на нажатие 4ки :

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
void spravka::on_b4_clicked() //4
{
    switch (rejim)
    {
 
        // осуществление мигание с перебором в левую сторону из режима тарировки 2
 
    case 4:
    {
        rejim = 41; //2+4
        ui -> lab1->setText("2>ТАРИР");
        ui -> lab2->setText("С3 А:095");
        ui -> lab3->setText("ДТ:600:1");
        ui -> text1 ->setText("1Режим торировки.");
        ui -> text2 ->setText("где:"
                              "- в первой строке отображен текущий режим - «2»;"
                              "- во второй, три позиции справа - адрес параметра, подлежащего тарировке(095);"
                              "- в третьей, первые три цифровые позиции - значение параметра по указанному адресу(600),"
                              "крайняя правая позиция - значение бинарного сигнала по этому адресу(1),");
        break;
 
    }
    case 41:
    {
        rejim = 42; //2+4+4
        ui -> lab1->setText("2>ТАРИР");
        ui -> lab2->setText("С3 А:095");
        ui -> lab3->setText("ДТ:600:1");
        ui -> text1 ->setText("2Режим торировки.");
        ui -> text2 ->setText("где:"
                              "- в первой строке отображен текущий режим - «2»;"
                              "- во второй, три позиции справа - адрес параметра, подлежащего тарировке(095);"
                              "- в третьей, первые три цифровые позиции - значение параметра по указанному адресу(600),"
                              "крайняя правая позиция - значение бинарного сигнала по этому адресу(1),");
        break;
 
    }
    case 42:
    {
        rejim = 43; //2+4+4+4
        ui -> lab1->setText("2>ТАРИР");
        ui -> lab2->setText("С3 А:095");
        ui -> lab3->setText("ДТ:600:1");
        ui -> text1 ->setText("3Режим торировки.");
        ui -> text2 ->setText("где:"
                              "- в первой строке отображен текущий режим - «2»;"
                              "- во второй, три позиции справа - адрес параметра, подлежащего тарировке(095);"
                              "- в третьей, первые три цифровые позиции - значение параметра по указанному адресу(600),"
                              "крайняя правая позиция - значение бинарного сигнала по этому адресу(1),");
        break;
 
    }
    case 43:
    {
        rejim = 41; //2+4+4+4+4 возвращение к функции 2 + 4 + 4
        ui -> lab1->setText("2>ТАРИР");
        ui -> lab2->setText("С3 А:095");
        ui -> lab3->setText("ДТ:600:1");
        ui -> text1 ->setText("3Режим торировки.");
        ui -> text2 ->setText("где:"
                              "- в первой строке отображен текущий режим - «2»;"
                              "- во второй, три позиции справа - адрес параметра, подлежащего тарировке(095);"
                              "- в третьей, первые три цифровые позиции - значение параметра по указанному адресу(600),"
                              "крайняя правая позиция - значение бинарного сигнала по этому адресу(1),");
        break;
 
    }
}
}
Аналогично происходит и на 6ку, просто забито под отдельную кнопку и как следствие отдельный свич

И организация таймера на мигание(движение курсора):
(второй лейбл значение 095)

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
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
// мигание по нажатию 2+4 или 2+6 первого символа
void spravka::slotTimeMig1()
{
    if(rejim == 41 or rejim == 44)
    {
    QTimer::singleShot(100, this, [=](){
        ui -> lab1->setText("2>ТАРИР");
        ui -> lab2->setText("С3 А:095");
        ui -> lab3->setText("ДТ:600:1");
        ui -> text1 ->setText("1Режим торировки.");
        ui -> text2 ->setText("где:"
                              "- в первой строке отображен текущий режим - «2»;"
                              "- во второй, три позиции справа - адрес параметра, подлежащего тарировке(095);"
                              "- в третьей, первые три цифровые позиции - значение параметра по указанному адресу(600),"
                              "крайняя правая позиция - значение бинарного сигнала по этому адресу(1),");
        });
    }
}
 
void spravka::slotTimeMig2()
{
    if(rejim == 41 or rejim == 44)
    {
    QTimer::singleShot(200, this, [=](){
        ui -> lab1->setText("2>ТАРИР");
        ui -> lab2->setText("С3 А:  95");
        ui -> lab3->setText("ДТ:600:1");
        ui -> text1 ->setText("1Режим торировки.");
        ui -> text2 ->setText("где:"
                              "- в первой строке отображен текущий режим - «2»;"
                              "- во второй, три позиции справа - адрес параметра, подлежащего тарировке(095);"
                              "- в третьей, первые три цифровые позиции - значение параметра по указанному адресу(600),"
                              "крайняя правая позиция - значение бинарного сигнала по этому адресу(1),");
        });
    }
}
 
// мигание по нажатию 2+4+4 или 2+6+6+6 второго символа
 
void spravka::slotTimeMig3()
{
    if(rejim == 43 or rejim == 45)
    {
    QTimer::singleShot(100, this, [=](){
        ui -> lab1->setText("2>ТАРИР");
        ui -> lab2->setText("С3 А:095");
        ui -> lab3->setText("ДТ:600:1");
        ui -> text1 ->setText("1Режим торировки.");
        ui -> text2 ->setText("где:"
                              "- в первой строке отображен текущий режим - «2»;"
                              "- во второй, три позиции справа - адрес параметра, подлежащего тарировке(095);"
                              "- в третьей, первые три цифровые позиции - значение параметра по указанному адресу(600),"
                              "крайняя правая позиция - значение бинарного сигнала по этому адресу(1),");
        });
    }
}
 
void spravka::slotTimeMig4()
{
    if(rejim == 43 or rejim == 45)
    {
    QTimer::singleShot(200, this, [=](){
        ui -> lab1->setText("2>ТАРИР");
        ui -> lab2->setText("С3 А:0  5");
        ui -> lab3->setText("ДТ:600:1");
        ui -> text1 ->setText("1Режим торировки.");
        ui -> text2 ->setText("где:"
                              "- в первой строке отображен текущий режим - «2»;"
                              "- во второй, три позиции справа - адрес параметра, подлежащего тарировке(095);"
                              "- в третьей, первые три цифровые позиции - значение параметра по указанному адресу(600),"
                              "крайняя правая позиция - значение бинарного сигнала по этому адресу(1),");
        });
    }
}
 
// мигание по нажатию 2+4+4+4 или 2+6+6 третьего символа
 
void spravka::slotTimeMig5()
{
    if(rejim == 42 or rejim == 46)
    {
    QTimer::singleShot(100, this, [=](){
        ui -> lab1->setText("2>ТАРИР");
        ui -> lab2->setText("С3 А:095");
        ui -> lab3->setText("ДТ:600:1");
        ui -> text1 ->setText("1Режим торировки.");
        ui -> text2 ->setText("где:"
                              "- в первой строке отображен текущий режим - «2»;"
                              "- во второй, три позиции справа - адрес параметра, подлежащего тарировке(095);"
                              "- в третьей, первые три цифровые позиции - значение параметра по указанному адресу(600),"
                              "крайняя правая позиция - значение бинарного сигнала по этому адресу(1),");
        });
    }
}
void spravka::slotTimeMig6()
{
    if(rejim == 42 or rejim == 46)
    {
    QTimer::singleShot(200, this, [=](){
        ui -> lab1->setText("2>ТАРИР");
        ui -> lab2->setText("С3 А:09  ");
        ui -> lab3->setText("ДТ:600:1");
        ui -> text1 ->setText("1Режим торировки.");
        ui -> text2 ->setText("где:"
                              "- в первой строке отображен текущий режим - «2»;"
                              "- во второй, три позиции справа - адрес параметра, подлежащего тарировке(095);"
                              "- в третьей, первые три цифровые позиции - значение параметра по указанному адресу(600),"
                              "крайняя правая позиция - значение бинарного сигнала по этому адресу(1),");
        });
    }
}
Все это осуществляется с целью что бы организовать последующий перебор выбранного символа, если есть возможность поднакидайте заранее идей)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2019, 10:11
Ответы с готовыми решениями:

Замер времени между двумя нажатиями кнопки
Помогите пожалуйста! Мне нужно, чтобы при нажатии на кнопку начинало засекаться время и при...

Перебор возможных значений для трёх чисел
Доброго времени суток. Нужно перебрать все возможные значения трёх чисел. их сума равна 1....

Определить промежуток времени между двумя последовательными нажатиями клавиш
Дали задание составить программу в CompModel-2K, которая определяет промежуток времени между двумя...

Выбрать из трех чисел то, которое лежит между двумя другими
составить программу выбирающую из трех чисел то которое лежит между двумя другими

7
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
24.08.2019, 13:38 2
JekMvr, Прости, но либо я тупой, либо ты слишком плохо объясняешь, можешь визуально вообразить, что тебе нужно? А то много одинакового кода, и еще и 2 + 4 + 6 мне не очем не говорят, ты хочешь как стрелочками переходить в другое положения?
0
0 / 0 / 0
Регистрация: 19.08.2019
Сообщений: 27
24.08.2019, 13:49  [ТС] 3
kitsoRik, визуально желаемый результат выглядит примерно как на скрине
4 и 6 будут как стрелочки по очереди подсвечивать таймером определённые значения, но пока у меня вышло подсвечивать значения лишь в одну сторону (например вправо - вправо -вправо те 6 - 6 - 6 и так по кругу / ну и влево собственно)
Миниатюры
Выручайте. Перебор трех чисел двумя нажатиями! похоже на банальную рекурсию  
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
24.08.2019, 15:05 4
JekMvr, ты хочешь сделать навигацию по дереву? Или что? Объясни саму задачу.

Добавлено через 2 минуты
К чему тут число
Цитата Сообщение от JekMvr Посмотреть сообщение
трехзначного числа (095)
0
0 / 0 / 0
Регистрация: 19.08.2019
Сообщений: 27
24.08.2019, 15:08  [ТС] 5
kitsoRik, Клавишами 4, 6 устанавливается позиция разряда адреса параметра, подлежащего тарировке (мигающий курсор).
Клавишами 1, 3 устанавливается значение цифрового символа по этой позиции.
2>ТАРИР
СЗ А:095
ДТ:600: 1
где трехзначного числа (095) - адрес параметра
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
24.08.2019, 15:22 6
JekMvr, а зачем тебе сразу все подсвечивать, нельзя ли только следующую комбинацию?
0
0 / 0 / 0
Регистрация: 19.08.2019
Сообщений: 27
24.08.2019, 15:30  [ТС] 7
kitsoRik, подсвечивается и не все, а в приведенном мною листинге подсвечиваются по очереди значения, т.е. в данном примере по очереди 0 затем 9 затем 5 и по кругу (движение вправо), то же самое реализовано и в другую сторону(движение влево)
Вся проблема в том, что не решил как совместить это все и что бы можно было в любой момент осуществлять движение вправо и влево (нажатием соответсвено клавиши 6 и 4)
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
24.08.2019, 15:46 8
JekMvr, покажи что у тебя готово.

Цитата Сообщение от JekMvr Посмотреть сообщение
Вся проблема в том, что не решил как совместить это все и что бы можно было в любой момент осуществлять движение вправо и влево
Просто переместить курсор в середину что бы печатать из середины или с конца удалять?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2019, 15:46
Помогаю со студенческими работами здесь

Хочу сделать апгрейд, но это будет больше похоже на покупку "с нуля". Выручайте, форумчане
Всем доброго времени суток, киберчане. Хочу поделиться своей бедой и попросить помощи в апгрейде...

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

Ограниченный перебор через рекурсию
Команда состоит из 9 человек, известно, что трое из них заняли призовые места. Определите возможные...

Реализовать перебор поддиректорий через рекурсию
Необходимо реализовать перебор поддиректорий через рекурсию Выводит только с первой папки: ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru