3.1: Вступ
- Page ID
- 30577
У цій вправі ми розглянемо використання умовних засобів. До них відносяться конструкція if/else та конструкція перемикача/випадку. Умовні пристрої використовуються для того, щоб зробити вибір, тобто для поділу потоку програми на різні шляхи. If/else найкраще працює з простими варіантами або/або, тоді як перемикач/випадок призначений для вирішення одного (або, можливо, декількох) вибору (ів) зі списку фіксованих можливостей.
Найпростішим умовним є прямий if (). Залежно від того, чи перевіряється елемент (и), що перевіряються, визначає, чи буде вжито подальші дії. За допомогою групування речень за допомогою логічних операторів || і && можуть бути створені комплексні тести. Оператори if () можуть бути вкладеними, а також включати обробку тестового невдачі за допомогою пункту else. Якщо вам потрібно вибрати один елемент зі списку, наприклад, при обробці виділення меню, це може бути досягнуто шляхом вкладеності наступним чином:
if( choice == 1 )
{
/* do stuff for 1 */
}
else
{
if( choice == 2 )
{
/* do stuff for 2 */
}
else
{
if( choice == 3 )
{
/* do stuff for 3 */
}
/* and so on */
}
}
Таке розташування трохи громіздко при виборі з великого списку. Крім того, важко мати справу з вибором множини (наприклад, вибираючи елементи 1 і 3). Для цих ситуацій мова C пропонує конструкцію перемикача/регістру. Немає нічого, що комутатор/випадок може зробити, що ви не можете відтворити з вкладеним if/else і додатковим кодом, але перший пропонує більшу зручність, а також більш чіткий і компактний код. Перемикач/випадок використовується часто, але в кінцевому рахунку, if/else є більш гнучким, оскільки він не обмежується вибором зі списку числових значень. Зазвичай числові константи не використовуються у виробничому коді, як у прикладі вище. Замість цього #define використовуються для констант, щоб зробити код більш читабельним. Реальна версія перемикача/регістру попереднього прикладу може виглядати так:
#define WALK_DOG 1
#define LET_OUT_CAT 2
#define COMB_WOMBAT 3
switch( choice )
{
case WALK_DOG:
/* c’mon poochie... */
break;
case LET_OUT_CAT:
/* there’s the door... */
break;
case COMB_WOMBAT:
/* first the shampoo... */
break;
/* and so on */
}
У цій вправі ми збираємося використовувати обидві конструкції. Програма буде включати розрахунок параметрів зміщення постійного струму для простих транзисторних схем. Ми надамо користувачеві вибір з трьох різних механізмів зміщення (дільник напруги, випромінювач з двома джерелами та зворотний зв'язок колектора). Потім програма запитає відповідні значення компонентів і визначить струм спокою колектора і напруга колектор-випромінювач. Він також визначить, чи є ланцюг в насиченості чи ні. Ці значення будуть відображатися користувачеві.
Один з підходів до цієї проблеми полягає в тому, щоб розглядати її як три маленькі проблеми, об'єднані воєдино. Тобто подумайте, що вам потрібно зробити для одного упередження, а потім повторіть його з відповідними змінами для двох інших. Потім три пов'язані разом з деякою простою обробкою меню. Ось псевдокод:
1. Дайте користувачеві відповідні вказівки та список варіантів упередженості.
2. Попросіть користувача щодо їх упередженого вибору.
3. Відгалуження до відповідного розпорядку для обраного ухилу. Для кожного ухилу
а. запитуйте необхідні значення компонентів (резистори, блок живлення, бета).
б Обчислити Ic і Vce і визначити, чи ланцюг знаходиться в насиченості.
c Відображення значень користувачеві.
Відповідні рівняння для кожного зміщення слідують. Всі упередження використовують наступне: Vcc є позитивним запасом. Re - емітерний резистор, а Rc - резистор колектора. бета - коефіцієнт посилення струму (hfe). База-випромінювач (Vbe) можна вважати 0,7 вольт. Зауважте, що якщо насиченість ІС більша за Ic, то фактична Ic дорівнює насиченості ІС, а Vce буде 0.
Дільник напруги: також вимагає R1, R2 (верхній і нижній дільник резисторів).
Втг = Вкк*Р2/ (Р1+Р2)
Рт = Р1*Р2/ (Р1+Р2)
Ic = (Vth-Vbe)/(RE+RTH/бета)
Vce = Vcc-Ік* (Re+Rc)
ІС-насиченість = Vcc/ (Rc+Re)
Зворотній зв'язок колектора: також потрібен Rb (базовий резистор).
Ic = (Vcc-Vbe)/(Re+RC+РБ/бета)
Vce = Vcc-Ік* (Re+Rc)
ІС-насиченість = Vcc/ (Rc+Re)
Випромінювач з двома постачанням: також вимагає Vee (негативне живлення випромінювача) та Rb (базовий резистор).
Ic = (Vee-Vbe)/(Ре+РБ/бета)
Vce = Віе+Vcc-Ік* (Re+Rc)
ІС-насиченість = (Vee+Vcc)/(Rc+Re)
де Vee - абсолютне значення у всіх випадках.
