Помощь в написании студенческих работ
Антистрессовый сервис

Алгоритм построения графика изменения напряженности поля движущейся заряженной частицы

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Блок-схемы главной функции 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-е изд. М.: «Вильямс»

Кочан С.

Показать весь текст
Заполнить форму текущей работой