Блок - схема алгоритма 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;
}