program vetores

! objetivo: realizar operações aritméticas com vetores

! data de criação:   3 Fev 02

! última alteração: 13 Fev 02

! autor: Carlos Henrique Marchi

! -----------------------------------------------

! inclusão de módulos do Fortran90

use msflib  ! para encerramento do programa

use msfwin  ! para o comando setwindowtext

! -----------------------------------------------

! definição das variáveis

integer   :: n               ! número de elementos dos vetores
integer   :: i               ! número do elemento dos vetores
integer   :: tipo_de_calculo ! a realizar

integer   :: local_maximo(1) ! posição do valor máximo do vetor b
integer   :: local_minimo(1) ! posição do valor mínimo do vetor b

real*8    :: soma            ! soma dos valores do vetor b
real*8    :: maximo          ! valor máximo do vetor b
real*8    :: minimo          ! valor mínimo do vetor b

! vetores com dimensão aberta e alocáveis
real*8,dimension(:),allocatable :: a, b

integer*4 :: fim ! fecha framewindow

logical :: dos   ! acessa prompt dos
logical :: name  ! nome da framewindow

!-------------------------------------------------

! define o nome da janela do programa

  name = setwindowtext(gethwndqq(qwin$framewindow),  &
         "VETORES"C)

! -----------------------------------------------

  ! *** leitura dos dados ***

  ! vê o conteúdo do arquivo "dados.txt" com o programa NOTEPAD
  dos = systemqq( 'notepad dados.txt' )    

  open(10,file='dados.txt')  ! abre o arquivo "dados.txt"

  read(10,*) tipo_de_calculo
  read(10,*) n

  ! aloca memória para os vetores a, b
  allocate ( a(n), b(n) )

  read(10,*) (a(i),i=1,n)

  close(10)

! -----------------------------------------------

  ! *** realiza cálculos conforme tipo_de_calculo escolhido nos dados

  select case ( tipo_de_calculo)

    case ( 1 )
      b = a + 1

    case ( 2 )
      b = a * 2

    case ( 3 )
      b = a ** 2

    case default
      b = 1

  end select

  where ( b >= 10.0d0 ) b = 0

! -----------------------------------------------

  ! *** emprega comandos usados com vetores e matrizes ***

  maximo = maxval(b) ! valor máximo do array   

  local_maximo = maxloc(b) ! posição do valor máximo do vetor b

  minimo = minval(b) ! valor mínimo do array   

  local_minimo = minloc(b) ! posição do valor mínimo do vetor b

  soma = sum(b)

! -----------------------------------------------

  ! *** escreve o vetor b num arquivo ***

  open(20,file='saida.txt')  ! abre o arquivo "saida.txt"

  do i = 1, n
    write(20,30) i, b(i)
  end do

  write(20,31) maximo, local_maximo, minimo, local_minimo, soma

  close(20)

  30 format ( i4, 5x, 1pe10.3 )
  31 format (/,'Valor máximo = ',1pe12.3,/, &
               'Posição      = ',i4,//,     &
               'Valor mínimo = ',1pe12.3,/, &
               'Posição      = ',i4,//,     &
               'Soma         = ',1pe12.3)

! -----------------------------------------------

  ! *** lê o conteúdo do arquivo "saida.txt" ***

  dos = systemqq( 'notepad saida.txt' )  

! -----------------------------------------------

  ! fecha a janela do programa
  fim = setexitqq(qwin$exitnopersist) 

end
