Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 1
1

С турбоПаская на С++

27.03.2017, 10:32. Показов 442. Ответов 0
Метки нет (Все метки)

Всем доброго времени суток.
Прошу о помощи=) Не могу сообразить как перевести программу на с++ вроде и не так сложно...,но мозгов не хватает..если есть у кого возможность помочь, буду благодарен)
Программа нужна для построения модели прохождения нейтронов через вещество

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
uses Gisto,Graph;
 
const
MashX = 2; { Масштабный коэффициент по X для вывода на экран } MashY = 1.2; { Масштабный коэффициент по Y для вывода на экран } NGist = 60;       { Число интервалов гистограммы }
Mu = 0.0981;    { Mu - коэффициент поглощения нейтрона } Pa = 0.0141;  { Pa - вероятность поглощения нейтрона } D = 80.;  { D - толщина пластины }
 
var
Gd, Gm, I, N : Integer;
Xscr, Yscr, Xscr0, Yscr0 : Integer; OldPattern : FillPatternType;
x, y, Lpr, Fi : real;
label P1, P2, P3, P4, P5, OutGist; begin
writeln('Введите число нейтронов N = '); readln(N);
{ Переходим в графический режим }
Gd := Detect; InitGraph(Gd, Gm, 'с:\tp\bgi'); if GraphResult <> grOk then begin
writeln (' Graph error or BGI driver not found. '); Halt;
end;
 
{ Рисуем пластину в центре экрана } GetFillPattern(OldPattern);
SetFillPattern(OldPattern,7); { стиль и цвет для вывода пластины } Bar(320-round(D*MashX/2), 0, 320+round(D*MashX/2), 479);
 
Randomize;  { подкрутка Random }
i := 0; { очистка счетчика числа нейтронов }
 
InitGist(NGist,-Pi/2,Pi/2); { инициализация гистограммы в диапазоне
углов от -Pi/2 до Pi/2 }
P1:
{Инициализируем начальные координаты и угол движения нейтрона } i := i + 1;
if (i > N ) then goto OutGist;  { проверка на исчерпание числа нейтронов } x := 0; y := 0; Fi := 0;
Xscr0 := 320-round(D*MashX/2); Yscr0 := 240;
MoveTo(Xscr0,Yscr0);    { установка точки на экране в позицию x=0, y=0 } SetColor (i);    { установка цвета вывода траектории }
 
 
P2:
{ Определяем длину свободного пробега и новые координаты нейтрона} Lpr := - ln(Random)/Mu;  { длина пробега }
x := x + Lpr*cos(Fi);   { новая координата x }
y := y + Lpr*sin(Fi);   { новая координата y }
 
{ Определяем экранные координаты и рисуем траекторию } Xscr := Xscr0 + round(x*MashX);
Yscr := Yscr0 + round(y*MashY); LineTo(Xscr,Yscr);
 
P3:
{ Проверка выхода за границы пластины }
if (x < 0 ) then GoTo P1;   { выход за левую границу пластины,
переходим к следующему нейтрону }
if (x > D) then begin   { выход за правую границу }
if (Fi > Pi) then Fi := Fi - 2*Pi;  { коррекция диапазона по углам } InGist(Fi);   { заносим точку в массив гистограмм } GoTo P1;
end;
 
P4:
{ Проверка на поглощение или рассеяние нейтрона }
if (Random <= Pa) then GoTo P1; { поглощение нейтрона }
 
P5:
{ Рассеяние нейтрона, розыгрыш угла рассеяния } Fi := 2*Pi*Random;
GoTo P2;
 
OutGist:
write(' Вывод гистограммы <Enter> ? '); readln; { ожидание <Enter> }
ClearDevice;    { очистка экрана перед выводом гистограммы } Gistogram(13); { вывод гистограммы }
readln; { ожидание <Enter> } CloseGraph;
end.
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.