Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы
Блок-схемы главной функции main и других функций, которые вызываются из main. Блок-схемы главной функции main и других функций, которые вызываются из main. Расчет изменения напряженности поля движущейся заряженной частицы. Скорость движения частицы в текущее время t. Временная переменная. Текст программы на языке Си. Результаты в виде таблиц и графиков. Текст программы на языке Си. Результаты… Читать ещё >
Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы (реферат, курсовая, диплом, контрольная)
Курсовая робота по дисциплине «Алгоритмические языки»
на тему:
Расчет изменения напряженности поля движущейся заряженной частицы
План
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
#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)=%lfn", 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.0)=0.0
H (0.50 000)=0.1 899
H (0.100 000)=0.3 616
H (0.150 000)=0.5 182
H (0.200 000)=0.6 627
H (0.250 000)=0.7 963
H (0.300 000)=0.7 677
H (0.350 000)=0.7 418
H (0.400 000)=0.7 184
H (0.450 000)=0.6 972
H (0.500 000)=0.6 780
H (0.550 000)=0.6 780
H (0.600 000)=0.6 780
H (0.650 000)=0.6 780
H (0.700 000)=0.6 780
H (0.750 000)=0.6 780
H (0.800 000)=0.6 780
H (0.850 000)=0.6 780
H (0.900 000)=0.6 780
H (0.950 000)=0.6 780
H (1.0)=0.6 780
Результаты в Excel:
t | k | e | v | H | |
0,02 | |||||
0,05 | 0,19 950 125 | 0,10 | 1904,837 | 0,1 899 | |
0,1 | 0,19 900 498 | 0,20 | 1818,731 | 0,3 616 | |
0,15 | 0,19 875 778 | 0,30 | 1740,818 | 0,5 182 | |
0,2 | 0,19 875 778 | 0,40 | 1670,32 | 0,6 627 | |
0,25 | 0,19 875 778 | 0,50 | 1606,531 | 0,7 963 | |
0,3 | 0,19 875 778 | 0,50 | 1548,812 | 0,7 677 | |
0,35 | 0,19 875 778 | 0,50 | 1496,585 | 0,7 418 | |
0,4 | 0,19 875 778 | 0,50 | 1449,329 | 0,7 184 | |
0,45 | 0,19 875 778 | 0,50 | 1406,57 | 0,6 972 | |
0,5 | 0,19 875 778 | 0,50 | 1367,879 | 0,678 | |
0,55 | 0,19 875 778 | 0,50 | 1367,879 | 0,678 | |
0,6 | 0,19 875 778 | 0,50 | 1367,879 | 0,678 | |
0,65 | 0,19 875 778 | 0,50 | 1367,879 | 0,678 | |
0,7 | 0,19 875 778 | 0,50 | 1367,879 | 0,678 | |
0,75 | 0,19 875 778 | 0,50 | 1367,879 | 0,678 | |
0,8 | 0,19 875 778 | 0,50 | 1367,879 | 0,678 | |
0,85 | 0,19 875 778 | 0,50 | 1367,879 | 0,678 | |
0,9 | 0,19 875 778 | 0,50 | 1367,879 | 0,678 | |
0,95 | 0,19 875 778 | 0,50 | 1367,879 | 0,678 | |
0,19 875 778 | 0,50 | 1367,879 | 0,678 | ||
Ш 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.0)=0.0
H (0.50 000)=0.577
H (0.100 000)=0.1 110
H (0.150 000)=0.1 606
H (0.200 000)=0.2 072
H (0.250 000)=0.2 509
H (0.300 000)=0.2 435
H (0.350 000)=0.2 367
H (0.400 000)=0.2 303
H (0.450 000)=0.2 244
H (0.500 000)=0.2 189
H (0.550 000)=0.2 189
H (0.600 000)=0.2 189
H (0.650 000)=0.2 189
H (0.700 000)=0.2 189
H (0.750 000)=0.2 189
H (0.800 000)=0.2 189
H (0.850 000)=0.2 189
H (0.900 000)=0.2 189
H (0.950 000)=0.2 189
H (1.0)=0.2 189
Результаты в Excel:
T | k | e | v | H | |
0,02 | |||||
0,05 | 0,19 950 125 | 0,100 | 2313,292 | 0,577 | |
0,1 | 0,19 900 498 | 0,199 | 2232,85 | 0,111 | |
0,15 | 0,19 875 778 | 0,298 | 2158,219 | 0,1 606 | |
0,2 | 0,19 875 778 | 0,397 | 2088,982 | 0,2 072 | |
0,25 | 0,19 875 778 | 0,496 | 2024,747 | 0,2 509 | |
0,3 | 0,19 875 778 | 0,496 | 1965,154 | 0,2 435 | |
0,35 | 0,19 875 778 | 0,496 | 1909,866 | 0,2 367 | |
0,4 | 0,19 875 778 | 0,496 | 1858,574 | 0,2 303 | |
0,45 | 0,19 875 778 | 0,496 | 1810,988 | 0,2 244 | |
0,5 | 0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | |
0,55 | 0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | |
0,6 | 0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | |
0,65 | 0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | |
0,7 | 0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | |
0,75 | 0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | |
0,8 | 0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | |
0,85 | 0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | |
0,9 | 0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | |
0,95 | 0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | |
0,19 875 778 | 0,496 | 1766,84 | 0,2 189 | ||
Ш 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.0)=0.0
H (0.50 000)=0.327
H (0.100 000)=0.640
H (0.150 000)=0.943
H (0.200 000)=0.1 236
H (0.250 000)=0.1 520
H (0.300 000)=0.1 496
H (0.350 000)=0.1 473
H (0.400 000)=0.1 450
H (0.450 000)=0.1 429
H (0.500 000)=0.1 408
H (0.550 000)=0.1 408
H (0.600 000)=0.1 408
H (0.650 000)=0.1 408
H (0.700 000)=0.1 408
H (0.750 000)=0.1 408
H (0.800 000)=0.1 408
H (0.850 000)=0.1 408
H (0.900 000)=0.1 408
H (0.950 000)=0.1 408
H (1.0)=0.1 408
Результаты в Excel:
t | k | e | v | H | |
0,02 | |||||
0,05 | 0,19 950 125 | 0,997 | 2948,408 | 0,327 | |
0,1 | 0,19 900 498 | 0,1 988 | 2898,591 | 0,64 | |
0,15 | 0,19 875 778 | 0,2 977 | 2850,487 | 0,943 | |
0,2 | 0,19 875 778 | 0,3 967 | 2804,037 | 0,1 236 | |
0,25 | 0,19 875 778 | 0,4 957 | 2759,186 | 0,152 | |
0,3 | 0,19 875 778 | 0,4 957 | 2715,876 | 0,1 496 | |
0,35 | 0,19 875 778 | 0,4 957 | 2674,057 | 0,1 473 | |
0,4 | 0,19 875 778 | 0,4 957 | 2633,676 | 0,145 | |
0,45 | 0,19 875 778 | 0,4 957 | 2594,683 | 0,1 429 | |
0,5 | 0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | |
0,55 | 0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | |
0,6 | 0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | |
0,65 | 0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | |
0,7 | 0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | |
0,75 | 0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | |
0,8 | 0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | |
0,85 | 0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | |
0,9 | 0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | |
0,95 | 0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | |
0,19 875 778 | 0,4 957 | 2557,032 | 0,1 408 | ||
Выводы
Выполняя курсовую работу, разработан алгоритм программы на языке Си, которая вычисляет и рисует график изменения напряженности поля движущейся заряженной частицы на интервале времени [0,T].
Результаты программы заносятся в файл «RESULT.txt».
Работоспособность алгоритма и программы проверена на контрольных примерах.
1. «Язык программирования Cи» 2-е изд. М.: «Вильямс»
Керниган Б., Ритчи Д.
2. «Полный справочник по C» 4-е изд. М.: «Вильямс»
Шилдт Г.
3. «Программирование на языке Cи» 3-е изд. М.: «Вильямс»
Кочан С.