Висновки
мікросхема програмування с++ резистор
Виконавши цю курсову роботу, я отримав навички розробки, налагоджування, тестування і документування програми на мові високого рівня С++ при рішенні на ЕОМ прикладної інженерної задачі.
В роботі був розроблений обчислювальний алгоритм, що реалізує заданий метод рішення певної прикладної задачі. Проектування програми проходило з використанням принципів модульного і структурного програмування. Алгоритм був зображений у вигляді блок-схеми.
За цим алгоритмом була розроблена програма на мові С++, що містить власні підпрограми, використовує одномірні масиви для зберігання початкових даних і результатів розрахунку, забезпечує взаємодію з користувачем (у формі “ запит-відповідь ”) та виведення результатів розрахунку у зручній формі.
В процесі тестування та відлагодження програми було усунуто ряд помилок. Завдяки цьому кінцева версія програми виконує вірні розрахунки, у чому можна переконатися за допомогою тестового прикладу.
Список використаної літератури
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-го резистора.
Додаток В. Блок-схема алгоритму
- Вступ
- 1. Завдання на курсову роботу
- 1.1 Загальна частина
- 1.2 Індивідуальне завдання
- 2. Розробка алгоритму рішення задачі
- 3.1 Коротка характеристика мови програмування С++
- 3.2 Розробка програми на мові С++
- 4. Тестування і налагоджування програми
- 4.1 План тестування
- 4.2 Тестовий приклад
- 5. Документування програми
- Висновки