Текст программы:
#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.
Следующим этапом было оформление уже написанной программы на С++ в функции.
После этого необходимо было рассчитать длительности импульса выходного сигнала (параметр).
Написав эту подпрограмму, нужно было к ней вернуться и рассчитать ту же длительности импульса выходного сигнала, но уже с заданной точностью.
Предпоследний шаг-это работа с файлами: запись массивов времени, входного и выходного напряжений в файлы. После этого в главной программе было создано меню. На этом написание программы было завершено. Далее был оформлен проект, который успешно заработал.
Курсовая работа выполнена.