Сравнение одного массива с несколькими.

primnet
Offline
Зарегистрирован: 08.08.2016

Добрый день, пишу с телефона пока не могу скинуть пример.
Подскажите пожалуйста! Получаю набор символов с ps2 клавиатуры, сохраняю их в массив, необходимо выполнить событие при совпадении элементов введеных и одним из сохраненых массивов, среди сохраненых массивов элементы могут повторяться а некоторые массивы отличаются только лишь одним элементом. Размер массивов тоже разный. Еще одна сложность в том что нет конкретного элемента заканчивающего введение с клавиатуры.

SAB
Offline
Зарегистрирован: 27.12.2016

А как вы тогда определяете, что набор массива закончен? Ввод с клавиатуры обычно заканчивается байтами перевода каретки 0х0D 0x0A 

sadman41
Offline
Зарегистрирован: 19.10.2016

По какому совпадению? Если по полному, то memcmp().

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

primnet пишет:
пока не могу скинуть пример.
Ну, вот, когда сможете, тогда и поговорим. Или Вы жутко торопитесь?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

primnet пишет:
Добрый день, пишу с телефона пока не могу скинуть пример.

И какой в этом смысл?

Цитата:

Подскажите пожалуйста! Получаю набор символов с ps2 клавиатуры,

Клавиатура не выдает набор символов, она выдает набор скан-кодов.

Цитата:

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

Принято к сведению.

Когда появятся вопросы - задавайте (желательно по принятой на этом форуме форме).

primnet
Offline
Зарегистрирован: 08.08.2016
Проект заключается в создании морзе тренажёра, общении между человеком и контроллером посредством полноценной буквенной клавиатуры, загвоздка на этапе выбора правильного ответа переданого от клавиатуры, из нескольких массивов сохраненных в контроллере.
С клавиатуры "набор скан кодов" конвертирую в цифры битовая составляющая соответствует точки или тире символа.
Накидал небольшой пример. 
 
byte morze[40] = {}; // буфер цифр которые получили с клавиатуры 
byte razmer = 10 // массив morze получил 10 символов от [0] до [9]
otvet1[10] = {};
otvet2[11] = {};
otver3[12] = {};
byte n = 0;  // счетчик совпадений
for(int i =0; i < razmer; i++) {
    if(otvet[i] == morze[i]){
        n++;
        if(n == razmer) // выполняем следущие условие
    } else if (otvet2[i] == morze[i]){
        n++
        if(n == razmer) // выполняем следущие условие
    } else if (otvet3[i] == morze[i]){
        n++
        if(n == razmer) // выполняем следущие условие
    }
    if(n != razmer) // такого ответа нет
}

Но так не правильно, если допустим последний символ и размер ответа совпадает то выберет ближайшее условие.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Лично мне не стало понятней что такое "сравнить массивы". И ещё добавилось непонимание того, что вы считаете "правильным" выбором массива.

Начните с человеческого языка и таки сформулируйте - что в вашем воображении является сравнением массивов.

primnet
Offline
Зарегистрирован: 08.08.2016

Сравнение [i] элемента одного массива с [i] элементом другого массива.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

primnet пишет:

Проект заключается в создании морзе тренажёра, общении между человеком и контроллером посредством полноценной буквенной клавиатуры,
 
 
Пока понятно.
 
Цитата:
 
загвоздка на этапе выбора правильного ответа переданого от клавиатуры,
 
 
 
Что означает этот набор слов?
 
Цитата:
 
из нескольких массивов сохраненных в контроллере.
С клавиатуры "набор скан кодов"
 
 
Вероятно, имеется в виду "последовательность скан-кодов"?
 
Цитата:
 
конвертирую в цифры
 
 
По какому алгоритму?
 
Цитата:
 
битовая составляющая соответствует точки или тире символа.
 
 
Что означает этот набор слов?
 
Цитата:
 
Накидал небольшой пример. 
 
 
Пример не компилируется.
 
Цитата:
 
Но так не правильно, если допустим последний символ и размер ответа совпадает то выберет ближайшее
условие.

 

Понятно, что неправильно.

Непонятно - чего Вы хотите.

primnet
Offline
Зарегистрирован: 08.08.2016

Не берите во внимание клавиатуру. У меня есть массив размером 40, есть переменная счетчик равная 10, это то есть массив от 0го адреса до 9го заполнен цифрами,  и есть еще 3 массива разного размера содержащие какие то цифры, нужно определить соответствуют ли 10 цифр массива размером 40, какому нибудь из этих 3х массивов или не соответствуют. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

primnet пишет:

Не берите во внимание клавиатуру. У меня есть массив размером 40, есть переменная счетчик равная 10, это то есть массив от 0го адреса до 9го заполнен цифрами,  и есть еще 3 массива разного размера содержащие какие то цифры, нужно определить соответствуют ли 10 цифр массива размером 40, какому нибудь из этих 3х массивов или не соответствуют. 

1. Совершенно непонятно, как соотносится длина массива 40 с тем фактом, что в нем содержатся 10 элементов. Если массив заполнен не полностью, и нас интересует лишь заполненная часть, совершенно не важно, какую длину имеет массив. Другими словами, непонятно, что именно Вам нужно.

2. Поясните, что Вы подразумеваете под словом "соответствует".

rkit
Offline
Зарегистрирован: 23.11.2016

приведи реальные данные и ожидаемое поведение

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:
1. Совершенно непонятно, как соотносится длина массива 40 с тем фактом, что

Это важно! В нашем деле мелочей нет. (... и корову пусть зовут - Зорька) ;))

(для тех, у кого иные "калчерал рефереснес", это реминисценция к фильму "День выборов")

lilik
Offline
Зарегистрирован: 19.10.2017

primnet пишет:

, нужно определить соответствуют ли 10 цифр массива размером 40, какому нибудь из этих 3х массивов или не соответствуют. 

После прочтения и созерцания за окном..., наверное так : МАШАТЫПЕТЯАЯВАСЯКТОПРАВ

надо ответить есть ли в сообщении МАША или ПЕТЯ или ВАСЯ ?

primnet
Offline
Зарегистрирован: 08.08.2016

Мда, у меня сейчас азарт, не сделать то что мне нужно, а объяснить на форуме что мне нужно. 

Есть операционный буфер, массив morze[40], массив в который с 0го адреса по порядку записываются целые числа по нажатию клавиатуры, допустим получили:  morze[] = {1, 5, 13, 8, 7, 0, 0, ...}так же есть несколько задекларированных глобальных массива целых чисел, со своими размерами, и набором чисел(Ответы) допустим: int otvet1[4] = {1, 5, 13, 2}, int otvet2[5] = {9, 5, 13, 8, 7}, int otver3[5] = {1, 5, 13, 8, 7}. так же есть (переменная razmer) счетчик нажатий или количество цифр записанных в массив (morze[]) с 0го адреса.

Теперь вопрос: каким образом сделать проверку соответствия части массива morze[] (с 0го адреса до morze[razmer]), с массивами (Ответами)?

 
 

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017
b707
Offline
Зарегистрирован: 26.05.2017

Primnet, нафига столько болтовни, задача аналогична поиску слова в строке, как написал lilik в #13

sadman41
Offline
Зарегистрирован: 19.10.2016

Азарт тут не причём.

Массивы можно сравнивать как точные последовательности элементов, фрагменты, множества, прямо, реверсно и ещё черте как. Какой у вас в голове способ - никому неизвестно. Поэтому тут так всегда - сначала по-человечески и однозначно формулируете, а потом получаете совет.

rkit
Offline
Зарегистрирован: 23.11.2016

И так и не объяснил.

Кто скажет, какой из ответов верен, а какой нет.

morze = {1, 2, 3, 4}
otvet1 = {1, 2, 3, 4}
otvet2 = {1, 2, 3, 4, 5}
otvet4 = {5, 1, 2, 3, 4}
otvet5 = {1, 2, 3}
otvet6 = {2, 3, 4}

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

Как я понял должен быть выбран массив otvet[]:

1. Количество элементов которого равно значению переменной razmer;

2. И каждый элемент которого равен соответствующему (с тем же индексом) элементу массива morze[];

Т.е. в примере rkit ответ только один otvet1 = {1, 2, 3, 4}