'treasure.bas 'МСШ #3 CLS format$ = "################.###" OPEN "treasure.in" FOR INPUT AS #1 DO LINE INPUT #1, Map$ IF UCASE$(Map$) = "END" THEN EXIT DO n = n + 1 x = 0: y = 0 GOSUB CheckMap GOSUB PrintResult LOOP END CheckMap: FOR j = 1 TO LEN(Map$) NextSymb$ = MID$(Map$, j, 1) IF NextSymb$ <> "," AND NextSymb$ <> "." THEN IF (ASC(NextSymb$) >= ASC("0")) AND (ASC(NextSymb$) <= ASC("9")) THEN Length$ = Length$ + NextSymb$ ELSE Vector$ = Vector$ + NextSymb$ END IF ELSE Length = VAL(Length$) Vector$ = UCASE$(Vector$) SELECT CASE Vector$ CASE "N": dy = Length dx = 0 CASE "S": dy = -Length dx = 0 CASE "W": dx = -Length dy = 0 CASE "E": dx = Length dy = 0 CASE "NE": dx = Length / SQR(2) dy = dx CASE "SE": dx = Length / SQR(2) dy = -dx CASE "SW": dx = -Length / SQR(2) dy = dx CASE "NW": dx = -Length / SQR(2) dy = -dx END SELECT x = x + dx y = y + dy Length$ = "": Vector$ = "" END IF NEXT GOSUB CheckLength RETURN CheckLength: s = SQR(x ^ 2 + y ^ 2) RETURN PrintResult: Xint = INT(x) Yint = INT(y) Sint = INT(s) PRINT "Карта #"; LTRIM$(STR$(n)) PRINT "Координаты сокровища ("; IF x < 0 THEN PRINT "-"; PRINT USING RIGHT$(format$, LEN(STR$(Xint)) + 3); ABS(x); PRINT ","; IF y < 0 THEN PRINT "-"; PRINT USING RIGHT$(format$, LEN(STR$(Yint)) + 3); ABS(y); PRINT ")." PRINT "Расстояние до сокровища "; IF s < 0 THEN PRINT "-"; PRINT USING RIGHT$(format$, LEN(STR$(Sint)) + 3); ABS(s); PRINT "." PRINT RETURN