$ TADA/LIST=HW6A HW6A TeleSoft-Ada compiler -- Version 1.3d March 25, 1983 Copyright (c) 1981,1982,1983 TeleSoft. All rights reserved. Opening hw6a.text Symbol table space: 127.5K bytes Compilation complete Syntax errors: 0 Semantic errors: 0 Lines compiled: 75 reset(hw6a.CODE) rewrite(hw6a.CODE) Segment 1, 2 procedures .. end. $ TYPE HW6A -- not a sample of Homework 6, just the algorithms Opening hw6a.text 1: -- A quick and dirty program to show algorithm for HW6,HW7,HW8 2: 3: with TEXT_IO ; use TEXT_IO ; 4: with FLOAT_MATH_LIB ; use FLOAT_MATH_LIB ; 5: procedure MAIN is 6: T : FLOAT := 0.0 ; 7: TGT_X : FLOAT := 2.0 ; 8: TGT_Y : FLOAT := 1.0 ; 9: TGT_XOLD : FLOAT ; 10: TGT_YOLD : FLOAT ; 11: TGT_VX : FLOAT ; 12: TGT_VY : FLOAT ; 13: PLANE_X : FLOAT := 2.5 ; 14: PLANE_Y : FLOAT := 0.0 ; 15: PLANE_VX : FLOAT ; 16: PLANE_VY : FLOAT ; 17: 18: M_X : FLOAT ; 19: M_Y : FLOAT ; 20: M_VX : FLOAT ; 21: M_VY : FLOAT ; 22: 23: RANGE_T_P : FLOAT ; 24: RANGE_T_M : FLOAT ; 25: LAUNCHED : BOOLEAN := FALSE ; 26: 27: 28: procedure POSITION( X , Y : FLOAT ) is 29: I , J : INTEGER ; 30: begin 31: I := INTEGER( Y * 10.0 ) + 1 ; 32: J := INTEGER( X * 30.0 ) + 1 ; 33: PUT(ASCII.ESC) ; PUT("[") ; -- VT100 position 34: PUT(INTEGER'IMAGE(I)); PUT(";") ; -- Y scaled into I 35: PUT(INTEGER'IMAGE(J)); PUT("f") ; -- X scaled into J 36: end POSITION ; 37: begin 38: PUT(ASCII.ESC) ; PUT("[2J") ; -- CLEAR VT100 SCREEN 39: while T < 18.3 loop -- About 3 times through figure 40: T := T + 0.03 ; 41: TGT_XOLD := TGT_X ; 42: TGT_YOLD := TGT_Y ; 43: TGT_X := COS(1.0*T) + 1.0 ; -- By changing the multipliers on T 44: TGT_Y := SIN(1.0*T) + 1.0 ; -- various paths will be produced 45: TGT_VX := TGT_X - TGT_XOLD ; -- COMPUTE VELOCITY 46: TGT_VY := TGT_Y - TGT_YOLD ; 47: POSITION( TGT_X , TGT_Y ) ; -- POSITION CURSOR 48: PUT("*") ; -- The plot character for target 49: RANGE_T_P := SQRT( (TGT_X - PLANE_X)**2 + (TGT_Y - PLANE_Y)**2 ) ; 50: PLANE_VX := ( TGT_X - PLANE_X ) / RANGE_T_P ; 51: PLANE_VY := ( TGT_Y - PLANE_Y ) / RANGE_T_P ; 52: PLANE_VX := PLANE_VX + 0.1 * TGT_VX ; -- ADD LEAD PURSUIT 53: PLANE_VY := PLANE_VY + 0.1 * TGT_VY ; 54: PLANE_X := PLANE_X + 0.03 * PLANE_VX ; -- constant adjusts relative 55: PLANE_Y := PLANE_Y + 0.03 * PLANE_VY ; -- speed ( 0.03 = target ) 56: POSITION( PLANE_X , PLANE_Y ) ; 57: PUT("0"); -- The plot character for plane 58: if RANGE_T_P < 0.5 then 59: if LAUNCHED then 60: RANGE_T_M := SQRT( (TGT_X - M_X)**2 + (TGT_Y - M_Y)**2 ) ; 61: M_VX := ( TGT_X - M_X ) / RANGE_T_M ; 62: M_VY := ( TGT_Y - M_Y ) / RANGE_T_M ; 63: M_X := M_X + 0.1 * M_VX ; -- constant adjusts relative speed 64: M_Y := M_Y + 0.1 * M_VY ; 65: POSITION( M_X , M_Y ) ; 66: PUT("X"); -- The plot character for missile 67: exit when RANGE_T_M < 0.11 ; 68: else 69: LAUNCHED := TRUE ; 70: M_X := PLANE_X ; 71: M_Y := PLANE_Y ; 72: end if ; 73: end if ; 74: end loop ; 75: end MAIN ; Compilation complete Syntax errors: 0 Semantic errors: 0 Lines compiled: 75