Блок-схема алгоритма UvxUvih:
Санкт-Петербургский государственный университет телекоммуникаций
им. проф. М.А.Бонч-Бруевича
Курсовая работа
по программированию на языке высокого уровня
на тему:
«Расчет на ЭВМ характеристик выходных сигналов электрических цепей»
Выполнил
студент группы МБИ-21
Сурмина М. С.
Проверила
Коесникова М.Ю.
СПб
2013
Оглавление:
Постановка задачи………………………………………………………………………………..3
Таблица идентификаторов …………………………………………............................................4
Блок-схема алгоритма………………………………………………………………………...…..5-6
Контрольный расчет в WxMaxima………………………………………………….....................7
Контрольный расчет в Code Blocks………………………………………....................................7
Работа в WxMaxima……………………………………………………………………………….8
Графики в WxMaxima……………………………………………….............................................9
Текст программы…………………………………………………………………………..........9-14
Выводы по программе…………………………………………………………………………….15
Постановка задачи:
В данной работе требуется написать программу, с помощью которой можно выполнить следующие действия:
1. Сформировать массивы входного и выходного сигналов в n-равноотстоящих точках;
2. Найти длительность импульса входного сигнала при Uvx>=80 B.
|
|
3. Вывести на экран таблицы со значениями массивов времени, входного и выходного сигналов;
Записать массивы времени, входного и выходного сигналов во внешний текстовый файл.
Вариант № 10,8.
Имеется электрическая цепь, на вход которой подается определенный сигнал Uвх, а на выходе получается определенный сигнал Uвых. Необходимо по заданному входному сигналу и передаточной характеристике определить длительность импульса входного сигнала при Uвх >=80 B.
Дана линейная электрическая цепь, на входе которой действует сигнал:
Uвх= a(t-tнач) при t<=t1
a(t1-tнач)-b(t-t1) при t>t1
a=12 B/c; b= 12 B/c; tнач = 10с tкон = 35 с; t1 = 22,5 c.
Цепь преобразовывает сигнал в соответствии с характеристикой:
a1Uвх+b1 при Uвх<= Uвх1
Uвых= a2Uвх+b2 при Uвх1<Uвх<Uвх2
a3Uвх+ b3 при Uвх2<Uвх<=Uвх3
а4Uвх+b4 при Uвх>Uвх3
а1=0.25 I/B; b1= 10 B; Uвх1 = 5 В; а2= 0.5 I/B; b2= 7.75 B; a3=1 I/B; b3= 0.25 B; a4= 2 I/B; b4= -29.75 B; Uвх2= 15 В; Uвх3= 30 В.
Таблица идентификаторов :
Обозначение в задаче | идентификатор | переменная | константа | глобальная | локальная | П/п | назначение |
Uвх | Uvx[] | + | Массив входного напряженя | ||||
Uвых | Uvih[] | + | Массив выходного напряжения | ||||
t | t[] | Массив времени | |||||
tнач | tn | + | + | vremya | Начальный момент наблюдения входного сигнала | ||
tкон | tk | + | + | Конечный момент наблюдения входного сигнала | |||
ε | eps =0.1 | + | + | tochnost | Допустимая погрешность вычислений | ||
n | n=11 | + | + | Начальное значение количества отсчетов входного сигнала | |||
N | N | + | + | tochnost | Текущее значение количества отсчетов входного сигнала | ||
∆t | dt | + | + | vremya | Временной интервал между двумя соседними отсчетами входного сигнала | ||
p | p | + | + | Оценка погрешности вычисления параметра | |||
w | w | + | + | параметр | |||
m | + | + | Выбор меню | ||||
v | v | + | + | tochnost | Вспомогательная переменная для расчета погрешности | ||
*f | title | Файл для работы с титульным листом | |||||
*z | Zap | Файл для записи входного и выходного сигнала | |||||
a, b, t1 | + | + | UvxUvih | Коэффициенты для расчета входного напряжения | |||
a1, a2, a3, a4, b1, b2, b3, b4, Uvx1, Uvx2, Uvx3 | + | + | UvxUvih | Коэффициенты для расчета выходного напряжения | |||
T1 | + | + | рaram | Начальное время длительности импульса | |||
T2 | + | + | param | Конечное время длительности импульса | |||
i,k | + | + | счетчики |
|
|
|
|
Блок - схема алгоритма main :
Начало
Определение и ввод
исх. Данных
Вывод тит. Листа
На экран из файла
Функция формир-я Uvx
Функция формирования Uvih
Функция вычисления параметра W
Нужна отладочная печать?
Вывод на экран таблицы
i t Uvx Uvih
p=|w-v|
вывод p и w
p<Eps
Запись Uvx И Uvih в 2 текст файла N = 2*N
V=W
N>1000
|
|
Сигнал аварийного
Останова
Останов
Блок-схема алгоритма UvxUvih:
Блок-схема алгоритма parametr :
Работа в wxMaxima:
fpprintprec:3;
tn:10; tk:35; t1:22.5; a:12; b:12; N:11; dt:(tk-tn)/(N-1),numer;
Uvx(t):=if t<=t1 then a*(t-tn) else a*(t1-tn)-b*(t-t1);
for t:tn thru tk step dt do display(Uvx(t)),numer;
a1:0.25; b1: 10; Uvx1: 5; a2: 0.5; b2:7.75; a3:1; b3: 0.25; a4: 2; b4:-29.75;
Uvx2: 15; Uvx3: 30;
Uvih(Uvx):= if (Uvx(t)<=Uvx1) then a1*Uvx(t)+b1 else if (Uvx1<Uvx(t)and Uvx(t)<=Uvx2) then a2*Uvh(t)+b2 else if (Uvx(t)>Uvx3) then a4*Uvx(t)+b4 else a3*Uvx(t)+ b3;
for t:tn thru tk step dt do display(Uvih(t)),numer;
for t:tn thru tk step dt do display(Uvih(t)),numer;
wxplot2d([Uvx(t)], [t,tn,tk],
[gnuplot_preamble, "set grid;"],
[nticks,11])$
wxplot2d([Uvih(t)], [t,tn,tk],
[nticks,11])$
Графики в wxMaxima:
Текст программы :
Main.cpp
#include "myheader.h"
#define n 11
float t[10000], Uvx[10000], Uvih[10000];
int main(){
float w, p;
int m;
UvhUvih (n,t, Uvx, Uvih);
vremya (n,t);
printf ("\n MENU. VVedy chislo ot 1 do 7");
printf ("\n <1> - title;"
"<2> - time;"
"<3> - create Vxod-Vixod;"
"<4> - vivod table;"
"<5> - parametr;"
"<6> tochnost' parametra;"
"<7> - zapicat' Uvx and Uvih into file"
"<8> - exit;");
scanf ("%d", &m);
printf("m=%d",m);
switch (m){
case 1: title(); break;
case 2: vremya (n,t); break;
case 3: UvhUvih (n,t, Uvx, Uvih); break;
case 4: vivod(n,t, Uvx,Uvih); break;
case 5 : w = param(n, t,Uvx); printf ("\n w=%f", w); break;
case 6: p = tochnost(n,t, Uvx, Uvih); printf ("\n p=%f", p); break;
case 8: break;
case 7: zap(n, Uvx, Uvih); break;
default: printf ("\n Wrong number");
}
return 0;}
Myheader.h
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
float param(int n, float t[], float Uvx[]);
int vremya(int n, float t[]);
int UvhUvih (int n, float t[], float Uvx[], float Uvih[]);
int vivod(int n, float t[], float Uvx[], float Uvih[]);
int title();
float tochnost (int n, float t[], float Uvx[], float Uvih[]);
int zap(int n, float Uvx[],float Uvih[]);
Parameter.cpp
#include "myheader.h"
float param(int n, float t[], float Uvx[]){
float w, t1,t2; int i,k;
for (i=0;i<n;i++){
if (Uvx[i]>=80) {k=i;
t1=t[i];
break;}}
for (i=k;i<n;i++) {
if (Uvx[i]<80) {
t2=t[i-1];
break;}}
w = t2-t1;
return w;}
Title.cpp
#include "myheader.h"
int title() {
FILE*f; char a[80];
f=fopen("title.txt","r");
if (f==NULL){
printf ("\n Oshibka");
exit(1);
}
else { while (!feof(f)) {
fgets (a,80,f);
printf ("%s", a);
}
fclose(f);
}
return 0;}
Tocnost.cpp
#include "myheader.h"
float tochnost(int n, float t[], float Uvx[], float Uvih[]){
float w,v, eps = 0.1, p;
int N;
N=n;
p = 1.0;
v = 10000.0;
while (p > eps) {
vremya(N,t);
UvhUvih(N,t, Uvx, Uvih);
w = param (N, t, Uvx);
p = fabs(w-v);
printf ("\n w =%4.2f p=%10.3f ", w, p);
v=w;
N=N*2;
if (N>1000) break;
}
printf ("\n n=%d", N);
return p;
}
Vivod.cpp
#include "myheader.h"
int vivod(int n, float t[], float Uvx[], float Uvih[])
{int i;
printf ("\n Box");
printf ("\n N t Uvx Uvih");
for (i=0; i< n; i++)
printf("\n %2d %3.1f %4.1f %5.2f", i+1,t[i], Uvx[i], Uvih[i]);
return 0;}
Vremya.cpp
#include "myheader.h"
int vremya(int n, float t[]){
float dt=0,tn=10, tk=35; int i;
dt=(tk-tn)/(n-1);
for (i=0;i<n;i++)
t[i]=tn + i*dt;
return 0;}
Vxodvihod.cpp
#include "myheader.h"
int UvhUvih (int n,float t[],float Uvx[], float Uvih[]){
int i, a=12, b=12 , b1=10, Uvx1=5, a3=1, a4=2, Uvx2=15, Uvx3=30;
float t1=22.5, a1=0.25, a2=0.5, b2=7.75, b3=0.25, b4=-29.75, tn=10;
vremya(n,t);
for (i=0;i<n;i++)
{if (t[i]<=t1) Uvx[i] = a*(t[i]-tn);
else Uvx[i] = a*(t1-tn)-b*(t[i]-t1);
if (Uvx[i]<=Uvx1) Uvih[i]= a1*Uvx[i]+b1;
else
if ((Uvx1<Uvx[i])&&(Uvx[i]<=Uvx2)) Uvih[i]= a2*Uvx[i]+b2;
else
if (Uvx[i]>Uvx3) Uvih[i]= a4*Uvx[i]+b4;
else Uvih[i] = a3*Uvx[i]+b3;}
return 0;}
Zap.cpp
#include "myheader.h"
int zap(int n, float Uvx[],float Uvih[]){
FILE*z; int i;
z = fopen ("z.txt","w");
if (z==NULL){printf ("\n mistake");
exit (1);}
else
{for (i=0;i<n;i++) fprintf (z, "\nUvx= %5.2f Uvih=%5.2f", Uvx[i], Uvih[i]);
fclose (z);
} return 0;}
Выводы по программе:
В данной курсовой работе поставленную задачу реализовать удалось.
· Написана программа, формирующая массивы времени, входного и выходного сигналов.
· Программа вычисляет длительность импульса выходного сигнала w=11.61 , с погрешностью P=0.038, при числе точек n=704.
· Выведена на экран таблица со значениями массивов времени, входного и выходного сигналов.
· Произведена запись в файл результатов вычислений Uvx[i], Uvih[i].
Дата добавления: 2018-10-26; просмотров: 298; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!