|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Алгоритм построения графика изменения напряженности поля движущейся заряженной частицыАлгоритм построения графика изменения напряженности поля движущейся заряженной частицыКурсовая робота по дисциплине «Алгоритмические языки» на тему: Расчет изменения напряженности поля движущейся заряженной частицы План 1. Постановка задачи. 2. Таблица символических имен. 3. Блок-схемы главной функции main и других функций, которые вызываются из main. 4. Текст программы на языке Си. Результаты в виде таблиц и графиков. Вывод. Список использованной литературы. 1. Постановка задачи Описать массив структур из 3-х элементов. Каждая структура объединяет данные для одного варианта расчета. Необходимо для каждого варианта на отрезке времени от 0 до T с шагом ?t построить график изменения напряженности поля движущейся заряженной частицы. Её величина определяется выражением: где e - заряд частицы; v - скорость; б - угол между направлением скорости и прямой, проведенной от частицы в данную точку поля. б =р/2 Заряд частицы и скорость её движения изменяются во времени: Здесь: e0, k0, с - заданные константы. v0, r - заданные константы. Исходные данные считывать из файла. Результаты расчетов занести в другой файл. Предусмотреть отдельные функции для вычисления k, e, v. Исходные данные: 1. Вариант №1 T=1 c ?t=0.05 c e0=1*10-9 к k0=0.01 с=0,1 v0=1000 м/с r=2 R=0,001 м 2. Вариант №2 T=1 c ?t=0.05 c e0=1*10-9 к k0=0.01 с=0,1 v0=1200 м/с r=1,5 R=0,002 м 3. Вариант №3 T=1 c ?t=0.05 c e0=1*10-9 к k0=0.01 с=0,1 v0=1500 м/с r=0,7 R=0,003 м 2. Таблица символических имен
3. Блок-схемы главной функции main и других функций, которые вызываются из main 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:
Ш 2-й вариант Исходные данные: T=1 c ?t=0.05 c e0=1*10-9 к k0=0.01 с=0,1 v0=1200 м/с r=1,5 R=0,002 м Результаты программы: H(0.000000)=0.000000 H(0.050000)=0.000577 H(0.100000)=0.001110 H(0.150000)=0.001606 H(0.200000)=0.002072 H(0.250000)=0.002509 H(0.300000)=0.002435 H(0.350000)=0.002367 H(0.400000)=0.002303 H(0.450000)=0.002244 H(0.500000)=0.002189 H(0.550000)=0.002189 H(0.600000)=0.002189 H(0.650000)=0.002189 H(0.700000)=0.002189 H(0.750000)=0.002189 H(0.800000)=0.002189 H(0.850000)=0.002189 H(0.900000)=0.002189 H(0.950000)=0.002189 H(1.000000)=0.002189 Результаты в Excel:
Ш 3-й вариант Исходные данные: T=1 c ?t=0.05 c e0=1*10-9 к k0=0.01 с=0,1 v0=1500 м/с r=0,7 R=0,003 м Результаты программы: H(0.000000)=0.000000 H(0.050000)=0.000327 H(0.100000)=0.000640 H(0.150000)=0.000943 H(0.200000)=0.001236 H(0.250000)=0.001520 H(0.300000)=0.001496 H(0.350000)=0.001473 H(0.400000)=0.001450 H(0.450000)=0.001429 H(0.500000)=0.001408 H(0.550000)=0.001408 H(0.600000)=0.001408 H(0.650000)=0.001408 H(0.700000)=0.001408 H(0.750000)=0.001408 H(0.800000)=0.001408 H(0.850000)=0.001408 H(0.900000)=0.001408 H(0.950000)=0.001408 H(1.000000)=0.001408 Результаты в Excel:
Выводы Выполняя курсовую работу, разработан алгоритм программы на языке Си, которая вычисляет и рисует график изменения напряженности поля движущейся заряженной частицы на интервале времени [0,T]. Результаты программы заносятся в файл «RESULT.txt». Работоспособность алгоритма и программы проверена на контрольных примерах. Список использованной литературы 1. «Язык программирования Cи» 2-е изд. М.: «Вильямс» Керниган Б., Ритчи Д. 2. «Полный справочник по C» 4-е изд. М.: «Вильямс» Шилдт Г. 3. «Программирование на языке Cи» 3-е изд. М.: «Вильямс» Кочан С. |
РЕКЛАМА
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |