Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы
Характеристика и описание массива структур из 3-х элементов. Блок-схемы главной функции main и текст программы на языке Си. Построение графика изменения напряженности поля заряженной частицы. Таблица символических имен, работоспособность программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 02.02.2010 |
Размер файла | 365,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Курсовая робота
по дисциплине «Алгоритмические языки»
на тему:
Расчет изменения напряженности поля движущейся заряженной частицы
План
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-е изд. М.: «Вильямс»
Кочан С.
Подобные документы
Моделирование движения заряженной частицы, падающей вертикально вниз на одноименно заряженную пластину, с помощью программ Mathcad и Matlab. Построение графика зависимости высоты, на которой находится точка, от времени и скорости движения этой частицы.
контрольная работа [79,2 K], добавлен 31.05.2010Оценка неизвестной функции распределения величины или ее плотности распределения вероятности. Алгоритм основной программы, функции для построения графика исходного массива, гистограммы и графика функции Лапласа. Результат обработки сейсмического сигнала.
курсовая работа [194,4 K], добавлен 16.12.2012Моделирование движения невесомой заряженной частицы в электрическом поле, созданном системой нескольких фиксированных в пространстве заряженных тел, в случае, когда заряженные тела находятся в одной плоскости и в ней же находится движущаяся частица.
курсовая работа [62,7 K], добавлен 31.05.2010Методика разработки, практической апробации программы в среде Turbo Pascal по построению графика прямой линии регрессии. Формирование блок-схемы данной программы, ее листинг. Построение графика с помощью математических формул и графического модуля Graph.
контрольная работа [46,2 K], добавлен 22.07.2011Выбор и обоснование методов составления схемы алгоритма и разработки программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Алгоритм Горнера. Программа на языке Quick BASIC (с распечаткой листинга).
курсовая работа [55,1 K], добавлен 21.11.2012Формулы расчета емкости плоскопараллельного датчика и его чувствительности. Таблица символических имен: макроопределения, абстрактные классы и функции. Текст программы на языке Си. Результаты в виде таблиц и графиков. Анализ работоспособности программы.
курсовая работа [988,5 K], добавлен 03.11.2012Понятие о кинематике. Относительность, траектория и виды движений. Движение тела, брошенного под углом к горизонту. Разработка компьютерной программы для моделирования. Описание интерфейса программы и программного кода. Инструкция пользования интерфейсом.
курсовая работа [1,6 M], добавлен 25.11.2013Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Выбор и обоснование методов расчета. Разработка основной программы. Блок-схемы алгоритмов. Распечатка листинга.
курсовая работа [1,5 M], добавлен 21.11.2013Разработка программы построения графика экспериментальных точек и полинома регрессии второй степени в среде Turbo Pascal. Блок-схемы алгоритмов используемых процедур. Листинг программы. Составление вектора свободных членов и матрицы коэффициентов.
курсовая работа [46,6 K], добавлен 24.11.2013Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Пример вычисления степенного ряда с помощью схемы Горнера. Описание переменных программы, листинг, процедуры и функции.
курсовая работа [67,6 K], добавлен 20.11.2012