на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Расчет пленочных резисторов в С++
p align="left">double *ArrP=0;

double *ArrRho=0;

double *ArrKf=0;

double *ArrB=0;

double *ArrL=0;

double *ArrA=0;

double *ArrT=0;

double *ArrX=0;

double *ArrY=0;

double *ArrS=0;

int *ArrType=0;

int *ArrN=0;

int *index;

double *ArrBuf;

 // для вычисление коэффициента формы double KForm (double R, double rho);

 // для нахождение максимального из трех чисел double Max3 (double x, double y, double z);

 // для нахождение миниимального из трех чисел double Min3 (double x, double y, double z);

 // для расчет параметров пленки void ParamR(void);

 // Ввод расчетных параметров с контролем их диапазона double getdata (const char *partype, double pardown, double parup);

 // для сортировки массивов по возрастанию int sort(void);

 // Вывод результатов расчета пленки void OutResult(void);

 // Вывод расчетных параметров пленки void OutParam(void);

 // Освобождение памяти для массивов ArrB и ArrP void alloc1 (void);

 // Выделение и освобождение памяти для остальных динамических массивов void alloc2 (void);

int main()

{

int j;

cntrl=0;

double nbmax;

do

{

cout

<<»\tM E N U \n»<<endl

<<» [1] - VVOD PARAMETROV»<<endl

<<» [2] - RASCHET»<<endl

<<» [0] - VIHOD»

<<endl;

cin>>menu;

switch(menu)

{

case 1:

cout<<»\nKolichestvo Resistirov N=»;

cin>>NResist;

 // Выделение динамической памяти под массивы R и P

alloc1 ();

for (j=0; j<NResist; j++)

{

cout<<»\nResistor»<<setw(2)<<j+1<<»:»;

ArrR[j]=getdata («\nR(kOm) (0.05-10000)», Rdown, Rup);

ArrP[j]=getdata («P(mW) (5-50)», Pdown, Pup);

}

cout

<<»\nMetod zadaniya Diapozona Rho\n\n»

<<» [1] - SPISOK Rho (rho1, rho2,…)«<<endl

<<» [2] - DIAPAZON Rho (rho_begin, rho_end, rho_step)«<<endl

<<endl;

cin>>modein;

switch(modein)

{

case 1: // Ввод числа элементов в списке сопротивлений пленки

cout<< «Razmer spiska NRho=»;

cin>>NRho;

break;

case 2: // Ввод диапазона и шага изменения сопротивлений пленки

RhoBeg=getdata («RhoBeg», rhodown, rhoup);

RhoEnd=getdata («RhoEnd», rhodown, rhoup);

RhoStp=getdata («RhoStp», rhodown, rhoup);

NRho=(int) ((RhoEnd-RhoBeg)/RhoStp)+1;

rho=RhoBeg-RhoStp;

break;

}

alloc2 (); // Выделение динам. памяти под массив сопротивления пленки rho

for (j=0; j<NRho; j++)

{

 // Ввод элементов массива значений rho с заданным шагом в диапазоне

if (modein==1) ArrRho[j]=getdata («rho», rhodown, rhoup);

 // Ввод элементов массива значений rho по списку

if((modein==2) | (modein==3))

{

rho+=RhoStp;

ArrRho[j]=rho;

}

}

Po=getdata («Po (mW/mm2) (10-30)», Podown, Poup); // Ввод значения удельной мощности Po

cntrl=1;

OutParam(); // Вывод исх. данных для визуального контроля

break;

case 2: // Рассчет геометрических параметров пленки

if(cntrl)

{ // Проверка наличия исх. данных

while (1==1)

{

cout<<»\nNomer Resistora (1. «<<NResist<<») k=»;

cin>>k; k -;

if (k>=0 && k<NResist) break;

}

R=ArrR[k];

P=ArrP[k];

for (j=0; j<NRho; j++)

{

rho=ArrRho[j];

ParamR();

ArrType[j]=type;

ArrKf[j]=kf;

ArrB[j]=b;

ArrL[j]=l;

ArrA[j]=a;

ArrX[j]=x;

ArrY[j]=y;

ArrT[j]=t;

ArrN[j]=n;

ArrS[j]+=b*l;

}

nbmax=sort();

OutParam();

for (j=0; j<NRho; j++) ArrBuf[j]=ArrB[j];

nbmax=sort();

cout<<» MIN b="<<ArrB [index[0]]<< «mm»<<endl;

cout<<» MAX b="<<ArrB [index[NRho_1]]<< «mm»<<endl<<endl;

for (j=0; j<NRho; j++) {

type=ArrType [index[j]];

rho=ArrRho [index[j]];

kf=ArrKf [index[j]];

b=ArrB [index[j]];

l=ArrL [index[j]];

a=ArrRho [index[j]];

x=ArrX [index[j]];

y=ArrX [index[j]];

t=ArrT [index[j]];

n=ArrN [index[j]];

OutResult();

}

cout<<endl;

}

else

cout<< «VVEDITE PARAMETRI»<<endl;

break;

case 0:

cout<<endl<<endl<<endl<< «Press ENTER to EXIT…»;

getch();

return 0;

}

}

while (1==1);

}

 // Вычисление коэффициента формы

 // Аргументы: R_сопротивление резистора, rho_сопротивление пленки

 // Вывод: коэффициент формы double KForm (double R, double rho) {return R/rho;}

 // Определение максимального из 3_чисел x, y, z

 // Аргументы: числа x, y, z

 // Вывод: макс {x, y, z}

double Max3 (double x, double y, double z) {return x>(z=y>z? y:z)? x:z;}

double Min3 (double x, double y, double z) {return x<(z=y<z? y:z)? x:z;}

 // Вычисление геометрических размеров пленки void ParamR()

{

kf=KForm (R, rho);

if (kf<0.1) type=0; // недопустимое значение Kf

else if (kf<1)

{ // прямоуголиная пленка при kf<1 (l<b) ф. (7) - (9), (2)

type=1;

double lD=(Dl+Db*kf)/gamma;

double lP=sqrt (R*P/rho/Po);

l=((int) (Max3 (lt, lD, lP)/h)+1)*h;

b=((int) (l/kf/h)+1)*h;

}

else

{ // прямоуголиная пленка при 1<=Kf<=10 (l>b) ф. (2) - (6)

double bD=(Db+Dl)/kf;

double bP=sqrt (rho*P/R/Po);

b=((int) (Max3 (bt, bD, bP)/h)+1)*h;

if (kf<=10)

{

type=2;

l=((int) (kf*b/h)+1)*h;

}

else

{ // пленка типа меандр при Kf>10 ф. (10) - (15)

type=3;

l=kf*b;

if (b<amin) a=0;

else a=b-amin;

nc=0;

do

{

nc++;

if (nc>10)

{

type=4;

break;

}

a+=amin;

t=a+b;

n=(int) sqrt (l/t);

x=n*t;

y=(l-a*n)/n;

}

while (y/a>10);

}

}

}

 // Ввод исходных данных с проверкой допустимого их диапазона значений

 // Аргументы:

 // строка, содержащая название параметра,

 // нижняя граница допустимого значения,

 // верхняя граница допустимого значения

 // Выход: значение параметра double getdata (const char *partype, double pardown, double parup)

{

double parval;

while (1==1)

parval>parup)

cout<< «non corect DIAPASON»<<endl;

else break;

return parval;

}

 // Сортировка индекса массива по возрастанию методом пузырька

 // Результат сортировки сохраняется в индексном массиве,

 // элементы которого по порядку, начиная с младшего, содержат номера

 // элементов исходного массива в порядке их возрастания, т.е.

 // первый(нулевой) элемент индексного массива содержит номер

 // минимального элемента исходного массива, а последний элемент индексного

 // массива содержит номер максимального элемента исходного массива

 // На выход подается номер максимального элемента исходного массива

int sort()

{

int j, jtmp;

int flag;

double btmp;

double *buf;

buf=new double[NRho];

for (j=0; j<NRho; j++)

{

index[j]=j;

buf[j]=ArrBuf[j];

}

do

{

flag=0;

for (j=1; j<NRho; j++)

if (buf[j_1]>buf[j])

{

jtmp=index[j];

index[j]=index [j_1];

index [j_1]=jtmp;

btmp=buf[j];

buf[j]=buf [j_1];

buf [j_1]=btmp;

flag=1;

}

}

while(flag);

return index[NRho];

}

 // Вывод введенных исходных данных для визуального контроля

void OutParam()

{

int i, j;

cout<<endl;

for (i=0; i<NResist; i++)

{

cout

<<» R»<<i+1<< "="<<ArrR[i]<< «kOm»

<<» P="<<ArrP[i]<< «mW»

<<» Po="<<Po<< «mW/mm2»;

if (modein==1)

{

cout<<» rho={»;

for (j=0; j<NRho_1; j++)

cout<<ArrRho[j]<<»;»;

cout<<ArrRho [NRho_1]<<») kOm»<<endl;

}

if((modein==2)|(modein==3))

cout

<<» rho=(«<<RhoBeg

<<»; «<<RhoBeg+RhoStp

<<». «<<RhoEnd<<») kOm/mm2»<<endl;

}

cout<<endl;

}

 // Вывод результатов расчета пленочного резистора void OutResult()

{

switch(type)

{

case 0: // Ошибка Kf<0.1

cout<<«ERROR «<< «Kform=»<<kf<<endl;

break;

case 1:

case 2: // прямоугольная пленка 0.1<=Kf<=10

cout<<setw(9)

<<» Rectangle»

<<setprecision(3)

<<» b="<<setw(4)<<b<< «mm»

<<» l="<<setw(4)<<l<< «mm»

<<» S="<<setw(4)<<b*l<< «mm2»

<<» Kf="<<setw(4)<<kf

<<»\tRho="<<setw(6)<<rho<< «kOm/mm2» //rho

<<endl;

break;

case 3:// пленка типа меандр Kf>10

cout<<setw(6)

<<» Meandr»

<<setprecision(3)

<<» b="<<setw(4)<<b<< «mm»

<<» a="<<setw(4)<<a<< «mm»

<<» t="<<setw(4)<<t<< «mm»

<<» x="<<setw(4)<<x<< «mm»

<<» y="<<setw(4)<<y<< «mm»

<<» n="<<setw(2)<<n

<<» Kf="<<setw(4)<<kf

<<» Rho="<<setw(5)<<rho

<<endl;

break;

case 4:

cout<<«ERROR «<< «nc=»<<nc<<endl;

break;

}

}

 // Выделение памяти для динамических массивов значений

 // сопротивления R и рассеиваемой мощности P void alloc1 ()

{

if (ArrR!=NULL) delete ArrR;

if (ArrP!=NULL) delete ArrP;

ArrR=new double[NResist];

ArrP=new double[NResist];

}

 // Выделение памяти для динамических массивов значений

 // сопротивления пленки, коэффициентов формы и

 // рассчитанных геометричесих параметров пленочного резистора void alloc2 ()

{

if (ArrRho!=NULL) delete ArrRho;

if (ArrKf!=NULL) delete ArrKf;

if (ArrB!=NULL) delete ArrB;

if (ArrL!=NULL) delete ArrL;

if (ArrA!=NULL) delete ArrA;

if (ArrX!=NULL) delete ArrX;

if (ArrY!=NULL) delete ArrY;

if (ArrT!=NULL) delete ArrT;

if (ArrN!=NULL) delete ArrN;

if (index!=NULL) delete index;

if (ArrBuf!=NULL) delete ArrBuf;

if (ArrType!=NULL) delete ArrType;

ArrRho=new double[NRho];

ArrKf=new double[NRho];

ArrB=new double[NRho];

ArrL=new double[NRho];

ArrA=new double[NRho];

ArrX=new double[NRho];

ArrY=new double[NRho];

ArrT=new double[NRho];

ArrN=new int[NRho];

ArrS=new double[NRho];

ArrType=new int[NRho];

index=new int[NRho];

ArrBuf=new double[NRho];

for (int j=0; j<NRho; j++) ArrS[j]=0;

}

Результаты тестирования программы

Блок-схема программы контроля вводимых данных

Страницы: 1, 2



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.