fork download
  1. program EulerMethod;
  2.  
  3. uses
  4. SysUtils, Math;
  5.  
  6. const
  7. g = 9.81;
  8. k = 0.1;
  9. tau = 0.01;
  10. t_max = 10.0;
  11. GRAPH_WIDTH = 80;
  12. GRAPH_HEIGHT = 24;
  13.  
  14. var
  15. t, x, y, vx, vy: Double;
  16. vx_prev, vy_prev, v: Double;
  17. maxX, maxY: Double;
  18. graph: array of array of Char;
  19. i, j: Integer;
  20.  
  21. procedure InitializeGraph;
  22. begin
  23. SetLength(graph, GRAPH_HEIGHT);
  24. for i := 0 to GRAPH_HEIGHT - 1 do
  25. begin
  26. SetLength(graph[i], GRAPH_WIDTH);
  27. for j := 0 to GRAPH_WIDTH - 1 do
  28. graph[i][j] := ' ';
  29. end;
  30. end;
  31.  
  32. procedure PlotPoint(xVal, yVal: Double);
  33. var
  34. xPos, yPos: Integer;
  35. begin
  36. if (maxX > 0) and (maxY > 0) then
  37. begin
  38. xPos := Round((xVal / maxX) * (GRAPH_WIDTH - 1));
  39. yPos := GRAPH_HEIGHT - 1 - Round((yVal / maxY) * (GRAPH_HEIGHT - 1));
  40. if (xPos >= 0) and (xPos < GRAPH_WIDTH) and
  41. (yPos >= 0) and (yPos < GRAPH_HEIGHT) then
  42. graph[yPos][xPos] := '*';
  43. end;
  44. end;
  45.  
  46. procedure DrawGraph;
  47. var
  48. i, j: Integer;
  49. begin
  50. for i := 0 to GRAPH_HEIGHT - 1 do
  51. begin
  52. for j := 0 to GRAPH_WIDTH - 1 do
  53. Write(graph[i][j]);
  54. WriteLn;
  55. end;
  56. end;
  57.  
  58. begin
  59. InitializeGraph;
  60. maxX := 0;
  61. maxY := 0;
  62.  
  63. t := 0.0;
  64. x := 0.0;
  65. y := 0.0;
  66. vx := 10.0;
  67. vy := 20.0;
  68.  
  69. WriteLn('t':10, 'x':15, 'y':15, 'vx':15, 'vy':15);
  70. WriteLn(Format('%10.3f %14.3f %14.3f %14.3f %14.3f', [t, x, y, vx, vy]));
  71.  
  72. // First pass to determine max values
  73. while t < t_max do
  74. begin
  75. vx_prev := vx;
  76. vy_prev := vy;
  77.  
  78. v := Sqrt(vx_prev * vx_prev + vy_prev * vy_prev);
  79.  
  80. vx := vx_prev + (-k * v * vx_prev) * tau;
  81. vy := vy_prev + (-g - k * v * vy_prev) * tau;
  82.  
  83. x := x + vx_prev * tau;
  84. y := y + vy_prev * tau;
  85.  
  86. t := t + tau;
  87.  
  88. if x > maxX then maxX := x;
  89. if y > maxY then maxY := y;
  90.  
  91. if y <= 0 then
  92. Break;
  93. end;
  94.  
  95. // Add 10% padding
  96. maxX := maxX * 1.1;
  97. maxY := maxY * 1.1;
  98.  
  99. // Reset for second pass
  100. t := 0.0;
  101. x := 0.0;
  102. y := 0.0;
  103. vx := 10.0;
  104. vy := 20.0;
  105.  
  106. // Second pass to plot points
  107. while t < t_max do
  108. begin
  109. vx_prev := vx;
  110. vy_prev := vy;
  111.  
  112. v := Sqrt(vx_prev * vx_prev + vy_prev * vy_prev);
  113.  
  114. vx := vx_prev + (-k * v * vx_prev) * tau;
  115. vy := vy_prev + (-g - k * v * vy_prev) * tau;
  116.  
  117. x := x + vx_prev * tau;
  118. y := y + vy_prev * tau;
  119.  
  120. t := t + tau;
  121.  
  122. PlotPoint(x, y);
  123. WriteLn(Format('%10.3f %14.3f %14.3f %14.3f %14.3f', [t, x, y, vx, vy]));
  124.  
  125. if y <= 0 then
  126. Break;
  127. end;
  128.  
  129. WriteLn;
  130. WriteLn('Trajectory Graph:');
  131. WriteLn('Y');
  132. WriteLn('↑');
  133. DrawGraph;
  134. WriteLn('0', StringOfChar('-', GRAPH_WIDTH - 1), '→ X');
  135. WriteLn('Max X: ', maxX:0:2, ' Max Y: ', maxY:0:2);
  136.  
  137. WriteLn('Press Enter to exit...');
  138. ReadLn;
  139. end.
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
         t              x              y             vx             vy
     0.000          0.000          0.000         10.000         20.000
     0.010          0.100          0.200          9.776         19.455
     0.020          0.198          0.395          9.564         18.933
     0.030          0.293          0.584          9.361         18.433
     0.040          0.387          0.768          9.167         17.954
     0.050          0.479          0.948          8.982         17.494
     0.060          0.569          1.123          8.806         17.052
     0.070          0.657          1.293          8.637         16.627
     0.080          0.743          1.459          8.475         16.217
     0.090          0.828          1.622          8.320         15.822
     0.100          0.911          1.780          8.171         15.441
     0.110          0.993          1.934          8.028         15.073
     0.120          1.073          2.085          7.891         14.718
     0.130          1.152          2.232          7.759         14.374
     0.140          1.229          2.376          7.633         14.041
     0.150          1.306          2.516          7.511         13.719
     0.160          1.381          2.654          7.393         13.406
     0.170          1.455          2.788          7.280         13.103
     0.180          1.528          2.919          7.171         12.808
     0.190          1.599          3.047          7.066         12.522
     0.200          1.670          3.172          6.964         12.244
     0.210          1.740          3.294          6.866         11.973
     0.220          1.808          3.414          6.771         11.710
     0.230          1.876          3.531          6.680         11.453
     0.240          1.943          3.646          6.591         11.203
     0.250          2.009          3.758          6.505         10.960
     0.260          2.074          3.867          6.422         10.722
     0.270          2.138          3.975          6.342         10.490
     0.280          2.201          4.079          6.264         10.263
     0.290          2.264          4.182          6.189         10.042
     0.300          2.326          4.283          6.116          9.825
     0.310          2.387          4.381          6.045          9.613
     0.320          2.447          4.477          5.977          9.406
     0.330          2.507          4.571          5.910          9.203
     0.340          2.566          4.663          5.845          9.004
     0.350          2.625          4.753          5.783          8.810
     0.360          2.683          4.841          5.722          8.619
     0.370          2.740          4.927          5.663          8.431
     0.380          2.796          5.012          5.605          8.248
     0.390          2.853          5.094          5.549          8.067
     0.400          2.908          5.175          5.495          7.890
     0.410          2.963          5.254          5.442          7.716
     0.420          3.017          5.331          5.391          7.545
     0.430          3.071          5.406          5.341          7.377
     0.440          3.125          5.480          5.292          7.212
     0.450          3.178          5.552          5.245          7.049
     0.460          3.230          5.623          5.199          6.889
     0.470          3.282          5.692          5.154          6.732
     0.480          3.334          5.759          5.110          6.577
     0.490          3.385          5.825          5.067          6.424
     0.500          3.435          5.889          5.026          6.273
     0.510          3.486          5.952          4.986          6.124
     0.520          3.535          6.013          4.946          5.978
     0.530          3.585          6.073          4.908          5.834
     0.540          3.634          6.131          4.870          5.691
     0.550          3.683          6.188          4.834          5.550
     0.560          3.731          6.243          4.798          5.411
     0.570          3.779          6.298          4.764          5.274
     0.580          3.827          6.350          4.730          5.138
     0.590          3.874          6.402          4.697          5.004
     0.600          3.921          6.452          4.665          4.872
     0.610          3.968          6.500          4.633          4.741
     0.620          4.014          6.548          4.602          4.612
     0.630          4.060          6.594          4.572          4.483
     0.640          4.106          6.639          4.543          4.357
     0.650          4.151          6.682          4.515          4.231
     0.660          4.196          6.725          4.487          4.107
     0.670          4.241          6.766          4.459          3.984
     0.680          4.286          6.806          4.433          3.862
     0.690          4.330          6.844          4.407          3.741
     0.700          4.374          6.882          4.381          3.621
     0.710          4.418          6.918          4.356          3.503
     0.720          4.461          6.953          4.332          3.385
     0.730          4.505          6.987          4.308          3.268
     0.740          4.548          7.019          4.285          3.152
     0.750          4.591          7.051          4.262          3.038
     0.760          4.633          7.081          4.240          2.924
     0.770          4.676          7.110          4.218          2.810
     0.780          4.718          7.139          4.196          2.698
     0.790          4.760          7.166          4.175          2.586
     0.800          4.802          7.191          4.155          2.476
     0.810          4.843          7.216          4.135          2.366
     0.820          4.885          7.240          4.115          2.256
     0.830          4.926          7.262          4.096          2.148
     0.840          4.967          7.284          4.077          2.040
     0.850          5.007          7.304          4.058          1.932
     0.860          5.048          7.324          4.040          1.825
     0.870          5.088          7.342          4.022          1.719
     0.880          5.129          7.359          4.005          1.614
     0.890          5.169          7.375          3.987          1.508
     0.900          5.209          7.390          3.970          1.404
     0.910          5.248          7.404          3.954          1.300
     0.920          5.288          7.417          3.937          1.196
     0.930          5.327          7.429          3.921          1.093
     0.940          5.366          7.440          3.905          0.991
     0.950          5.405          7.450          3.889          0.889
     0.960          5.444          7.459          3.874          0.787
     0.970          5.483          7.467          3.858          0.686
     0.980          5.522          7.474          3.843          0.585
     0.990          5.560          7.480          3.828          0.485
     1.000          5.598          7.484          3.814          0.385
     1.010          5.636          7.488          3.799          0.285
     1.020          5.674          7.491          3.784          0.186
     1.030          5.712          7.493          3.770          0.087
     1.040          5.750          7.494          3.756         -0.011
     1.050          5.788          7.494          3.742         -0.109
     1.060          5.825          7.493          3.728         -0.207
     1.070          5.862          7.491          3.714         -0.304
     1.080          5.899          7.488          3.700         -0.401
     1.090          5.936          7.484          3.686         -0.498
     1.100          5.973          7.479          3.673         -0.594
     1.110          6.010          7.473          3.659         -0.690
     1.120          6.047          7.466          3.645         -0.786
     1.130          6.083          7.458          3.632         -0.881
     1.140          6.119          7.449          3.618         -0.976
     1.150          6.156          7.439          3.605         -1.070
     1.160          6.192          7.429          3.591         -1.164
     1.170          6.227          7.417          3.577         -1.258
     1.180          6.263          7.404          3.564         -1.351
     1.190          6.299          7.391          3.550         -1.444
     1.200          6.334          7.376          3.537         -1.537
     1.210          6.370          7.361          3.523         -1.629
     1.220          6.405          7.345          3.509         -1.721
     1.230          6.440          7.328          3.496         -1.812
     1.240          6.475          7.309          3.482         -1.903
     1.250          6.510          7.290          3.468         -1.993
     1.260          6.545          7.270          3.454         -2.084
     1.270          6.579          7.250          3.440         -2.173
     1.280          6.614          7.228          3.426         -2.263
     1.290          6.648          7.205          3.412         -2.351
     1.300          6.682          7.182          3.398         -2.440
     1.310          6.716          7.157          3.384         -2.528
     1.320          6.750          7.132          3.370         -2.615
     1.330          6.783          7.106          3.355         -2.702
     1.340          6.817          7.079          3.341         -2.788
     1.350          6.850          7.051          3.326         -2.874
     1.360          6.884          7.022          3.312         -2.960
     1.370          6.917          6.993          3.297         -3.045
     1.380          6.950          6.962          3.282         -3.129
     1.390          6.983          6.931          3.267         -3.213
     1.400          7.015          6.899          3.252         -3.297
     1.410          7.048          6.866          3.237         -3.379
     1.420          7.080          6.832          3.222         -3.462
     1.430          7.112          6.797          3.207         -3.543
     1.440          7.144          6.762          3.191         -3.625
     1.450          7.176          6.726          3.176         -3.705
     1.460          7.208          6.689          3.161         -3.785
     1.470          7.240          6.651          3.145         -3.865
     1.480          7.271          6.612          3.129         -3.943
     1.490          7.302          6.573          3.114         -4.022
     1.500          7.334          6.533          3.098         -4.099
     1.510          7.365          6.492          3.082         -4.176
     1.520          7.395          6.450          3.066         -4.253
     1.530          7.426          6.407          3.050         -4.329
     1.540          7.456          6.364          3.034         -4.404
     1.550          7.487          6.320          3.017         -4.478
     1.560          7.517          6.275          3.001         -4.552
     1.570          7.547          6.230          2.985         -4.626
     1.580          7.577          6.183          2.968         -4.698
     1.590          7.607          6.136          2.952         -4.770
     1.600          7.636          6.089          2.935         -4.841
     1.610          7.665          6.040          2.919         -4.912
     1.620          7.695          5.991          2.902         -4.982
     1.630          7.724          5.941          2.885         -5.052
     1.640          7.752          5.891          2.868         -5.120
     1.650          7.781          5.840          2.852         -5.188
     1.660          7.810          5.788          2.835         -5.256
     1.670          7.838          5.735          2.818         -5.322
     1.680          7.866          5.682          2.801         -5.388
     1.690          7.894          5.628          2.784         -5.454
     1.700          7.922          5.574          2.767         -5.519
     1.710          7.950          5.518          2.750         -5.583
     1.720          7.977          5.463          2.733         -5.646
     1.730          8.005          5.406          2.715         -5.709
     1.740          8.032          5.349          2.698         -5.771
     1.750          8.059          5.291          2.681         -5.832
     1.760          8.085          5.233          2.664         -5.893
     1.770          8.112          5.174          2.647         -5.953
     1.780          8.139          5.114          2.629         -6.012
     1.790          8.165          5.054          2.612         -6.071
     1.800          8.191          4.994          2.595         -6.129
     1.810          8.217          4.932          2.578         -6.186
     1.820          8.243          4.871          2.560         -6.243
     1.830          8.268          4.808          2.543         -6.299
     1.840          8.294          4.745          2.526         -6.354
     1.850          8.319          4.682          2.508         -6.409
     1.860          8.344          4.617          2.491         -6.463
     1.870          8.369          4.553          2.474         -6.516
     1.880          8.394          4.488          2.457         -6.569
     1.890          8.418          4.422          2.439         -6.621
     1.900          8.443          4.356          2.422         -6.672
     1.910          8.467          4.289          2.405         -6.723
     1.920          8.491          4.222          2.388         -6.773
     1.930          8.515          4.154          2.371         -6.822
     1.940          8.539          4.086          2.354         -6.871
     1.950          8.562          4.017          2.337         -6.919
     1.960          8.585          3.948          2.319         -6.967
     1.970          8.609          3.878          2.302         -7.014
     1.980          8.632          3.808          2.285         -7.060
     1.990          8.655          3.738          2.269         -7.106
     2.000          8.677          3.667          2.252         -7.151
     2.010          8.700          3.595          2.235         -7.195
     2.020          8.722          3.523          2.218         -7.239
     2.030          8.744          3.451          2.201         -7.283
     2.040          8.766          3.378          2.184         -7.325
     2.050          8.788          3.305          2.168         -7.367
     2.060          8.810          3.231          2.151         -7.409
     2.070          8.831          3.157          2.134         -7.450
     2.080          8.853          3.082          2.118         -7.490
     2.090          8.874          3.007          2.101         -7.530
     2.100          8.895          2.932          2.085         -7.569
     2.110          8.916          2.856          2.069         -7.608
     2.120          8.936          2.780          2.052         -7.646
     2.130          8.957          2.704          2.036         -7.684
     2.140          8.977          2.627          2.020         -7.721
     2.150          8.997          2.550          2.004         -7.757
     2.160          9.017          2.472          1.988         -7.793
     2.170          9.037          2.394          1.972         -7.829
     2.180          9.057          2.316          1.956         -7.863
     2.190          9.077          2.237          1.940         -7.898
     2.200          9.096          2.158          1.924         -7.932
     2.210          9.115          2.079          1.908         -7.965
     2.220          9.134          2.000          1.893         -7.998
     2.230          9.153          1.920          1.877         -8.030
     2.240          9.172          1.839          1.862         -8.062
     2.250          9.191          1.759          1.846         -8.094
     2.260          9.209          1.678          1.831         -8.124
     2.270          9.227          1.596          1.816         -8.155
     2.280          9.246          1.515          1.801         -8.185
     2.290          9.264          1.433          1.786         -8.214
     2.300          9.281          1.351          1.771         -8.243
     2.310          9.299          1.268          1.756         -8.272
     2.320          9.317          1.186          1.741         -8.300
     2.330          9.334          1.103          1.726         -8.328
     2.340          9.351          1.019          1.711         -8.355
     2.350          9.369          0.936          1.697         -8.382
     2.360          9.385          0.852          1.682         -8.408
     2.370          9.402          0.768          1.668         -8.434
     2.380          9.419          0.684          1.653         -8.460
     2.390          9.436          0.599          1.639         -8.485
     2.400          9.452          0.514          1.625         -8.510
     2.410          9.468          0.429          1.611         -8.534
     2.420          9.484          0.344          1.597         -8.558
     2.430          9.500          0.258          1.583         -8.582
     2.440          9.516          0.172          1.569         -8.605
     2.450          9.532          0.086          1.555         -8.628
     2.460          9.547          0.000          1.542         -8.650
     2.470          9.563         -0.086          1.528         -8.672

Trajectory Graph:
Y
↑
                                                                                
                                                                                
                                       **********                               
                                  *****         *****                           
                               ****                 ***                         
                            ***                        **                       
                          ***                            **                     
                        ***                               **                    
                      ***                                   **                  
                    ***                                      **                 
                   **                                         **                
                 **                                            **               
                **                                              **              
              **                                                 **             
            **                                                    *             
           *                                                       *            
         **                                                        **           
        **                                                          **          
      **                                                             *          
     **                                                              **         
    *                                                                 *         
  **                                                                  **        
 *                                                                     *        
                                                                       **       
0-------------------------------------------------------------------------------→ X
Max X: 10.52  Max Y: 8.24
Press Enter to exit...