|
Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы
Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы
Курсовая робота по дисциплине «Алгоритмические языки»
на тему: Расчет изменения напряженности поля движущейся заряженной частицы План 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. Таблица символических имен |
Глобальные переменные | | N | Количество вариантов, результаты которых необходимо вычислить. | | T | Врем я окончания эксперимента. Исчисляется в секундах. | | dt | Шаг, с которым изменяется время. | | e0 | Заданные константы. | | k0 | | | c | | | v0 | | | r | | | R | | | mas[N] | Массив структур, в котором хранятся заданные константы. | | *ptt | Массив указателей на значения времени t. | | *pHH | Массив указателей на значения функции H. | | N_[N] | Массив, в котором мы храним длины массивов. | | |
|
Функция main | | i | Временные переменные. Счетчики. | | l | | | j | | | e | Заряд частицы. С её помощью вычисляется H. | | v | Скорость частицы. С её помощью вычисляется H. | | H | Напряженность поля движущейся частицы. | | alfa | Угол между направлением скорости и прямой, проведенной от частицы в данную точку поля.б=?/2 | | t | Время. | | res | Файл, в который заносятся результаты эксперимента. | | |
|
Функция chtenie_dannih | | a[] | Массив структур, который нужно прочитать из файла. | | i | Временная переменная. Счетчик. | | f | Файл с исходными данными. | | |
|
Функция eee | | k0 | Заданные константы. | | c | | | e0 | | | t | Время. | | T | Время окончания эксперимента. | | k | Параметр, от которого зависит заряд частицы и который изменяется во времени. | | res_e | Заряд частицы в текущее время t. Временная переменная. | | |
|
Функция kkk | | k0 | Заданные константы. | | c | | | t | Время. | | T | Время окончания эксперимента. | | res_k | Значение параметра k текущее время t. Временная переменная. | | |
|
Функция vvv | | v0 | Заданные константы. | | r | | | t | Время. | | T | Время окончания эксперимента. | | res_v | Скорость движения частицы в текущее время t. Временная переменная. | | |
|
Функция vivod_grafikov | | xmax | Максимальная ширина графика. | | ymax | Максимальная высота графика. | | xmin | Отступы от краёв экрана. | | ymin | | | x_tek | Текущие координаты. | | y_tek | | | x_pred | Предыдущие координаты. | | y_pred | | | i | Временная переменная. Счетчик. | | st[20] | Строка символов. Временная переменная. | | minH | Минимальное значение функции Н. | | maxH | Максимальное значение функции Н. | | |
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: |
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 | | |
Ш 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: |
T | k | e | v | H | | 0 | 0,02 | 0 | 2400 | 0 | | 0,05 | 0,019950125 | 0,00000000000100 | 2313,292 | 0,000577 | | 0,1 | 0,019900498 | 0,00000000000199 | 2232,85 | 0,00111 | | 0,15 | 0,019875778 | 0,00000000000298 | 2158,219 | 0,001606 | | 0,2 | 0,019875778 | 0,00000000000397 | 2088,982 | 0,002072 | | 0,25 | 0,019875778 | 0,00000000000496 | 2024,747 | 0,002509 | | 0,3 | 0,019875778 | 0,00000000000496 | 1965,154 | 0,002435 | | 0,35 | 0,019875778 | 0,00000000000496 | 1909,866 | 0,002367 | | 0,4 | 0,019875778 | 0,00000000000496 | 1858,574 | 0,002303 | | 0,45 | 0,019875778 | 0,00000000000496 | 1810,988 | 0,002244 | | 0,5 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | 0,55 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | 0,6 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | 0,65 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | 0,7 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | 0,75 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | 0,8 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | 0,85 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | 0,9 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | 0,95 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | 1 | 0,019875778 | 0,00000000000496 | 1766,84 | 0,002189 | | |
Ш 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: |
t | k | e | v | H | | 0 | 0,02 | 0 | 3000 | 0 | | 0,05 | 0,019950125 | 0,000000000000997 | 2948,408 | 0,000327 | | 0,1 | 0,019900498 | 0,000000000001988 | 2898,591 | 0,00064 | | 0,15 | 0,019875778 | 0,000000000002977 | 2850,487 | 0,000943 | | 0,2 | 0,019875778 | 0,000000000003967 | 2804,037 | 0,001236 | | 0,25 | 0,019875778 | 0,000000000004957 | 2759,186 | 0,00152 | | 0,3 | 0,019875778 | 0,000000000004957 | 2715,876 | 0,001496 | | 0,35 | 0,019875778 | 0,000000000004957 | 2674,057 | 0,001473 | | 0,4 | 0,019875778 | 0,000000000004957 | 2633,676 | 0,00145 | | 0,45 | 0,019875778 | 0,000000000004957 | 2594,683 | 0,001429 | | 0,5 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | 0,55 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | 0,6 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | 0,65 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | 0,7 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | 0,75 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | 0,8 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | 0,85 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | 0,9 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | 0,95 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | 1 | 0,019875778 | 0,000000000004957 | 2557,032 | 0,001408 | | |
Выводы Выполняя курсовую работу, разработан алгоритм программы на языке Си, которая вычисляет и рисует график изменения напряженности поля движущейся заряженной частицы на интервале времени [0,T]. Результаты программы заносятся в файл «RESULT.txt». Работоспособность алгоритма и программы проверена на контрольных примерах. Список использованной литературы 1. «Язык программирования Cи» 2-е изд. М.: «Вильямс» Керниган Б., Ритчи Д. 2. «Полный справочник по C» 4-е изд. М.: «Вильямс» Шилдт Г. 3. «Программирование на языке Cи» 3-е изд. М.: «Вильямс» Кочан С.
|
|