Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мой курсач.rtf
Скачиваний:
8
Добавлен:
15.03.2015
Размер:
5.28 Mб
Скачать

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

}