Название: Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы
Вид работы: курсовая работа
Рубрика: Информатика и программирование
Размер файла: 2.49 Mb
Скачать файл: referat.me-139942.docx
Краткое описание работы: Характеристика и описание массива структур из 3-х элементов. Блок-схемы главной функции main и текст программы на языке Си. Построение графика изменения напряженности поля заряженной частицы. Таблица символических имен, работоспособность программы.
Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы
Курсовая робота
по дисциплине «Алгоритмические языки»
на тему:
Расчет изменения напряженности поля движущейся заряженной частицы
План
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
e 0 = 1*10-9 к
k 0 = 0.01
с= 0,1
v 0 = 1000 м/с
r= 2
R= 0,001 м
2. Вариант №2
T = 1 c
∆ t = 0.05 c
e 0 = 1*10-9 к
k 0 = 0.01
с= 0,1
v 0 = 1200 м/с
r= 1,5
R= 0,002м
3. Вариант №3
T = 1 c
∆ t = 0.05 c
e 0 = 1*10-9 к
k 0 = 0.01
с= 0,1
v 0 = 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)=%lfn",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
e 0 = 1*10-9 к
k 0 = 0.01
с= 0,1
v 0 = 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
e 0 = 1*10-9 к
k 0 = 0.01
с= 0,1
v 0 = 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
e 0 = 1*10-9 к
k 0 = 0.01
с= 0,1
v 0 = 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-е изд. М.: «Вильямс»
Кочан С.
Похожие работы
-
Программное определение числовых массивов
Одномерные числовые массивы, образование элементами целочисленного массива невозрастающей последовательности. Программное нахождение суммы элементов каждой возможной строки матрицы и формирование массива из найденных сумм, вывод массива-результата.
-
Построение сетевого графика
ОРГАНИЗАЦИОННО-ЭКОНОМИЧЕСКАЯ ЧАСТЬ. 6.1. Организационная часть 6.1.1. Построение сетевого графика Большая сложность и комплексность проведения работ по созданию АСОИиУ, одновременное участие многих исполнителей, необходимость параллельного выполнения работ, зависимость начала многих работ от результатов других, значительно осложняют планирование разработки.
-
Лабораторная работа №12
Цель работы: Изучение правил описания и вызова подпрограмм: процедур и функций. Получение навыков и овладение приемами работы над подпрограммами. Задание№ 17
-
Basic
МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ЮБРАЗОВАНИЯ РФ ТАМБОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ КАФЕДРА ГАПС Курсовая работа по информатике
-
Функциональные сбои персонального компьютера при воздействии электромагнитных импульсов сверхкороткой длительности
Обсуждаются результаты цикла сравнительного экспериментального исследования условий функционирования персонального компьютера в условиях воздействия электромагнитных импульсов ультракороткой длительности.
-
Моделирование движения невесомой заряженной частицы в электрическом поле в среде MathCAD и Matlab
Моделирование движения невесомой заряженной частицы в электрическом поле, созданном системой нескольких фиксированных в пространстве заряженных тел, в случае, когда заряженные тела находятся в одной плоскости и в ней же находится движущаяся частица.
-
Работа над массивами с помощью языка С++
Формирование одномерного массива, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца. Определение столбца, в котором равное количество положительных и отрицательных элементов. Написание программы и ее тестирование.
-
Примеры решения задач по программированию
Написание программы вычисления сопротивления электрической цепи, состоящей из двух параллельно и двух последовательно соединенных сопротивлений. Схема машинного алгоритма по условию задачи. Применение операций при написании программ на языке C/C++.
-
Решение систем нелинейных алгебраических уравнений методом Ньютона
Модифицированный метод Ньютона при заданных начальных условиях, где задаётся погрешность вычисления. Вычисления корня уравнения при помощи программы. Построения графика зависимости приближений двух координат, при котором задаются промежутки и константы.
-
Применение контент-анализа в изучении межэтнической напряженности
Метод контент-анализа представляет собой исследовательскую технику для получения выводов путем анализа содержания различных документов о состояниях и свойствах действительности, систематическую числовую обработку, оценку и интерпретацию формы.