logo
Проектування програми на мові рівня С++ при рішенні на ЕОМ прикладної інженерної задачі

Висновки

мікросхема програмування с++ резистор

Виконавши цю курсову роботу, я отримав навички розробки, налагоджування, тестування і документування програми на мові високого рівня С++ при рішенні на ЕОМ прикладної інженерної задачі.

В роботі був розроблений обчислювальний алгоритм, що реалізує заданий метод рішення певної прикладної задачі. Проектування програми проходило з використанням принципів модульного і структурного програмування. Алгоритм був зображений у вигляді блок-схеми.

За цим алгоритмом була розроблена програма на мові С++, що містить власні підпрограми, використовує одномірні масиви для зберігання початкових даних і результатів розрахунку, забезпечує взаємодію з користувачем (у формі “ запит-відповідь ”) та виведення результатів розрахунку у зручній формі.

В процесі тестування та відлагодження програми було усунуто ряд помилок. Завдяки цьому кінцева версія програми виконує вірні розрахунки, у чому можна переконатися за допомогою тестового прикладу.

Список використаної літератури

1. Інформатика. Компютерна техніка. Компютерні технології / Посібник для ВНЗ. - К.: 2001.

2. Вычислительная техника и программирование: Учебник для техн. вузов / Под ред. А.В. Петрова. - М.: Высш.шк., 1990.

3. Программирование на С++: Учеб. пособие / Под ред. А.Д. Хомоненко. - С-Пб.: 1999.

4. Конспект лекцій з дисципліни: “ Алгоритмічні мови та програмування ”

Додаток А. Текст програми на мові С++

#include <iostream>//Організація введення, виведення (cout, cin)

#include <math.h>//Математична бібліотека (sqrt () ...)

#include <conio.h>//Бібліотека для використання функції getch ()

using namespace std;

//Прототипи функції

double kf(double, double); //Обчислення коеф. форм. к-того резистора

double max_d(double, double, double); //Обчислення максимальної ширини

void Cal_pr_fo_bl(); //Розрахунок резистора прямокутної форми b>l

void Cal_pr_fo_lb(); //Розрахунок резистора прямокутної форми l>b

int i, k, Vv=0, povt=0, stp=0;//Глобальні змінні цілого типу

const double b_tex = 0.1, l_tex = 0.3, Db = 0.01, Dl = 0.03, Yr = 0.1, a_min = 0.3, h = 0.01;//Константи вещ. типу

const int m = 10;//Константа цілого типу

double R[m];//Номінальний опір резистора

double pO[m];//Опір квадрата резистивної плівки

double P[m];//Потужність розсіювання резистора

double Po[m];//Макс. питома потужність розсіювання резистивної плівки

double N;//Кількість резисторів

double kfe[m];//Коф. форм. к-того резистора

double l[m];//Довжина резистора

double b[m];//Ширина резистора

double X[m];//Довжина меандра

double Y[m];//Ширина меандра

double bD;//Мінімальна ширина резистора

double bpot;//Ширина задана потужністю

double lD;//Мінімальна довжина резистора

double lpot;//Довжина задана потужністю

double lser;//Середня лінія меандра

double piz;//Допоміжна змінна для рахунку к-того резистора

double maxb=0;//Максимальна ширина b

char Otv;// [Y/N]

double a[m];//Відстань між смугами

double t[m];//Крок ланки

double n[m];//Число ланок

double max_b(double a, double b, double c)//Обчислення максимальної ширини

{

if (a>b&&a>c)

return a;

if (b>a&&b>c)

return b;

else return c;

}

void Cal_pr_fo_bl()//Розрахунок резистора прямокутної форми b>l

{

bD=(Db+Dl/kfe[i])/Yr;

bpot=sqrt((pO[i]*P[i])/(R[i]*Po[i]));

b[i]=max_b(b_tex, bD, bpot);

l[i]=kfe[i]*b[i];

b[i]=int(b[i]/h)*h+h;

l[i]=int(l[i]/h)*h+h;

cout<<" Ширина резистора, b = "<<b[i]<<" мм"<<endl;

cout<<" Довжина резистора, l = "<<l[i]<<" мм"<<endl;

}

void Cal_pr_fo_lb()//Розрахунок резистора прямокутної форми l>b

{

lD=(Dl+kfe[i]*Db)/Yr;

lpot=sqrt((R[i]*P[i])/(pO[i]*Po[i]));

l[i]=max_b(l_tex, lD, lpot);

b[i]=l[i]/kfe[i];

l[i]=int(l[i]/h)*h+h;

b[i]=int(b[i]/h)*h+h;

cout<<" Ширина резистора, b = "<<b[i]<<" мм"<<endl;

cout<<" Довжина резистора, l = "<<l[i]<<" мм"<<endl;

}

double kf(double a, double b)//Обчислення коеф. форм. к-того резистора

{

return a/b;

}

void main () //Головна функція

{

setlocale(LC_ALL, "Ukrainian");

cout<<" Табл. №1"<<endl;

cout<<" ______________________________________________"<<endl;

cout<<"| | | | |"<<endl;

cout<<"| R, кОм | p, кОм/кв | P, мВт | Po, мBт/мм2 |"<<endl;

cout<<"|___________|___________|___________|_____________|"<<endl;

cout<<"| | | | |"<<endl;

cout<<"| 0.05...10000 | 0,01...50 | 5...50 | 10...30 |"<<endl;

cout<<"|___________|___________|___________|_____________|"<<endl;

cout<<" "<<endl;

while (1)

{

cout<<"Задайте кiлькiсть резисторiв для розрахунку [max 10] = ";

cin>>N;

if (N>=1 && N<=10)

break;

}

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

{

while (1)

{

cout<<" Резистор №"<<i+1<<endl;

cout<<"Номiнальний опiр резистора, [кОм] R = ";

cin>>R[i];

cout<<"Опiр квадрата резистивної плiвки, [кОм/кв] p = ";

cin>>pO[i];

cout<<"Потужнiсть розсiювання резистора, [мВт] P = ";

cin>>P[i];

cout<<"Макс.питома потужнiсть розсiювання резистивної плiвки, [мBт/мм2] Po = ";

cin>>Po[i];

cout<<endl;

cout<<"Початковi даннi вiдповiдают данним Табл. №1 ? [Y/N] = ";

cin>>Otv;

if (Otv==Y || Otv==y)

break;

}

}

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

{

PS:

kfe[i]=kf(R[i], pO[i]);

if (1<=kfe[i] && kfe[i]<=10)

{

cout<<" ______________________________________________"<<endl; cout<<" Резистор №"<<i+1<<" -- прямокутрної форми"<<endl;

Cal_pr_fo_bl();

}

else if (0.1<=kfe[i] && kfe[i]<1)

{

cout<<" ____________________________________________"<<endl;

cout<<" Резистор №"<<i+1<<" -- прямокутрної форми в якого ширина меньше довжини (l>d)"<<endl;

Cal_pr_fo_lb();

}

else if (kf(R[i], pO[i])>10)

{

cout<<" ____________________________________________"<<endl;

cout<<" Резистор №"<<i+1<<" -- резистор типу (меандр)"<<endl;

bD=(Db+Dl/kfe[i])/Yr;

bpot=sqrt((pO[i]*P[i])/(R[i]*Po[i]));

b[i]=int(max_b(b_tex, bD, bpot)/h)*h+h;

lser=b[i]*kfe[i];

a[i]=b[i];

if (a[i]<a_min)

a[i]=a_min;

while (1)

{

t[i]=a[i]+b[i];

n[i]=int(sqrt(lser/t[i]));

X[i]=n[i]*(a[i]+b[i]);

Y[i]=(lser-a[i]*n[i])/n[i];

if ((Y[i]/a[i])<=10)

break;

else

a[i]=a[i]+a_min;

}

cout<<" Ширина меандри, Y = "<<Y[i]<<" мм"<<endl;

cout<<" Довжина меандри, X = "<<X[i]<<" мм"<<endl;

cout<<" Ширина смушки, b = "<<b[i]<<" мм"<<endl;

cout<<" Вiдстань мiж смужками, a = "<<a[i]<<" мм"<<endl;

cout<<" Число ланок, n = "<<n[i]<<endl;

}

else if (kfe[i]<0.1)

{

cout<<" _____________________________________________"<<endl;

cout<<" Резистор №"<<i+1<<" -- резистор використовувати не рекомендовано"<<endl;

}

if (pO[i]==piz)

break;

}

if(1<N)

{

if(povt==0)

{

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

{

if(maxb<b[i])

maxb=b[i];

}

cout<<" Максiмальная ширина b = "<<maxb<<" мм"<<endl;

povt++;

}

if (Vv==0)

{

while (1)

{

cout<<" Введiть номер резистора для додаткових обчислень = ";

cin>>k;

if(1<=k&&k<=N)

break;

else

cout<<"Цього резистора не iснує"<<endl;

}

k=k-1;

Vv++;

}

}

while (1)

{

cout<<" Опiр квадрата резистивної плiвки (для закiнчення обчислень введiть 0), [кОм/кв] p = ";

cin>>piz;

if(piz<=50)

break;

else

cout<<" MAX 50 [кОм/кв] "<<endl;

}

i=k;

pO[i]=piz;

if (piz!=0)

goto PS;

getch();

system("cls");//Функція очищення екрана

cout<<" Автор програми : Жмуд Е.В."<<endl;

cout<<" 20.09.2012"<<endl;

getch();

}

Додаток Б. Тестовий приклад (розрахунок на ЕОМ)

Мал.1. Введення початкових даних, розрахунок та виведення результату.

Мал.2. Розрахунок k-го резистора.

Додаток В. Блок-схема алгоритму