Контрольный расчет в wxMaxima, тестирование программы

Оглавление

Оглавление. 2

Постановка задачи. 3

Таблица идентификаторов. 4

Общая блок-схема алгоритма: 5

Алгоритм формирования time: 6

Алгоритм формирования Uvh: 6

Алгоритм формирования Uvih: 7

Алгоритм вывода time, Uvh, Uvih на экран: 7

Алгоритм вычисления параметра без точности: 8

Алгоритм вычисления параметра с заданной точностью: 9

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

Контрольный расчет в wxMaxima, тестирование программы. 14

Лист для подписанных расчетов. 17

Вывод. 18

Постановка задачи

Дана линейная электрическая сеть, на выходе которой действует сигнал Uвхода. Цепь преобразует входной сигнал в соответствии с передаточной характеристикой Uвыхода. Необходимо написать программу, формирующую массивы Uвхода и Uвыхода, записать эти массивы во внешние текстовые файлы, вычислить параметр W с погрешностью E= 0,01.

Контрольный расчет в wxMaxima, тестирование программы - student2.ru

a (t-t) при t <=t1

Uвх(t)=

a (t1-tнач) – b(t-t1) при t1 < t <= t2

a (t1-t)-b(t2-t1)-c(t-t2) при t >t2

a=20В/с

b=0,5В/с

c=17В/с

tнач=10с

tкон=50с

t1=15с

t2=45с

Контрольный расчет в wxMaxima, тестирование программы - student2.ru

a Uвх1 + b при Uвх<=Uвх1

Uвых(t)=

a Uвх + b при Uвх1 < Uвх <= Uвх2

a Uвх2 + b при Uвх > Uвх2

a=2.5I/B

b=10B

Uвх1=10B

Uвх2=30B

P - момент времени в который Uвыхода становится больше 50.

Таблица идентификаторов

Обозначение в задачи Идентификатор Переменная Константа Глобальная Локальная Подпрограмма Назначение
a a +     + Uvh11, Uvich1 Начальные данные
b b +     + Uvh11, Uvich1 Начальные данные
c c +     + Uvh11, Uvich1 Начальные данные
tнач tn +     + time1, Uvh11 Начальное время
tкон tk +     + time1, Uvh11 Конечное время
t1 t1 +     + Uvh11 Начальные данные
t2 t2 +     + Uvh11 Начальные данные
Uвх1 Uvh1 +     + Uvich1 Начальные данные
Uвх2 Uvh2 +     + Uvich1 Начальные данные
t time +     + time1, Uvh11, zapis, param_t Начальные данные
Uвх(t) Uvh +     + Uvh11, Uvich1, output, zapis, param_t Входной массив
Uвых(t) Uvich +     + Uvich1, output, zapis, param_t Выходной массив
  i +     + output, Uvich1, Uvh11, time1, zapis Счетчик цикла
  fp +     + zapis Указатель на поток
  NMAX   + +     Размерность массивов
  p +     + param Параметр



Общая блок-схема алгоритма:

 
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru

Алгоритм формирования time:

Контрольный расчет в wxMaxima, тестирование программы - student2.ru

Алгоритм формирования Uvh:

                   
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
   
Uvh[i]=a*(time[i]-tn);
 

Контрольный расчет в wxMaxima, тестирование программы - student2.ru Контрольный расчет в wxMaxima, тестирование программы - student2.ru Контрольный расчет в wxMaxima, тестирование программы - student2.ru

       
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru

Алгоритм формирования Uvih:

                       
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
   
Да  
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
 
   
Uvich[i]=a*Uvh1+b;
 

Контрольный расчет в wxMaxima, тестирование программы - student2.ru Контрольный расчет в wxMaxima, тестирование программы - student2.ru

                 
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
 

Контрольный расчет в wxMaxima, тестирование программы - student2.ru

       
   
Uvich[i]=a*Uvh2+b;
 
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru

Алгоритм вывода time, Uvh, Uvih на экран:

Контрольный расчет в wxMaxima, тестирование программы - student2.ru

Алгоритм вычисления параметра без точности:

       
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 

Контрольный расчет в wxMaxima, тестирование программы - student2.ru

Контрольный расчет в wxMaxima, тестирование программы - student2.ru

 
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru

Контрольный расчет в wxMaxima, тестирование программы - student2.ru Контрольный расчет в wxMaxima, тестирование программы - student2.ru

           
    Контрольный расчет в wxMaxima, тестирование программы - student2.ru
 
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru
   
mas[i]>Z
 

Контрольный расчет в wxMaxima, тестирование программы - student2.ru

 
  Контрольный расчет в wxMaxima, тестирование программы - student2.ru

Алгоритм вычисления параметра с заданной точностью:

Контрольный расчет в wxMaxima, тестирование программы - student2.ru

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

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#define NMAX 3000

char zastavka()

{

FILE *fp;

fp=fopen("zastavka.txt","r");

if(fp==NULL)

{

printf("\nFile ne otkryt\n");

exit(1);

}

char str[80];

while(fgets(str,81,fp)!=NULL)

{

puts(str);

}

fclose(fp);

}

int zapis(float t[],float Uvh[],float Uvih[],int N)

{

int i;

FILE *fp;

fp=fopen("time.txt","w");

if(fp==NULL)

{

printf("\nFile ne otkryt\n");

exit(1);

}

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

{

fprintf(fp,"\n%f",t[i]);

}

fclose(fp);

fp=fopen("Uvh.txt","w");

if(fp==NULL)

{

printf("\nFile ne otkryt\n");

exit(1);

}

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

{

fprintf(fp,"\n%f",Uvh[i]);

}

fclose(fp);

fp=fopen("Uvih.txt","w");

if(fp==NULL)

{

printf("\nFile ne otkryt\n");

exit(1);

}

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

{

fprintf(fp,"\n%f",Uvih[i]);

}

fclose(fp);

}

void time1(int N, float time[], float tn, float tk)

{ float dt=(tk-tn)/(N-1);

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

time[i]=tn+i*dt;

}

void Uvh11(int N, float time[],float Uvh[],float a,float b,float c,float t1,float t2,float tn,float tk)

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

if(time [i]<t1)

Uvh[i]=a*(time[i]-tn);

else if(time[i]>t2)

Uvh[i]=a*(t1-tn)-b*(t2-t1)-c*(time[i]-t2);

else Uvh[i]=a*(t1-tn)-b*(time[i]-t1);

}

}

void Uvich1(float Uvich[],int N, float Uvh[],float a,float b,float Uvh1,float Uvh2)

{

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

if(Uvh[i]<=Uvh1)

Uvich[i]=a*Uvh1+b;

else if(Uvh[i]>Uvh2)

Uvich[i]=a*Uvh2+b;

else Uvich[i]=a*Uvh[i]+b;

}

}

void output(int N, float time[], float Uvh[],float Uvih[]){

printf("%10s%10s%10s","t","Uvh","Uvih");

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

printf("\n%10.2f%10.2f%10.2f", time[i],Uvh[i],Uvih[i]);

}

float param(float *mas,int Z,int N,float tn,float tk)

{

int i;

float dt,p=tn;

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

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

if (mas[i]>Z) {p=p+dt*i;

break;}

}

return p;

}

float param_t(float time[],float Uvh[], float Uvih[], int N)

{

int i;

int Nmax=200;

float a=20, b=0.5, c=17, tn=10, tk=50, t1=15, t2=45, Uvh1=10, Uvh2=30;

float p1=0,p2=0,p3=0,p4=0,d;

time1 (N, time , tn, tk);

Uvh11 (N,time,Uvh,a, b, c, t1, t2,tn, tk);

Uvich1 (Uvih,N,Uvh,2.5, 10, Uvh1, Uvh2);

p1=param(Uvih,50,N,tn,tk);

metka: N=N+1;

time1 (N, time , tn, tk);

Uvh11 (N,time,Uvh,a, b, c, t1, t2,tn, tk);

Uvich1 (Uvih,N,Uvh,2.5, 10, Uvh1, Uvh2);

p2=0;

if(N<Nmax){

p2=param(Uvih,50,N,tn,tk);

d=fabs((p2-p1)/p2);

if(d<=0.01)

printf("Tochnost=%4.3f\nN=%d\nVremya parametra Uvih=%3.3f\n",d,N,p2);

else {

p1=p2;

goto metka;}}

else printf("\nN>Nmax\n");

}

int main(void)

{

float time[NMAX], Uvh [NMAX], Uvich[NMAX];

float a=20, b=0.5, c=17, tn=10, tk=50, t1=15, t2=45, Uvh1=10, Uvh2=30;

int N=20;

char p;

printf("Viberite komandu:\n1 - zastavka\n2 - massivi\n3 - parametr\n4 - vihod\n");

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

scanf("%c",&p);

switch(p)

{

case '1': {

zastavka();

break;

}

case '2': {

time1 (N, time , tn, tk);

Uvh11 (N,time,Uvh,a, b, c, t1, t2,tn, tk);

a=2.5;

b=10;

Uvich1 (Uvich,N,Uvh,a, b, Uvh1, Uvh2);

output(N, time,Uvh,Uvich);

zapis(time,Uvh,Uvich,100);

break;

}

case '3': {

param_t(time,Uvh,Uvich,10);

break;

}

case '4': {

exit(1);

break;

}

}}

return(0);}

Контрольный расчет в wxMaxima, тестирование программы.

(%i1) a:20;
b:0.5;
c:17;
tn:10;
tk:50;
t1:15;
t2:45;
n:20;
Uvh1:10;
Uvh2:30;
a1:2.5;
b1:10;
Контрольный расчет в wxMaxima, тестирование программы - student2.ru

(%i13) s:(tk-tn)/(n-1),numer;
Контрольный расчет в wxMaxima, тестирование программы - student2.ru

(%i14) Uvh(t):=if t<=t1 then a*(t-tn) else if t>t2 then a*(t1-tn)-b*(t2-t1)-c*(t-t2) else a*(t1-tn)-b*(t-t1);
Контрольный расчет в wxMaxima, тестирование программы - student2.ru

(%i15) for t:tn thru tk+s/10 step s do display(Uvh(t)),numer;
Контрольный расчет в wxMaxima, тестирование программы - student2.ru

(%i16) wxplot2d([Uvh(t)], [t,tn,tk])$
Контрольный расчет в wxMaxima, тестирование программы - student2.ru

(%i17) Uvih(t):=if Uvh(t)<=Uvh1 then a1*Uvh1+b1 else if Uvh2<="" span="">
Контрольный расчет в wxMaxima, тестирование программы - student2.ru

(%i18) for t:tn thru tk+s/10 step s do display(Uvih(t)),numer;
Контрольный расчет в wxMaxima, тестирование программы - student2.ru

(%i19) wxplot2d([Uvih(t)], [t,tn,tk])$

Контрольный расчет в wxMaxima, тестирование программы - student2.ru

Наши рекомендации