Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Помогите с программой


Автор: harold 15.12.2010, 00:38
Это программа для ADAM-5510, система мониторинга температуры  на основе 8-канального микропроцессорного модуля ADAM-5017.
Я закомментировал те места, где необходим реальный ADAM-5510

Tab[2][21] - это таблица соответствий значения кода АЦП температуре.
Нужно, чтобы программа брала из этой таблицы значения и выдавала температуру (например, при поступлении кода 28573 должна высветиться температура -50 градусов)
А если кода нет в таблице, то значение должно рассчитываться с помощью двух ближайших табличных значений (например, код 22500. 22937-22020=917. 917 разделим на 10 градусов. Получим 91.7. 22500-22020=480. 480/91.7=5.2. Так 22020 соответствует 20 градусам, то 22500 будет соответствовать 25.2 градуса.)

Код
#include <conio.h>
#include <5510drv.h>
int *T0,*T1,*T2,*T3,*T4,*T5,*T6,*T7, i, Ntab;
float T0gr,T1gr,T2gr,T3gr,T4gr,T5gr,T6gr,T7gr;
long int Delay;
unsigned char IOModuleName;
unsigned char SlotNumber;

//float Convert(int T)
float Tab[2][21]={
{28573, 27656, 26607, 25690, 24772, 23855, 22937, 22020, 21233, 20447, 19529, 18874, 18088, 17432, 16646, 15991, 15466, 14811, 14287, 13893, 13500},
{-50, -40, -30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}
         };
  for(i=0;i<Ntab;i++)
      {if(Tab[i,1]>T0)
break;

main()
{
 SlotNumber=0;
 IOModuleName=0x04;  //Get_BoardID(SlotNumber);
 if(IOModuleName!=ADAM5017_ID)
 {
  printf("\nProverte slot");
  exit(1);
 }
 else{
  printf("\n Inicializaciya ADAM-5017");
  //Init501718(0);
     }

 // while(1)
  {
   //Get501718(0,0,T0); T0gr=Convert(T0);
   //Get501718(0,1,T1); T1gr=Convert(T1);
   //Get501718(0,2,T2); T2gr=Convert(T2);
   //Get501718(0,3,T3); T3gr=Convert(T3);
   //Get501718(0,4,T4); T4gr=Convert(T4);
   //Get501718(0,5,T5); T5gr=Convert(T5);
   //Get501718(0,6,T6); T6gr=Convert(T6);
   //Get501718(0,7,T7); T7gr=Convert(T7);
   printf("\n Temperatura gradusov=%5.1f %5.1f %5.1f %5.1f %5.1f %5.1f %5.1f %5.1f",T0gr,T1gr,T2gr,T3gr,T4gr,T5gr,T6gr,T7gr);
   for(Delay=100000; Delay>0; Delay--);
  }
 }
 return (0);
}


Пожалуйста, помогите с программой.
ОЧЕНЬ НУЖНА ПОМОЩЬ!!!


Модератор: Не забываем пользоваться кнопочкой "Код"

Автор: Игорь1024 15.12.2010, 11:31
Код

if(Tab[i,1]//так кажется нельзя


А вообще сути проблемы не понял.
Найти значение по табличке?

Добавлено @ 11:37
И вообще то есть тег для кода.

Может выглядеть как то так:

Код

void Get_Temp()
{
   int t;
   for(;;)
 {
   cout<<"Type value";
   cin>>t;
   Get_Value(&t);
  }
}


int Get_Value(int *t)
{
for(int i=0;i<ARRAY_SIZE;i++)//сколько там элементов в массиве...
 {
  if(List[i][1]==*t)cout<<"t= "<<*t;
 }
}



Остальное сами допишите- (объявления массивов, констант)...

ИМХО лучше map<key,value> использовать.

Автор: bsa 15.12.2010, 14:21
Цитата(Игорь1024 @  15.12.2010,  12:31 Найти цитируемый пост)
ИМХО лучше map<key,value> использовать.

тут не подойдет. надо использовать двоичный поиск - lower_bound.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)