49752 (Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы)
Описание файла
Документ из архива "Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "49752"
Текст из документа "49752"
Курсовая робота
по дисциплине «Алгоритмические языки»
на тему:
Расчет изменения напряженности поля движущейся заряженной частицы
План
-
Постановка задачи.
-
Таблица символических имен.
-
Блок-схемы главной функции main и других функций, которые вызываются из main.
-
Текст программы на языке Си. Результаты в виде таблиц и графиков.
Вывод.
Список использованной литературы.
1. Постановка задачи
Описать массив структур из 3-х элементов. Каждая структура объединяет данные для одного варианта расчета.
Необходимо для каждого варианта на отрезке времени от 0 до T с шагом ∆t построить график изменения напряженности поля движущейся заряженной частицы. Её величина определяется выражением:
где
e – заряд частицы;
v – скорость;
α – угол между направлением скорости и прямой, проведенной от частицы в данную точку поля.
α =π/2
Заряд частицы и скорость её движения изменяются во времени:
Здесь:
e0, k0, с – заданные константы.
v0, r – заданные константы.
Исходные данные считывать из файла. Результаты расчетов занести в другой файл. Предусмотреть отдельные функции для вычисления k, e, v.
Исходные данные:
-
Вариант №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
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
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
-
Функция main.
-
Функция chtenie_dannih.
-
Функция eee.
-
Функция kkk.
-
Функция vvv.
-
Функция vivod_grafikov.
4. Текст программы на языке Си. Результаты в виде таблиц и графиков
Текст программы на языке Си.
#include
#include
#include
#include
#include
#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]=((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 { 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 { 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 { minH = (pHH[i] 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 { 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 { 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». Работоспособность алгоритма и программы проверена на контрольных примерах. Список использованной литературы «Язык программирования Cи» 2-е изд. М.: «Вильямс» Керниган Б., Ритчи Д. «Полный справочник по C» 4-е изд. М.: «Вильямс» Шилдт Г. «Программирование на языке Cи» 3-е изд. М.: «Вильямс» Кочан С.