Номер варіанта
|
Контроль початкових даних
|
Організація взаємодії з користувачем
|
Використання масивів
|
Реалізація фрагмента методики у вигляді
підпрограми (функції)
|
|
|
|
Розрахунок k-ого резистора в діапазоні значень
ρ
|
Пошук максимального (max) або мінімального
(min) розра-хунково-го значення ширини b
|
Сортування розрахункових значень ширини b за
збільшенням (зменшенням)
|
Введення початкових даних
|
Розрахункова частина в цілому
|
Розрахунок коефіцієнта форми kф
|
Вибір максимального з трьох при розрахунку b і
l
|
Округлення розрахункових значень b і l
|
Розрахунок резисторів прямокутної форми
|
Розрахунок резисторів у вигляді меандру
|
|
Візуальний на екрані
|
Перевірка діапазону
|
" Запит-відповідь "
|
Меню користувача
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Задані ρ1,…,
ρm
|
Задані ρпоч,
ρкін,
∆ρ
|
|
|
|
|
|
|
|
|
|
11
|
+
|
+
|
-
|
+
|
-
|
max
|
-
|
-
|
+
|
1
|
1
|
-
|
0
|
-
|
1.
Розробка алгоритму рішення задачі
Для представлення алгоритму в даній
роботі був використаний графічний спосіб (метод блок-схем). Основна його
перевага - це наочність. Блок-схеми наочно показують, як діють керуючі
структури. Зображувати алгоритм у вигляді блок-схеми дуже зручно. Вона
допомагає записати алгоритм структурно, у такому вигляді його легше зрозуміти і
аналізувати.
Проектування алгоритму було проведено
зверху вниз, з урахуванням основних принципів структурного програмування: чітка
структуризація задачі, розбиття її на послідовність підзадач, реалізація під
задач окремими модулями, покрокова деталізація логіки алгоритму, використання
типових конструкцій і базових алгоритмічних структур.
Розробка блок-схеми алгоритму
В розробці блок-схеми алгоритму
можна виділити наступні етапи:
) аналіз структури даних:
визначення початкових, проміжних і
результуючих даних, типів даних (змінних і масивів; констант і змінні; цілих,
дійсних і символьних);
) розробка блок-схем допоміжних
алгоритмів:
а) визначення параметрів (якщо вони
є) і значення, що повертається (якщо воно є), їх типів;
б) складання блок-схем, які
закінчуються словом " повернення " і значенням, що повертається (у
блоці " пуск-зупинка ");
) розробка блок-схеми основного
алгоритму, який можна умовно розділити на наступні частини:
а) введення вихідних даних;
б) контроль даних;
в) основний розрахунок;
г) виведення результатів основного
розрахунку;
ґ) пошук максимального
розрахункового значення ширини і його виведення;
д) введення даних для додаткового
розрахунку;
е) додатковий розрахунок;
є) виведення результатів додаткового
розрахунку.
Блок-схема алгоритму находиться в ДОДАТКУ В.
. Розробка програми
Коротка характеристика мови
програмування С++
C і C++ відносяться до числа
найбільш потужних і найпоширеніших мов високого рівня.
Спочатку ця мова набула популярність
як мова розробки операційної системи UNIX. На сьогоднішній день C++ стала
домінуючою системно-утворюючою мовою. На неї написана більшість сучасних
операційних систем, у тому числі ОС Windows.
Мова C++ з'явилася на початку 80-х
років. Створена Б. Страуструпом з початковою метою позбавити себе і своїх
друзів від програмування на асемблері, Сі чи різних інших мовах високого рівня.
Очевидно, що найбільше C++ запозичив
з мови Сі, а також з безпосереднього його попередника мови BCPL. Ці запозичення
забезпечили C++ потужними засобами низького рівня, що дозволяють вирішувати
складні задачі системного програмування. Але що в першу чергу відрізняє C++ від
Сі - це різна ступінь уваги до типів та структур даних. Це пов'язано з появою
понять класу, похідного класу і віртуальної функції, перейнятих у свою чергу з
мови Сімула 67. Це дає в C++ більш ефективні можливості для контролю типів і
забезпечує модульність програми.
Розробка програми на мові С++
При розробці програми були враховані
як загальні рекомендації по програмуванню, так і особливості завдання курсової
роботи. Особливу увагу при розробці програми було приділено стилю
програмування, зокрема, використанню коментарів, структурі запису тексту
програми, вживанню ідентифікаторів, аналізу можливих ситуацій з передбаченням
відповідних дій і повідомлень, організації наочного введення-виведення та ін.
3.
Тестування і налагоджування програми
Мета тестування програми - виявлення
помилок, що є в програмі.
Мета налагоджування - виявлення і
усунення причин помилок.
План тестування
1) порівняння програми зі
схемою алгоритму;
2) візуальний контроль програми
на екрані дисплея або по роздруку;
) трансляція програми;
) редагування зовнішніх
зв’язків (компоновка);
) виконання програми і
розрахунок тестового прикладу.
Тестовий приклад
Вихідні дані:
= 4=
1 кОмP1 = 20 мВт ρ1
= 20 кОм/кв P01=10
мВт/мм2= 10 кОмP2 = 5 мВт ρ1
= 5 кОм/кв P01=10 мВт/мм2= 40 кОмP3 = 25 мВт ρ1
= 50 кОм/кв P01=10 мВт/мм2= 100 кОмP4 = 50 мВт ρ1
= 5 кОм/кв P01=20 мВт/мм2
Вихідні дані для додаткового
розрахунку:
k = 2
ρ = (0,5;10;50)
кОм/кв
Розрахунок вручну:
1) kф = 0,05 (-∞;0,1)
Резистор №1 конструювати не
рекомендується.
2) kф = 2 [1;10]
Резистор №2 має прямокутну форму.
b∆ = 0,25 (мм)потужн
= 0,5 (мм)техн = 0,1 (мм)= 0,5 (мм)= 1 (мм)округл = 0,51
(мм)округл = 1,01 (мм)
) kф = 0,8 [0,1;1)
Резистор №3 має прямокутну форму, у
нього довжина менше ширини.
l∆ = 0,38 (мм)потужн
= 1,4142 (мм)техн = 0,3 (мм)= 1,4142 (мм)= 1,76775 (мм)округл
= 1,42 (мм)округл = 1,77 (мм)
) kф = 20 (10;+∞)
Резистор №4 типу меандр.
b∆ = 0,115 (мм)потужн
= 0,2886 (мм)техн = 0,1 (мм)= 0,2886 (мм)округл = 0,29
(мм)сер = 5,8
(мм)=0,29мм < amin=0,3мм , a
= 0,3 (мм)= 0,59 (мм)= 3= 1,77 (мм)= 1,6333 (мм)/ a = 5,4433
< 10
Додатковий розрахунок резистора №2:
) При ρ
= 0,5 кОм/кв:
Резистор типу меандр.
b∆ = 0,115 (мм)потужн
= 0,15811 (мм)техн = 0,1 (мм)= 0,15811 (мм)округл = 0,16
(мм)сер = 3,2 (мм)=0,29мм < amin=0,3мм , a
= 0,3 (мм)= 0,46 (мм)= 2= 0,92 (мм)= 1,3 (мм)/ a = 4,3333
< 10
2) При ρ
= 10 кОм/кв:
kф = 1 [1;10]
Резистор має прямокутну форму
b∆ = 0,5
(мм)потужн = 0,7
(мм)техн = 0,1 (мм)= 0,7
(мм)= 0.7
(мм)округл = 0,71
(мм)округл = 0,71
(мм)
3) При ρ
= 50 кОм/кв:ф = 0,2
[0,1;1)
Резистор має прямокутну форму, у
нього довжина менше ширини.
l∆ = 0,32
(мм)потужн = 0,316
(мм)техн = 0,3 (мм)= 0,32(мм)=
1,6
(мм)округл = 0,33
(мм)округл = 1,6
(мм)
Розрахунок на ЕОМ: див. ДОДАТОК Б.
Налагодження програми
Налагодження
програми заключається в виявленні та усуненні помилок, які з'явилися при її
написанні, а саме:
) недостача таких знаків як:
"{", ";";
) різні синтаксичні помилки;
3) виявлена
помилка в розрахунку к-того
резистора;
4) неправильно вказана мітка
Всі вище перечисленні помилки булі
успішно виправлені.
. Документування програми
Призначення програми. Дана програма
призначена для рішення на ЕОМ прикладної інженерної задачі - задачі розрахунку
резисторів мікросхеми.
Режим роботи. Діалог користувача з
ЕОМ організований у режимі " запит-відповідь " (видача запиту на
екран дисплея - відповідь користувача із клавіатури).
Опис принципу роботи програми.
Користувач повинен ввести кількість резисторів для їхнього розрахунку (у змінну
N) й інші вихідні
дані: по N
значень P і R (у масиви P[m]
і R[m]),
ρ і P0 (у змінні pO[m]
і P0[m]).
Потім проводиться візуальний
контроль введених даних - вивід вихідних даних для розрахунку на екран.
Користувачу задається питання, чи відповідають ці дані таблиці №1. Якщо
відповідь негативна, то провадиться повторне введення всіх вихідних даних,
потім візуальний контроль цих нових даних і т.д. - і так доти, поки відповідь
не буде позитивною. При позитивній відповіді відбувається розрахунок
резисторів.
В основному розрахунку для кожного
резистора програма визначає його форму й відповідно до неї знаходить його
розміри, а також визначає резистори, конструювання яких не рекомендується. Для
прямокутного резистора програма обчислює l[i]
і b[i],
де i - номер цього
резистора (обчислюються значення i-их
елементів масивів l[i]
і b[i]),
для резистора у вигляді меандру обчислюються значення елементів масивів b[i],
a[i], X[i],
Y[i], n[i].
Результати виводяться на екран.
Потім знаходиться максимальне
розрахункове значення ширини в масиві b[m]
і виводиться на екран монітора.
Потім відбувається додатковий
розрахунок k-ого резистора в діапазоні значень ρ
при
фіксації інших вихідних даних.
Спочатку користувач вводить номер
резистора для додаткового розрахунку - число k у діапазоні [1;N].
Потім користувач вводить початкове значення
ρ,
виконуються
додатковий
розрахунок k-ого резистора й вивід на екран його результатів аналогічний
основному до тих
пір поки
не введе 0 (0 - кінець розрахунку k-го
резистора).
Відомості про перевірку програми. Програма
не містить помилок і виконує всі розрахунки правильно, у чому можна
переконатися за допомогою тестового приклада (див. додаток Б).
Висновки
програма комп'ютер
задача алгоритм
Виконавши цю курсову роботу, я
отримав навички розробки, налагоджування, тестування і документування програми
на мові високого рівня С++ при рішенні на ЕОМ прикладної інженерної задачі.
В роботі був розроблений
обчислювальний алгоритм, що реалізує заданий метод рішення певної прикладної
задачі. Проектування програми проходило з використанням принципів модульного і
структурного програмування. Алгоритм був зображений у вигляді блок-схеми.
За цим алгоритмом була розроблена
програма на мові С++, що містить власні підпрограми, використовує одномірні
масиви для зберігання початкових даних і результатів розрахунку, забезпечує
взаємодію з користувачем (у формі " запит-відповідь ") та виведення
результатів розрахунку у зручній формі.
В процесі тестування та
відлагодження програми було усунуто ряд помилок. Завдяки цьому кінцева версія
програми виконує вірні розрахунки, у чому можна переконатися за допомогою
тестового прикладу.
Список використаної літератури
1. Інформатика.
Комп’ютерна техніка. Комп’ютерні технології / Посібник для ВНЗ. - К.: 2001.
2. Вычислительная техника
и программирование: Учебник для техн. вузов / Под ред. А.В.Петрова. - М.:
Высш.шк., 1990.
. Программирование на
С++: Учеб. пособие / Под ред. А.Д.Хомоненко. - С-Пб.: 1999.
. Конспект лекцій з
дисципліни: " Алгоритмічні мови та програмування "
Додаток А
Текст програми на мові С++
#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); //Обчислення максимальної
шириниCal_pr_fo_bl();
//Розрахунок
резистора
прямокутної
форми
b>lCal_pr_fo_lb(); //Розрахунок
резистора
прямокутної
форми
l>bi, k, Vv=0, povt=0, stp=0;//Глобальні
змінні
цілого
типу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;//Константа цілого
типуR[m];//Номінальний опір резистораpO[m];//Опір квадрата резистивної
плівкиP[m];//Потужність розсіювання резистораPo[m];//Макс. питома потужність
розсіювання резистивної плівкиN;//Кількість резисторівkfe[m];//Коф. форм.
к-того резистораl[m];//Довжина резистораb[m];//Ширина резистораX[m];//Довжина
меандра
double Y[m];//Ширина меандра
double bD;//Мінімальна ширина
резистораbpot;//Ширина задана потужністюlD;//Мінімальна довжина
резистораlpot;//Довжина задана потужністюlser;//Середня лінія меандра
double piz;//Допоміжна змінна для рахунку к-того
резистораmaxb=0;//Максимальна ширина bOtv;// [Y/N]
double a[m];//Відстань
між
смугамиt[m];//Крок
ланкиn[m];//Число
ланокmax_b(double
a, double b, double c)//Обчислення
максимальної
ширини
{(a>b&&a>c)a;(b>a&&b>c)b;return
c;
}Cal_pr_fo_bl()//Розрахунок
резистора
прямокутної
форми
b>l
{
bD=(Db+Dl/kfe[i])/Yr;=sqrt((pO[i]*P[i])/(R[i]*Po[i]));[i]=max_b(b_tex,
bD, bpot);[i]=kfe[i]*b[i];[i]=int(b[i]/h)*h+h;[i]=int(l[i]/h)*h+h;
cout<<"\n Ширина резистора, b =
"<<b[i]<<" мм"<<endl;<<" Довжина
резистора, l = "<<l[i]<<" мм"<<endl;
}Cal_pr_fo_lb()//Розрахунок резистора
прямокутної форми l>b
{
lD=(Dl+kfe[i]*Db)/Yr;=sqrt((R[i]*P[i])/(pO[i]*Po[i]));[i]=max_b(l_tex,
lD, lpot);[i]=l[i]/kfe[i];[i]=int(l[i]/h)*h+h;[i]=int(b[i]/h)*h+h;
cout<<"\n Ширина резистора, b =
"<<b[i]<<" мм"<<endl;<<" Довжина
резистора, l = "<<l[i]<<" мм"<<endl;
}kf(double a, double b)//Обчислення коеф. форм.
к-того резистора
{a/b;
}main () //Головна
функція
{
(1)
{<<"Задайте
кiлькiсть
резисторiв
для
розрахунку
[max 10] = ";>>N;(N>=1 && N<=10);
}(i=0; i<N; i++)
{(1)
cout<<"Номiнальний опiр резистора,
[кОм] R = ";>>R[i];<<"Опiр квадрата резистивної плiвки,
[кОм/кв] p = ";>>pO[i];<<"Потужнiсть розсiювання
резистора, [мВт] P = ";>>P[i];<<"Макс.питома потужнiсть
розсiювання резистивної плiвки, [мBт/мм2] Po = ";
cin>>Po[i];<<endl;
cout<<"Початковi даннi вiдповiдают
данним Табл. №1 ? [Y/N] = ";>>Otv;(Otv=='Y'
|| Otv=='y');
}
}(i=0; i<N; i++)
{
PS:[i]=kf(R[i], pO[i]);(1<=kfe[i]
&& kfe[i]<=10)
{<<"\n_________________________________________"<<endl;<<"\n\tРезистор
№"<<i+1<<" -- прямокутрної форми"<<endl;
Cal_pr_fo_bl();
}if (0.1<=kfe[i] &&
kfe[i]<1)
{<<"\n______________________________________"<<endl;<<"\n\tРезистор
№"<<i+1<<" -- прямокутрної
форми
в
якого
ширина
меньше
довжини
(l>d)"<<endl;_pr_fo_lb();
}if (kf(R[i], pO[i])>10)
{<<"\n______________________________________"<<endl;<<"\n\tРезистор
№"<<i+1<<" -- резистор
типу
(меандр)"<<endl;=(Db+Dl/kfe[i])/Yr;=sqrt((pO[i]*P[i])/(R[i]*Po[i]));[i]=int(max_b(b_tex,
bD, bpot)/h)*h+h;=b[i]*kfe[i];[i]=b[i];(a[i]<a_min)[i]=a_min;(1)
{[i]=a[i]+b[i];
n[i]=int(sqrt(lser/t[i]));[i]=n[i]*(a[i]+b[i]);[i]=(lser-a[i]*n[i])/n[i];((Y[i]/a[i])<=10);[i]=a[i]+a_min;
}<<"\n Ширина
меандри,
Y = "<<Y[i]<<" мм"<<endl;<<"
Довжина
меандри,
X = "<<X[i]<<" мм"<<endl;<<"
Ширина
смушки,
b = "<<b[i]<<" мм"<<endl;<<"
Вiдстань
мiж
смужками,
a = "<<a[i]<<" мм"<<endl;<<"
Число
ланок,
n = "<<n[i]<<endl;
}if (kfe[i]<0.1)
{
cout<<"\n_________________________________________"<<endl;<<"\tРезистор
№"<<i+1<<" -- резистор використовувати не
рекомендовано"<<endl;
}(pO[i]==piz);
}(1<N)
{(povt==0)
{(i=0; i<N; i++)
{(maxb<b[i])=b[i];
}<<"\nМаксiмальная
ширина
b = "<<maxb<<" мм"<<endl;++;
}(Vv==0)
{(1)
{<<"\nВведiть
номер
резистора
для
додаткових
обчислень
= ";>>k;(1<=k&&k<=N);
else<<"Цього резистора не
iснує"<<endl;
}=k-1;++;
}
}(1)
{<<"\nОпiр квадрата резистивної
плiвки (для закiнчення обчислень введiть 0), [кОм/кв] p = ";
cin>>piz;(piz<=50);<<"\n\tMAX
50 [кОм/кв]
"<<endl;
}=k;[i]=piz;(piz!=0)PS;();("cls");//Функція
очищення
екрана
cout<<"\tАвтор програми : Жмуд
Е.В."<<endl;<<"\t20.09.2012"<<endl;();
}
Додаток Б
Тестовий приклад (розрахунок на ЕОМ)
Мал.1. Введення початкових даних,
розрахунок та виведення результату.
Мал.2.
Розрахунок k-го
резистора.
Додаток В
Блок-схема алгоритму