Блок-схема алгоритма 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!