реклама на сайте
подробности

 
 
> Вопрос новичка, Преобразование в 2-10 код
Anjey_N
сообщение Apr 14 2007, 16:24
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Есть два 10-разрядных двоичных слова, полученных после преобразований АЦП по двум аналоговым каналам.
Необходимо преобразовать 2-й код в 2-10 код и результат поместить в 8 злементный масив.
Например
array[0]=v0
array[1]=v1
array[2]=v2
array[3]=v3
array[4]=i0
array[5]=i1
array[6]=12
array[7]=13
где v и i- значения 2-10 кода


Подскажите, как лучше это написать на языке Си!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SKov
сообщение Apr 15 2007, 12:00
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(Anjey_N @ Apr 14 2007, 17:24) *
Есть два 10-разрядных двоичных слова, полученных после преобразований АЦП по двум аналоговым каналам.
Необходимо преобразовать 2-й код в 2-10 код и результат поместить в 8 злементный масив.
...
Подскажите, как лучше это написать на языке Си!

Первое, что вводит в ступор - это упоминание ДВУХ чисел, которые надо преобразовать.
И "ежику без сотового телефона" понятно, что если есть решение для одного числа, то для второго надо делать аналогично.
Так что дальше будем рассматривать задачу с одним числом.
Второе непонятное слово - "лучше". В каком смысле лучше?
Возможны варианты.
1) Самая короткая запись на Си (по количеству букв в тексте программы)
2) Программа, имеющая самый короткий код, пусть и медленная.
3) Программа, работающая быстро, пусть даже и с длинным кодом.
4) Некий вариант, промежуточный между п.2 и п3.

Не претендуя на истину в последней инстанции:

1) i=0; while(v) {array[i++]=v%10;v/=10; } // считается, что изначально массив нулевой

2) не уверен, но может что-то типа
i=0; while(v){v--;
loop: array[i]++;
if (array[i]==10){array[i++]=0; goto loop;}
else i=0;
}
3) возможно, это п1.
Ну, если совсем памяти навалом, то просто
array[0]= array_0[v];
array[1]= array_1[v];
array[2]= array_2[v];
array[3]= array_3[v];
Понятно, что массивы array_x надо сосчитать зааранее
4)
Я бы так написал
if(v>999){array[3]=1;v-=1000;}
while (v>99){array[2]++;v-=100;}
while (v>9){array[1]++;v-=10;}
array[0]=v;

P.S. Программы компилятором не проверял, так что возможны тараканы.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 19:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016