Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.06.2016
Сообщений: 18
1

Перевести код программы с Turbo Pascal в PascalABC

14.06.2016, 13:43. Просмотров 516. Ответов 3
Метки нет (Все метки)


Помогите. Срочно необходимо. Буду очень признателен
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
Uses Graph,Crt;
 
const MaxShar=10;
type shar = object
  { переменные }
  x,y:integer; { текущие координаты шара }
  r:word;      { радиус }
  color:byte;  { цвет шара }
  dx,dy:shortint; { скорость. задается значениями
                    перемещения на каждом шаге (в точках) }
  hits:set of byte; { множество шаров с которыми данный шар уже
  столкнулся и с которыми не надо обсчитывать столкновение еще раз }
  { методы }
  constructor initShar(x0,y0:integer; r0:word; color0:byte; dx0,dy0:shortint);
  procedure Move; { двигаем }
  procedure Show; { показываем }
  procedure Hide; { прячем }
  procedure CheckBorder; { проверяем на выход за границы экрана }
  procedure CheckHit(k:byte); { проверяем на столкновение с другим шаром }
  procedure revertXDirection; { поменять Х/Y-составляющую скорости }
  procedure revertYDirection; { на противоположную }
  procedure TurnAfterHit(k:byte); { вычислить новые значения 
               скорости двух шаров после удара. Первый шар - шар 
               данного объекта, второй - с индексом k в массиве }
  function Value:real; { вычислить объем шара. Нужно для вычисления
       скорости. Вообще-то там масса нужна, но учитывая, что плотность
       все-равно сократиться при делении, используем объем }
  {procedure PrintState;} { отладочные печати }
  end;
var bgColor,i:byte;
    x,y,dx,dy,ErrCode:integer;
    r:word;
    shars: array[1..MaxShar] of shar; { массив шаров }
    sh:shar;
    f:text; { файл для отладочных печатей }
Procedure shar.Move;
  begin
  x:=x+dx;
  y:=y+dy;
  end;
Procedure shar.Show;
  begin
  setColor(color);
  circle(x, y, r);
  {PutPixel(x,y,color);} { уберите комментарий чтобы увидеть траекторию }
  end;
Procedure shar.Hide;
  begin
  setColor(bgColor);
  circle(x, y, r);
  end;
procedure shar.revertXDirection;
  begin
  dx:=-dx;
  x:=x+dx;
  end;
procedure shar.revertYDirection;
  begin
  dy:=-dy;
  y:=y+dy;
  end;
Constructor shar.initShar(x0, y0 :integer; r0 :word; color0 :byte; dx0, dy0 :shortint);
  begin
  x:=x0;
  y:=y0;
  r:=r0;
  color:=color0;
  dx:=dx0;
  dy:=dy0;
  hits:=[];
  end;
procedure shar.CheckBorder;
  begin
  if (r+x>=GetMaxX-1) or (x-r<=1) then revertXDirection;
  if (y+r>=GetMaxY-1) or (y-r<=1) then revertYDirection
  end;
{procedure shar.PrintState;
  begin
  writeln(f,'x=',x:3,' y=',y:3,' r=',r:3,' dx=',dx:3,' dy=',dy:3);
  end;}
procedure shar.TurnAfterHit(k:byte);
{ формулы для движения шаров взяты здесь:
  [url]http://ferro.phys.msu.ru/prak/PDF/01-mechanics/07.pdf[/url] }
var m1, m2 :real;
    vx10,vy10,vx20,vy20:integer;
  begin
  m1 := Value;            { массы }
  m2 := shars[k].Value;
  vx10 := dx;             { начальные значения скоростей }
  vy10 := dy;
  vx20 := shars[k].dx;
  vy20 := shars[k].dy;
  { скорость первого шара после удара }
  dx := round((2*m2*vx20 + (m1-m2)*vx10)/(m1+m2));
  dy := round((2*m2*vy20 + (m1-m2)*vy10)/(m1+m2));
  { скорость второго шара после удара }
  shars[k].dx := round((2*m1*vx10 + (m2-m1)*vx20)/(m1+m2));
  shars[k].dy := round((2*m1*vy10 + (m2-m1)*vy20)/(m1+m2));
  end;
function shar.Value:real;
  begin { возвращает объем шара }
  Value:=4*Pi*r*r*r/3;
  end;
procedure shar.CheckHit(k:byte);
var i1:byte;
    dist:longint;
  begin
  for i1:=1 to MaxShar do if ((i1<>k) and not(k in hits)) then
    begin
    shars[i1].hits:=shars[i1].hits+[k];
    dist:=round(sqrt(sqr(1.0*x-shars[i1].x)+sqr(1.0*y-shars[i1].y)));
    if (dist<r+shars[i1].r) then
      begin
      TurnAfterHit(i1);
 
      CheckBorder;
      Move;
      shars[i1].CheckBorder;
      shars[i1].Move;
 
      { скорость задается значениеми dx и dy - шагами движения. Таким
      образом она дискретна. Момент столкновения определяется по
      расстоянию между шарами. Но запросто может случиться, что шары
      на каком-то шаге пересекутся и в этом случае необходимо их
      развести в разные стороны перед тем как высчитывать расстояние на
      следуещем шаге, иначе они могут пребывать в состоянии постоянного
      столкновения }
      dist:=round(sqrt(sqr(1.0*x-shars[i1].x)+sqr(1.0*y-shars[i1].y)));
      while (dist<r+shars[i1].r) do
        begin
        CheckBorder;
        Move;
        shars[i1].CheckBorder;
        shars[i1].Move;
        dist:=round(sqrt(sqr(1.0*x-shars[i1].x)+sqr(1.0*y-shars[i1].y)));
        end;
      end;
    end;
  end;
 
function initializeGraph:integer;
var grDriver : Integer;
      grMode : Integer;
  begin
  grDriver:=Detect;
  InitGraph(grDriver, grMode, '');
  initializeGraph:=GraphResult;
  end;
 
begin
ErrCode:=initializeGraph;
if ErrCode <> grOk then
   WriteLn('Ошибка инициализации графики:', GraphErrorMsg(ErrCode))
else
  begin
  assign(f,'log.txt');
  rewrite(f);
  bgColor:=0;
  rectangle(1,1,GetMaxX-1,GetMaxY-1);
 
  {shars[1].initShar(100,100,50,3,6,-3);
  shars[2].initShar(100,200,40,4,5,3);
  shars[3].initShar(200,200,20,5,-7,-4);
  shars[4].initShar(400,300,25,2,-9,-1);
  shars[5].initShar(500,200,35,14,-5,-8);
  if (MaxShar>5) then}
 
  { инициализация шаров случайным образом }
  for i:=1 to MaxShar do
    begin
    r:=20+random(10);
    shars[i].initShar(1+r+random(GetMaxX-2*r),
      1+r+random(GetMaxY-2*r),r,1+random(GetMaxColor-1),
      random(15)-7,random(12)-6);
    end;
  { обсчитываем движение пока не нажата какая-либо клавиша }
  repeat
    { показываем все шары }
    for i:=1 to MaxShar do
      shars[i].Show;
    { временная задержка - установите свое значение для вашего компьютера }
    Delay(580);
    { убираем с экрана все шары }
    for i:=1 to MaxShar do
      shars[i].Hide;
    { просчитываем следующий шаг }
    for i:=1 to MaxShar do
      begin
      shars[i].Move;
      shars[i].CheckBorder;
      shars[i].CheckHit(i);
      end;
    for i:=1 to MaxShar do
      shars[i].hits:=[];
  until keyPressed;
  CloseGraph;
  close(f);
  end
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2016, 13:43
Ответы с готовыми решениями:

Переделать код программы из Turbo Pascal в PascalABC
Ребят может кто-нибудь помочь пожалуйста из PascalABC.NET в PascalABC переделать код программы и...

Перевод кода с PascalABC в код Turbo Pascal
Прошу помочь в переводе кода с PascalABC в код Turbo Pascal.Заранее благодарю за помощь. //...

Нужно перевести код из Turbo Pascal в Pascal ABC.NET
Доброго времени суток. На форуме находил похожие темы, но к сожалению так и не смог разобраться....

Нужно перевести код с Pascal ABC на Turbo Pascal - рисование работающей мельницы
Вот код, он должен рисовать работающею мельницу. uses graphABC,crt; type point=record ...

3
Эксперт Pascal/Delphi
6529 / 4398 / 4702
Регистрация: 05.06.2014
Сообщений: 21,615
14.06.2016, 20:03 2
alexsansid, перевести код программы из Turbo Pascal в PascalABC или PascalABC.NET?
0
0 / 0 / 0
Регистрация: 14.06.2016
Сообщений: 18
18.06.2016, 17:21  [ТС] 3
.net
0
Модератор
62858 / 46905 / 32327
Регистрация: 18.05.2008
Сообщений: 113,651
18.06.2016, 19:01 4
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
Uses GraphABC;
 
const MaxShar=10;
type shar = class
  { переменные }
  x,y:integer; { текущие координаты шара }
  r:word;      { радиус }
  dx,dy:integer; { скорость. задается значениями
                    перемещения на каждом шаге (в точках) }
  hits:set of byte; { множество шаров с которыми данный шар уже
  столкнулся и с которыми не надо обсчитывать столкновение еще раз }
  { методы }
  procedure initShar(x0,y0:integer; r0:word; dx0,dy0:integer);
  procedure Move; { двигаем }
  procedure Show; { показываем }
  procedure CheckBorder; { проверяем на выход за границы экрана }
  procedure CheckHit(k:byte); { проверяем на столкновение с другим шаром }
  procedure revertXDirection; { поменять Х/Y-составляющую скорости }
  procedure revertYDirection; { на противоположную }
  procedure TurnAfterHit(k:byte); { вычислить новые значения 
               скорости двух шаров после удара. Первый шар - шар 
               данного объекта, второй - с индексом k в массиве }
  function Value:real; { вычислить объем шара. Нужно для вычисления
       скорости. Вообще-то там масса нужна, но учитывая, что плотность
       все-равно сократиться при делении, используем объем }
  end;
var i:byte;
    shars: array[1..MaxShar] of shar; { массив шаров }
Procedure shar.Move;
  begin
  x:=x+dx;
  y:=y+dy;
  end;
Procedure shar.Show;
  begin
  setpenColor(clBlue);
  circle(x, y, r);
  end;
procedure shar.revertXDirection;
  begin
  dx:=-dx;
  x:=x+dx;
  end;
procedure shar.revertYDirection;
  begin
  dy:=-dy;
  y:=y+dy;
  end;
procedure shar.initShar(x0, y0 :integer; r0 :word; dx0, dy0 :integer);
  begin
  x:=x0;
  y:=y0;
  r:=r0;
  dx:=dx0;
  dy:=dy0;
  hits:=[];
  end;
procedure shar.CheckBorder;
  begin
  if (r+x>=windowwidth-1) or (x-r<=1) then revertXDirection;
  if (y+r>=windowheight-1) or (y-r<=1) then revertYDirection
  end;
procedure shar.TurnAfterHit(k:byte);
{ формулы для движения шаров взяты здесь:
  [url]http://ferro.phys.msu.ru/prak/PDF/01-mechanics/07.pdf[/url] }
var m1, m2 :real;
    vx10,vy10,vx20,vy20:integer;
  begin
  m1 := Value;            { массы }
  m2 := shars[k].Value;
  vx10 := dx;             { начальные значения скоростей }
  vy10 := dy;
  vx20 := shars[k].dx;
  vy20 := shars[k].dy;
  { скорость первого шара после удара }
  dx := round((2*m2*vx20 + (m1-m2)*vx10)/(m1+m2));
  dy := round((2*m2*vy20 + (m1-m2)*vy10)/(m1+m2));
  { скорость второго шара после удара }
  shars[k].dx := round((2*m1*vx10 + (m2-m1)*vx20)/(m1+m2));
  shars[k].dy := round((2*m1*vy10 + (m2-m1)*vy20)/(m1+m2));
  end;
function shar.Value:real;
  begin { возвращает объем шара }
  Value:=4*Pi*r*r*r/3;
  end;
procedure shar.CheckHit(k:byte);
var i1:byte;
    dist:longint;
begin
for i1:=1 to MaxShar do if ((i1<>k) and not(k in hits)) then
 begin
  shars[i1].hits:=shars[i1].hits+[k];
  dist:=round(sqrt(sqr(1.0*x-shars[i1].x)+sqr(1.0*y-shars[i1].y)));
  if (dist<r+shars[i1].r) then
   begin
    TurnAfterHit(i1);
    CheckBorder;
    Move;
    shars[i1].CheckBorder;
    shars[i1].Move;
    { скорость задается значениеми dx и dy - шагами движения. Таким
      образом она дискретна. Момент столкновения определяется по
      расстоянию между шарами. Но запросто может случиться, что шары
      на каком-то шаге пересекутся и в этом случае необходимо их
      развести в разные стороны перед тем как высчитывать расстояние на
      следуещем шаге, иначе они могут пребывать в состоянии постоянного
      столкновения }
    dist:=round(sqrt(sqr(1.0*x-shars[i1].x)+sqr(1.0*y-shars[i1].y)));
    while (dist<r+shars[i1].r) do
     begin
      CheckBorder;
      Move;
      shars[i1].CheckBorder;
      shars[i1].Move;
      dist:=round(sqrt(sqr(1.0*x-shars[i1].x)+sqr(1.0*y-shars[i1].y)));
     end;
    end;
  end;
end;
 
 
begin
{ инициализация шаров случайным образом }
for i:=1 to MaxShar do
 begin
  shars[i]:=shar.Create;
  shars[i].r:=20+random(10);
  shars[i].initShar(1+shars[i].r+random(windowwidth-2*shars[i].r),
                    1+shars[i].r+random(windowheight-shars[i].r),shars[i].r, random(15)-7,random(12)-6);
 end;
{ обсчитываем движение пока не нажата какая-либо клавиша }
{ показываем все шары }
lockdrawing;
repeat
clearwindow;{ убираем с экрана все шары }
for i:=1 to MaxShar do
shars[i].Show;
{временная задержка - установите свое значение для вашего компьютера }
sleep(50);
{ просчитываем следующий шаг }
for i:=1 to MaxShar do
 begin
  shars[i].Move;
  shars[i].CheckBorder;
  shars[i].CheckHit(i);
 end;
for i:=1 to MaxShar do
shars[i].hits:=[];
redraw;
until false;
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2016, 19:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Нужно перевести код из Turbo Pascal в Pascal ABC
Program n5; { Задача. Описать функцию less(f) от непустого файла f ...

Перевести код с Turbo Pascal
помогите перенести с Turbo Pascal на Pascal ABC метод полной релаксации решения СЛАУ uses crt; ...

Перевести код с turbo pascal
помогите плз в си перевести Var i,j,n,m,imin,imax,max,min,tmp: Integer; p: Longint; x:...

Перевести код с Turbo Pascal
помогите, люди добрые. вот текст программы: program kr5; const max_student = 30; type ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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