segunda-feira, 19 de março de 2012

Calcular o Tipo da Navegação


   Olá caro leitor,neste post irei apresentar um pequeno software com pouco mais de 120 linhas de código, este foi desenvolvido em linguagem Fortran77 e faz o cálculo do tipo da navegação baseado na informação de profundidade e da distância da costa.Este programa foi compilado gerando um executável com 64,9 kb,seu código fonte tem no total 126 linhas de código entre linhas de comentário,em branco e código fonte propriamente dito.
  As regras de navegação foram obtidas através do livro NAVEGAÇÃO : CIÊNCIA E A ARTE, da Marinha do Brasil,o programa irá efetuar um simples cálculo hidroceanográfico.

Tipo da navegação:      Águas Restritas

Distância: 3 mn
Profundidade: 20 metros
Precisão: 0,05 mn
Frequência(atualização): 3 minutos


Tipo da navegação:      Águas Costeira

Distância:4 a 50 mn
Profundidade: 21 a 200 metros
Precisão: 0,5 mn
Frequência(atualização):  10 || 30


Tipo da navegação:      Águas Oceânica

Distância: 51 + a mn
Profundidade: 500 + metros
Precisão: 1 || 2 mn
Frequência(atualização):  3 minutos



mn = milhas náuticas => 1.852 km
|| =.> sinal em computação numérica significa OU.

(Dados de 2006).

Agora que já obtemos as informações iremos para a parte lógica do nosso programa.

  10  Recebe DISTANCIA 
  20  Se DISTANCIA = 0 => Voltar para 10
  30  Converte DISTANCIA em :  mn,m,yd,ft
  40
  50 Recebe PROFUNDIDADE
  60 Se PROFUNDIDADE  = 0 => Voltar para 50
  70 Converte  PROFUNDIDADE   em : m,yd,ft
  80
  90 Se  DISTANCIA  =  < 4  || Se PROFUNDIDADE = < 24
 100 NAVEGACAO == AGUAS RESTRITAS
 110 
 120 
 130 Se  DISTANCIA  =  > 4 e < 50  || Se PROFUNDIDADE =<24 e> 201
 140 NAVEGACAO == AGUAS RESTRITAS
 150 ESCREVA RESULTADOS
 160 Se  DISTANCIA  =  > 50  || Se PROFUNDIDADE = > 500
 170 NAVEGACAO == AGUAS OCEANICAS
 180ESCREVA RESULTADOS
 190 
 200 ESCREVA RESULTADOS FINAIS
 210 ESCREVA TIPO DA NAVEGAÇÃO.


Veja agora abaixo a "print" do programa em execução e o código fonte.

(Clique para expandir.)

C
C      NAME: TNA
C      AUTHOR: Lucas de Matos Rocha
C      DESCRIPTION: Calcular o tipo da navegação
C      DATE:
C

C     .START
       PROGRAM TIPONAVEG

C      .DATA

        REAL TNV;
C       REAL TNV = Tipo navegacao
        REAL D,P;
C       REAL D = Distancia
C       REAL P = Profundidade
        CHARACTER MSG*(10);
C       CHAR MSG =  Mensagens
        CHARACTER SPC_*(30);
                  SPC_='...........................';
C                 ESPACO 30 CHARACTERS

C      .CODE
               WRITE(*,*),SPC_,'TIPO DA NAVEGACAO ',SPC_;
               PRINT'(a)',' '!PULAR LINHA
C
C         #### DISTANCIA ####
C
          WRITE(*,*),'INSIRA A DISTANCIA:(KM)' ;
          PRINT'(a)',' '!PULAR LINHA
        READ (*,*),D;
             PRINT'(a)',' '!PULAR LINHA
             
        DO WHILE (D==0)
         PRINT'(a)',' '!PULAR LINHA
         WRITE(*,*),'A Distancia nao pode ser 0 (ZERO).'
                    PRINT'(a)',' '!PULAR LINHA
                    WRITE(*,*),'INSIRA A DISTANCiA:(KM)'
                    PRINT'(a)',' '!PULAR LINHA
                READ (*,*),D;
        END DO
        
        PRINT'(a)','_DISTANCIA_'

           WRITE(*,*),'NM:',D/1.852 ,'        Milhas N uticas'
           WRITE(*,*),'M :',D/1000  ,'        Metros'
           WRITE(*,*),'YD:',D/0.91439920429,'        Jardas'
           WRITE(*,*),'FT:',D/0.3048,'        Pes'
           
                        PRINT'(a)',' '!PULAR LINHA
C
C        #### PROFUNDIDADE  ####
C
        WRITE(*,*),'INSIRA A PROFUNDIDA:(M)'
          PRINT'(a)',' '!PULAR LINHA
        READ (*,*),P;
             PRINT'(a)',' '!PULAR LINHA

        DO WHILE (P==0)
         PRINT'(a)',' '!PULAR LINHA
         WRITE(*,*),'A Profundidade nao pode ser 0 (ZERO).'
                    PRINT'(a)',' '!PULAR LINHA
                    WRITE(*,*),'INSIRA A Profundidade:(M)'
                    PRINT'(a)',' '!PULAR LINHA
                READ (*,*),P;
        END DO
        
         PRINT'(a)','_PROFUNDIDADE_'

           WRITE(*,*),'M :',P,'        Metros'
           WRITE(*,*),'YD:',P/0.91439920429,'        Jardas'
           WRITE(*,*),'FT:',P/0.3048,'        Pes'
           
                        PRINT'(a)',' '!PULAR LINHA

C         ####     OCEANICA   ####
C
          IF(D>50)THEN
               IF(P>500)THEN
                  PRINT'(a)','TIPO DA NAVEGACAO [( OCEANICA )]'
               ENDIF
          ENDIF
C                  ####


C         ####     COSTEIRA    ####
C
          IF(D<50)THEN
          IF(D>4)THEN
          
               IF(P<500)THEN
               IF(P>24 )THEN
                  PRINT'(a)','TIPO DA NAVEGACAO [( COSTEIRA )]'
                  ENDIF
               ENDIF
               
               ENDIF
          ENDIF
C                  ####


C
C         ####     RESTRITA    ####
C
          IF(D<4)THEN
               IF(P<24)THEN
                  PRINT'(a)','TIPO DA NAVEGACAO [(  RESTRITA  )]'
               ENDIF
          ENDIF
C                  ####


C      .END BLOCK
                PRINT'(a)',' '!PULAR LINHA
                 PRINT'(a)','Lucas Softwares 2010-2012'
                PRINT'(a)','Scientific Software'
                PRINT'(a)','Free Softwre GPL 3.0  '
                  PRINT'(a)',' '!PULAR LINHA
                    PRINT'(a)',' Pressione "ENTER"'!
                    PRINT'(a)',' '!PULAR LINHA
            PAUSE
           
              RETURN;
          STOP
       END



;

Nenhum comentário:

Postar um comentário