Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursovaya_itogovaya.docx
Скачиваний:
5
Добавлен:
17.09.2019
Размер:
119.01 Кб
Скачать

Текст программы:

#include <cstdlib>

#include<stdio.h>

#include <stdlib.h>

#include <math.h>

#include <string>

#define SIZE 1000

using namespace std;

float tn=3.14, tk=6.28, B=5, l=0.5, a=2.5, b=10, U1=10, U2= 30, h, V=1000000, W, E0= 0.03, E=1, max_iters = 10;

int N=1;

float t[SIZE],Uvx[SIZE],Uvix[SIZE];

void podschet_T(){

for(int i=0;i<=(N-1);i++){

t[i]=tn+i*h;

}

}

void podschet_Uvx(){

for(int i=0;i<=(N-1);i++){

Uvx[i]=-B*exp(l*t[i])*sin(t[i]);

}

}

void podschet_Uvix(){

for(int i=0;i<=(N-1);i++){

if(Uvx[i]<=U1){

Uvix[i]=a*U1+b;

} else {

if(Uvx[i]> U2){

Uvix[i]=a*U2+b;

}

else{

Uvix[i]=a*Uvx[i]+b;

}

}

}

}

float podschet_W(){

float t2, t1, UvixMax;

UvixMax = Uvix[0];

for (int i=0; i<N; i++){

if (UvixMax < Uvix[i]) {

UvixMax = Uvix[i];

}

}

t1 = UvixMax * 0.1;

t2 = UvixMax * 0.9;

return t2-t1;

}

void printParam( ){

printf(" tn=%7.3f\n", tk);

printf(" B=%8.3f\n", B);

printf(" l=%8.3f\n", l);

printf(" a=%8.3f\n", a);

printf(" b=%8.3f\n", b);

printf(" U1=%7.3f\n", U1);

printf(" U2=%7.3f\n", U2);

printf(" h=%8.3f\n", h);

printf(" E0=%7.3f\n", E0);

printf(" max_iters=%8.3f\n",max_iters);

}

void printMasT(float x[SIZE]){

for(int i=0;i<=(N-1); i++){

printf("\n");

printf(" t[%d]=%8.3f",i,x[i]);

}

}

void printMasUvx(float x[SIZE]){

for(int i=0;i<=(N-1); i++){

printf("\n");

printf(" Uvx [%d]=%8.3f",i,x[i]);

}

}

void printMasUvix(float x[SIZE]){

for(int i=0;i<=(N-1); i++){

printf("\n");

printf(" Uvix [%d]=%8.3f",i,x[i]);

}

}

bool file(){

FILE *timeF=fopen("time.txt","w");

FILE *UvxF=fopen("Uvx.txt","w");

FILE *UvixF=fopen("Uvix.txt","w");

if(timeF == NULL){

printf("Ne udalos otkrit fail time.txt");

return false;

}

if(UvxF == NULL){

printf("Ne udalos otkrit fail Uvx.txt");

return false;

}

if(UvixF == NULL){

printf("Ne udalos otkrit fail Uvix.txt");

return false;

}

for(int i=0;i<=(N-1); i++){

fprintf(timeF,"\n t[%d]=%8.3f",i,t[i]);

}

for(int i=0;i<=(N-1); i++){

fprintf(UvxF, "\n Uvx [%d]=%8.3f",i,Uvx[i]);

}

for(int i=0;i<=(N-1); i++){

fprintf(UvixF, "\n Uvix [%d]=%8.3f",i,Uvix[i]);

}

fclose(timeF);

fclose(UvxF);

fclose(UvixF);

return true;

}

void menu(){

bool flag=true;

while (flag){

printf("\n\nMenu \n");

printf("1 - Parametri \n");

printf("2 - W \n");

printf("3 - t \n");

printf("4 - Uvx \n");

printf("5 - Uvix \n");

printf("6 - tablica \n");

printf("7 - Zapis v fail \n");

printf("0 - vihod \n");

int otvet;

scanf("%d",&otvet);

switch(otvet){

case 0:

flag=false;

break;

case 1:

printf("Vi vveli 1\n");

printParam();

break;

case 2:

printf("Vi vveli 2\n");

printf("W = %8.3f\n", W);

break;

case 3:

printf("Vi vveli 3\n");

printMasT(t);

break;

case 4:

printf("Vi vveli 4\n");

printMasUvx(Uvx);

break;

case 5:

printf("Vi vveli 5\n");

printMasUvix(Uvix);

break;

case 6:

printf("Vi vveli 6\n");

printf("\n Vremya Uvx Uvix \n");

for(int i=0;i<=(N-1); i++){

printf("\n t[%d]=%8.3f Uvx[%d]=%8.3f Uvix[%d]=%8.3f",i,t[i],i,Uvx[i],i, Uvix[i]);

}

break;

case 7:

printf("Vi vveli 7\n");

if (file()) {

printf("Faili uspeshno zapisani\n");

}

break;

default:

printf("Vi vveli %d\n", otvet);

printf("Vvedite chislo ot 1 do 7 ili 0");

break;

}

}

}

float mod(float a){

if (a<0){

return -a;

} else {

return a;

}

}

int main(int argc, char** argv) {

int i = 1;

while ((E0<E) && (i < max_iters)) {

N = N*2;

h=(tk-tn)/(N-1);

podschet_T();

podschet_Uvx();

podschet_Uvix();

W = podschet_W();

E=mod(W-V);

V=W;

i++;

}

if (i > max_iters) {

printf ("Trebuemaya tochnost ne dostignuta\n");

} else{

printf ("Trebuemaya tochnost dostignuta\n");

}

menu();

return 0;

}

Контрольный расчет длительности импульса выходного сигнала в wxMaxima:

UvixMax:0;

for t: tn thru tk step dt do (if Uvix(t)> UvixMax then UvixMax:Uvix(t));

t1:UvixMax*0.1; t2:UvixMax*0.9; W:t2-t1;

(%o66) 68.0

Расчет длительности импульса выходного сигнала в Netbeans:

W = 68.000

Расчет длительности импульса выходного сигнала в Netbeans с заданной точностью ε :

W

E

ε 

N(novoe)

m

0

0.03

8

Вывод:

Задачи на написание курсовой работы, поставленные передо мной преподавателем, выполнены. Их реализация происходила в определенной последовательности, что привело меня к завершенной курсовой работе: были сделаны все необходимые расчеты, которые совпали с заранее произведенными контрольными расчетами. Контрольные расчеты выполнялись мной в wxMaxima.

Следующим этапом было оформление уже написанной программы на С++ в функции.

После этого необходимо было рассчитать длительности импульса выходного сигнала (параметр).

Написав эту подпрограмму, нужно было к ней вернуться и рассчитать ту же длительности импульса выходного сигнала, но уже с заданной точностью.

Предпоследний шаг-это работа с файлами: запись массивов времени, входного и выходного напряжений в файлы. После этого в главной программе было создано меню. На этом написание программы было завершено. Далее был оформлен проект, который успешно заработал.

Курсовая работа выполнена.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]