1. Функция main.
2. Функция chtenie_dannih.
3. Функция eee.
4. Функция kkk.
5. Функция vvv.
6. Функция vivod_grafikov.
4. Текст программы на языке Си. Результаты в виде таблиц и графиков
Текст программы на языке Си.
#include <stdio.h>
#include <math.h>
#include <alloc.h>
#include <conio.h>
#include <graphics.h>
#define N 3
struct variant
{
double T;
double dt;
double e0;
double k0;
double c;
double v0;
double r;
double R;
} mas[N];
double*ptt[N];
double*pHH[N];
int N_[N];
void chtenie_dannih(struct variant a[]);
double eee(double k0,double c,double e0,double t,double T);
double kkk(double k0,double c,double t,double T);
double vvv(double v0,double r,double t,double T);
void vivod_grafikov(int a,double*ptt,double*pHH,int N_);
//---------------------------------------------------------------------------
void main()
FILE *res;
int i,l,j;
double e,v,H,t;
double alfa=M_PI/2;
res=fopen("result.txt","w");
clrscr();
chtenie_dannih(mas);//s4itivaem dannie
puts("Vvedite, pogalyista, vawe ljubimoe chislo:");
scanf("%f",&H);
//tabyliryem fynkciju
for(i=0;i<N;i++)
N_[i]=((int)(mas[i].T/mas[i].dt))+2;
ptt[i]=(double*)malloc(N_[i]*sizeof(double));
pHH[i]=(double*)malloc(N_[i]*sizeof(double));
for(t=0,l=0;t<=mas[i].T+1e-5;t+=mas[i].dt,l++)
e=eee(mas[i].k0,mas[i].c,mas[i].e0,t,mas[i].T);
v=vvv(mas[i].v0,mas[i].r,t,mas[i].T);
H=e*v*sin(alfa)/pow(mas[i].R,2.0);
ptt[i][l]=t;
pHH[i][l]=H;
fprintf(res,"H(%lf)=%lf\n",t,H);
}
N_[i]=l;
fprintf(res,"\n");
fclose(res);
fflush(stdin);
//vivodim grafiki
vivod_grafikov(i,ptt[i],pHH[i],N_[i]);
getchar();
void chtenie_dannih(struct variant a[])
int i;
FILE*f = fopen("ish.txt","r");
fscanf(f,"%lf",&a[i].T);
fscanf(f,"%lf",&a[i].dt);
fscanf(f,"%lf",&a[i].e0);
fscanf(f,"%lf",&a[i].k0);
fscanf(f,"%lf",&a[i].c);
fscanf(f,"%lf",&a[i].v0);
fscanf(f,"%lf",&a[i].r);
fscanf(f,"%lf",&a[i].R);
fclose(f);
double eee(double k0,double c,double e0,double t,double T)
double k=kkk(k0,c,t,T);
double res_e;
if(t<=T/4)
res_e=e0*(1-exp(-k*t));
else
res_e=e0*(1-exp(-k*T/4));
return res_e;
double kkk(double k0,double c,double t,double T)
double res_k;
if(t<=T/8)
res_k=k0*(1+exp(-c*t));
res_k=k0*(1+exp(-c*T/8));
return res_k;
double vvv(double v0,double r,double t,double T)
double res_v;
if(t<=T/2)
res_v=v0*(1+exp(-r*t));
res_v=v0*(1+exp(-r*T/2));
return res_v;
void vivod_grafikov(int a,double*ptt,double*pHH,int N_)
int gdriver = DETECT, gmode, errorcode;
int xmax,ymax;//maksimalnie koordinatu x - shir, y - visota
int xmin,ymin;//otstupi ot kraev
int x_tek,y_tek;//tekushie koordinati
int x_pred,y_pred;//predidushie koordinati
char st[20];
double minH,maxH;//krajnie znachenija H
initgraph(&gdriver, &gmode, "f:\\turbocpp\\bgi");
//ystanavlivaem otstypi ot kraev
xmin = 85;
ymin = 15;
//ystanavlivaem maksimalnie koordinati x i y
xmax = getmaxx()-20;
ymax = getmaxy()-20;
//nahodim maksimalnoe i minimalnoe H
maxH = minH = pHH[0];
for(i=0;i<N_;i++)
minH = (pHH[i]<minH)?pHH[i]:minH;
maxH = (pHH[i]>maxH)?pHH[i]:maxH;
//zalivaem fon
setfillstyle(SOLID_FILL,7);
bar(0,0,getmaxx(),getmaxy());
//vivodim nomer varianta
setcolor(2);
sprintf(st,"Variant No %d",a+1);
outtextxy(0,4,st);
//4ertim osi
setcolor(0);
line(xmin,ymin,xmin,ymax);//os' oy
line(xmin,ymax,xmax,ymax);//os' ox
//risyem strelo4ki
line(xmin,ymin,xmin+3,ymin+5); // Y \
line(xmin,ymin,xmin-3,ymin+5); // Y /
line(xmax,ymax,xmax-5,ymax-3); // X \
line(xmax,ymax,xmax-5,ymax+3); // X /
//podpisivaem osi
setcolor(6);
outtextxy(xmin+6,ymin,"H");
outtextxy(xmax,ymax-10,"t");
//4ertim i podpisivaem delenija po osi oy
settextstyle(SMALL_FONT,HORIZ_DIR,4);
for(y_tek=ymax-20;y_tek>ymin+10;y_tek-= 20)
line(xmin-2,y_tek,xmin+2,y_tek);
sprintf(st,"%0.5lf",maxH-(y_tek-ymin)*(maxH-minH)/(ymax-ymin));
outtextxy(xmin-70,y_tek-6,st);
//4ertim i podpisivaem delenija po osi ox
x_tek=xmin+((ptt[i]-ptt[0])*(xmax-xmin)/(ptt[N_-1]-ptt[0]));
line(x_tek,ymax-2,x_tek,ymax+2);
if(i%3==0)
sprintf(st,"%0.2lf",ptt[0]+(x_tek-xmin)*(ptt[N_-1]-ptt[0])/(xmax-xmin));
outtextxy(x_tek-3,ymax+4,st);
//risyem grafik
setcolor(1);
x_pred=xmin;
y_pred=ymax;
y_tek=(int)((pHH[i]-minH)*(ymax-ymin)/(maxH-minH));
y_tek=ymax-y_tek;
line(x_pred,y_pred,x_tek,y_tek);
x_pred=x_tek;
y_pred=y_tek;
Результаты в виде таблиц и графиков.
Ш 1-й вариант
Исходные данные:
T=1 c
?t=0.05 c
e0=1*10-9 к
k0=0.01
с=0,1
v0=1000 м/с
r=2
R=0,001 м
Результаты программы:
H(0.000000)=0.000000
H(0.050000)=0.001899
H(0.100000)=0.003616
H(0.150000)=0.005182
H(0.200000)=0.006627
H(0.250000)=0.007963
H(0.300000)=0.007677
H(0.350000)=0.007418
H(0.400000)=0.007184
H(0.450000)=0.006972
H(0.500000)=0.006780
H(0.550000)=0.006780
H(0.600000)=0.006780
H(0.650000)=0.006780
H(0.700000)=0.006780
H(0.750000)=0.006780
H(0.800000)=0.006780
H(0.850000)=0.006780
H(0.900000)=0.006780
H(0.950000)=0.006780
H(1.000000)=0.006780
Результаты в Excel:
t
k
e
v
H
0
0,02
2000
0,05
0,019950125
0,0000000000010
1904,837
0,001899
0,1
0,019900498
0,0000000000020
1818,731
0,003616
0,15
0,019875778
0,0000000000030
1740,818
0,005182
0,2
0,0000000000040
1670,32
0,006627
0,25
0,0000000000050
1606,531
0,007963
0,3
1548,812
0,007677
0,35
1496,585
0,007418
0,4
1449,329
0,007184
0,45
1406,57
0,006972
0,5
1367,879
0,00678
0,55
0,6
0,65
0,7
0,75
0,8
0,85
0,9
0,95
1
Страницы: 1, 2, 3