Расчет характеристик выходных сигналов электрических цепей
Оглавление
1. Постановка
задачи
. Исходные
данные
. Анализ
поставленной задачи
. Структура
программы
.1 Модули
программы
.2 Список
идентификаторов
.3 Список
функций и их назначения
.4 Интерфейс
программы
. Исходный
код программы
. Проверка
расчетов в Maxima и построение графиков
Выводы
1. Постановка задачи
В данной работе требуется написать программу, с помощью
которой можно выполнить следующие действия:
1. Вычисление значения
входного и выходного сигналов в n-равноотстоящих точках.
2. Вывод на экран таблицы со
значениями входного и выходного сигналов.
3. Запись результатов
вычислений на диск.
4. Чтение и использование
рабочего набора из файла.
5. Проверка полученных значений в Maxima
и построение графиков Uвх(t) и Uвых(t).
2. Исходные данные
Имеется электрическая цепь, на вход которой подается
определенный сигнал Uвх. Необходимо по заданному входному сигналу определить
величину Uвых.
Рис. 1
3. Анализ поставленной задачи
В данной задаче входной сигнал задается графически. График состоит из
трех прямых. Рассмотрев каждую по отдельности и подставив значения из
контрольного расчета, можно составить формулу для расчета Uвх(t):
Подставив значения из контрольного расчета в формулу для
нахождения выходного сигнала, можно получить конечную формулу:
4. Структура программы
4.1 Модули программы
main.c - главный модуль программы. В нем объявляются
все переменные и массивы.
function.c - модуль программы, содержащий все остальные
функции, необходимые для работы программы.
function.h - заголовочный файл, содержащий прототипы всех
функций.
4.2 Список идентификаторов
SIZE- именованная константа, равная 11. Используется
для создания массивов.
Array_t[] - массив значений времени, для которых
рассчитываются сигналы.
Array_U_Unput[] - массив значений входного сигнала.
Array_U_Output[] - массив значений
выходного сигнала.
T_end - конечный момент времени.
T_start - начальный момент времни.
U_verh - переменная верхней границы фонового режима.
U_niz - переменная нижней границы фонового режима._t -
переменная приращения времени._w - вторая переменная приращения времени._various
- переменная выбора условия._top - переменная верхней границы фонового режима
по напряжению._down - переменная нижней границы фонового режима по напряжению.-
указатель на файл.
4.3 Список функций и их назначения
int main() - главная функция программы.
void hello() - функция, читающая приветственное
сообщение из файла.
int menu() - функция, отображающая на экране меню и
возвращающая номер выбранного пункта в программу.
double Get_U_input (double t) - функция расчета
входного напряжения по заданному значению времени.
double Get_U_output (double U_input) - функция расчета
выходного напряжения по заданному значению входного напряжения.
int input_various -Функция реализующая возможность множественного выбора
выполнения программы.
void arrays_create - функция создания массивов.
void table_output - функция вывода таблицы с результатами выполнения основной
задачи.
void file_output- функция записи файла.
void file_input - Функция чтения значений начального и конечного времени из
файла.
void output_spec - функция вывода результатов дополнительного задания.clean
() - функция очистки экрана.
4.4 Интерфейс программы
Работа с программой осуществляется через меню. В нем имеются 6
пунктов:deistviya
. Vvod peremennih - ввод переменных для выполнения задания.
. Sozdanie massivov - создание массивов значений времени, входного и
выходного сигналов.
. Vivod tablizi osnovnoy chasty - вывод таблицы значений основной части
программы.
. Vivod znacheniy dop.zadaniya - вывод значений дополнительной части
программы.
. Zapis rezultatov v file - запись результатов в файл.
. Chtenie rezultatov iz faila - чтение значений для выполнения программы
из файла.
. EXIT
5. Исходный код программы
functions.h
double Get_U_input (double t);Get_U_output (double U_input);ask_dt (int
SIZE);input_various ();arrayscreate (int SIZE, double array_t[],double
array_in[],double array_out[], double dt);table_output (int SIZE,double
arr_name_t[],double arr_name_in[],double arr_name_out[]);file_input (int
SIZE,double arr_name_t[],double arr_name_in[],double
arr_name_out[]);file_output (int SIZE,double arr_name_t[],double
arr_name_in[],double arr_name_out[]);zadniy_front ();.hget_entry();.c
#include <stdio.h>
#include <stdlib.h>
#include "functions.h"
#include "menu.h"
#define SIZE 50
#define t_start 0.0
#define EXIT_CODE 7main()
{("clear");array_t[SIZE],array_in[SIZE],array_out[SIZE];dt;entry;((entry=get_entry())!=EXIT_CODE)
{(entry)
{1:= ask_dt (SIZE);;2:_create
(SIZE,array_t,array_in,array_out,dt);;3:_output (SIZE,array_t,array_in,array_out);;4:_front();;5:_output
(SIZE,array_t,array_in,array_out);;6:_input (SIZE,array_t,array_in,array_out);;
}
}0;
}.c
#include <stdio.h>
#include <stdlib.h>Get_U_input (double t)
{("clear");((t<-3) || (t>4))0;if ((t>=-3) &&
(t<0))((-100/3)*t - 100);return (25*t - 100);
}Get_U_output (double U_input) {("clear");(U_input > 0)0;if
((U_input<=0) && (U_input > -10))(10*U_input);return -100;
}ask_dt (int SIZE){("clear");t_end, t_start,
dt_w;("vvedite konechnoe
znachenie");("%lf",&t_end);("vvedite nachalnoe
znachenie");("%lf",&t_start);_w = 0;_w = (t_end - t_start) /
(double) (SIZE - 1);dt_w;
}input_various (){("clear");name;("bil li vipolnen vvod
peremennih?\n");("esli da , najmite 2, esli net najmite
1\n");("%d",&name);name;
}arrays_create (int SIZE, double array_t[],double array_in[],double
array_out[], double dt) {("clear");dt_t, t_start;i;("vvedite
nachalnoe znachenie");("%lf",&t_start);(input_various () ==
1)_t = ask_dt (SIZE);_t = dt;(i=0;i<SIZE;i++){_t[i] = t_start + i*dt_t;
}(i=0;i<SIZE;i++){_in[i]= Get_U_input (array_t[i]);
}(i=0;i<SIZE;i++){_out[i] = Get_U_output (array_in[i]);
}
}table_output (int SIZE,double arr_name_t[],double arr_name_in[],double
arr_name_out[]) {("clear");i;(" Vremya || U vhodnoe || U
vihodnoe\n ");(i=0;i<SIZE;i++){(" %11f || %11f || %11f\n
",arr_name_t[i],arr_name_in[i],arr_name_out[i]);
}("_________________________________________________\n");
printf (" vremya || U_vhodnoe || U_vihodnoe \n\n\n ");
}file_output (int SIZE,double arr_name_t[],double arr_name_in[],double
arr_name_out[]) {("clear");* file = fopen ("data.csv",
"w");(file == NULL) {("Oshibka zapisi v fail.\n");;
}i;(file, "Vremya,U in, U out\n");(i=0;i<SIZE;i++)(file,
"%lf,%lf,%lf\n",arr_name_t[i],arr_name_in[i],arr_name_out[i]);(file);
}file_input (int SIZE,double arr_name_t[],double arr_name_in[],double
arr_name_out[]) {("clear");* file = fopen ("data.csv",
"r");(file == NULL) {("Fail data.csv ne naiden!\n");;
}c;((c = fgetc (file)) != '\n')
;i;(i = 0; i < SIZE; i++)(file, "%lf,%lf,%lf",
&arr_name_t[i], &arr_name_in[i], &arr_name_out[i]);(file);
}zadniy_front () {("clear");m1,m2;= 0.1;= 0.9;t1,t2,t3,t4;k1 =
100/3;k2 = 25;= 100*m1/k1;= 100*m2/k1;= 100*m1/k2;= 100*m2/k2;time = t1 + (3 -
t2) + t3 + (4 - t4);("dlitelnost zadnego fronta ravna %lf
\n\n",time);
}.c
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "menu.h"
#define EXIT_CODE 7
int get_entry()
{entry=0;("Vibor deistviya\n");("%10d %-50s\n",1,
"Vvod peremennih");("%10d %-50s\n",2, "sozdanie
massivov");("%10d %-50s\n",3, "Vivod tablizi osnovnoy
chasty");("%10d %-50s\n",4, "Vivod znacheniy
dop.zadaniya");("%10d %-50s\n",5, "zapis rezultatov v
file");("%10d %-50s\n",6, "chtenie parametrov iz
faila");("%10d %-50s\n",EXIT_CODE, "EXIT");("Vash
vibor:");("%d%*c",&entry);(entry <1 ||
entry>EXIT_CODE)
{("Vibor tol'ko ot 1 do %d\n",EXIT_CODE);("Vash
vibor:");("%d%*c",&entry);
}
return entry;
}
6. Проверка расчетов в Maxima и построение графиков
Проверка в системе Maxima будет проведена с помощью записи формул
непосредственно в саму систему. Т.е. значения входных и выходных сигналов будут
рассчитываться непосредственно в Maxima.
выходной сигнал программа код
Рис. 2
Рис. 3
Рис. 4
Выводы
Как мы видим из графиков, значения, получившиеся в составленной программе
и в Maxima, совпадают. Соответственно можно сделать вывод, что написанная в
данной курсовой работе программа проводит вычисления верно, а значит,
составлена правильно.