Форум программистов, компьютерный форум CyberForum.ru

задачка на декодирование адреса 3 портов) - C++

Восстановить пароль Регистрация
 
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
09.12.2013, 12:04     задачка на декодирование адреса 3 портов) #1
вообщем есть 3 порта, у них может быть 3 состояния, G P U - соответственно: земля, питание и unconnect,
соответственно надо привести это к след виду, т.е. преобразовать...
GGG 0x70
GGU 0x72
GUG 0x74
GUU 0x76
итд

вот я с таким заданием сталкиваюсь впервые, как это сделать лучше мб кто подскажет или хотя бы в каком направлении копать..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2013, 12:04     задачка на декодирование адреса 3 портов)
Посмотрите здесь:

Кодирование и декодирование методом Голея C++
C++ Декодирование
Кодирование и декодирование QR кода C++
Кодирование и декодирование C++
Кодирование/Декодирование текста C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
09.12.2013, 12:33     задачка на декодирование адреса 3 портов) #2
Вот этот момент
GGG
GGU
GUG
GUU
очень напоминает перебор сочетаний. Можно как-то его использовать. Правда еще с третьим состоянием надо будет что-то придумать. Но общая мысль такая:

Код
G=0; U=1;
Out=0x70;

000 => k=0
001 => k=1
010 => k=2
011 => k=3

Out += k * 0x2;
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
09.12.2013, 17:47  [ТС]     задачка на декодирование адреса 3 портов) #3
вообщем написал такую вот функцию, но она мне честно говоря не нравится из-за расхода памяти на эти 'G' 'U' 'P', но лучше не придумал пока что, потестил на компе рработает, на железяке ещё не пробовал....мб кому будет интересно такую вот задачку решить, а то тут обычно всякие "Помогите найти минимальный элемент массива a[10]"

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
void getAdress(unsigned char *adress) 
{
unsigned char temp1=(P1IN&pin1); // это побитное считывание для pin1, т.е. запись текущего состояния
unsigned char temp2=(P1IN&pin2); // аналогично
unsigned char temp3=(P1IN&pin3); // аналогично
char *GA="UUU"; // начальное состояние
char *a[]={"GGG","GGU","GUG","GUU","UGG","UGU","UGG","UUP","UPU","UPP","PUU","PUP","PPU"}; // комбинации, индекс соотв адресу
P1OUT|=PAOUT4; /* здесь мы инициализируем выходной сигнал лог.0(или 1 не помню тутне суть важно) (..он через резистор посажен на все pin1,2,3 , и если мы меняем его, то сигнал меняется на pins в зав от их лог состояния, если не меняется для обоих переключений, то там unconnect pin*/
    if (temp1!=(P1IN&pin1)) // сравниваем
    GA[0]='P';
    if (temp2!=(P1IN&pin2))
    GA[1]='P';
    if (temp3!=(P1IN&pin3))
    GA[2]='P';
temp1=(P1IN&pin1); //здесь мы опять сохраняем текущие состояния пинов для след сравнения
temp2=(P1IN&pin2);
temp3=(P1IN&pin3);
P1OUT&=PAOUT4; // меняем выходной пин и опять проверяем все на изменение лог состояния
    if (temp1!=(P1IN&pin1))
    GA[0]='G';
    if (temp2!=(P1IN&pin2))
    GA[1]='G';
    if (temp3!=(P1IN&pin3))
    GA[2]='G';
int i;
  for (i=1;i<=12;i++)
  {
      if (!strcmp(GA,a[i]))
      *adress=0x70+i*2; // так высчитывается адресс через индекс
  }
}
вообщем буду очень благодарен, если кто-нить придумает решение более оригинальное

Добавлено через 1 час 34 минуты
Цитата Сообщение от dzrkot Посмотреть сообщение
P1OUT&=PAOUT4;
должно быть
C++
1
P1OUT&=~PAOUT4; // или P1OUT^=PAOUT4;
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
09.12.2013, 20:39     задачка на декодирование адреса 3 портов) #4
dzrkot, Вам нужно получить все возможные комбинации трёх элементов друг с другом, при этом элемент может встречаться в одной комбинации несколько раз ( то есть, может повторяться ). На лицо размещение с повторениями. Тогда число всех возможных размещений можно найти по формуле n^k, где n - число элементов во множестве, и k - число элементов в размещении, и равно оно будет 3^3, то есть 27.
У вас я насчитал 13.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
09.12.2013, 21:08  [ТС]     задачка на декодирование адреса 3 портов) #5
Цитата Сообщение от StackOverflow Посмотреть сообщение
dzrkot, Вам нужно получить все возможные комбинации трёх элементов друг с другом, при этом элемент может встречаться в одной комбинации несколько раз ( то есть, может повторяться ). На лицо размещение с повторениями. Тогда число всех возможных размещений можно найти по формуле n^k, где n - число элементов во множестве, и k - число элементов в размещении, и равно оно будет 3^3, то есть 27.
У вас я насчитал 13.
вы конечно молодец, но мне больше 13 не надо, мне необходимы только те адреса, которые рассчитаны, т.е. 13, и на самом деле 1ый не нужен на практике.
И спасибо что говорите мне очевидные вещи, вы видимо плохо понимаете то, что мне надо сделать, мб я плохо это объяснил, если меня считают настолько тупым что рассказывают о перестановках.
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
09.12.2013, 21:23     задачка на декодирование адреса 3 портов) #6
dzrkot, что вы, ей богу, так воспринимаете то всё близко к сердцу? Обидеть вас не хотел ни в коем случае! Просто не смог пройти мимо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2013, 21:25     задачка на декодирование адреса 3 портов)
Еще ссылки по теме:

Кодирование-декодирование изображений C++
Декодирование информации C++
C++ Декодирование txt файла

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

Или воспользуйтесь поиском по форуму:
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
09.12.2013, 21:25  [ТС]     задачка на декодирование адреса 3 портов) #7
Цитата Сообщение от StackOverflow Посмотреть сообщение
dzrkot, что вы, ей богу, так воспринимаете то всё близко к сердцу? Обидеть вас не хотел ни в коем случае! Просто не смог пройти мимо.
да что-то денёк нервный сорри сам не ожидал)
Yandex
Объявления
09.12.2013, 21:25     задачка на декодирование адреса 3 портов)
Ответ Создать тему
Опции темы

Текущее время: 12:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru