Курсак.Програмирование.Минев№13 / Додаток Б
.docx
ДОДАТОК Б
Вихідний текст програми проведення розрахунку АЧХ та ФЧХ при критичному та граничному значенні фактора зв’язку
/*******************************************************************/
/* Программа расчета амплитудно-частотной (АЧХ) и */
/* фазо-частотной характеристик (ФЧХ) связанного контура */
/* для факторов связи Хг=2.41 и Хк=1 */
/* Выполнил студент гр. РТ-103 Поселюжный В.С. */
/*******************************************************************/
/* Включение в программу необходимых файлов */
#include <stdio.h>
#include <math.h>
#include<conio.h>
/*******************************************************************/
/* Объявление функций пользователя */
/*******************************************************************/
floatACHk(floatKsi); /* Расчет АЧХ при Хк=1 */
floatFCHk(floatKsi); /* Расчет ФЧХ при Хк=1 */
floatACHg(floatKsi); /* Расчет АЧХ при Хг=2.41 */
floatFCHg(floatKsi); /* Расчет ФЧХ при Хг=2.41 */
voidTabl(floatKsi, floatACHk, floatFCHk, floatACHg, floatFCHg, float W); /* Вывод таблицы */
floatOmega(floatKsi, float Q, float W0); /* Определение частоты */
voidVerhTabl(void); /* Вывод шапки таблицы */
voidNizTabl(void); /* Вывод последней строки таблицы */
/*******************************************************************/
/* Главная функция */
/*******************************************************************/
voidmain(void)
{
/*******************************************************************/
/* Объявление переменных */
/*******************************************************************/
float C, /* Емкость контура */
L, /* Индуктивность контура */
R, /* Сопротивление контура */
Q, /* Добротность контура */
Ksi, /* Обобщенная расстройка */
Ak, /* Значение АЧХ при Хк=1 */
Ag, /* Значение АЧХ при Хг=2.41 */
Fk, /* Значение ФЧХ при Хк=1 */
Fg, /* Значение ФЧХ при Хг=2.41 */
Om, /* Значение частоты */
W0; /* Резонансяная частота контура */
/*******************************************************************/
/* Инициализация переменных */
/*******************************************************************/
C = 10 * pow(10,-9);
L = 240 * pow(10,-6);
R = 16;
clrscr(); /* Очистка экрана */
W0 = 1 / sqrt(L * C); /* Определение резонансной частоты */
Q = sqrt(L / C) / R; /* Определение добротности */
VerhTabl(); /* Вызов функции пользователя VerhTabl() */
/*******************************************************************/
/* Цикл */
/*******************************************************************/
for(Ksi = -4.0; Ksi<= 4; Ksi = Ksi + 0.5)
{
Ak = ACHk(Ksi); /* Определение значения АЧХ при Хк=1 */
Fk = FCHk(Ksi); /* Определение значения ФЧХ при Хк=1 */
Ag = ACHg(Ksi); /* Определение значения АЧХ при Хг=2.41 */
Fg = FCHg(Ksi); /* Определение значения ФЧХ при Хг=2.41 */
Om = Omega(Ksi, Q, W0); /* Определение значения частоты */
Tabl(Ksi, Ak, Fk, Ag, Fg, Om); /* Вывод на экран строки таблицы */
}
NizTabl(); /* Вызов функции пользователя NizTabl() */
getch(); /* Ожидание нажатия клавиши (завершение программы) */
}
/*******************************************************************/
/* Функции пользователя */
/*******************************************************************/
/*******************************************************************/
/* Вывод на экран строки таблицы */
/*******************************************************************/
voidTabl(float Ksi, float ACHk, float FCHk, float ACHg, float FCHg, float W)
{
printf (" ║ %4.1f ║ %4.3f ║ %4.3f ║ %4.3f ║ %4.3f ║ %4.3f ║\n", Ksi, W, ACHk, FCHk, ACHg, FCHg);
}
/*******************************************************************/
/* Расчет omega */
/*******************************************************************/
float Omega(float Ksi, float Q, float W0)
{
float W, /* Значение частоты */
W1; /* Нормированное значение частоты */
W1 = ((Ksi / Q) * W0 + W0 * sqrt((Ksi * Ksi) / (Q * Q) + 4.0)) / 2.0; /* Расчет частоты */
W = W1/pow(10,6); /* Нормировка значения частоты */
return W; /* Возврат значения */
}
/*******************************************************************/
/* Вывод на экран названия и "шапки" таблицы */
/*******************************************************************/
voidVerhTabl(void)
{
printf(" Таблица значений АЧХ и ФЧХ при Хк=1 и Хг=2.41 \n");
printf(" ╔═══════╦═════════╦═══════════════════════╦═══════════════════════╗\n");
printf(" ║ ║ Omega ║ Xk=1 ║ Xг=2.4 ║\n");
printf(" ║ Ksi ║ ╠═══════════╦═══════════╬═══════════╦═══════════╣\n");
printf(" ║ ║ *10^6 ║ АЧХ ║ ФЧХ ║ АЧХ ║ ФЧХ ║\n");
printf(" ╠═══════╬═════════╬═══════════╬═══════════╬═══════════╬═══════════╣\n");
}
/*******************************************************************/
/* Вывод на экран последней строки таблицы */
/*******************************************************************/
voidNizTabl(void)
{
printf(" ╚═══════╨═════════╨═══════════╨═══════════╨═══════════╨═══════════╝\n");
}
/*******************************************************************/
/* Расчет ФЧХ при Хk=1 */
/*******************************************************************/
floatFCHk(floatKsi)
{
floatFCHk; /* Объявление переменной FCHk */
FCHk = (3.14 / 2) - atan(2 * Ksi / (2 - Ksi * Ksi)); /* Вычисление FCHk */
returnFCHk; /* Возврат значения */
}
/*******************************************************************/
/* Расчет АЧХ при Хk=1 */
/*******************************************************************/
floatACHk(floatKsi)
{
floatACHk; /* Объявление переменной ACHk */
ACHk = 2 / sqrt((2 - Ksi * Ksi) * (2 - Ksi * Ksi) + 4 * Ksi * Ksi); /* ВычилениеACHk */
returnACHk; /* Возврат значения */
}
/*******************************************************************/
/* Расчет АЧХ при Хг=2.41 */
/*******************************************************************/
floatACHg(floatKsi)
{
floatACHg; /* Объявление переменной ACHg */
ACHg = 4.82 / sqrt((6.808 - Ksi * Ksi) * (6.808 - Ksi * Ksi) + 4 * Ksi * Ksi); /* ВычилениеACHg */
returnACHg; /* Возврат значения */
}
/*******************************************************************/
/* Расчет ФЧХ при Хг=2.41 */
/*******************************************************************/
floatFCHg(floatKsi)
{
floatFCHg; /* Объявление переменной FCHg */
FCHg = (3.14 / 2) - atan(2 * Ksi / (6.808 - Ksi * Ksi)); /* ВычилениеFCHg */
returnFCHg; /* Возврат значения */
}