Рефераты. Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы

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

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

{

vivod_grafikov(i,ptt[i],pHH[i],N_[i]);

getchar();

}

}

//---------------------------------------------------------------------------

void chtenie_dannih(struct variant a[])

{

int i;

FILE*f = fopen("ish.txt","r");

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

{

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));

else

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));

else

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

int i;

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

setcolor(0);

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

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

{

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;

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

{

x_tek=xmin+((ptt[i]-ptt[0])*(xmax-xmin)/(ptt[N_-1]-ptt[0]));

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

0

2000

0

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,019875778

0,0000000000040

1670,32

0,006627

0,25

0,019875778

0,0000000000050

1606,531

0,007963

0,3

0,019875778

0,0000000000050

1548,812

0,007677

0,35

0,019875778

0,0000000000050

1496,585

0,007418

0,4

0,019875778

0,0000000000050

1449,329

0,007184

0,45

0,019875778

0,0000000000050

1406,57

0,006972

0,5

0,019875778

0,0000000000050

1367,879

0,00678

0,55

0,019875778

0,0000000000050

1367,879

0,00678

0,6

0,019875778

0,0000000000050

1367,879

0,00678

0,65

0,019875778

0,0000000000050

1367,879

0,00678

0,7

0,019875778

0,0000000000050

1367,879

0,00678

0,75

0,019875778

0,0000000000050

1367,879

0,00678

0,8

0,019875778

0,0000000000050

1367,879

0,00678

0,85

0,019875778

0,0000000000050

1367,879

0,00678

0,9

0,019875778

0,0000000000050

1367,879

0,00678

0,95

0,019875778

0,0000000000050

1367,879

0,00678

1

0,019875778

0,0000000000050

1367,879

0,00678

Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.